XOR,CRC32,MD5,Rand,UCL and BlowFish benchmarks

El otro día estaba un poco aburrido y se me ocurrió medir el rendimiento de un par de algorítmos que utilizo en CRM32Pro y en otros proyectos. Al final me puse y lo termine rápido, me costo más pulir los pequeños detalles que otra cosa y bueno, en el trabajo lo he podido probar en dos máquinas Pentium4 además de en mi portátil.

Por otro lado, he compilado con Intel C++ 9.1 y con el Visual C++ 2003 para ver las diferencias en este tipo de código y es impresionante el compilador de Intel…puff, y eso que no he utilizado varios threads para que en multiprocesadores la cosa vuele!. He de puntualizar que los algoritmos CRC32, BlowFish y el Rand no standard de las librerías de C…solo los he probado con el Visual C++ 2003 pero seguro que también se nota una ganancia en rendimiento.

Por último y antes de pasar a los resultados, hay que aclarar en que estan las medidas… pues bien, el primer grupo son en MegaBytes por segundo y el segundo en ejecuciones por segundo.

Quizás alguien se pregunte con que cantidad de datos o durante cuanto tiempo… pues bien, son 10 grupos de pruebas, el más pequeño son 64bytes y el más grande 10Megabytes y cada prueba son 2 segundos para no hacerlo eterno.


Descripción de los equipos de pruebas:Pentium 4 2.8Ghz – HyperThreading – 1MB L2 – 800Mhz FSB – 1GB de DDR2 533Mhz Dual ChannelPentium 4 2.0Ghz – 512KB L2 – 400Mhz FSB – 512MB de DDR 400Mhz Single Channel

Pentium M 1.6Ghz – 2MB L2 – 400Mhz FSB – 1GB de DDR 400Mhz Single Channel

Athlon64 X2 2.5Ghz – 512KB – 500Mhz FSB – 2GB de DDR 500Mhz Dual Channel

Benchmarks:

  XOR8 XOR32 CRC32 MD5 BFCrypt BFDecrypt UCLc UCLd
P4 2.8 VisualC 325 1660 293 239 52,5 52,5 1,87 98,75
P4 2.8 IntelC 818 2042 293 300 52,5 52,5 1,88 107
P4 2.0 VisualC 306 518 294 149 26,25 26,25 1,87 83
P4 2.0 IntelC 621 542 294 157 26,25 26,25 1,88 87,5
PM 1.6 VisualC 212 826 198 142 32,81 32,19 6,25 78,75
PM 1.6 IntelC 739 1993 198 181 32,81 32,19 6,25 86,25
A64 X2 VisualC 387 2043 338 234 56 56,86 5 105
A64 X2 IntelC 1166 2020 339 304 56 56,86 5 118
                 
  Standard C Rand CRM32Pro Rand Maximum throughput
P4 2.8 VisualC 32.184.203 36.853.845 42.656.800
P4 2.8 IntelC 32.175.931 36.852.923 42.604.210
P4 2.0 VisualC 22.408.250 33.323.255 38.674.205
P4 2.0 IntelC 22.813.023 33.267.314 38.443.564
PM 1.6 VisualC 45.604.016 49.954.698 63.758.842
PM 1.6 IntelC 45.215.620 50.108.947 63.994.778
A64 X2 VisualC 51.052.364 52.421.617 65.490.490
A64 X2 IntelC 36.984.243 42.174.029 43.698.222
       

Una de las cosas que más me sorprendio fue que el Rand de las librerias standard del compilador no solo es bastante malo si no que encima es muchisimo más lento que un Rand en condiciones (como el que utiliza CRM32Pro, el Mersenne Twister).Por otro lado, veo bastante sospechoso los resultados del segundo grupo en cuanto al Athlon64 se refiere… es la unica vez que el IntelC es bastante peor que el VisualC… que esta pasando aqui? He leido por internet que el IntelC detecta que esta corriendo en un AMD y…deshabilita opciones de optimizacion e incluso peor… pero bueno, ya investigare un poco mas a ver que esta ocurriendo.

Poco más que añadir, si alguien esta interesado en los binarios o el código fuente…solo tiene que decirlo 🙂

Hasta el próximo capítulo!!!


4 Responses to XOR,CRC32,MD5,Rand,UCL and BlowFish benchmarks

  1. Vicente says:

    Dejate de BlowFish y pasate a AES! El AES es un algoritmo que vuela en ejecución, esta totalmente diseñado para aprovechar la arquitectura de los PCs (cuando lees su fips flipas por como eligieron el diseño matemático de las cosas pensando en la implementación sobre soft y hard).

    Así que dejate de algoritmos raros ya! :p Un saludo!

    Vicente

    P.D.: y si, el rand es mu malo, además de ser más lento su periodo es mucho menor que el del Mersenne.

  2. Jose Luis says:

    Hola, no se si es mucho pedir,… necesito encontrar para un proyecto del trabajo una implementacion de un algoritmo de CRC32 para Powerbuilder y se me esta yendo la olla de tanto buscar. Lo unico que he encontrado son DLL’s por las que me piden un pastizal. Si tienes alguna DLL que pueda utilizar, te agradeceria muchisimo que me la proporcionaras. Gracias de antemano y perdona las molestias

    Un saludo

  3. theazazel says:

    Jose Luis, la propia CRM32Pro tiene incorporado este algoritmo pero si necesitas el codigo fuente, no hay ningun problema 🙂

  4. Dionisio says:

    Hola, también necesito implementar un algoritmo, en mi caso es el MD5 en PowerBuilder 7.0. Por favor me podrías enviar el código fuente o la forma de implementarlo, si lo tienes.

    Por tu ayuda muchas gracias.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.