78
SIMD параллелизм

SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

SIMD параллелизм

Page 2: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

План

• Классификации параллелизма и параллельных ЭВМ

• ЭВМ с SIMD параллелизмом

• SIMD расширения в современных процессорах

• ведение в программирование SIMD расширений

Page 3: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Классификации параллелизма и

параллельных ЭВМ

Page 4: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы
Page 5: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы
Page 6: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Классификация Флинна

• SISD; • SIMD:

–векторные, матричные, –ассоциативные, систолические, –VLIW;

• MISD; • MIMD.

Page 7: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

ЭВМ с SIMD параллелизмом

Page 8: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

SIMD архитектуры

–векторные,

–матричные,

–ассоциативные,

–систолические,

–VLIW.

Page 9: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Векторная ЭВМ с векторным АЛУ

Page 10: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Векторная ЭВМ с несколькими АЛУ

Page 11: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Выполнение векторных операций при 2-х конвейерах

Page 12: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Векторные системы • Память-память:

– CDC STAR-100, Cyber-200, TI ASC,

– возможность обработки больших векторов,

– больше время запуска конвейера – не менее 100 тактов);

– Системы память-память прекратили выпускать в 1980-х г.г.

• Регистр-регистр:

– CRAY Y-MP, C-90, Fujitsu, Hitachi, NEC SX-3

– маленькая длина векторов (длинные вектора разбиваются на сегменты равного размера).

Page 13: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Сцепление векторов

CRAY-1 время цикла - 12.5 нс. 80 MFLOPS. При сцеплении 3-х конвейеров – 240 MFLOPS.

Page 14: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Earth Simulator

• 640 узлов

• 8 векторных процессоров в узле

• 16 ГБ ОЗУ в узле

• 700 ТБ внешняя память

• LINPACK 35.86 TFLOPS

• № 1 в TOP500 в 2002-2004 г.г.

Page 15: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Модель матричной системы

Page 16: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Как выполняются команды?

• Управляющие команды

• Скалярные арифметические

• Векторные арифметические

Page 17: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Массив ПЭ типа ПЭ-ПЭ

Page 18: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Массив ПЭ типа ПЭ-память

Page 19: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Сеть межсоединений

Возможные топологии:

• Полная связность

• Звезда

• Кольцо

• Гиперкуб

• Решетка 1-3D

• Тор 1-3D

Page 20: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Системная конфигурация ILLIAC IV

Разрядность: 64 бит Производительность: 1GFLOPS -> 200MFLOPS Тактовая частота: 13 МГц Внешняя память: 80МБ

Page 21: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Связи в матрице ПЭ ILLIAC IV

Page 22: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Структура ПЭ ILLIAC IV

Память: 2К слов

Page 23: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Connection Machine

• 1983 г.

• 65536 узлов

• 1 ИС содержит 16 процессорных элементов

• Топология соединений: – Внутри ИС – полная связность

– Гиперкуб

Page 24: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

SIMD расширения в современных процессорах

Page 25: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

SIMD расширения

• Цель – повышение скорости обработки потоковых данных.

• Принцип – одновременная обработка нескольких элементов данных в одной команде.

Page 26: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Данные для скалярной команды

Page 27: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Данные для векторной команды

Page 28: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

?

Для каких задач можно применить SIMD

расширения?

Page 29: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Примеры задач

• локальная фильтрация сигналов;

• обработка аудиоданных;

• обработка графики;

• локальная фильтрация изображений;

• моделирование клеточного автомата;

• операции с векторами и матрицами.

Page 30: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Пример. Увеличение элементов массива на N

(Обычная скалярная версия)

Цикл для каждого элемента b в массиве

• b = b + N

Page 31: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Пример. Увеличение элементов массива на N

Обычная скалярная версия - детализация

Цикл для каждого элемента в массиве

• загрузить один элемент в регистр

• прибавить N к регистру

• сохранить результат из регистра в память

Page 32: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Пример. Увеличение элементов массива на N

Версия с SIMD расширениями.

Цикл для каждых 4 элементов в массиве

• загрузить 4 элемента в регистр

• прибавить N к каждому из 4-х элементов

• сохранить результат из регистра в память

Page 33: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

SIMD расширения на x86/x86_64

• MMX

• 3DNow

• SSE

• SSE2

• SSE3

• SSE4

• AVX

Page 34: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Расширение MMX

8 64-битных регистров

57 инструкций

Арифметика с

Насыщением.

Page 35: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Регистры MMX

Page 36: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Регистры MMX

Page 37: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Регистры MMX

Page 38: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Регистры MMX

Page 39: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Арифметика с насыщением обычная арифметика

x=254; x+=3; // результат x=1

арифметика с насыщением

x=254; x+=3; // результат x=255

Page 40: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Предельные значения в арифметике с насыщением

