Simd/Sse: Ejemplo
Simd/Sse: Ejemplo
Simd/Sse: Ejemplo
SIMD/SSE
Federico Raimondo
OC2 2
SIMD/SSE
1 / 39
SIMD/SSE
2 / 39
SIMD
SIMD
Ejemplo:
Dependiendo del modo de color, cada p es uno o mas bytes: xel RGB 3 bytes: Red, Green y Blue. El valor del byte representa la cantidad de cada color: (255,0,0) es Rojo, (0,255,255) es Amarillo, etc. + = RGBA 4 bytes. Idem RGB pero con un canal mas que representa el valor Alpha o transparencia. Grayscale 1 byte: Escala de grises. 0 es negro, 255 es blanco.
SIMD/SSE
3 / 39
SIMD/SSE
4 / 39
SIMD
SIMD
Suma de imgenes a
En C:
1 2 3 f o r ( i = 0 ; i < TAMANO; i ++) { dst [ i ] = srcA [ i ] + srcB [ i ] ; }
En ensamblador:
1 2 3 4 5 6 7 8 9 10 11 12 mov ecx , TAMANO mov e s i , s r c A mov ebx , s r c B mov e d i , d s t . ciclo : mov a l , [ e s i ] add a l , [ e bx ] mov [ e d i ] , a l inc esi inc edi i n c eb x loop . c i c l o
1 2 3 4 5 6 7 8
f o r ( i = 0 ; i < TAMANO/ 1 6 ; i ++) { dst [ i ] = srcA [ i ] + srcB [ i ] ; d s t [ i +1] = s r c A [ i +1] + s r c B [ i + 1 ] ; d s t [ i +2] = s r c A [ i +2] + s r c B [ i + 2 ] ; ... ... d s t [ i +15] = s r c A [ i +15] + s r c B [ i + 1 5 ] ; }
En ensamblador:
1 2 3 4 5 6 7 8 9 10 11 12 13 mov ecx , TAMANO s h r ecx , 4 mov e s i , s r c A mov ebx , s r c B mov e d i , d s t . ciclo : movdqu xmm0 , [ e s i ] paddb xmm0 , [ e b x ] movdqu [ e d i ] , xmm0 add e s i , 16 add e d i , 16 add ebx , 16 loop . c i c l o
; ; ; ;
SIMD/SSE
5 / 39
SIMD/SSE
6 / 39
SIMD
SIMD
SISD:
1 2 3 4 5 6 7 8 9 10 11 12 mov ecx , TAMANO mov e s i , s r c A mov ebx , s r c B mov e d i , d s t . ciclo : mov a l , [ e s i ] add a l , [ e bx ] mov [ e d i ] , a l inc esi inc edi i n c eb x loop . c i c l o
SIMD:
1 2 3 4 5 6 7 8 9 10 11 12 13 mov ecx , TAMANO s h r ecx , 4 mov e s i , s r c A mov ebx , s r c B mov e d i , d s t . ciclo : movdqu xmm0 , [ e s i ] paddb xmm0 , [ eb x ] movdqu [ e d i ] , xmm0 add e s i , 16 add e d i , 16 add ebx , 16 loop . c i c l o
P1 Q1
P2 Q2
P3 Q3
P4 Q4
P5 Q5
P6 Q6
P7 Q7
P8 Q8
XMM0 XMM1
P1+Q1
P2+Q2
P3+Q3
P4+Q4
P5+Q5
P6+Q6
P7+Q7
P8+Q8
XMM0
SIMD/SSE
7 / 39
SIMD/SSE
8 / 39
SSE
Tipos de datos
SSE (Streaming SIMD Extensions) es un set de instrucciones que implementa el modelo de cmputo SIMD. o Se introdujo en el ao 1999 por Intel como sucesor de MMX (1997). n Extiende a MMX con nuevos registros y tipos de datos. La versin de SSE var con el tiempo introduciendo nueva o a funcionalidad.
SSE maneja Bytes, Words, Double Words, Quad Words y Double Quadwords (Enteros). Single y Double (punto otante), MMX slo operaba con enteros hasta Quad Words. o
SIMD/SSE
9 / 39
SIMD/SSE
10 / 39
Registros
Registros
B1
B2
B3
B4
B5
B6
B7
B8
B9
Hay 8 registros disponibles: XMM0 hasta XMM7 Son registros de 128 bits:
16 enteros de 1 byte. 8 enteros de 2 bytes. 4 enteros de 4 bytes o 4 oats. 2 enteros de 8 bytes o 2 doubles. 1 entero de 16 bytes.
W0
0
W1
W2
W3
W4
W5
W6
W7
127
D0
0
D1
D2
D3
127
Q0
0
Q1
127
DQ0
0 127
SIMD/SSE
11 / 39
SIMD/SSE
12 / 39
Registros
Registros
B8
B7
W7
127
W6
W5
W4
W3
W2
W1
W0
0
0
127
D3
D2
D1
0
D2
D1
D0
0
D0
0
D1
D2
D3
127
0 Q1
127
D0
D1
D2
127
Q0
0
DQ0
127 0
SIMD/SSE
13 / 39
SIMD/SSE
14 / 39
Operaciones
Operaciones
Cmo hay distintos tipos de datos, las operaciones son distintas para o operar con Bytes, Words, DWords, etc.
Luego del nombre de la operacin, el sujo indica el tamao de los o n operandos. B, W, D, Q, DQ para enteros y PS y PD para punto otante.
SIMD/SSE
15 / 39
SIMD/SSE
16 / 39
Operaciones
Patrones de operaciones
Ejemplo
1
1 2 3 4 5 6 7 8 9 10 11 12 13
mov ecx , TAMANO s h r ecx , 4 mov e s i , s r c A mov ebx , s r c B mov e d i , d s t . ciclo : movdqu xmm0 , [ e s i ] paddb xmm0 , [ e b x ] movdqu [ e d i ] , xmm0 add e s i , 16 add e d i , 16 add ebx , 16 loop . c i c l o
Operaciones
2
SIMD/SSE
17 / 39
SIMD/SSE
18 / 39
Patrones de operaciones
Saturacin o
Patrones de operaciones
Saturacin o
Ejemplo:
Saturacin o
+
0xA0 0x64
1 2 3 4 5 6 7 8
=
sat(0x104) = 0xFF
SIMD/SSE
19 / 39
SIMD/SSE
20 / 39
Patrones de operaciones
Saturacin o
Patrones de operaciones
Empaquetado/Desempaquetado
Ejemplo:
Suma saturada sin signo: PADDUSB PADDUSW Suma saturada con signo: PADDSSB PADDSSW Hay mas operaciones saturadas
0xFF - 0xFF = 0x00 0xFF 0xFF 0xFF
SIMD/SSE
21 / 39
SIMD/SSE
22 / 39
Patrones de operaciones
Empaquetado/Desempaquetado
Patrones de operaciones
Empaquetado/Desempaquetado
Ejemplo:
Ejemplo:
+
0xFF 0xFF
0xFF
(0xFF
0xFF
)
0xFF
0x02 0xFF
Federico Raimondo (OC2) SIMD/SSE 1er Cuatrimestre de 2011 23 / 39
Patrones de operaciones
Empaquetado/Desempaquetado
Patrones de operaciones
Empaquetado/Desempaquetado
UNPACK/PACK
5 0
2 0
2 0
6 0
6 0
8 0
4 0
2 0
XMM0 XMM1
Unpack
XMM0 XMM0
Pack
Federico Raimondo (OC2) SIMD/SSE 1er Cuatrimestre de 2011 25 / 39 Federico Raimondo (OC2) SIMD/SSE 1er Cuatrimestre de 2011 26 / 39
Patrones de operaciones
Empaquetado/Desempaquetado
Patrones de operaciones
Empaquetado/Desempaquetado
UNPACK
Hay varias operaciones, dependiendo de los tamaos de los operandos: n
5 0 2 0 2 0 6 0 6 0 8 0 4 0 2 0
XMM2 XMM1
PUNPCKHBW XMM2 XMM2 PUNPCKHWD PUNPCKHDQ PUNPCKHQDQ Leyenda: H y L determinan la parte baja o alta. B, W, D, Q y DQ determinan el tamao de los operandos. n
SIMD/SSE
27 / 39
SIMD/SSE
28 / 39
Patrones de operaciones
Empaquetado/Desempaquetado
Patrones de operaciones
Empaquetado/Desempaquetado
PACK
5 6
2 8
2 4
6 2
XMM2 XMM0
Hay varias operaciones, dependiendo de los tamaos de los operandos: n PACKUSWB PACKUSDW PACKSSWB PACKSSDW
XMM0 U y S determinan si el elemento es sin singno o con signo. B, W, D, Q y DQ determinan el tamao de los operandos. n
SIMD/SSE
29 / 39
SIMD/SSE
30 / 39
Patrones de operaciones
Empaquetado/Desempaquetado
Patrones de operaciones
Empaquetado/Desempaquetado
Ejemplo
Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
pxor xmm7 , xmm7 ; R e g i s t r o para extender pxor xmm3 , xmm3 ; Acumulador ( b a j a s ) pxor xmm4 , xmm4 ; Acumulador ( a l t a s ) mov e s i , SRC mov ecx , TAMANO shr ecx , 4 . ciclo : movdqu xmm0 , [ e s i ] ; 16 e l e m e n t o s movdqa xmm1 , xmm0 punpcklbw punpckhbw paddw paddw xmm0 , xmm7 xmm1 , xmm7 xmm3 , xmm0 xmm4 , xmm1 ; 8 elementos extendidos ( bajos ) ; 8 elementos extendidos ( a l t o s )
(0xFF
0xFF
)
0xFF
0xFF
Federico Raimondo (OC2) SIMD/SSE 1er Cuatrimestre de 2011 31 / 39 Federico Raimondo (OC2)
SIMD/SSE
32 / 39
Patrones de operaciones
Empaquetado/Desempaquetado
Patrones de operaciones
Mscaras a
Y en punto otante?
Motivacin o
UNPCKHPD UNPCKHPS UNPCKLPD UNPCKLPS Y no hay pack? Rta: No Esta operacin se llama blit y consiste en pegar un elemento sobre un o fondo, reemplazando el color de blit (magenta en este caso) por el fondo correspondiente. + =
SIMD/SSE
33 / 39
SIMD/SSE
34 / 39
Patrones de operaciones
Mscaras a
Patrones de operaciones
Mscaras a
Comparaciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 mov mov mov mov . ciclo : cmp je mov mov . sigo : inc inc loop esi edi ecx al , , SRC , DST , TAMANO BLIT
5 3
2 6
2 2
6 7
6 6
8 2
4 3
2 2
XMM0 XMM1
Y con SSE? Tengo 16 elementos en un registro y tengo que cambiar slo los que o coinciden con el color de blit
XMM0
SIMD/SSE
35 / 39
SIMD/SSE
36 / 39
Patrones de operaciones
Mscaras a
Patrones de operaciones
Mscaras a
Comparaciones
El mximo de un registro a
Puedo comparar un registro con otro y obtengo una mscara: a
2 2
xmm2 , xmm2 , xmm3 , xmm2 , xmm3 , xmm2 , xmm0 xmm1 xmm2 xmm0 xmm1 xmm3
6 7
6 6
8 2
4 3
2 2
XMM0 XMM1
XMM0 XMM1
XMM0
5 6 2 7 6 8 4 2
XMM1
SIMD/SSE
37 / 39
SIMD/SSE
38 / 39
Patrones de operaciones
Mscaras a
Blit en SSE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 mov mov mov shr xor mov movd pxor pshufb e s i , SRC IM e d i , DST ecx , TAMANO ecx , 4 eax , e a x a l , BLIT xmm7 , e a x xmm6 , xmm6 xmm7 , xmm6 ; esi = sprite ; e d i = imagen
; Obtengo 16 e l e m e n t o s de l a
sprite
xmm1 , [ e d i ]
; Obtengo 16 e l e m e n t o s de l a imagen . ; Donde hay b l i t en l a s p r i t e , pongo l a imagen ; Tengo l o s p i x e l e s de l a imagen que s i r v e n ; Donde no hay b l i t , pongo l a s p r i t e ; Tengo l o s p i x e l e s de l a s p r i t e que s i r v e n ; En xmm5 t e n g o l o s p i x e l e s mezclados
pand
xmm5 , xmm1
SIMD/SSE
39 / 39