Simd/Sse: Ejemplo

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

1

Introduccin al procesamiento vectorial o SIMD SSE Tipos de datos Registros Operaciones

SIMD/SSE
Federico Raimondo
OC2 2

Patrones de operaciones Saturacin o Empaquetado/Desempaquetado Mscaras a

1er Cuatrimestre de 2011

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

1 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

2 / 39

Introduccin al procesamiento vectorial o

SIMD

Introduccin al procesamiento vectorial o

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.

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

3 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

4 / 39

Introduccin al procesamiento vectorial o

SIMD

Introduccin al procesamiento vectorial o

SIMD

Suma de imgenes a

Single Instruction Multiple Data


En C:

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

; ; ; ;

Muevo 16 e l e m e n t o s Sumo 16 e l e m e n t o s Muevo 16 e l e m e n t o s Avanzo 16 p o s i c i o n e s

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

5 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

6 / 39

Introduccin al procesamiento vectorial o

SIMD

Introduccin al procesamiento vectorial o

SIMD

Single Instruction Multiple Data

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

paddw xmm0, xmm1


; ; ; ; Muevo 16 e l e m e n t o s Sumo 16 e l e m e n t o s Muevo 16 e l e m e n t o s Avanzo 16 p o s i c i o n e s

P1+Q1

P2+Q2

P3+Q3

P4+Q4

P5+Q5

P6+Q6

P7+Q7

P8+Q8

XMM0

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

7 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

8 / 39

Introduccin al procesamiento vectorial o

SSE

Introduccin al procesamiento vectorial o

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

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

9 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

10 / 39

Introduccin al procesamiento vectorial o

Registros

Introduccin al procesamiento vectorial o

Registros

Registros (en memoria)


B0
0

B1

B2

B3

B4

B5

B6

B7

B8

B9

B10 B11 B12 B13 B14 B15


127

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

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

11 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

12 / 39

Introduccin al procesamiento vectorial o

Registros

Introduccin al procesamiento vectorial o

Registros

Registros (en el manual de Intel)


B15 B14 B13 B12 B11 B10 B9
127

Shift Right Byte (PSRLDQ)


B6 B5 B4 B3 B2 B1 B0
0

B8

B7

Dibujado como en el manual:


D3 D2 D1 D0
0 127

W7
127

W6

W5

W4

W3

W2

W1

W0
0

0
127

D3

D2

D1
0

Dibujado como en la memoria:


D3
127

D2

D1

D0
0

D0
0

D1

D2

D3
127

0 Q1
127

D0

D1

D2
127

Q0
0

DQ0
127 0

Ojo con la forma de visualizar los registros

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

13 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

14 / 39

Introduccin al procesamiento vectorial o

Operaciones

Introduccin al procesamiento vectorial o

Operaciones

Todas las operaciones de enteros comienzan con P. Operaciones disponibles:


Movimiento de datos. Conversin de datos. o Lgicas. o Aritmticas. e Comparacin. o PADDB: PADDW: PADDD: PADDQ: Suma Suma Suma Suma de de de de bytes. words. double words. quad words.

Las operaciones de punto otante no tienen prejo.


ADDPS: Suma de single. ADDPD: Suma de double.

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.

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

15 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

16 / 39

Introduccin al procesamiento vectorial o

Operaciones

Patrones de operaciones

Ejemplo
1

Introduccin al procesamiento vectorial o SIMD SSE

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

Tipos de datos Registros


; ; ; ; Muevo 16 e l e m e n t o s Sumo 16 e l e m e n t o s Muevo 16 e l e m e n t o s Avanzo 16 p o s i c i o n e s

Operaciones
2

Patrones de operaciones Saturacin o Empaquetado/Desempaquetado Mscaras a

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

17 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

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

i n t s a t ( i n t elem ) { i f ( e l e m > MAX) { e l e m = MAX; } e l s e i f ( e l e m < MIN) { e l e m = MIN ; } r e t u r n elem ; }

0xA0 + 0x64 = 0x104 +


