
- •Нижегородский государственный университет им. Н.И.Лобачевского
- •Содержание
- •Введение
- •Введение…
- •Введение
- •Векторные расширения. Краткий обзор
- •Введение
- •Типы данных и регистровый пул
- •Обзор основных типов операций
- •Расширенная поддержка математических функций
- •Векторизация в программах на языке высокого уровня
- •Введение
- •Способы векторизации
- •Векторизация. Используем векторизованные библиотеки
- •Векторизация. Используем ключи
- •Векторизация. Используем ключи и директивы компилятора
- •Использование директивы SIMD…
- •Использование директивы SIMD…
- •Использование директивы SIMD…
- •Использование директивы SIMD
- •Векторизация. Array Notation и Elemental Function в рамках технологии Intel Cilk Plus
- •Технология Array Notation…
- •Технология Array Notation…
- •Технология Array Notation: поддерживаемые операции…
- •Технология Array Notation: поддерживаемые операции…
- •Технология Array Notation: поддерживаемые операции
- •Технология Array Notation: принципы работы
- •Технология Array Notation: скалярное произведение
- •Технология Array Notation: динамические массивы
- •Элементарные функции…
- •Элементарные функции: способы вызова
- •Элементарные функции: ограничения
- •Векторизация. Интринсики и ассемблер
- •Использование отчетов компилятора
- •Векторизация и математические функции
- •Введение
- •Пример
- •Реализации математических функций
- •Реализации математических функций
- •Реализации математических функций. Точность
- •Векторизация и выравнивание данных
- •Выравнивание данных…
- •Выравнивание данных…
- •Выравнивание данных…
- •Выравнивание данных…
- •Выравнивание данных: использование параллелизма…
- •Выравнивание данных: использование параллелизма
- •Векторизация внешних циклов…
- •Векторизация внешних циклов…
- •Векторизация внешних циклов

Векторизация. Используем ключи и директивы компилятора
#pragma ivdep #pragma vector always #pragma vector aligned for (int i = 0; i < n; i++)
c[i] = a[i] * b[i] + a[i];
Или так:
#pragma simd #pragma vector aligned for (int i = 0; i < n; i++) c[i] = a[i] * b[i] + a[i];
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
21 |
|
|

Использование директивы SIMD…
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
22 |
|
|

Использование директивы SIMD…
vectorlength(n) – данный параметр определяет количество итераций цикла, которые могут быть выполнены независимо за одну векторную операцию
linear(var1:step1 [,var2:step2]...) – этот параметр сообщает компилятору, что переменные var инкрементируются с шагом step на каждой итерации цикла
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
23 |
|
|

Использование директивы SIMD…
reduction(oper:var1 [,var2]…) – параметр аналогичен соответствующему параметру директивы OMP, обеспечивает выполнение операции редукции для заданного списка переменных по окончании выполнения операций цикла
private(var1[, var2]...) – параметр аналогичен соответствующему параметру директивы OMP, сообщает компилятору о необходимости создания отдельного экземпляра
переменной для каждой итерации цикла. Определены также параметры firstprivate и lastprivate, позволяющие задать начальное и конечное значение переменной в рамках каждой итерации цикла
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
24 |
|
|

Использование директивы SIMD
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
25 |
|
|

Векторизация. Array Notation и Elemental Function в рамках технологии Intel Cilk Plus
Технология Intel Cilk Plus позволяет разрабатывать эффективные параллельные программы для систем с общей памятью, по сравнению с OpenMP
–упрощая обучение начинающих параллельному программированию,
–предоставляя мощные, логичные и достаточно простые средства организации параллелизма с использованием механизма логических задач.
Наряду с этим, в Cilk Plus добавлена так называемая Array Notation, что позволяет записывать вычисления в циклах как бы без самих циклов, явно показывая компилятору, что эти вычисления можно «положить» на векторную архитектуру.
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
26 |
|
|

Технология Array Notation…
C помощью выражения A[:] задается весь массив A (размер массива определяется на этапе компиляции, а значит должен быть константным)
Выражение A[start_index : length] задает отрезок массива, начиная со start_index длиной length
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
27 |
|
|

Технология Array Notation…
Выражение A[start_index : length : stride] говорит о том, что мы хотим использовать каждый stride элемент массива, начиная со start_index. Количество таких элементов должно быть равно length
Поддерживаются многомерные массивы
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
28 |
|
|

Технология Array Notation: поддерживаемые операции…
Возможно использование операторов языков C/C++:
Возможна передача массивов в качестве аргументов функции. При этом вызов функции осуществляется для каждого заданного элемента массива:
Поддерживается операция редукции для сложения, минимума, максимума и т.п.:
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
29 |
|
|

Технология Array Notation: поддерживаемые операции…
Поддерживаются условные операторы if-then-else:
Поддерживаются операции типа scatter/gather, с помощью которых можно собрать определенные элементы одного массива в другой (собрать разрозненные элементы в один непрерывный массив), и наоборот:
Нижний Новгород, 2015 г. |
Векторные расширения Intel Xeon Phi |
30 |
|
|