Quants cicles per segon farien un processador 3 GHz?

Problema

Voleu comparar l'eficiència de dos principis criptogràfics similars i els agradaria assegurar-ho Ho fas d'una manera justa.

Solució

Operacions horàries calculant quants cicles s'han de processar Cada byte, de manera que podeu comparar números a través dels processadors de Més velocitats diferents.

Concentra't en el cas mitjà esperat, millor cas, i pitjor cas.

Discutió

Quan tu estàs mirant la informació del temps, tu Normalment teniu una de les dues motivacions: o bé us importeu M'interessa comparar el rendiment de dos algoritmes, o A tu li agrada tenir sentit de quantes dades Tu realment seràs capaç de bombar a través d'un particular màquina.

Mesurar els bytes per segon és un Una cosa útil en comparar l'actuació dels múltiples algoritmes en una sola caixa, però no dóna cap real La indicació de rendiment a altres màquines. Per tant, Els xifratges prefereixen mesurar quants cicles de processadors de processadors el cicle Es necessita processar cada byte, perquè ho estan fent, de manera que permet les comparacions Això és més aplicable. Per exemple, aquestes comparacions seran: Generalment aguanta ràpidament en la mateixa línia de processadors que s'executen a Velocitats diferents.

Si es comparen directament la velocitat d'un Algorisme en un Pentri 4 de 2GHz contra la velocitat publicada del mateix L' algorisme s'executeu a un 800 MHz Pentiui 3, el primer sempre serà Més ràpid quan es mesuraven en bytes per segon. No obstant això, si converteixes el nombres des de bytes per segon a cicles per byte, Vós ho veureu, si executeu la mateixa implementació d' un algoritme en un P3 i un P4, el P3 generalment serà més ràpid per 25% més, només perquè les instruccions d'un P4 siguin més llargues per executar de mitjana del que fan en un P3.

Si coneixeu la velocitat d' un algoritme en bytes per segon, podeu calcula el nombre de cicles per byte simplement dividint per la Velocitat del rellotge a Hetz (adonar- vos bytes per cicle) i prenent- lo recíproc (desordena els cicles per bytes). Si coneixeu la velocitat mesurada en gigabytes per segon, podeu dividir per la velocitat del rellotge en gigahertz, agafa el recíproc. Per exemple, podeu processar dades a 0.2 gigaby per segon en una CPU 3 GHz com segueix:

Per moltes raons diferents, pot ser bastant difícil aconseguir el temps Números que són completament exactes. Sovint, els rellotges interns que els El programador pot llegir- se un tipus asíncron del processador central rellotge. Hi ha més significativament, sovint significant Per sobre d' això es pot incloure en els resultats dels temps, com ara el cost de Els interruptors de context i de vegades el bon moment.

Pista

Algunes CPU, com ADMrs Athlon, s'anuncien d' aquesta manera que la velocitat del rellotge actual no és òbvia. Per exemple, l'Athlon 2000 treballa aproximadament a 1666 MHz, molt menys que la MHz de 2000 Algú podria sospitar.

Generalment, vostè vol esbrinar com de ràpid és El primitiu o l' algorisme poden processar una quantitat de dades fixa, i A tu li agrada saber com n'és de bo això en un Entorn real del món. Per aquesta raó, generalment No hauria de preocupar molt per restar fora de les coses. que són▁relevants a l'algoritme subjacent, Com ara els interruptors de context i el procediment s'anomenen així. En comptes d'això, nosaltres Recomaneu executar l' algorisme moltes vegades i abundar el total Hora de donar un bon indicador de rendiment global.

En les següents seccions parlarem del temps Bases, llavors mireu els detalls del codi criptogràfic del temps.

Temps bàsic

Has de ser capaç de gravar-ho. Temps actual amb tanta precisió com sigui possible. En una moderna màquina x86, és▁somewhat comú per veure persones que utilitzen una assemblea en línia per cridar el RDTSC instrucció directament, que retorna el nombre de cicles de rellotge des de arrencar com un valor de 64 bits. Per exemple, aquí dígits alguns assemblea inserida per al GCC en plataformes de 32 bits x86 (només!) que llegeix El taulell, col·locant- lo en un signe de 64 bits llarg llarg que passeu per adreça:

En una Athlon XP, compilant amb el GCC 2. 95,4, el El codi anterior donarà clarament cicles de 43-44 sense L'optimització va encendre els 37 i 38 cicles d'optimització. Generalment, si i s'ha declarat volàtil, el compilador guanyarà▁eliminatet eliminar el bucle, fins i tot quan es pugui imaginar Que no hi hagi efectes secundaris.

Noteu que podeu esperar alguna cosa mínima a la reunió Marca horària per a començar. Podeu calcular el temps fix per temps res:

