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 Channel– Pentium 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!!!
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.
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
Jose Luis, la propia CRM32Pro tiene incorporado este algoritmo pero si necesitas el codigo fuente, no hay ningun problema 🙂
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.