Page 41: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Группы инструкций MMX

• Арифметические (padd[s|us][b|w|d], psub, pmul, pmad)

• Логические (pand, pandn, por, pxor) • Сравнение (pcmpeq, pcmpgt[b|w|d]) • Сдвиг (psllw, pslld, psrl, psrad) • Перемещение данных (movd, movq) • Распаковка • Преобразование формата (packsswb,

packssdw) • Прочее (emms)

Page 42: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Арифметическая команда

PMADDWD

Page 43: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Команда сравнения

PCMPEQB

Page 44: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Преобразование типов

Упаковка в более маленький тип Распаковка в более большой тип

Page 45: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Команда распаковки

PUNPCKLBW

Page 46: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Команда распаковки

PUNPCKHBW

Page 47: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Команда распаковки

PUNPCKLDQ

Page 48: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Ограничения MMX

• Нет чисел с плавающей запятой.

• Регистры MMX совмещены с регистрами математического сопроцессора. Нельзя одновременно использовать MMX и сопроцессор.

Page 49: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

SIMD расширения x86

• MMX

• 3DNow

• SSE

• SSE2

• SSE3

• AVX

Page 50: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Расширение SSE Pentium III

8 128-битных регистров.

Операции над

4 числами float (32).

2 числами llint(64)

Векторные и скалярные

операции.

Page 51: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Группы FP инструкций SSE • Арифметические (ADDPS, ADDSS, SUBPS,

DIVPS, SQRTPS, RSQRTPS, MAXPS, MINPS); • Логические (ANDPS, XORPS); • Сравнение (CMPPS, CMPSS); • Сдвиг; • Перемещение данных (MOVUPS,

MOVAPS, MOVSS); • Перестановка, и распаковка элементов

(SHUFPS); • Преобразование формата.

Page 52: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Команда FP арифметики

ADDPS/SUBPS

Page 53: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Скалярная команда FP

ADDSS/SUBSS

Page 54: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Расширение SSE2

Pentium 4

Возможна совместная работа с сопроцессором

128-битный регистр используется как:

2 числа double 4 числа float

2, 4, 8, 16 целых чисел

Page 55: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Расширение SSE3

Pentium 4 с ядром Prescott

Горизонтальная обработка (сложение и вычитание значений внутри одного регистра)

Page 56: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Расширение AVX

Команды с двумя источниками и приемником

Page 57: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Введение в программирование SIMD расширений

Page 58: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Вопросы, возникающие при программировании с SIMD

• проверка наличия SIMD расширений;

• выбор способа, как использовать SIMD;

• выравнивание данных.

Факторы, влияющие на эффективность:

1) эффективное представление данных;

2) устранение условных операторов.

Page 59: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Проверка наличия SIMD

mov eax, 1 ; request version info

cpuid ; supported since Pentium

test edx, 00800000h ;bit 23

; 02000000h (bit 25) SSE

; 04000000h (bit 26) SSE2

jnz HasMMX

Page 60: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Как использовать SIMD из C?

• ассемблерные вставки с SIMD инструкциями процессоров;

• модули на ассемблере;

• оптимизирующие компиляторы; (gcc –O3)

• SIMD intrinsics;

• математические библиотеки.

Page 61: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Использование ассемблерных вставок

struct Vec4{

float x, y, z, w;

};

Vec4 A1( const Vector4 &Op_A, const Vector4 &Op_B ){

Vector4 Ret_Vector;

// ЗДЕСЬ БУДЕТ ВСТАВКА

return Ret_Vector;

}

Page 62: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Использование ассемблерных вставок

__asm {

MOV EAX Op_A

MOV EBX, Op_B

// Move unaligned v-s to SSE

MOVUPS XMM0, [EAX]

MOVUPS XMM1, [EBX]

ADDPS XMM0, XMM1

MOVUPS [Ret_Vector], XMM0

}

Page 63: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Выравнивание данных

GCC:

double a[N] __attribute__((aligned(16)));

MSVC:

__declspec(align(16)) float m_fArray[ARRAY_SIZE];

m_fArray = (float*) _aligned_malloc(ARRAY_SIZE * sizeof(float), 16);

_aligned_free(m_fArray);

Page 64: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Использование SIMD intrinsics

Page 65: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Терминология

• Intrinsic – известная компилятору функция, которая преобразуется в одну или несколько инструкций процессора.

• В intrinsic не надо работать с выделением регистров и вычислением адресов данных, как в ассемблерных вставках.

Page 66: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

?

• Что эффективнее, обычная функция или intrinsic?

• Что эффективнее, ассемблерная вставка или intrinsic?

Page 67: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

SIMD Intrinsics

• Встроенные функции потокового расширения.

• Цель – обеспечить работу с SIMD на языке высокого уровня

Page 68: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Типы данных Intrinsics _m64 - 64-бит (регистр MMX):

