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

Введение

Отдельно необходимо обсудить важный вопрос о сочетании векторизации и математических функций, вызываемых в циклах, так как именно на вычисление этих функций приходится основное время работы значительного числа прикладных программ.

Ранее мы установили факт наличия в наборе команд Intel Xeon Phi специальных инструкций для вычисления четырех математических функций.

Как быть с остальными функциями?

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

41

 

 

Пример

void test(float * a, float * b, float * c, int n)

{

#pragma simd

#pragma vector aligned

for (int i = 0; i < n; i++)

c[i] = a[i] * b[i] + sinf(a[i]);

}

Отчет: цикл векторизован.

Вопрос: как векторизуется синус?

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

42

 

 

Реализации математических функций

LibM – модуль компилятора.

ICC содержит быстрый LibM, оптимизированный под современные архитектуры.

SVML (short vector math library) – модуль компилятора ICC.

Используется, если цикл векторизован.

Мат. функции реализованы с использованием SIMD, вычисляются для короткого вектора аргументов. Длина вектора соответствует длине xmm, ymm, zmm регистра.

VML (vector math library) – часть библиотеки MKL. Используется при явном вызове функций (vsSin, vdSin…). Вычисляет значение функции в N точках.

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

43

 

 

Реализации математических функций

LibM (см. math.h). Перекомпиляция ICC в программах, активно использующих мат. функции, часто приводит к ускорению расчетов.

SVML vs. VML

VML может выигрывать у SVML на больших длинах, но не всегда (эффект существенно зависит от архитектуры).

for (int i = 0; i < n; i++)

c[i] = a[i] * b[i] + sinf(a[i]);

Не векторизован: LibM Векторизован: SVML VML: vsSin(n, a, c);

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

44

 

 

Реализации математических функций. Точность

Настройки, влияющие на точность (ICC):

-fp-model

-fimf-domain-exclusion

-fimf-precision

Настройки, влияющие на точность (MKL/VML):

Режимы High Accuracy (HA), Low Accuracy (LA), Enhanced Performance (EP).

Могут быть настроены для конкретного вызова.

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

45

 

 

Векторизация и выравнивание данных

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

46

 

 

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

При работе с Intel Xeon Phi необходимо выравнивать данные по границе в 64 Б.

Выравнивание статических массивов:

Выравнивание динамических массивов:

Помимо выделения выровненных данных в программе, для эффектной векторизации вашего кода необходимо сообщить компилятору о выравнивании в том месте кода, где эти данные непосредственно используются.

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

47

 

 

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

Допустим, используется цикл, который обращается к массиву A как A[i], и к массиву B как B[i+n1]. Здесь i – это счетчик цикла.

Для того чтобы компилятор использовал команды работы

свыровненными данными, ему необходимо сообщить:

Адрес начала массивов A и B кратен 64 байтам. Используется конструкция __assume_aligned(A, 64). В случае если массивы выделены статически, ничего дополнительно делать не надо.

Величина n1 кратна 16 (при размере типа данных в 4

байта). Эта информация может быть указана с помощью конструкции __assume(n1%16==0).

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

48

 

 

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

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

49

 

 

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

В качестве альтернативы предложенным конструкциям можно использовать директиву #pragma vector align перед телом векторизуемого цикла:

Обратите внимание, что данная директива относится ко всем массивам, используемым в рамках цикла.

Нижний Новгород, 2015 г.

Векторные расширения Intel Xeon Phi

50

 

 

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