Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Extensiones multimedia
Estructura de computadores
Contenidos:
1. Introducción.
2. SIMD en los procesadores Intel.
2.1. MMX.
2.2. SSE.
2.3. AVX.
3. Otras extensiones SIMD.
4. Programación.
1. Introducción
1. Introducción
● A mediados de los 90, las aplicaciones multimedia se hicieron cada vez más
populares (compresión gráficos, síntesis de audio, procesamiento de
imágenes).
● Los procesadores actuales tienen registros de datos de 32, 64, 128 bits de
ancho o más, pero sólo una fracción de ellos se utiliza en aplicaciones de
cálculo intensivo de computación (8, 16 bits).
1. Introducción
● Taxonomía de las arquitecturas paralelas (clasificación de Flynn)
DS1
PU1 MU1
● SISD DS2
PU2 MU2
● SIMD IS
CU
● MISD DS3
PU3 MU3
● MIMD
DSn
PUn MUn
1. Introducción
● Procesamiento SIMD, dos opciones (+1):
○ Extensiones multimedia (MMX, SSE, SSE2, AVX, etc.)
○ Procesadores vectoriales.
● Extensiones multimedia:
○ Registros anchos de p bits (p=64, p=128, etc.).
○ Un registro contiene n datos de p/n bits cada uno.
■ Con p=64 bits → 2 datos de 32 / 4 datos de 16…
■ Con p=128 bits → 2 datos de 64 / 4 datos de 32 / 8 datos de 16…
○ ALU ancha de p bits particionable en n unidades de p/n bits de ancho.
○ En una operación en la ALU se hacen n operaciones en paralelo
(subword parallelism).
1. Introducción
● SIMD (Single Instruction Multiple Data)
○ Ejecutar la misma instrucción en múltiples elementos de datos.
1. Introducción
● Taxonomía de las arquitecturas paralelas (clasificación de Flynn)
SCALAR VECTOR
(1 operación) (N operaciones)
v1 v2
r1 r2
v3
r3
longitud del vector
add r3, r1, r2
1. Introducción
● Ejemplos de procesamiento masivo de datos (LiDAR, imágenes, audio):
1. Introducción
● Ejemplos de procesamiento masivo de datos (LiDAR, imágenes, audio):
sofisticación del
Complejidad y
tratamiento
procesar
1. Introducción
¿Limitados al procesamiento multimedia?
1. Introducción
¿Cuáles son las características comunes de estas aplicaciones?
● Pequeños tipos de datos propios: byte (8 bits), word (16 bits), dword (integer or
float, 32 bits).
● Hay que aplicar muchas operaciones aritméticas y lógicas sobre un elevado
número de operandos de pequeño tamaño (paralelismo): La misma operación se
ejecuta simultáneamente sobre N>1 elementos de un vector.
● Los algoritmos requieren aritmética de saturación, si se produce un
desbordamiento, se toman valores límite.
● Patrones de acceso a memoria regulares y recurrentes.
● Operaciones recurrentes y localizadas sobre los datos.
● Computacionalmente intensivo: se ejecuta durante largos periodos de tiempo.
1. Introducción
● Muchas formas de introducir la vectorización en los programas:
1. Introducción
● ¿Cómo se ha llevado a cabo la selección de las nuevas instrucciones?
○ Este análisis mostró que, en la mayoría de los casos unas pocas rutinas
se llevan la mayor parte del tiempo:
● Un conjunto de prioridades.
1. Introducción
¿Cómo ha tenido lugar la selección de las nuevas instrucciones?
11...1111 mm1
11...1111 mm2
11...1111 mm3
11...1111 mm4
11...1111 mm5
11...1111 mm6
11...1111 mm7
● Los registros sólo pueden utilizarse para una cosa al mismo tiempo.
● Necesidad de vaciar los registros: EMMS (Empty MMX state).
● Después de ejecutar las instrucciones MMX y antes de ejecutar las instrucciones de punto flotante.
Computer Structure 21 Higher Polytechnic School of Alcoy
Extensiones multimedia
● Los registros MMX pueden ser direccionados directamente en las instrucciones MMX
mediante sus nombres mmi.
● Este mapeo implica una compatibilidad total con los sistemas operativos existentes.
No se requirieron nuevos registros o estados para esta tecnología.
Formato de datos empaquetados (Packed data format). Característica principal: tamaño reducido
de los datos. Aplicación de la misma operación sobre un conjunto de datos adyacentes. ¿Cuántos
datos se van a procesar en paralelo? Depende de las características de la organización natural y la
alineación de los datos en las aplicaciones.
8 8 8 8 8 8 8 8
● Packed byte. 8 bytes in 64 bits
○ Signed: 0x80-0x7F 16 16 16 16
○ Unsigned: 0x00-0xFF
● Packed word. 4 words
○ Signed: 0x8000-0x7FFF 32 32
○ Unsigned: 0x0000-0xFFFF
1 1 0 0 1 1 0 1 205 1 1 0 0 1 1 0 1 205
+ 0 1 0 0 0 0 0 1 65 + 0 1 0 0 0 0 0 1 65
1 0 0 0 0 1 1 1 0 270 1 1 1 1 1 1 1 1 255
● Ejecución condicional (Conditional execution). ¿Qué podemos hacer cuando una operación
sólo se ejecuta si el operando satisface alguna condición?
if (condition) Ra=Rb; else Ra=Rc;
● Convertir una ejecución condicional en una asignación condicional:
Ra=(Rb AND Rx) OR (Rc ANDNOT Rx)
● Ejemplo (la máscara Rx dependerá de la condición):
Destino
Destino
○ Soluciones:
■ Dar soporte a ese acceso con hardware/instrucciones.
■ Solución habitual: limitar el acceso a los datos no alineados y extraer la información
necesaria mediante operaciones explícitas (desplazamientos lógicos y operaciones
OR).
○ Ejemplo: PADDUSB: add packed unsigned integer bytes with unsigned saturation (P-ADD-US-B).
PADDSB,
Arithmetic (addition, PADDB, PADDW, PADDD,
PADDSW, PADDUSB, PADDUSW,
subtraction, multiplication, PSUBB, PSUBB, PSUBD,
PSUBSB, PSUBUSB, PSUBUSW
multiply and add) PMULL, PMULH, PMADD
PSUBSW
PACKSSDW,
Conversion (pack) PACKUSWB
PACKSSWB
Shift and rotate instructions PSLLD, PSLLQ, PSLLW, PSRAD, PSRAW, PSRLD, PSRLQ, PSRLW
Instrucciones de transferencia de datos (mm: registro MMX, m64: datos de memoria de 64 bits).
● MOVQ mm,mm/m64
● MOVQ mm/m64,mm
Copia 64 bits del operando origen al operando destino. El destino y los operandos de origen pueden ser
registros MMX u operandos de memoria de 64 bits.
Para direccionar operandos en memoria se utilizan los general purpose CPU registers: EAX, EBX, ECX,
EDX, EBP, ESI, EDI y ESP (los registros MMX no pueden utilizarse para direccionar la memoria). MOVQ no
puede transferir datos de memoria a memoria.
Instrucciones aritméticas
● Suma: PADD[B,W,D][SB,SW][USB,USW] mm,mm/m64. Las instruccione PADD (Packed Add)
añaden los elementos de datos del operando de origen a los elementos de datos del registro
de destino,y el resultado se escribe en el registro de destino. Si el resultado excede el límite
de rango de datos para el tipo de datos, se envuelve(opción por defecto). PADD admite bytes
empaquetados (PADDB), palabras empaquetadas palabra empaquetada (PADDW) y palabra
doble empaquetada (PADDD).
Ejemplo:
PADDB mm1, mm2 Se suman ambos y el resultado queda registrado en mm1
Suma de bytes, con signo, complemento a dos, con envolvente.
(mm1=0x0323F456E0BACD80)
(mm2=0x11FE3852658241E0)
● Resultado: mm1=0x14212CA8453C0E60
mm1= … 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0
mm2= … 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0
1 0 1 1 0 0 0 0 0
1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0
65 65 - 32 224
PADDSB mm1,mm2
+ 65 - 32
(Suma de bytes, con saturación con signo)
14 - 128
205 128
PADDUSB mm1,mm2
+ 65 224
(Suma de bytes, con saturación sin signo saturación)
255 255
52608
PADDUSW mm1,mm2
+ 8432
(Suma de palabras, con saturación sin signo)
61040
a3 a2 a1 a0
b3 b2 b1 b0
a3*b3+a2*b2 a1*b1+a0*b0
Instrucciones de comparación.
Mayor que. Binarización de imágenes
ejemplo.
Instrucciones de comparación.
Ejercicio: La interpretación de los operandos como datos con signo dificulta la operación de
binarización cuando el umbral no es 128, como se puede observar en el siguiente diagrama
0 128 200 255
0 127 - 56 -1
0 64 255
0 127- 128 -1
Implementar rutinas que permitan realizar la binarización con valores de umbral diferentes a
128
Computer Structure 53 Higher Polytechnic School of Alcoy
Extensiones multimedia
Instrucciones lógicas.
● PAND mm,mm/m64: Bitwise Logical AND (DEST ← DEST AND SRC))
● PANDN mm,mm/m64: Bitwise Logical AND NOT (DEST ← (NOT DEST) AND SRC). Realiza un NOT
lógico por bits del operando destino (primer operando), luego realiza un AND lógico a nivel de bits del
operando fuente (segundo operando) y el operando de destino invertido. El resultado se almacena en el
operando de destino. Cada bit del resultado se pone a 1 si el bit correspondiente en el primer operando
es 0 y el bit correspondiente en el segundo operando es 1; en caso contrario, se pone a 0.
● POR mm,mm/m64: OR lógico a nivel de bits (DEST ← DEST OR SRC))
● PXOR mm,mm/m64: Bitwise Logical Exclusive OR (DEST ← DEST XOR SRC))
Destino Fuente PAND PANDN POR PXOR
0 0 0 0 0 0
0 1 0 1 1 1
1 0 0 0 1 1
1 1 1 0 1 0
Instrucciones lógicas.
Ejemplo:
Valor absoluto: if (a>b) then c=a-b else c=b-a
No hay instrucción MMX para valor absoluto o ejecución condicional.
Alternativa: c=(a-b) OR (b-a)
(Operandos en mm0 y mm1)
MOVQ mm2,mm0
PSUBUSB mm0,mm1
PSUBUSB mm1,mm2
POR mm0,mm1
Instrucciones de desplazamiento.
PSLL[W,D,Q] mm,mm/m64 o mm,imm8 (Packed Shift Left Logical). Estas instrucciones desplazan
los bits del primer operando hacia la izquierda en la cantidad de bits especificados en el operando
fuente. Los bits de orden inferior vacíos se ponen a cero. Si el valor especificado por el segundo
operando es mayor que 15 (para palabras), 31 (para palabras dobles) o 63 (para palabras
cuádruples), entonces el destino se destino se pone a todos los ceros. El operando destino es un
registro MMX, mientras que el operando fuente puede ser un registro MMX, un operando de
memoria de 64 bits o un operando inmediato de 8 bits. PSLL admite la palabra empaquetada
(PSLLW), palabra doble empaquetada (PSLLD) y palabra cuádruple (PSLLQ). Ejemplo:
Instrucciones de desplazamiento.
PSRL[W,D,Q] mm,mm/m64 o mm,imm8 (Packed Shift Right Logical).
Estas instrucciones desplazan los bits del primer operando a la derecha en la cantidad de bits
cantidad de bits especificada en el operando fuente. Los bits de orden superior vacíos se ponen a
cero. Si el valor especificado por el segundo operando es mayor que 15 (para palabras), 31 (para
palabras dobles), o 63 (para palabras cuádruples), entonces el destino se pone a todos los ceros. El
operando destino es un registro MMX, mientras que el operando fuente puede ser un registro MMX,
un operando de memoria de 64 bits o un operando inmediato de 8 bits. PSRL admite la palabra
empaquetada (PSRLW), de doble palabra (PSRLD) y de cuatro palabras (PSRLQ). Ejemplo:
Instrucciones de desplazamiento.
PSRA[W,D] mm,mm/m64 o mm,imm8 (Packed Shift Right Arithmetic). Estas instrucciones
desplazan los bits del primer operando a la derecha en la cantidad de bits especificada en el
operando fuente. Los bits de orden superior vacíos de cada elemento se llenan con el valor inicial
del bit de signo del elemento de datos. Si el valor especificado por el segundo operando es mayor
que 15 (para palabras), o 31 (para palabras dobles), cada elemento de destino se rellena con el
valor inicial del bit de signo del elemento. El operando de destino es un registro registro MMX,
mientras que el operando fuente puede ser un registro MMX, un operando de memoria de 64 bits, o
un operando inmediato de 8 bits. Esta instrucción admite los tipos de datos de palabra
empaquetada (PSRAW) y de palabra doble empaquetada(PSRAD) de datos.
Simplemente cojo los 5 de la derecha de cada
mm4(64 bits, 4 palabras), antes: paquete, los quito, lo resultante lo desplazo, y a la
izquierda del paquete lo relleno de 0's
|0000100001001100|0000000000011111|1000011000001100|1111110000000000|
PSRAW mm4,5 (desplazamiento aritmético empaquetado a la derecha en 5)
mm4(64 bits, 4 palabras), después:
|0000000001000010|0000000000000000|1111110000110000|1111111111100000|
Computer Structure 62 Higher Polytechnic School of Alcoy
Extensiones multimedia
● Las operaciones en coma flotante son la base de la geometría 3D. La mejora de este
tipo de operaciones es esencial para mejorar el rendimiento de las aplicaciones 3D.
● Nuevas instrucciones:
○ Conjunto de instrucciones de enteros (instrucción de nuevos medios) que operan
sobre el conjunto anterior de registros MMX de 64 bits registros..
○ Nuevas operaciones SIMD en coma flotante de precisión simple (32 bits), que
operan sobre un nuevo conjunto de registros de 128 bits de 128 bits. Pueden
operar con datos empaquetados o escalares escalares. Nuevos 8 registros
XMM0-XMM7.
○ Instrucciones de acceso a la memoria: gestión de la caché y minimización de la
contaminación de la caché.
○ Instrucciones de conversión de formato numérico.
Computer Structure 67 Higher Polytechnic School of Alcoy
Extensiones multimedia
Registros SSE.
127 0
xmmm3 4x flotantes
2x dobles
xmmm3
16x bytes
xmmm3 8x palabras
4x palabras dobles
xmmm3 2x palabras cuádruples
…
xmm7/15
Comparación
VPSHUFB, VPSHUFW,
Conversión (paquete)
VPSHUFD
Conversión (desempaquetar)
Instrucciones lógicas
Desplazamiento y rotación
instrucciones
Transferencia de datos. Mueve palabras cuádruples (entre los registros MMX y SSE).
● MOVDQ2Q mm, xmm. Mueve la palabra cuádruple inferior del operando fuente al
operando de destino. El operando fuente es un registro XMM y el operando de destino es
un registro MMX.
MMX XMM
63 0 127 64 63 0
● MOVQ2DQ xmm, mm.. Mueve la palabra cuadrada del operando fuente a la palabra
cuadrada baja del operando destino. La palabra se pone a 0.
XMM MMX
0000 . . . . . . . . . . . . . 000000 63 0 63 0
mm0=0x0202020202020202
mm1=0x0303030303030303
PAVGB mm0, mm1
mm0=0x030303030303 (media de 03h+02h+1)
Computer Structure 74 Higher Polytechnic School of Alcoy
Extensiones multimedia
mm0=0x0102030405060708
mm1=0x0807060504030201
PMAXUB mm0, mm1
mm0=0x0807060505060708
Computer Structure 75 Higher Polytechnic School of Alcoy
Extensiones multimedia
xmmi 127 64 63 0
Nuevas características:
● Instrucciones de tres operandos. Instrucciones como
A = A+ B se convierten en A = B + C.
● Algunas instrucciones de cuatro operandos.
● Se han relajado los requisitos de alineación de la memoria.
● Nuevas instrucciones Fused-Multiply-Add (FMA), como
A = A * B + C.
● Nuevas instrucciones para el estándar de cifrado avanzado (AES).
● Diseñado para soportar registros de 1024 bits en el futuro.
● Superposición de registros: si se admiten 512 bits pero trabajando con versiones
anteriores (registros de 256 o 128 bits registros), se utilizan las partes inferiores de
los 512 bits.
● Instrucciones codificadas con un prefijo VEX.
Nuevas características:
● Extiende algunas instrucciones SSE a AVX. Ejemplo:
○ ADDPS xmm, xmm/m128 se convierte en VADDPS ymm, ymm/y256..
● Algunas instrucciones son nuevas en AVX (sólo VEX).
● Instrucciones aritméticas: sumar, restar, multiplicar, dividir, raíz cuadrada, mínimo,
máximo, redondeo.
● Instrucciones de comparación: 32 tipos de comparación.
● Conversión y reposicionamiento: Empaquetar, desempaquetar, barajar, insertar y
extraer datos.
● Requiere el modo de 64 bits. No es compatible con todos los procesadores
procesadores y sistemas operativos actuales. El uso de la instrucción CPUID es
imprescindible.
Computer Structure 82 Higher Polytechnic School of Alcoy
Extensiones multimedia
Comparación
Conversión (desempaquetar)
Instrucciones lógicas
Desplazamiento y rotación
instrucciones
● VPSHUFB ymm1, ymm2, ymm3/m256. Baraja los bytes en ymm2 según el contenido de
ymm3, y almacena el resultado en ymm1.
Computer Structure 86 Higher Polytechnic School of Alcoy
Extensiones multimedia
4. Programación
4. Programación
4. Programación
4. Programación
● Lenguaje ensamblador
○Permite utilizar plenamente las posibilidades SIMD.
○ Difícil de programar. Requiere un conocimiento profundo del Modo de
funcionamiento SIMD.
● Compilador intrínseco o macros SIMD
○ Funciones que permiten acceder a las instrucciones MMX desde un lenguaje de
programación de alto nivel.
○ También requieren un conocimiento profundo de SIMD.
○ Ejemplo:
_m64 (contenido del registro MMX)
_m128 (4 FP de precisión simple)
_m128 (2 FP de doble precisión)
_m128i (enteros empaquetados 8, 16, 32 o 64)
4. Programación
● Intrínsecos. Las funciones de estilo C proporcionan acceso a las instrucciones SIMD
sin necesidad de utilizar código ensamblador (incluya los correspondientes archivos
de cabecera .h). Ejemplos:
○ Ver:
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=3300,4101,285
para todas las instrucciones y su versión intrínseca.
Computer Structure 93 Higher Polytechnic School of Alcoy
Extensiones multimedia
4. Programación
Compilador intrínseco o macros SIMD
4. Programación
Compilador intrínseco o macros SIMD
vector_x_matrix_4x4(MMX64 *v, MMX64 *m)
PMADDWD V0 V1 V0 V1 V2 V3 V2 V3
X X X X X X X X
4. Programación
● Clases y bibliotecas
http://www.intel.com/software/products/perflib/
4. Programación
● Autovectorization
○ Fácil de programar, pero requiere un compilador capaz de realizar la auto
vectorización.
○ Ejemplo: Compilador Intel C++ (Windows y Linux). Proporciona también
programación intrínseca y clases para programación SIMD
http://www.intel.com/software/products/compilers/
for (i=0;i<128000;i++)
pointer1[i]=pointer2[i]+50;
for (i=0;i<128000;i+=8)
pointer1[i:i+8]=pointer2[i:i+8]+50;
4. Programación
● Utilizar AVX sin escribir código AVX.Intel Parallel Studio
Extensiones multimedia
Estructura de computadores