Los procesadores ARM son una arquitectura de 32 bits, y son relativamente ineficientes para realizar operaciones aritméticas de 64 bits: cuando deben calcular una adición de 64 bits, deben hacerlo con dos adiciones de 32 bits y algo de propagación de acarreo. De alguna manera, esto es equivalente al x86 utilizado en el modo de 32 bits (excepto que el x86 lo suficientemente reciente tiene acceso a los códigos de operación del SSE2, que ofrecen cálculos en enteros de 64 bits, incluso en el modo de 32 bits). Todos los x86 recientes pueden ejecutarse en modo de 64 bits (si el sistema operativo lo permite), lo que los hace mucho más rápidos en el cálculo de funciones de hash que se basan en operaciones aritméticas de 64 bits, siendo el ejemplo principal SHA-512. En una función hash de 32 bits como SHA-256, los núcleos ARM y x86 serán "comparables".
Un giro adicional de ARM es que tiene varios conjuntos de instrucciones; El ARM original utilizó códigos de operación de 32 bits, mientras que las versiones más nuevas permiten el conjunto de instrucciones "Thumb" que tiene códigos de operación más pequeños pero menos potentes. "Thumb" se ha extendido a "Thumb-2", con una mezcla de opcodes de 16 y 32 bits. Los nuevos núcleos ARM solo conocen Thumb-2. Se supone que el código "Thumb-2" es casi tan eficiente como el código ARM original, mientras que es notablemente más compacto. Pero mucho se puede esconder en una palabra como "casi".
Para bcrypt , lo que importa es la disponibilidad de aproximadamente 4 kB de "RAM rápida". Casi todos los núcleos ARM y x86 que encontrará tendrán cachés L1 que son más grandes que eso (para obtener un ARM sin caché, debe mirar ARM7TDMI de 33 MHz o sistemas similares), por lo tanto, nuevamente, ARM y x86 serán comparables .
Para scrypt , la situación es variada. Scrypt usa una función de hash interna para calcular accesos aparentemente aleatorios en un búfer de RAM grande, por lo que esta es una carrera entre el tiempo para calcular la función de hash en una entrada pequeña y la latencia de la RAM principal. La latencia de la RAM principal no se escala (y un bus "más rápido" significa más ancho de banda , no menos latencia ). Para un sistema pequeño basado en ARM como el Raspberry PI, la función hash será el cuello de botella, especialmente si es SHA-512. Para x86 multinúcleo más grande, la latencia de la memoria hará que todo sea lento. El x86 no dará aceleraciones proporcionadas con su precio mayor; especialmente si se utiliza una CPU con 6 u 8 núcleos: habrá demasiada contención en el bus de memoria compartida.
Dicho esto, la pregunta es sobre economía : ¿qué opción de arquitectura producirá el mayor número de hashes por segundo, para un presupuesto determinado? Esto incluye el costo del hardware , pero también el energy , que a largo plazo domina (usted paga el hardware una vez, pero debe alimentarlo con electricidad todo el año). largo). Los costos de energía deben incluir sistemas de refrigeración, que no son despreciables en las grandes granjas de computadoras. Los procesadores ARM tienen la reputación de usar menos energía (ha sido durante mucho tiempo su punto de venta, y es por eso que los teléfonos inteligentes usan procesadores ARM en la actualidad).
Por lo tanto, la arquitectura ARM debería ser, en promedio y para clusters grandes , una mejor opción para descifrar contraseñas, excepto cuando se trata de un proceso de hashing vinculado a la CPU (como PBKDF2 ) que se basa en una función hash de 64 bits (por ejemplo, SHA-512), en cuyo caso una CPU x86 (en Modo de 64 bits) será una mejor oferta. Esto cambiará con la llegada de procesadores ARM de 64 bits .
Para un amateur que no construye un clúster más allá de lo que cabe en su habitación, y que debe usar hardware estándar, estos problemas se verán reducidos por los de la disponibilidad y los efectos del mercado. Usted no compra una sola CPU x86; Necesitas una placa base y otras cosas a su alrededor; En última instancia, compras una PC . El costo de la CPU será una pequeña proporción del costo total del hardware. Del mismo modo, no compra un BRAZO, sino un Raspberry PI. Por lo tanto, para obtener una estimación correcta, debe realizar puntos de referencia . Para las funciones hash en bruto, sugiero usar sphlib , una biblioteca de implementaciones de varias funciones hash (incluidas SHA-256 y SHA-512 ), escrito en C; Viene con una herramienta de benchmarking. Para bcrypt y scrypt, lea detenidamente las implementaciones de referencia.
(Como una sensación visceral, espero un empate. El cluster PI Raspberry, por supuesto, ganará totalmente contra el cluster x86 si tiene en cuenta el "factor de diversión".)