0xA0 0x104 = 0x04 0x64

=
sat(0x104) = 0xFF

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

19 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

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

sat(0xFF + 0xFF) - 0xFF = 0x00

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

21 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

22 / 39

Patrones de operaciones

Empaquetado/Desempaquetado

Patrones de operaciones

Empaquetado/Desempaquetado

Ejemplo:

Ejemplo:

+
0xFF 0xFF

0xFF

(0xFF
0xFF

)
0xFF

0xFF + 0xFF = 0xFE (0x1FE) 0xFE - 0xFF = 0xFF

0xFF 0xFF = 0x01 (0xFE01) 0x01 - 0xFF = 0x02

0x02 0xFF
Federico Raimondo (OC2) SIMD/SSE 1er Cuatrimestre de 2011 23 / 39

No nos queda otra que usar un registro mas grande


Federico Raimondo (OC2) SIMD/SSE 1er Cuatrimestre de 2011 24 / 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

punpcklwd xmm0, xmm1


0 6 6 0 8 8 0 4

;Unpack parte baja


4 0 2 2

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

PUNPCKLBW PUNPCKLWD PUNPCKLDQ PUNPCKLQDQ

punpckhwd xmm2, xmm1


0 5 5 0 2 2 0 2

;Unpack parte alta


2 0 6 6

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

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

27 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

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

packusdw xmm0, xmm2


5 2 2 6

;Pack: XMM0 = Baja XMM2 = Alta


6 8 4 2

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

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

29 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

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 0xFF = 0xFE01 0xFE01 - 0xFF = 0xFD02 sat(0xFD02) = 0xFF

add loop packuswb

e s i , 16 . ciclo xmm0 , xmm1 ; 16 e l e m e n t o s s a t u r a d o s

0xFF
Federico Raimondo (OC2) SIMD/SSE 1er Cuatrimestre de 2011 31 / 39 Federico Raimondo (OC2)

No nos queda otra que usar un registro mas grande

SIMD/SSE

1er Cuatrimestre de 2011

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. + =

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

33 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

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

Puedo comparar un registro con otro y obtengo una mscara: a


; Comparo e l e l e m e n t o con e l c o l o r d e l b l i t ; S i s o n i g u a l e s , no hago nada ; S i s o n d i s t i n t o s , pego e l p i x e l en e l e l e m e n t o

al , [ e s i ] . sigo bl , [ e s i ] [ edi ] , bl esi edi . ciclo

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

pcmpeqw xmm0, xmm1


00 00 FF 00 FF

;Comparo por igualdad


00 00 FF

XMM0

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

35 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

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

Puedo comparar un registro con otro y obtengo una mscara: a


5 5 3 2 6 2 2 6 7 6 6 8 2 4 3 2 2 2 6
1 2 3 4 5 6 movdqa pcmpgtw modqa pand pandn por

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

; Comparo p o r mayor ;XMM2 = m a y o r e s de XMM0 ;XMM3 = m a y o r e s de XMM1

pcmpgtw xmm0, xmm1


FF 00 00 00 00

;Comparo por mayor


FF FF 00

XMM0
5 6 2 7 6 8 4 2

XMM1

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

37 / 39

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

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

; R e p l i c o e l b y t e 0 en t o d o e l r e g i s t r o ; UNICO USO ACEPTABLE DE PSHUFB/PSHUFD

. ciclo : movdqu movdqa pcmpeqb movdqa movdqu

xmm0 , xmm6 , xmm6 , xmm5 ,

[ esi ] xmm7 xmm0 xmm6

; Obtengo 16 e l e m e n t o s de l a

sprite

; En xmm6 t e n g o FF donde hay b l i t

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

pandn por movdqu add add loop

xmm6 , xmm0 xmm5 , xmm6 [ e d i ] , xmm5 e s i , 16 e d i , 16 . ciclo

Federico Raimondo (OC2)

SIMD/SSE

1er Cuatrimestre de 2011

39 / 39

También podría gustarte