En una XP d'Athlon, se sol informar de la part superior com a cicles 0 i De tant en tant com un cicle. Això és molt precís. perquè les dues operacions de magatzem en la primera crida de temps Uns 2 i 4 cicles. El problema és en gran mesura degut al paral· lelisme i Hi ha altres qüestions complexes d'arquitectura, i és difícil treballar amb ells. Podeu introduir explícitament sles de canonades, però L'Usthan ha trobat que sempre l'Uschtzen Treball tan bé com s'esperava. Una cosa a fer és a temps del procés d' una gran quantitat de dades. Fins i tot llavors, tindràs variància de Temps a causa de les coses que no estan sota el control, com ara el context Canvis. En resum, pots entrar en alguns cicles de la veritat, i Més enllà del que probablement heu d'agafar alguna mena de mitjana.

Una manera més portable però menys precisa d'aconseguir informació de temps Si Les plataformes basades en Unix són per demanar- li al sistema operatiu que usi el rellotge gettimeofday( ) Funció. La resolució varia segons El teu maquinari subjacent, però en general és molt important. Bé. Es pot implementar usant RDTSC però pot tenir addicional A dalt. De totes maneres, en la majoria de sistemes operatius, gettimeofday( ) és molt precís.

Altres maneres d' aconseguir el temps

En moltes màquines hi ha altres maneres d'aconseguir el temps. Una manera és fer-ho Usa l' ús POSIX vegades( ) funció, que té l' avantatge que podeu separar el temps vostre El procés es passa en el nucli des del temps gastat en l' espai d' usuari executant el codi. Mentre sigui vegades( ) està obsolet. Hi ha molts sistemes. Gerusage( ) El mateix.

Una altra alternativa és la funció estàndard ISO C89, ▁clock( ) . No obstant això, altres temporitzadors que parlem generalment proporcionen resolució que és Tan bo com o millor que aquesta funció.

Aquí dígits una macro que usarà gettimeofday( ) per posar el nombre d' microsegons des de l'1 de gener de 1970 en un enter de 64 bits sense signe (si el vostre compilador no permet un Tipus d' enter de 64 bits, n'heu de desar els dos Valors de 32 bits per separat i diff correctament; mireu a sota).

Els atacants sovint poden forçar el pitjor rendiment del cas Funcionalitat amb entrades ben-cosen. Per tant, sempre hauries de fer-ho. Assegureu- vos de determinar les característiques de rendiment del pitjor cas Sigui el que sigui que facis, Evabelre, i planegeu en conseqüència.

Avís

La gettimeofday( ) - macro basada en base No calcula el mateix que la versió RDTSC fa! L' antic retorna el nombre d' microsegons transcorregut, mentre que el darrer retorna El nombre de cicles transcorreguts.

Normalment us interessa el nombre de segons transcorregut. Per tant, us haureu de convertir. el resultat de la gettimeofday( ) Crida a un número De cicles. Per dur a terme aquesta conversió, divideix- la per la velocitat del rellotge, Representat com un número de coma flotant en el gigahertz.

Perquè t'importa el temps transcorregut, Tu també vols anar-te'n. restant l' hora d' inici del temps final per tal de sortir Temps transcorregut. Podeu transformar una representació per segon a una Representació per cicle Una vegada vas calcular la Temps en execució total per restar des del final. Aquí Umbrello fa una funció per fer ambdues coses, que requereix que ho facis Definiu una constant amb la velocitat del rellotge en gigaahertz:

Codi criptogràfica Timing

Quan els principis de temps criptogràfics, Generalment voldreu saber quants cicles és Cal processar un byte, de mitjana. @ info: tooltip Que Prudensons és fàcil: Tan sols divideix el nombre de bytes que processeu pel nombre de cicles Cal processar. Si ho desitgeu, podeu treure' ls per sobre de la Nombre de cicles, com el temps per sobre (p. ex., un bucle).

Una cosa important a notar sobre el codi criptogràfic del temps és que Alguns tipus d' algorismes tenen característiques diferents de rendiment Mentre processen més dades. És a dir, poden ser dominats per cost per omissió per missatge per a petites mides de missatge. Per exemple, la majoria Funcions de resum com SHA1 són molt més lents (per byte) Els missatges petits que són per a missatges grans.

Heu d' esbrinar si us importa el rendiment òptim o Una actuació mitjana de casos. La majoria de vegades, serà l'última. Per exemple, si esteu comparant les velocitats de SHA1 i d' altres Funció de resum criptogràfica com RIPEMD-160, hauríeu de preguntar A tu mateix, quina varietat de mides de missatges esperes veure i provar Valors mostrades per tot aquest abast.

Obtén Un llibre de programació segur per a C i C++ Ara amb l'OdayReilly Una plataforma d'aprenentatge.

Artículos Relacionados:

- Processador -

Esta web usa cookies, puedes ver la política de cookies, aquí -
Política de cookies +