SSE - Streaming SIMD Extension
Operacje

Rozkazy SSE mogą wykonywać działania arytmetyczne na wektorach liczb zmiennoprzecinkowych na dwa sposoby:

  1. packed (równoległe) — wykonując równocześnie dwa niezależne działania zmiennoprzecinkowe na odpowiadających sobie elementach wektorów;
  2. scalar (skalarne) — wykonując działanie tylko na pierwszych elementach wektorów.

Przykład – mnożenie dwóch wektorów (rozkazem MULPS xmm0, xmm1):

+-------+-------+-------+-------+
|   x3  |   x2  |   x1  |   x0  | xmm0
+-------+-------+-------+-------+
    *       *       *       *
+-------+-------+-------+-------+
|   y3  |   y2  |   y1  |   y0  | xmm1
+-------+-------+-------+-------+
    =       =       =       =
+-------+-------+-------+-------+
| x3*y3 | x2*y2 | x1*y1 | x0*y0 | xmm0
+-------+-------+-------+-------+

Przykład – mnożenie pierwszych elementów wektorów (rozkazem MULSS xmm0, xmm1 ):

+-------+-------+-------+-------+
|   x3  |   x2  |   x1  |   x0  | xmm0
+-------+-------+-------+-------+
                            *
+-------+-------+-------+-------+
|   y3  |   y2  |   y1  |   y0  | xmm1
+-------+-------+-------+-------+
    =       =       =       =
+-------+-------+-------+-------+
|   x3  |   x2  |   x1  | x0*y0 | xmm0
+-------+-------+-------+-------+

Przykład – mnożenie dwóch wektorów (rozkazem MULPD xmm0, xmm1):

+-------+-------+-------+-------+
|      x1        |      x0      | xmm0
+-------+-------+-------+-------+
    *       *       *       *
+-------+-------+-------+-------+
|       y1      |       y0      | xmm1
+-------+-------+-------+-------+
    =       =       =       =
+-------+-------+-------+-------+
|     x1*y1     |     x0*y0     | xmm0
+-------+-------+-------+-------+

Tomasz Kapela, Kraków 2011-2020