2012-05-23 36 views
11

Al calcular la suma de md5 de archivos de gran tamaño, veo un solo salto de núcleo de la CPU al 100% durante el tiempo que sea necesario, dejando los otros núcleos inactivos.¿Se puede dividir md5 para que se ejecute en varios núcleos/subprocesos?

Mi comprensión rudimentaria de md5 es que todo el proceso es completamente lineal, donde los valores dependen de todos los valores anteriores leídos, y no hay nada que podamos hacer para hacerlo de subprocesos múltiples. ¿Es esto cierto?

O hay una manera de romper los archivos en secciones, calcular <algo> a través de múltiples piezas con múltiples núcleos, y luego combinar esos <algo> valores en el MD5 final?

La biblioteca que estamos utilizando para calcular el md5sum es http://libmd5-rfc.sourceforge.net/, pero cambiaría a una diferente si fuera posible romper el md5sum en varios núcleos para que se complete más rápido.

(Nota: cambiar a algo distinto de MD5 no es la cuestión, ni puede hacerse debido a los otros sistemas cerrados a la que esta interfaz Tampoco es esta pregunta sobre la seguridad del uso de MD5..)

+3

¿Has buscado esto? Uno de los primeros éxitos para "implementación paralela MD5" es: http://wwwcip.cs.fau.de/~spjsschl/md5.pdf, que parece mostrar que la respuesta corta es "Sí, puede". –

+0

+1 para su "nota". Aunque el hecho de que eres consciente de los problemas implica que tal vez deberías considerar hacer algo al respecto ... – Ben

+4

@JerryCoffin Creo que el artículo es un poco engañoso. Me di cuenta de que estaban paralelizando las múltiples iteraciones de MD5 para el hash de contraseñas, sin paralelizar el algoritmo MD5 en sí. Su otra optimización fue usar un gran registro SSE de 128 bits en lugar de 4 registros de 32 bits. – greg

Respuesta

9

No, no puedes dividirlo en el nivel de archivo. MD5 mantiene un estado mientras se ejecuta a través de los datos.

Cuestiones relacionadas