1 * 64-битное целое,

2 * 32-битных целых,

4 * 16-битных целых,

8 * 8-битных целых

_m128 - 128-бит (регистр XMM):

4 * 32-битных вещественных (SSE),

2 * 64-битных вещественных (SSE2)

Page 69: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Группы функций в Intrinsics

• Выделение памяти

• Арифметические функции

• Логические функции

• Функции сравнения

Page 70: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Функции выделения памяти

#include <xmmintrin.h>

float *x; // массив для обработки с помощью SSE

x=(float)_mm_malloc(N*sizeof(float),16);

// : здесь обработка :

_mm_free(x);

Page 71: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Арифметические функции

_mm_add_ss

_mm_add_ps

_mm_add_ss

_mm_add_ps

_mm_mul_ps

_mm_div_ps

_mm_sqrt_ps

_mm_min_ps

_mm_max_ps

Page 72: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

__m128 _mm_add_ps

__m128 _mm_add_ps(__m128 a , __m128 b );

r0 := a0 + b0

r1 := a1 + b1

r2 := a2 + b2

r3 := a3 + b3

Page 73: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

__m128 _mm_add_ps

__m128 _mm_sub_ps(__m128 a , __m128 b );

r0 := a0 - b0

r1 := a1 - b1

r2 := a2 - b2

r3 := a3 - b3

Page 74: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Логические функции

_mm_and_ps

_mm_or_ps

_mm_xor_ps

_mm_andnot_ps

Page 75: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Расширение SSE скалярное произведение векторов

float inner1(float *x, float* y, int n) { float s = 0; for(int i=0; i<n; ++i) s += x[i]*y[i]; return s; }

Вычисление скалярного произведения векторов x и y размера n.

Page 76: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Расширение SSE скалярное произведение векторов

#include <xmmintrin.h> float inner2( float* x, float* y, int n) { __m128 *xx, *yy; __m128 p,s; xx = (__m128*)x; yy = (__m128*)y; s = _mm_set_ps1(0); for(int i=0; i<n/4; ++i) { p = _mm_mul_ps(xx[i],yy[i]); s = _mm_add_ps(s,p); }

p = _mm_movehl_ps(p,s); s = _mm_add_ps(s,p); p = _mm_shuffle_ps(s,s,1); s = _mm_add_ss(s,p); float sum; _mm_store_ss(&sum,s); return sum; }

Подключение заголовочного файла xmmintrin.h, содержащего объявления

встроенных функций SSE.

x

y

n = 8

p

s

xx

yy

0 0 0 0

s

a = x[0]*y[0]+x[4]*y[4] b = x[1]*y[1]+x[5]*y[5] c = x[2]*y[2]+x[6]*y[6] d = x[3]*y[3]+x[7]*y[7]

a b c d

p c d

* * * *

=

* * * *

=

+ + + +

a+c b+d

b+d

a+c b+d

b+d

sum

_mm_set_ps1(0) устанавливает

четыре значения в одно - 0

_mm_mul_ps (_mm_add_ps) –

покомпонентное умножение (сложение)

значений типа __m128

p=_mm_movehl_ps(p,s) – перемещение

двух старших значений s в младшие p

p=_mm_shuffle_ps(s,p) – запись в

младшую позицию p второго значения s

s=_mm_add_ss(s,p) – скалярное

умножение, запись в младшую позицию

s суммы младших значений s и p

_mm_store_ss(&sum,s) – запись в

переменную sum младшего значения s

Page 77: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

const int N = 10000000; //10M int main() { float *x, *y, s; x=(float*)_mm_malloc(N*sizeof(float),16); y=(float*)_mm_malloc(N*sizeof(float),16); for(int i=0; i<N; ++i) { x[i] = 10.0l*i/N; y[i] = 10.0l*(N-i-1)/N; } s = inner1(x,y,N); printf("Result: %f\n",s); s = inner2(x,y,N); printf("Result: %f\n",s); _mm_free(x); _mm_free(y); return 0; }

Расширение SSE скалярное произведение векторов

Выделение памяти под массивы x, y с выравниваем в 16 байт

Инициализация массивов x, y

Вычисление скалярного произведения без использования SEE-расширений

С использованием SEE-расширений

Освобождение памяти

Page 78: SIMD расширения в современных процессорахssd.sscc.ru/.../content/attach/310/09.simd.20131113.1.pdf · 2013-11-16 · Векторные системы

Ссылки

1. Встроенные функции потокового SIMD расширения http://www.ccfit.nsu.ru/~kireev/lab4/lab4intr.htm

2. Streaming SIMD Extensions (SSE) http://msdn.microsoft.com/ru-ru/library/t467de55.aspx

3. Цилькер Б.Я., Орлов С.А. - Организация ЭВМ и систем. - М. - Питер. - 2006