Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
intel-xeon-phi / 05_Lecture_VectorExtensions.pptx
Скачиваний:
35
Добавлен:
11.03.2016
Размер:
533.11 Кб
Скачать

Векторизация. Используем ключи и директивы компилятора

#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

 

 

Соседние файлы в папке intel-xeon-phi