Pregunta

Estoy tratando de escribir un programa que resuelve el desafío de RSA (sí tengo objetivos interesantes) y actualmente no tengo una máquina Linux de 64 bits y yo realmente no quiero pasar mi tiempo escribiendo un programa que doesn 't tienen la oportunidad de terminar nunca. Así que mientras yo puedo hacer algo de programación en ensamblador, yo preferiría usar C ++. Sin embargo, también estaría interesado en el uso de ensamblado en línea a hacer lo mismo. el plan es usar los registros de propósito general de 16 bits y 64 de la SSE de 128 bits se registra que ver (muy, muy largo) operaciones aritméticas con enteros. por lo que cualquier ayuda sobre cómo hacer eso sería muy apreciada.

¿Fue útil?

Solución

Basado en su comentario a BarsMonsters Anser, no es necesario para acercarse a la CPU, se necesita una biblioteca número entero grande.

Una opción es gmp, que incluye la aritmética de enteros arbitrarios. Tiene buenos algoritmos para cosas como la multiplicación de números enteros grandes, y un buen compilador hará un mejor trabajo de optimización de esto que la mayoría de la gente.

El principal problema que puede hacer que usted busca una alternativa es que soporta aritmética de precisión variable, que puede ser una sobrecarga que prefiere evitar si usted estar seguro de que sus números tienen como máximo 512 dígitos binarios. Aun así, es probable que desee mirar a los algoritmos más que trucos de bajo nivel (multiplicación larga ya puede ser una mala elección en ese tamaño), y estoy bastante seguro de que va a estar mejor dejar que el compilador de hacer su optimización.

Mi consejo - pasar su tiempo haciendo las cosas que requieren la inteligencia humana, no las cosas que una máquina puede hacer mucho más consistente y mil millones de veces más rápido

.

Y si realmente se puede optimizar el código de la máquina mejor que un compilador puede, LLVM descargar y poner en práctica esa lógica como un paso de optimización para que todos podamos obtener el beneficio; -)

Otros consejos

Todos los compillers modernos son muy buenos en la reutilización de todos los registros disponibles para producir el código más rápido posible.

Especialmente Intel C ++ y gcc3 -. Que a menudo crean código inmejorable manualmente

Por cierto, echa un vistazo a esto: ¿por qué no admite MSVC ensamblado en línea para los objetivos AMD64 e Itanium?

Si quiere simplemente hacer algunos cálculos precision, se trataría mejor compilador Intel C ++ y utilizar su lib matemáticas, es muy potente y overoptimized. Lo mismo para la biblioteca Boost matemáticas. Esto podría cortar su trabajo en un 90% :-) Ellos admiten números precission arbitrarias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top