Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Fly_NighT

#1
Hola, soy nuevo en el foro, pero afortunadamente no soy tan novato con el tema de ensamblador. Programo por lo general en FASM, y mi procesador (i3-2310M) soporta hasta las instrucciones AVX (no soporta AVX2).

Debo hacer una aplicación que computa operaciones elementales con números enteros (no flotantes) lo suficientemente grandes como para que no entren en un resgistro de 64-bits. Por lo general, estos números enteros me suelen ocupar entre 1024-bits y 128-bits. Para computar las operaciones (suma, resta, multiplicación - NO división) me vi en la necesidad de aplicar las operaciones considerando cada número entero (de 128 a 1024) como un paquete de datos de 64-bits cada uno. Por ejemplo, en la suma, si tengo dos números de 1024-bits, tomo los primeros 64-bits de cada uno y los sumo. Luego vuelvo a hacer lo mismo con el segundo paquete de 64-bits de cada uno, sin olvidar sumarle el carry de la operación anterior, y así sucesivamente.

Mi problema radica en la velocidad de ejecución cuando debo hacer varios cálculos, ya que la cuestión empieza a hacerse lenta. Mironeando por ahí, encontré que las instrucciones SSE (1,2,3 o 4) y las instrucciones AVX permiten manejar registros de tamaño más grandes (128-bit y 256-bit creo, respectivamente, por lo que he leído), lo cuál probablemente haría más rápidas las ejecuciones y los cálculos. El tema es que desconozco cuál es la diferencia entre cada set de instrucciones, y cuáles de todos ellos "podría solventar" mi problema, o si en el peor de los casos, aplicar estas instrucciones empeoraría el rendimiento.

¡Les agradezco de antemano todas las respuestas!