Materia: #organizacion_del_computador_II

Tags:

Modelo SIMD

El modelo SIMD (Single Instruction Multiple Data, en inglés) se trata de un modelo de ejecución capaz de computar una sola operación sobre un conjunto de multiples datos. Se refiere a esta técnica como paralelismo a nivel de datos.

Es particularmente útil para procesar audio, video, o imágenes en donde se utilizan algoritmos repetitivos sobre sets de datos del mismo formato y que se procesan en conjunto. Ejemplos de esto pueden verse en filtros, compresores, codificadores en donde la salida depende de los últimos n valores de muestras tomados.

Es importante destacar como tratan los datos multiples estas operaciones, y la respuesta es depende. En general, podemos separar los registros que usemos en partes de igual tamaño. Por ejemplo, los registros MMX, que son de 64 bits, podriamos separarlos en:

Por otro lado, los registros XMM tienen el doble de capacidad, llegando a 128 bits. Estos registros podrian separarse en:


Operaciones

En el modelo SIMD contamos con instrucciones de transferencia, instrucciones de enteros o flotantes, y aritmeticas especificas. Algunos ejemplos pueden ser:

movdqu xmm0, [rsi]    ; Guarda en xmm0 16 enteros de 8 bits
movq xmm1, r9         ; Guarda en xmm1 8 enteros de 8 bits

En el caso de las aritmeticas, se separan en dos grandes grupos: la aritmética del desborde y la aritmética saturada. Como indica el nombre, la aritmética del desborde consiste en, al llegar al extremo superior del rango que un dato es capaz de representar, volvemos a empezar en el extremo inferior. Como si fuera un contador que al llegar a su punto maximo, vuelve a empezar en cero. Por otro lado, la aritmética saturada consiste en, una vez llegado al valor máximo, impedir que el valor aumente. Solo puede bajar en ese punto. Lo mismo equivale para los extremos inferiores.

paddd xmm0, xmm1    ; Suma entre los 4 doubles en xmm1 y los 4 doubles en xmm0