elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)  (Leído 7,550 veces)
Fly_NighT

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« en: 4 Marzo 2014, 20:23 pm »

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!


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #1 en: 5 Marzo 2014, 03:06 am »

Hola!

Podrias mirar esto: click

Explica como hacer operaciones de 64 bits usando 32 bits. No es lo que haz preguntado, pero quizas te pueda mostrar otras opciones a la hora de realizar las operaciones.

Fijate que la dinamica para numeros de 128-2048 bits es análoga...  ;)

Saludos!

PD: Te dejo un par de links al respecto:

http://codereview.stackexchange.com/questions/7364/sse2-assembly-optimization-multiply-unsigned-shorts-and-add-the-result
http://en.wikibooks.org/wiki/X86_Assembly/SSE


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Fly_NighT

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #2 en: 5 Marzo 2014, 05:42 am »

Podrias mirar esto: click

Excelente aporte. Aunque la parte de 64 bits ya la tengo implementada (incluso para operaciones entre números de 1024 bits) es interesante dejar el link. Me habría ahorrado horas de trabajo..


ESTO resuelve en parte mi problema. El listado de instrucciones para enteros de las instrucciones SIMD (SSE, SSE2, SSE3 y SSE4) por lo menos me permite saber qué instrucciones puedo utilizar. Precisamente ahora estaba revisando el Manual de Desarrolladores de Software de Arquitectura Intel® 64 y IA-32, para ver si encontraba tales instrucciones. Quizá en un par de horas más ya tengo el código que resuelva mi problema para las instrucciones SIMD. Sin embargo, en la página de Wiki no sale nada sobre las instrucciones AVX.  ¿Tienes idea de donde puedo conseguir un listado similar de instrucciones para enteros de AVX? Si consiguiera eso, mi problema quedaría resuelto en un par de horas más. Excelente respuesta, te lo agradezco.
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #3 en: 5 Marzo 2014, 06:23 am »

Te dejo unos links:

http://software.intel.com/en-us/articles/introduction-to-intel-advanced-vector-extensions/
http://en.wikipedia.org/wiki/Advanced_Vector_Extensions
http://en.wikibooks.org/wiki/X86_Assembly/AVX,_AVX2,_FMA3,_FMA4

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #4 en: 5 Marzo 2014, 06:24 am »

En el primer PDF.

Código:
http://software.intel.com/es-es/intel-isa-extensions

Si lo unico qu quieres hacer es una simple suma, con PADDB/PADDW/PADDD/PADD, si no puedes hacerlo de mas maneras.

Un saludo.
En línea

Fly_NighT

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #5 en: 5 Marzo 2014, 06:40 am »

Si lo unico qu quieres hacer es una simple suma, con PADDB/PADDW/PADDD/PADD, si no puedes hacerlo de mas maneras.

También lo hace la instrucción PADDQ que directamente opera sobre paquetes de 64-bits (quadword). ¿Esas "maneras" de las que hablas incluyen sumas sin "perder" el carry? Las instrucciones PADDB/PADDW/PADDD/PADDQ ejecutan sumas, pero desprecian el carry (overflow) entre cada entero:

" When a result is too large to be represented in the 8/16/32 integer (overflow), the result is wrapped around and the low bits are written to the destination element (that is, the carry is ignored). [...] Note that these instructions can operate on either unsigned or signed (two’s complement notation) integers; however, it does not set bits in the EFLAGS register to indicate overflow and/or a carry. To prevent undetected overflow conditions, software must control the ranges of the values operated on."
« Última modificación: 5 Marzo 2014, 06:46 am por Fly_NighT » En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #6 en: 5 Marzo 2014, 07:00 am »

Es que las instrcciones SEEx y AVX no tienen soporte para el carry.

Un saludo.
En línea

Fly_NighT

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #7 en: 5 Marzo 2014, 07:11 am »

Entonces tendré que implementarlo manualmente, aunque ya no será complicado. Muchas gracias. Mi problema ha sido resuelto. Excelentes respuestas en excelente tiempo. ¡Saludos a todos!
En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: Instrucciones 64-bit vs. Instrucciones Avanzadas (SSE, SSE2, SSE3, SSE4, AVX)
« Respuesta #8 en: 5 Marzo 2014, 07:45 am »

Si tendras que implementarlo, piensa que las extensiones SSEx y AVX estan pensadas para hacer calculos independientes en byte, word, doubleword, quad etc...

De hay que tengas instrucciones como padd, pshuf, psll/pslr, pcmepeq, punpckh.

Un saludo
« Última modificación: 5 Marzo 2014, 07:47 am por cpu2 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
x86, set de instrucciones
Ingeniería Inversa
Blank Demon 2 3,010 Último mensaje 29 Septiembre 2004, 09:28 am
por Blank Demon
Instrucciones Cubo
Electrónica
omega3 0 2,086 Último mensaje 16 Marzo 2005, 10:34 am
por omega3
Separar instrucciones, pausa entre instrucciones
Java
NelxoN 5 7,277 Último mensaje 28 Marzo 2009, 18:24 pm
por Amerikano|Cls
Malware que descarga instrucciones? « 1 2 3 »
Análisis y Diseño de Malware
Vaagish 25 9,414 Último mensaje 1 Julio 2014, 07:54 am
por x64core
Pregunta sobre instrucciones de repetición
Programación C/C++
Mario Olivera 4 2,631 Último mensaje 12 Agosto 2014, 05:34 am
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines