Мастер класс Инструменты и библиотеки для

126
Мастер- класс «Инструменты и библиотеки для высокопроизводительных вычислений» НЕМНЮГИН СЕРГЕЙ АНДРЕЕВИЧ САНКТ - ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ [email protected] 1 Высокопроизводительные вычисления на Grid системах 2017

Upload: others

Post on 29-Apr-2022

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Мастер класс Инструменты и библиотеки для

Мастер-класс «Инструменты и библиотеки для высокопроизводительных вычислений»НЕМНЮГИН СЕРГЕЙ АНДРЕЕВИЧ

САНКТ -ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

[email protected]

1Высокопроизводительные вычисления на Grid системах 2017

Page 2: Мастер класс Инструменты и библиотеки для

HPC

Платформа

Модель

Алгоритмы

ПрограммированиеОптимизация

при компиляции

Оптимизация

готовой программы

Параллельные

технологии

Высокопроизводительные

библиотеки2

Page 3: Мастер класс Инструменты и библиотеки для

HPC

Алгоритмы

Библиотеки

Для систем с DM

SMP

Гибридные

Для систем с SM

Для гибридных

систем

3Высокопроизводительные вычисления на Grid системах 2017

Page 4: Мастер класс Инструменты и библиотеки для

Высокопроизводительные библиотеки

4Высокопроизводительные вычисления на Grid системах 2017

Page 5: Мастер класс Инструменты и библиотеки для

Библиотеки линейной алгебры

�ScaLAPACK – реализация LAPACK для систем с распределённой памятью (на

основе MPI).

�PLASMA – реализация LAPACK для многоядерных систем (Pthread, Linux).

�MAGMA – реализация LAPACK для гибридных архитектур (с использованием

графических ускорителей, Pthread, CUDA, Linux).

�SuperLU - 3 варианта: последовательный, параллельный для систем с общей

памятью (Pthreads, OpenMP ) и параллельный для систем с распределённой

памятью (MPI).

�PaStiX – библиотека функций для решения СЛАУ с большими разреженными

матрицами для вычислительных систем с распределённой памятью. 5

Высокопроизводительные вычисления на Grid системах 2017

Page 6: Мастер класс Инструменты и библиотеки для

Intel® Math Kernel library

6Высокопроизводительные вычисления на Grid системах 2017

Page 7: Мастер класс Инструменты и библиотеки для

Intel® Math Kernel Library (Intel® MKL) – вычислительная математическая

библиотека, содержащая хорошо оптимизированные многопоточные реализации

математических функций. Содержит BLAS, LAPACK, ScaLAPACK, солверы для

разреженных систем, быстрое преобразование Фурье, векторизованные

математические функции и т.д.

Многоплатформенная библиотека.

Поддерживаются C и Fortran.

7Высокопроизводительные вычисления на Grid системах 2017

Page 8: Мастер класс Инструменты и библиотеки для

Решение СЛАУ.

Спектральные задачи

LAPACK ScaLAPACK

Решение СЛАУ для разрежённых матриц

PARDISO ISS

Базовые векторные и матричные операции

BLAS

PBLAS

SparseBLAS

Оптимизационные

решатели

Быстрое преобразование Фурье

FFT

ClusterFFT

Поддержка решения дифференциальных

уравнений в частных производных

TT PL

Векторные библиотеки

VML

VSL

Intel® Math Kernel library

8Высокопроизводительные вычисления на Grid системах 2017

Page 9: Мастер класс Инструменты и библиотеки для

Основные операции с векторами и матрицами:

- BLAS (Basic Linear Algebra Subroutines);

- SparseBLAS (Basic Linear Algebra Subroutines);

- PBLAS (Parallel BLAS).

BLAS – оптимизированная библиотека, в которой реализованы основные операции: векторно-векторные (1 уровень), матрично-векторные (2 уровень) и матрично-матричные (3 уровень). Библиотека оптимизируется под разные архитектуры и используется в качестве «ядра» других библиотек более высокого уровня).

SparseBLAS – расширение BLAS для работы с разрежёнными векторами и матрицами.

PBLAS – параллельная реализация BLAS для вычислительных систем с распределённой памятью. Построена на основе MPI.

BLAS – Basic Linear Algebra Subroutines

9Высокопроизводительные вычисления на Grid системах 2017

Page 10: Мастер класс Инструменты и библиотеки для

Структура:

� 1 уровень: векторно-векторные (пересылки в/из памяти O(n), операции с плавающей точкой O(n));

� 2 уровень: матрично-векторные (пересылки в/из памяти O(n2), операции с плавающей точкой O(n2));

� 3 уровень: матрично-матричные (пересылки в/из памяти O(n2), операции с плавающей точкой O(n3)).

Форматы хранения матриц:

�плотный – матрица хранится в двумерном массиве;

�упакованный – используется для симметричных или треугольных матриц. Элементы матрицы хранятся последовательно, по столбцам;

�ленточный - используется для ленточных матриц. Двумерный массив хранит диагонали матрицы.

10Высокопроизводительные вычисления на Grid системах 2017

Page 11: Мастер класс Инструменты и библиотеки для

SparseBLAS

Основные операции с разрежёнными векторами и матрицами

Структура:

� 1 уровень: операции с разрежёнными векторами;

� 2 уровень: операции с разрежёнными матрицами и плотными векторами;

� 3 уровень: операции с разрежёнными и плотными матрицами.

Разнообразные форматы хранения матриц.

Вспомогательные процедуры для работы с разреженными матрицами.

11Высокопроизводительные вычисления на Grid системах 2017

Page 12: Мастер класс Инструменты и библиотеки для

Модуль линейной алгебры (решение систем линейных алгебраических уравнений, решение спектральных задач). Включает следующие компоненты:

- LAPACK (Linear Algebra PACKage);

-- ScaLAPACK.

LAPACK содержит подпрограммы решения систем линейных алгебраических уравнений, решения спектральных задач для матриц (вычисления собственных значений и собственных векторов), факторизации матриц разного вида (LU, QR, Холецкого, Шура, сингулярного и других) и т.д. Процедуры предназначены для работы с хорошо заполненными и ленточными матрицами, вещественными и комплексными, в форматах с простой и двойной точностью (www.netlib.org/lapack).

ScaLAPACK – параллельная библиотека подпрограмм линейной алгебры, реализованная для систем с распределённой памятью (www.netlib.org/scalapack).

LAPACK – Linear Algebra PACKage

12Высокопроизводительные вычисления на Grid системах 2017

Page 13: Мастер класс Инструменты и библиотеки для

Структура:

� системы линейных алгебраических уравнений: факторизация матриц, решение систем линейных алгебраических уравнений, оценка обусловленности, уточнение решения и оценка его погрешности, обращение матриц;

� решение спектральных задач для симметричных и несимметричных матриц, метод наименьших квадратов: ортогональные разложения (QR, LQ), сингулярные разложения, линейный метод наименьших квадратов, обобщённый метод наименьших квадратов;

� вспомогательные процедуры.

13Высокопроизводительные вычисления на Grid системах 2017

Page 14: Мастер класс Инструменты и библиотеки для

Модуль линейной алгебры для разрежённых матриц:

- PARDISO (PARallel DIrect SOlver);

- итерационные солверы для разрежённых матриц.

PARDISO – потокобезопасная, эффективная библиотека, предназначенная для решения систем линейных алгебраических уравнений с большими разрежёнными матрицами, как симметричными, так и несимметричными (www.pardiso-project.org). Подпрограммы библиотеки реализованы как для систем с общей, так и с распределённой памятью.

Солверы для разреженных систем

14Высокопроизводительные вычисления на Grid системах 2017

Page 15: Мастер класс Инструменты и библиотеки для

SS – Sparse Solvers

Солверы для разреженных систем

Прямые солверы

PARDISO (PARallel DIrect Solver) – параллельный прямой солвер.

DSS (Direct Sparse Solver) – солвер разреженных систем, прямой метод.

Итерационные солверы

CG (Conjugate Gradients) – метод сопряжённых градиентов.

FGMRES (Generalized Minimal RESidual) – метод обобщённых минимальных невязок.

Предобуславливатели

ILUO и ILUT (Incomplete LU).15

Высокопроизводительные вычисления на Grid системах 2017

Page 16: Мастер класс Инструменты и библиотеки для

VML – Vector Mathematical Library

Векторизованные математические функции.

Структура

Вещественные функции (неполная выборка):

Тригонометри

ческие

Гиперболиче

ские

Степени

и корни

Экспоненциа

льные,

логарифмиче

ские

Спецфунк

ции

Арифметиче

ские

Округле

ние

Sin Sinh Pow2o3 Exp Erf Add Floor

Cos Cosh Pow3o2 Ln Erfc Sub Cell

Tan Tanh Pow Log10 ErfInv Sqr Trunc

Asin Asinh Powx Exm1p ErfcInv Mul Round

Acos Acosh Sqrt Log1p TGamma Abs NearbyInt

Atan Atanh InvSqrt LGamma LinearFrac Rint

16Высокопроизводительные вычисления на Grid системах 2017

Page 17: Мастер класс Инструменты и библиотеки для

Комплексные функции (неполная выборка):

Тригонометрические Гиперболические Степени и

корни

Экспоненциальные,

логарифмические

Арифметические

Sin Sinh Pow Exp Add

Cos Cosh Powx Ln Sub

Tan Tanh Sqrt Log10 Div

Asin Asinh Mul

Acos Acosh Abs

Atan Atanh Conj

17Высокопроизводительные вычисления на Grid системах 2017

Page 18: Мастер класс Инструменты и библиотеки для

Форматы

Вещественный и комплексный, с простой и двойной точностью.

Режимы точности и производительности

Повышенная точность (HA – High Accuracy). Правильное округление выполняется более чем в 99% случаев. Самый медленный режим.

Пониженная точность (LA – Low Accuracy). Неправильными могут быть до двух младших (наименее значимых) разрядов. Производительность, по сравнению с режимом высокой точности выше на 30-50%.

Режим улучшенной производительности (EP – Enhanced Performance). Неправильными могут быть до половины двоичных разрядов. Производительность, по сравнению с режимом низкой точности выше на 30-50%.

Библиотека поддерживает динамическое управление точностью.

18Высокопроизводительные вычисления на Grid системах 2017

Page 19: Мастер класс Инструменты и библиотеки для

Формат вызова

Вещественный и комплексный, с простой и двойной точностью.

v(s, d)Exp(n, input_array, output_array)

Функции VML могут вызываться в режиме in-place, когда входной и выходной массивы занимают одно и то же положение в памяти.

Изменение режима точности

Вызовом

vmlSetMode(VML_EP)

19Высокопроизводительные вычисления на Grid системах 2017

Page 20: Мастер класс Инструменты и библиотеки для

VSL – Vector Statistical Library

Векторизованные функции генерации псевдо/квазислучайных чисел, статистика.

СтруктураГенераторы случайных чисел

(равномерное распределение)

Генераторы псевдослучайных чисел

(неравномерное распределение)

Статистика

Псевдослучайные Квазислучайные Непрерывные Дискретные

Мультипликативный

конгруэнтный 59-

разрядный

Соболя Равномерное Равномерное Центральные и

нецентральные моменты

до 4-го порядка

включительно

Мультипликативный

конгруэнтный 31-

разрядный

Нидеррайтера Нормальное Бернулли Эксцесс, асимметрия

На сдвиговом

регистре с обратной

связью

Экспоненциальное Биномиальное Квантили, порядковые

статистики

Mersenne Twister

19937

Коши Гипергеометрическое Матрицы ковариации и

корреляции

Mersenne Twister 2203

(6024 потока)

Бета Пуассона

20Высокопроизводительные вычисления на Grid системах 2017

Page 21: Мастер класс Инструменты и библиотеки для

Генераторы случайных чисел

(равномерное распределение)

Генераторы псевдослучайных чисел

(неравномерное распределение)

Статистика

Псевдослучайные Квазислучайные Непрерывные Дискретные

Mersenne Twister

19937 – SSE-версия

Вейбулла Геометрическое Квантили для потоковых

данных

Генератор

Wichmann-Hill

(273 потока)

Релея Отрицательное

биномиальное

Робастная оценка

матрицы ковариации

Логнормальное Определение выбросов

Гамбела Параметризация

матрицы корреляции

Гамма Поддержка

пропущенных значений

21Высокопроизводительные вычисления на Grid системах 2017

Page 22: Мастер класс Инструменты и библиотеки для

Генераторы VSL, модель использования

Заголовочный файл

#include ”mkl_vsl.h”

Инициализация

status = vslNewStream(&stream, VSL_BRNG_MT19937, SEED)

Генерация псевдо(квази)случайных значений

status = vdRngUniform(method, stream, vector_size, r, 0.0, 1.0)

Деинициализация

status = vslDeleteStream(&stream)

22Высокопроизводительные вычисления на Grid системах 2017

Page 23: Мастер класс Инструменты и библиотеки для

Статистика, модель использования

Заголовочный файл

#include ”mkl_vsl.h”

Инициализация

status = vsldSSNewTask(&task, &p, &n, &x_storage, x, w, indices)

Установка параметров

status = vsldSSEditTask(task, VSL_SS_ED_MEAN, mean)

Вычисления

status = vsldSSCompute(task, VSL_SS_MEAN, VSL_SS_METHOD_1PASS)

Деинициализация

status = vslDeleteTask(&task)23

Высокопроизводительные вычисления на Grid системах 2017

Page 24: Мастер класс Инструменты и библиотеки для

FFT – Fast Fourier Transform

Быстрое преобразование Фурье

� Размерность: 1, 2, 3 и более.

� Совместимость с FFTW (поддерживаются соответствующие интерфейсы).

� Поддержка многопоточности, архитектур SMP и кластерных.

� Поддержка преобразований со смешанным основанием.

� Реализация – на C и Fortran 95.

ClusterFFT – кластерная реализация библиотеки быстрого преобразования Фурье.

24Высокопроизводительные вычисления на Grid системах 2017

Page 25: Мастер класс Инструменты и библиотеки для

Модель использования

Создание дескриптора

Status = DftiCreateDescriptor(MDH, …)

Зарегистрировать дескриптор

Status = DftiCommitDescriptor(MDH)

Выполнить преобразование

Status = DftiComputeForward(MDH, X)

Деинициализация (не обязательна)

25Высокопроизводительные вычисления на Grid системах 2017

Page 26: Мастер класс Инструменты и библиотеки для

Cluster FFT

Для систем с распределённой памятью.

Реализован с помощью MPI и BLACS.

Поддерживается OpenMP.

Для использования требует базовых навыков работы с MPI.

Поддерживает FFTW.

26Высокопроизводительные вычисления на Grid системах 2017

Page 27: Мастер класс Инструменты и библиотеки для

Сплайны Тип сплайна Граничные условия Внутренние условия

Линейные 1-я производная

Квадратичные Свободные 2-я производная

Кубические Натуральные,

эрмитовы,

Бесселя, Акимы

1-я производная на

левой/правой

границах интервала

Массив узлов

Кусочно-постоянные Непрерывные

слева,

непрерывные

справа

Периодические

Определённые

пользователем

Векторизованные функции, предназначенные для фитирования данных: создание сплайнов, сплайн-интерполяция и вычисление производных, интегрирование и решение других задач.

DFL – Data Fitting Library

27Высокопроизводительные вычисления на Grid системах 2017

Page 28: Мастер класс Инструменты и библиотеки для

Poisson Library – быстрое решение уравнений Гельмгольца, Пуассона, Лапласа с разделяемыми переменными.

Функции интерфейса для тригонометрического преобразования.

Солверы для уравнений в частных производных

28Высокопроизводительные вычисления на Grid системах 2017

Page 29: Мастер класс Инструменты и библиотеки для

Решение проблем МНК без условий и с граничными условиями, вычисление матрицы Якоби с помощью центральных разделённых разностей для решения проблем МНК.

Оптимизационные солверы

29Высокопроизводительные вычисления на Grid системах 2017

Page 30: Мастер класс Инструменты и библиотеки для

Получение информации об используемой версии MKL.

Управление количеством потоков.

Обработка ошибок.

Таймеры.

Определение тактовой частоты ЦП.

Выделение и освобождение памяти.

Другие задачи.

Вспомогательные функции

30Высокопроизводительные вычисления на Grid системах 2017

Page 31: Мастер класс Инструменты и библиотеки для

Как управлять многопоточностью в MKL

Переменные окружения:

OMP_NUM_THREADS

MKL_NUM_THREADS

MKL_DYNAMIC (MKL самостоятельно определяет оптимальное количество потоков) и некоторые другие.

Функции:

omp_set_num_threads()

mkl_set_num_threads()

omp_set_dynamic() и некоторые другие.

Примеры:

mkl_domain_set_num_threads(1, MKL_ALL)

mkl_domain_set_num_threads(2, MKL_BLAS)

31Высокопроизводительные вычисления на Grid системах 2017

Page 32: Мастер класс Инструменты и библиотеки для

Прежде, чем использовать Intel® Math Kernel Library, необходимо сделать следующее:

1. Определить платформу исполнения. Установить значения переменных окружения с помощью соответствующих скриптов.

2. Определить домен (раздел) библиотеки: BLAS, SparseBLAS, PBLAS, LAPACK, ScaLAPACK, разреженные солверы, VML, VSL, FFT, ClusterFFT, тригонометрические преобразования (TT), солверы Пуассона/Лапласа/Гельмгольца, оптимизационные солверы, DFL. От выбора зависят ключи компоновки и особенности оптимального программирования.

3. Выбрать язык программирования: Fortran/C/C++. От выбора зависит набор заголовочных файлов, интерфейсы.

4. Определить объём обрабатываемых данных (количество элементов в массиве). От этого зависит диапазон целых значений, а также соответствующие интерфейсы (например, ILP64 для больших массивов).

5. Выбрать модель многопоточности : реализация компилятором Intel, реализация другим компилятором, отказ от использования многопоточности.

6. Задать количество потоков. Intel® MKL использует OpenMP.

32Высокопроизводительные вычисления на Grid системах 2017

Page 33: Мастер класс Инструменты и библиотеки для

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

8. Выбрать реализацию MPI, которая будет использоваться в кластерных модулях. Соответствующие библиотеки указываются в опциях компоновки. Рекомендуется использовать последние версии.

33Высокопроизводительные вычисления на Grid системах 2017

Page 34: Мастер класс Инструменты и библиотеки для

Примеры

34Высокопроизводительные вычисления на Grid системах 2017

Page 35: Мастер класс Инструменты и библиотеки для

Вычисление скалярного произведения

#include <windows.h>

#include <stdio.h>

#include "mkl.h"

#define N 100000000

double a[N + 1], b[N + 1];

int i;

double gDotProduct = 0;

int main()

{

// initialize vectors

for (i = 0; i < N; i++)

{

a[i] = 1.034; b[i] = 1.057;

}

printf("Computed value of vector sum: ");

gDotProduct = cblas_ddot(N, &a, 1, &b, 1);

//print dot product

printf("sum = %f\n", gDotProduct);

}

35Высокопроизводительные вычисления на Grid системах 2017

Page 36: Мастер класс Инструменты и библиотеки для

Intel® Integrated Performance Primitives

36Высокопроизводительные вычисления на Grid системах 2017

Page 37: Мастер класс Инструменты и библиотеки для

Intel ® Integrated Performance Primitives

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

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

Intel IPP обеспечивает прозрачное использование расширенных возможностей процессоров Intel, таких, как технология MMX, расширения набора команд Streaming SIMD Extensions и StreamingSIMD Extensions.

Библиотека Intel IPP оптимизирована для работы с разными процессорами Intel.

Библиотека Intel IPP поддерживает 32- и 64-битные операционные системы Windows и Linux, включая встраиваемые версии, такие как Windows Mobile.

37Высокопроизводительные вычисления на Grid системах 2017

Page 38: Мастер класс Инструменты и библиотеки для

Состав:

�Функции размещения и освобождения памяти.

�Вспомогательные функции – определение числа ядер, типа процессора, выравнивание указателей, определение числа потоков и т.д.

�Функции диспетчеризации.

�Функции инициализации векторов.

�Генерация сигналов разного типа.

�Генераторы однородного и неоднородных распределений.

�Логические, арифметические функции, функции преобразования векторов (сортировка, преобразование типов, объединение векторов,

комплексное сопряжение и др.).

�Работа с окнами (обработка сигналов).

�Статистические функции.

�Функции фильтрации.

�Преобразования: FFT, Харли, Гильберта, Уолша-Адамара, вейвлетное.

�Функции распознавания и кодирования речи.

�Работа со строками.

�Элементарные и специальные математические функции.

�Сжатие данных и т.д.

38Высокопроизводительные вычисления на Grid системах 2017

Page 39: Мастер класс Инструменты и библиотеки для

Пример. Скалярное произведение

#include <windows.h>#include <stdio.h>#define N 100000000#include "ipps.h"

Ipp64f a[N + 1], b[N + 1];int i; double gDotProduct = 0;

int main(){// initialize vectors for (i = 0; i < N; i++) {a[i] = 1.034; b[i] = 1.057;

}printf("Computed value of vector sum: ");ippsDotProd_64f(a, b, (N + 1), &gDotProduct);//print dot product printf("sum = %f\n", gDotProduct); }

39Высокопроизводительные вычисления на Grid системах 2017

Page 40: Мастер класс Инструменты и библиотеки для

Intel® Threading Building Blocks

40Высокопроизводительные вычисления на Grid системах 2017

Page 41: Мастер класс Инструменты и библиотеки для

Библиотека готовых шаблонов C++, упрощающая разработку многопоточных приложений, обеспечивая более высокий уровень абстракции при распараллеливании.

Многоплатформенность: Linux, Microsoft Windows, Mac OS.

41Высокопроизводительные вычисления на Grid системах 2017

Page 42: Мастер класс Инструменты и библиотеки для

42

Примитивы синхронизацииatomic, condition_variable[recursive_]mutex

{spin,queuing,null} [_rw]_mutex

critical_section, reader_writer_lock

Диспетчер задачtask_group, structured_task_grouptask

task_scheduler_init

task_scheduler_observer

Concurrent Containersconcurrent_hash_mapconcurrent_unordered_{map,set}

concurrent_[bounded_]queue

concurrent_priority_queue

concurrent_vector

Размещение памятиtbb_allocatorzero_allocator

cache_aligned_allocator

scalable_allocator

Thread Local Storagecombinableenumerable_thread_specific

Потокиstd::thread

Параллельные алгоритмыparallel_forparallel_for_each

parallel_invoke

parallel_do

parallel_scanparallel_sort

parallel_[deterministic]_reduce

Macro Dataflowparallel_pipelinetbb::flow::...

Высокопроизводительные вычисления на Grid системах 2017

Page 43: Мастер класс Инструменты и библиотеки для

Оптимизация в примерах

43Высокопроизводительные вычисления на Grid системах 2017

Page 44: Мастер класс Инструменты и библиотеки для

44Высокопроизводительные вычисления на Grid системах 2017

Page 45: Мастер класс Инструменты и библиотеки для

45Высокопроизводительные вычисления на Grid системах 2017

Page 46: Мастер класс Инструменты и библиотеки для

46Высокопроизводительные вычисления на Grid системах 2017

Page 47: Мастер класс Инструменты и библиотеки для

47Высокопроизводительные вычисления на Grid системах 2017

Page 48: Мастер класс Инструменты и библиотеки для

48Высокопроизводительные вычисления на Grid системах 2017

Page 49: Мастер класс Инструменты и библиотеки для

49Высокопроизводительные вычисления на Grid системах 2017

Page 50: Мастер класс Инструменты и библиотеки для

50Высокопроизводительные вычисления на Grid системах 2017

Page 51: Мастер класс Инструменты и библиотеки для

51Высокопроизводительные вычисления на Grid системах 2017

Page 52: Мастер класс Инструменты и библиотеки для

52Высокопроизводительные вычисления на Grid системах 2017

Page 53: Мастер класс Инструменты и библиотеки для

Matrices.cpp

�icl /FeMatricesOd /Od Matrices.cpp

�icl /FeMatricesO1 /O1 Matrices.cpp

�icl /FeMatricesO2 /O2 Matrices.cpp

�icl /FeMatricesO3 /O3 Matrices.cpp

53Высокопроизводительные вычисления на Grid системах 2017

Page 54: Мастер класс Инструменты и библиотеки для

#include <ctime>

#include <iostream>

#include "stdlib.h"

#include "conio.h"

#include "math.h“

using namespace std;

const int SIZE = 1000;

void matrixMultiply(double ** matrA, double ** matrB, double ** matrC, int matrSize);

double sinCosMultiply(double i, double j);

int main()

{

time_t t1, t2;

double trace(0);

double ** matrixA = new double*[SIZE];

double ** matrixB = new double*[SIZE];

cout << "We will construct the square matrix " << SIZE << "x" << SIZE << endl;

cout << "of pseudo-random values" << endl;

cout << "and multiply it by itself. Then we will find the trace of the matrix." << endl;

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

{

matrixA[i] = new double[SIZE];

matrixB[i] = new double[SIZE];

}54

Высокопроизводительные вычисления на Grid системах 2017

Page 55: Мастер класс Инструменты и библиотеки для

t1 = clock();

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

{

for(int j=0; j<SIZE; j++)

{

matrixA[i][j]=sinCosMultiply(rand()%10/3, rand()%10/3);

}

}

matrixMultiply(matrixA, matrixA, matrixB, SIZE);

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

{

for(int j=0; j<SIZE; j++)

{

if(i==j) trace += matrixB[i][j];

}

}

t2 = clock();

cout << "\nTrace is " << trace << endl;

cout << "\nInitial clock ticks value is " << t1 << endl;

cout << "Final clock ticks value is " << t2 << endl;

cout << "Difference in clock ticks is " << difftime(t2,t1) << endl;

cout << "Clock ticks per second value is " << CLOCKS_PER_SEC << endl;

cout << "\nActual time of calculations is " << ((t2-t1)/CLOCKS_PER_SEC) << " sec" << endl;

55Высокопроизводительные вычисления на Grid системах 2017

Page 56: Мастер класс Инструменты и библиотеки для

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

{

delete [] matrixA[i];

delete [] matrixB[i];

}

delete [] matrixA;

delete [] matrixB;

return 0;

}

void matrixMultiply(double ** matrA, double ** matrB, double ** matrC, int matrSize)

{

for(int i=0; i<matrSize; i++) {

for(int j=0; j<matrSize; j++) {

matrC[i][j] = 0;

for(int k=0; k<matrSize; k++) {

matrC[i][j] += matrA[i][k]*matrB[k][j];

}

}

} }

double sinCosMultiply(double i, double j)

{

return sin(i)*cos(j);

}

56Высокопроизводительные вычисления на Grid системах 2017

Page 57: Мастер класс Инструменты и библиотеки для

Результаты

Intel Core 2 Duo T3700 2.00 ГГц, 2 Гб RAM

Среднее значение времени выполнения:

� MatricesOd . . . 21.76 с.

� MatricesO1 . . . 14.05 с.

� MatricesO2 . . . 9.63 с.

� MatricesO3 . . . 9.57 с.

57Высокопроизводительные вычисления на Grid системах 2017

Page 58: Мастер класс Инструменты и библиотеки для

/Qax (Windows), -ax (Linux)Оптимизация под архитектуру Intel

� QxHost

� QxAVX

� QxSSE2, QxSSE3, QxSSE3_ATOM, QxSSE4.1, QxSSE4.2, QxSSSE3

Оптимизация под архитектуру

58Высокопроизводительные вычисления на Grid системах 2017

Page 59: Мастер класс Инструменты и библиотеки для

Primes.cpp

�icl /FePOd /Od Primes.cpp

�icl /FePx /QaxSSSE3 Primes.cpp

Intel Core 2 Duo T3700 2.00 ГГц, 2 Гб ОЗУ

Среднее значение времени выполнения:

- POd . . . . . 29.8 с.

- Px . . . . . . 4.5 с.

59Высокопроизводительные вычисления на Grid системах 2017

Page 60: Мастер класс Инструменты и библиотеки для

#include "time.h"

#include <iostream>

#include "stdlib.h"

#include "conio.h"

#include "math.h “

using namespace std;

const int NUM_OF_TESTS = 2000000;

const int RANGE = 1000;

bool isComposite(const int y);

int main()

{

time_t t1, t2;

int counter(0);

t1 = clock();

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

if(isComposite(rand()%RANGE))

++counter;

t2 = clock();

cout << "For " << NUM_OF_TESTS << " pseudo-random values" << endl;

cout << "within the range 0.." << RANGE << endl;

cout << ((NUM_OF_TESTS-counter)*100.0)/NUM_OF_TESTS << "% were prime

numbers." << endl;

60Высокопроизводительные вычисления на Grid системах 2017

Page 61: Мастер класс Инструменты и библиотеки для

cout << "\nInitial clock ticks value is " << t1 << endl;

cout << "Final clock ticks value is " << t2 << endl;

cout << "Difference in clock ticks is " << difftime(t2,t1) << endl;

cout << "Clock ticks per second value is " << CLOCKS_PER_SEC << endl;

cout << "\nActual time of calculations is " << ((t2-t1)/CLOCKS_PER_SEC)

<< " sec" << endl;

return 0;

}

bool isComposite(const int y)

{

bool result = false;

for (int i = 2; i <= ceil(y/2.0); i++)

{

if (y%i == 0) result = true;

}

return result;

}

61Высокопроизводительные вычисления на Grid системах 2017

Page 62: Мастер класс Инструменты и библиотеки для

Результаты

Intel Core 2 Duo T3700 2.00 ГГц, 2 Гб ОЗУ

Среднее значение времени выполнения:

- POd . . . . . 29.8 с.

- Px . . . . . . 4.5 с.

62Высокопроизводительные вычисления на Grid системах 2017

Page 63: Мастер класс Инструменты и библиотеки для

Автоматическое распараллеливание

/Qparallel (Windows), -parallel (Linux)

�Автоматическое распараллеливание.

�Определяются те части кода, которые можно распараллелить.

�Выполняется анализ зависимостей.

�Разделение данных для параллельной обработки.

�Работа с циклами.

63Высокопроизводительные вычисления на Grid системах 2017

Page 64: Мастер класс Инструменты и библиотеки для

FermatsCubes.cpp

• icl /FeFCOd /Od FermatsCubes.cpp

• icl /FeFCPar /Qparallel FermatsCubes.cpp

Сравнить результаты

64Высокопроизводительные вычисления на Grid системах 2017

Page 65: Мастер класс Инструменты и библиотеки для

#include "time.h"

#include <iostream>

#include "stdlib.h"

#include "conio.h"

#include "math.h“

using namespace std;

const int RANGE = 2000;

long sumOfCubes(const int x, const int y);

int main()

{

time_t t1, t2;

bool isDisproven = false;

cout << "Checking for mispredictions of Fermat's Great Theorem" << endl;

cout << "for cubes in range 3.." << RANGE << endl;

t1 = clock();

for (int i = 3; i < RANGE; i++)

{

for(int k = 1; k < i; k++)

{

for(int j = 1; j < i; j++)

{

if (long(i*i*i) == sumOfCubes(k,j))

{

cout << k << " " << j << " " << i << endl;

isDisproven = true;

}}}}

65Высокопроизводительные вычисления на Grid системах 2017

Page 66: Мастер класс Инструменты и библиотеки для

t2 = clock();

cout << "\nAre theorem's predictions correct? +" << !(isDisproven) << endl;

cout << "\nInitial clock ticks value is " << t1 << endl;

cout << "Final clock ticks value is " << t2 << endl;

cout << "Difference in clock ticks is " << difftime(t2,t1) << endl;

cout << "Clock ticks per second value is " << CLOCKS_PER_SEC << endl;

cout << "\nActual time of calculations is " << ((t2-t1)/CLOCKS_PER_SEC) << " sec" << endl;

return 0;

}

long sumOfCubes(const int x, const int y)

{

return (x*x*x + y*y*y);

}

66Высокопроизводительные вычисления на Grid системах 2017

Page 67: Мастер класс Инструменты и библиотеки для

Среднее значение времени выполнения:

- FCOd . . . . . 25.95 с.

- FCPar . . . . . 3.78 с.

Результаты

67Высокопроизводительные вычисления на Grid системах 2017

Page 68: Мастер класс Инструменты и библиотеки для

/Qprof-gen (Windows), -prof-gen (Linux)

/Qprof-use (Windows), -prof-use (Linux)

�Инструментовка.

�Сбор информации.

�Компиляция с учетом проанализированных данных.

Оптимизация с профилированием

68Высокопроизводительные вычисления на Grid системах 2017

Page 69: Мастер класс Инструменты и библиотеки для

Branches.cpp

�icl /FeBOd /Od Branches.cpp

�icl /FeBPrg /Qprof-gen Branches.cpp

�BPrg.exe

�icl /FeBProf /Qprof-use Branches.cpp

69Высокопроизводительные вычисления на Grid системах 2017

Page 70: Мастер класс Инструменты и библиотеки для

#include "time.h"

#include <iostream>

#include "stdlib.h"

#include "conio.h"

#include "math.h“

using namespace std;

bool slow_func(void);

bool quick_func(void);

int main()

{

time_t t1, t2;

t1 = clock();

if(slow_func() && quick_func()) cout << "You can't see this...";

t2 = clock();

cout << "\nInitial clock ticks value is " << t1 << endl;

cout << "Final clock ticks value is " << t2 << endl;

cout << "Difference in clock ticks is " << difftime(t2,t1) << endl;

cout << "Clock ticks per second value is " << CLOCKS_PER_SEC << endl;

cout << "\nActual time of calculations is " << ((t2-t1)/CLOCKS_PER_SEC)

<< " sec" << endl;

return 0;

}

70Высокопроизводительные вычисления на Grid системах 2017

Page 71: Мастер класс Инструменты и библиотеки для

bool slow_func(void)

{

double a(0);

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

a = pow((sin(a/2.0)+cos(a/2.0))*(sin(i/2.0)+cos(i/2.0)), 2);

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

a += i;

return !a;

}

bool quick_func(void)

{

return false;

}

71Высокопроизводительные вычисления на Grid системах 2017

Page 72: Мастер класс Инструменты и библиотеки для

Результаты

Среднее значение времени выполнения:

- BOd . . . . . 13.171 с.

- BProf . . . . . 0.0 с.

72Высокопроизводительные вычисления на Grid системах 2017

Page 73: Мастер класс Инструменты и библиотеки для

/Qip (Windows), -ip (Linux)

�Анализ вызываемых функций приложения.

�Оптимизация многочисленных «маленьких» функций, особенно в циклах.

�Встраивание (inlining, подстановка кода) – уменьшение накладных расходов, создание возможностей для других видов оптимизации.

�Удаление неиспользуемого кода.

�Замена виртуальных вызовов статическими.

�Замена параметра функции константой.

�Эффективный анализ зависимостей для оптимизации циклов, векторизации и распараллеливания.

�Размер бинарного файла и время компиляции увеличиваются.

Межпроцедурная оптимизация

73Высокопроизводительные вычисления на Grid системах 2017

Page 74: Мастер класс Инструменты и библиотеки для

SquareRoots.cpp

�icl /FeSqOd /Od SquareRoots.cpp

�icl /FeSqip /Qip SquareRoots.cpp

74Высокопроизводительные вычисления на Grid системах 2017

Page 75: Мастер класс Инструменты и библиотеки для

#include "time.h"

#include <iostream>

#include "stdlib.h"

#include "conio.h"

#include "math.h“

using namespace std;

const int N = 10000; //number of steps in grid used for numerical method

const int LIM = 50000; //we want to find the sum of square roots of 1..LIM

double sqrootNewton(double x);

double returnHalf(double value);

double multiply(double value1, double value2);

int main()

{

time_t t1, t2;

double numRes(0), trueRes(0);

t1 = clock();

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

{

numRes += sqrootNewton(i+1);

trueRes += sqrt((i+1)/1.0);

}

t2 = clock();

cout << "Numerical result via Newton's method is " << numRes << endl;

cout << "PC arithmetical result is " << trueRes << endl;

75Высокопроизводительные вычисления на Grid системах 2017

Page 76: Мастер класс Инструменты и библиотеки для

cout << "\nInitial clock ticks value is " << t1 << endl;

cout << "Final clock ticks value is " << t2 << endl;

cout << "Difference in clock ticks is " << difftime(t2,t1) << endl;

cout << "Clock ticks per second value is " << CLOCKS_PER_SEC << endl;

cout << "\nActual time of calculations is " << ((t2-t1)/CLOCKS_PER_SEC) << " sec" << endl;

_getch();

return 0;

}

double sqrootNewton(double x) // Newtonian method applied for square root

{

double sq = 1.0;

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

sq = returnHalf((sq + multiply(x, 1/sq)));

return sq;

}

double returnHalf(double value)

{

return value*0.5;

}

double multiply(double value1, double value2)

{

return value1*value2;

}

76Высокопроизводительные вычисления на Grid системах 2017

Page 77: Мастер класс Инструменты и библиотеки для

Результаты

Среднее значение времени выполнения:

- SqOd . . . . . 35.69 с.

- Sqip . . . . . . 9.59 с.

77Высокопроизводительные вычисления на Grid системах 2017

Page 78: Мастер класс Инструменты и библиотеки для

Векторизация

Высокопроизводительные вычисления на Grid системах 2017

Page 79: Мастер класс Инструменты и библиотеки для

Векторизацией называется модификация последовательного алгоритма в

параллельный с использованием параллелизма данных.

Параллелизм данных реализуется с помощью упаковки данных в пакеты –

векторы, состоящие из нескольких значений.

Позволяет использовать низкоуровневый SIMD-параллелизм процессоров Intel.

Реализуется:– вручную;

– автоматически (средствами компилятора).

Высокопроизводительные вычисления на Grid системах 2017

Page 80: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 81: Мастер класс Инструменты и библиотеки для

Векторные расширения набора команд процессора

MMX (MultiMedia Extensions, появилось с Pentium K6) – дополнительные

команды, позволяющие выполнять операции с 64-разрядными целыми значениями

и данными, упакованными в векторы длиной 64 бита.

Данные могут находиться в памяти или в 8 64-разрядных MMX-регистрах.

Примеры операций – поэлементное сложение векторов, Поэлементное вычитание

векторов, поэлементные логические операции, сдвиги, загрузка операндов из

памяти в MMX-регистры и наоборот и другие.

57 команд, 4 новых типа данных.

81Высокопроизводительные вычисления на Grid системах 2017

Page 82: Мастер класс Инструменты и библиотеки для

SSE (Streaming SIMD Extension)

SSE (Pentium III, 1999) – использует 128-разрядные векторные регистры XMM0-7,

«старые» MMX регистры и обычные 32-разрядные регистры. MMX использовало

тот же регистровый файл, что и обычное FPU, SSE использует выделенные

регистры. Имеются отдельные варианты команд для выравненных и

невыравненных данных, например, MOVAPD (move-aligned packed double) и

MOVUPD (move-unaligned packed double) .

70 дополнительных инструкций.

82Высокопроизводительные вычисления на Grid системах 2017

Page 83: Мастер класс Инструменты и библиотеки для

SSE2

SSE2 (Pentium 4, 2000) – операции с двойной точностью и значениями с

плавающей точкой, 64 разряда.

144 дополнительных инструкции.

Arithmetic:

addpd - Adds 2 64bit doubles.

addsd - Adds bottom 64bit doubles.

subpd - Subtracts 2 64bit doubles.

subsd - Subtracts bottom 64bit doubles.

mulpd - Multiplies 2 64bit doubles.

mulsd - Multiplies bottom 64bit doubles.

divpd - Divides 2 64bit doubles.

83Высокопроизводительные вычисления на Grid системах 2017

Page 84: Мастер класс Инструменты и библиотеки для

AVX – набор векторных команд

Intel® AVX (Advanced Vector Extensions) расширяет возможности 128-разрядных векторных регистров XMM (16 регистров), позволяя использовать 256-разрядные векторы.

256 разрядов используются в операциях с плавающей точкой.

В других операциях используются младшие 128 разрядов.

84Высокопроизводительные вычисления на Grid системах 2017

Page 85: Мастер класс Инструменты и библиотеки для

AVX – набор векторных команд

Сравнение с SSE.

�Увеличение разрядности векторных регистров с 128 до 256. В следующих версиях AVX планируется довести разрядность до 512 и 1024.

�Добавлены операции над трем операндами, не переписывающие сходные операнды.

�Введены инструкции для операндов, занимающих 4 регистра.

�Смягчены требования к выравниванию операндов. Несмотря на это, рекомендуется работать с выравненными данными. Выравнивание данных – важная тема!

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

�Новые Fused-Multiply-Add (FMA) инструкции.85

Высокопроизводительные вычисления на Grid системах 2017

Page 86: Мастер класс Инструменты и библиотеки для

AVX – набор векторных команд

Hardware

�Для поддержки AVX требуются 16 256-разрядных регистров YMM0-YMM15.

�Для поддержки AVX требуется 32-разрядный регистр состояния/управления MXCSR.

�YMM регистры действуют «поверх» старых 128-разрядных регистров XMM0—XMM15.

86Высокопроизводительные вычисления на Grid системах 2017

Page 87: Мастер класс Инструменты и библиотеки для

AVX vs SSE – наборы векторных команд

Пакеты

87Высокопроизводительные вычисления на Grid системах 2017

Page 88: Мастер класс Инструменты и библиотеки для

AVX2 – набор векторных команд

Intel® AVX2 появился в архитектуре Haswell.

AVX векторизация целочисленных типов расширена до 256-разрядного формата и операций с ними. Этот тип используется в мультимедийных приложениях. В AVX2 для значений с плавающей точкой используется AVX, а для целых – AVX2.

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

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

FMA (Fused Multiply-Add) - одна инструкция выполняет несколько операций над упакованными данными.

88Высокопроизводительные вычисления на Grid системах 2017

Page 89: Мастер класс Инструменты и библиотеки для

Векторизация вручную

Векторизация поддерживается большинством x86 ассемблеров, в том числе: Microsoft MASM (Microsoft

Visual Studio* 2010 version), NASM, FASM, YASM.

Высокоуровневая поддержка.

Intel® C++ Compiler version 11.1 и новее, а также Intel® Fortran Compilers поддерживают Intel® AVX

посредством ключей компилятора. Поддерживается также автоматическая векторизация циклов с

вычислениями с плавающей точкой.

Компилятор Intel C++ поддерживает интринсики Intel AVX (надо использовать #include <immintrin.h>) и

ассемблерные вставки, а также поддерживает эмуляцию интринсиков Intel AVX (надо использовать #include

"avxintrin_emu.h").

Высокопроизводительные вычисления на Grid системах 2017

Page 90: Мастер класс Инструменты и библиотеки для

Векторизация вручную

Высокоуровневая поддержка.

Microsoft Visual Studio* C++ 2010 с SP1 и новее поддерживает Intel AVX при компиляции 64-разрядного

кода (с ключом /arch:AVX compiler switch). Поддерживает интринсики (с заголовокм <immintrin.h>. Не

поддерживает инлайнинг ассемблера.

GNU Compiler Collection (GCC), version 4.4 поддерживает интринсики Intel AVX (<immintrin.h>). Intel

активно участвует в развитии поддержки AVX-векторизации GCC.

Высокопроизводительные вычисления на Grid системах 2017

Page 91: Мастер класс Инструменты и библиотеки для

Векторизация вручную

Высокоуровневая поддержка.

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

Формат AVX интринсиков:

_mm256_op_suffix(data_type param1, data_type param2, data_type param3)

где:

_mm256 – префикс, обозначающий использование 256-разрядных регистров;

_op – обозначение операции;

_suffix – тип данных (см. таблицу);

param1 и param2 – регистры с данными;

param3 – может отсутствовать, если имеется, это целочисленная маска, селектор или сдвиг.

Высокопроизводительные вычисления на Grid системах 2017

Page 92: Мастер класс Инструменты и библиотеки для

Векторизация вручную

Высокоуровневая поддержка.

Marking Meaning

[s/d] Single- or double-precision floating point

[i/u]nnnSigned or unsigned integer of bit size nnn, where nnn

is 128, 64, 32, 16, or 8

[ps/pd/sd] Packed single, packed double, or scalar double

epi32 Extended packed 32-bit signed integer

si256 Scalar 256-bit integer

Высокопроизводительные вычисления на Grid системах 2017

Page 93: Мастер класс Инструменты и библиотеки для

Векторизация вручную

Высокоуровневая поддержка.

Type Meaning

__m256256-bit as eight single-precision floating-point values,

representing a YMM register or memory location

__m256d256-bit as four double-precision floating-point values,

representing a YMM register or memory location

__m256i 256-bit as integers, (bytes, words, etc.)

__m128 128-bit single precision floating-point (32 bits each)

__m128d 128-bit double precision floating-point (64 bits each)

Intel® AVX Intrinsics Data Types

Высокопроизводительные вычисления на Grid системах 2017

Page 94: Мастер класс Инструменты и библиотеки для

Векторизация вручную

Высокоуровневая поддержка.

Директивы компилятору.

Высокопроизводительные вычисления на Grid системах 2017

Page 95: Мастер класс Инструменты и библиотеки для

Компиляторная векторизацияИсходный

текст

программы

Автоматический анализ

Подсказки для векторизации

(прагмы ivdep и vector)

Индексная нотация

Элементные функции

Прагма SIMD

Средства реализации

векторного параллелизма

Векторизатор(отображает векторный

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

векторную архитектуру)

SSE AVX MIC

Оптимизация и генерация кода

Высокопроизводительные вычисления на Grid системах 2017

Page 96: Мастер класс Инструменты и библиотеки для

Протокол векторизации

Содержит сообщения об успешно выполненной векторизации и проблемах:

Linux, Mac OS X: -vec-report<n>

Windows: /Qvec-report<n>

n диагностические сообщения

� 0 не выводить диагностические сообщения;

� 1 выводить сообщения о векторизованных циклах (действует по умолчанию);

� 2 выводить сообщения о векторизованных и невекторизованных циклах;

� 3 выводить сообщения о векторизованных и невекторизованных циклах и любых

установленных и предполагаемых зависимостях по данным;

� 4 выводить сообщения о невекторизованных циклах;

� 5 выводить сообщения о невекторизованных циклах и причине того, что

векторизация не удалась;

� 6 вывод более подробных сообщений о векторизованных и невекторизованных

циклах и любых установленных и предполагаемых зависимостях по данным.

Высокопроизводительные вычисления на Grid системах 2017

Page 97: Мастер класс Инструменты и библиотеки для

Пример

Протокол оптимизации, ключ–opt-report

Высокопроизводительные вычисления на Grid системах 2017

Page 98: Мастер класс Инструменты и библиотеки для

Intel® VTune Amplifier XE 2013

Высокопроизводительные вычисления на Grid системах 2017

Page 99: Мастер класс Инструменты и библиотеки для

Intel® VTune Amplifier XE 2013 – инструмент динамического анализа приложений.

Многоплатформенный: MS Windows (включая Windows Server 2012), Linux.

Архитектуры: Intel® Xeon Phi, Sandy Bridge-EP (Xeon E5), Ivy Bridge (22-нм Core i5 и i7) и другие.

Частичная несовместимость с Hyper V.

Поддержка: C/C++, Fortran, .NET, ассемблер, JAVA, C#.

Интеграция с Microsoft Visual Studio (включая VS 2012).

Возможность работы в режиме командной строки (CLI).

Поддержка автономного интерфейса.

Широкий спектр видов анализа.

Поддержка регрессионного тестирования производительности.

Возможность сравнения результатов тестирования производительности.

Высокопроизводительные вычисления на Grid системах 2017

Page 100: Мастер класс Инструменты и библиотеки для

Для выполнения анализа приложения требуется:

� исполняемый (бинарный) файл;

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

статистики можно «привязать» к исходному коду программы).

Необходим правильно

подготовленный тестовый

набор данных, соответствующий

«стандартной» для данного

приложения ситуации. Запуск

приложения с этим набором

данных даёт опорную точку, по

которой будет определяться

эффективность различных

методов оптимизации

производительности.

100Высокопроизводительные вычисления на Grid системах 2017

Page 101: Мастер класс Инструменты и библиотеки для

101Высокопроизводительные вычисления на Grid системах 2017

Page 102: Мастер класс Инструменты и библиотеки для

102Высокопроизводительные вычисления на Grid системах 2017

Page 103: Мастер класс Инструменты и библиотеки для

103Высокопроизводительные вычисления на Grid системах 2017

Page 104: Мастер класс Инструменты и библиотеки для

104Высокопроизводительные вычисления на Grid системах 2017

Page 105: Мастер класс Инструменты и библиотеки для

105Высокопроизводительные вычисления на Grid системах 2017

Page 106: Мастер класс Инструменты и библиотеки для

Метрики производительности

Метрика Описание

Available CPU Time Общее время выполнения на всех ядрах

CPI Cycles Per Instruction. Метрика, на которую следует обратить внимание в первую

очередь. Хорошее значение 0.75, плохое значение 4. «Плохое» значение CPI может

означать как неудачную организацию вычислений, так и неоптимальное

использование логических ядер процессора (с технологией HT).

CPU Time Время, затраченное активным процессором на выполнение потока. В

многопоточном случае суммируется по всем потокам (логическим ядрам).

CPU Time by Utilization Время, затраченное активным процессором на выполнение функции (время

выполнения вызываемых функций не учитывается).

CPU Time:Total Время, затраченное активным процессором на выполнение функции и всех

вызываемых из неё функций.

Cx Residency Время, проведённое в состоянии сна.

Elapsed Time Время выполнения программы = время завершения программы – время запуска

программы.

106Высокопроизводительные вычисления на Grid системах 2017

Page 107: Мастер класс Инструменты и библиотеки для

Метрика Описание

Idle Time Время, в течение которого нить неактивна, а система не может переключиться на

выполнение другой задачи.

Inactive Time Время, в течение которого нить остаётся вытесненной из исполнения.

Overhead Time Время, в течение которого проходит с момента освобождения ресурса его

предыдущим обладателем до захвата следующим собственником. Чем меньше это

время, тем лучше. Если объём работы фиксирован, а степень параллелизма

увеличивается, Overhead Time будет расти.

Spin Time Wait Time, в течение которого процессор был занят. Spin возникает, когда

программные средства синхронизации выполняют опрос ЦП, в то время как поток

находится в состоянии ожидания.

Total Thread Count Количество исполняющихся потоков.

Wait Time Длительность простоя потока в результате действия механизмов синхронизации.

Synchronization Context Switches Количество переключений контекста в результате явного вызова функций

синхронизации.

и другие, всего около 35

107Высокопроизводительные вычисления на Grid системах 2017

Page 108: Мастер класс Инструменты и библиотеки для

Метрики производительности, основанные на аппаратных событиях

Метрика Событие Описание

False Sharing Простой процессора в результате попытки доступа к разным

элементам данных, находящихся в одной строке кэш-памяти.

Assists FP_ASSIST.ANY Некоторые операции могут быть выполнены не аппаратно, а

только с помощью микрокода (например, арифметические

операции с денормализованными числами). Объём

микропрограммы – несколько сотен команд.

L1 Misses Промахи кэш-памяти 1 уровня. Для Intel® XeonТМ Phi.

Branch

Mispredict

BR_MISP_RETIRED.ALL_BRANCHES_PS Ошибка предсказания ветвления. Если ветвление предсказано

неправильно, инструкции из неправильно предсказанной ветви

всё равно выполняются. Это лишние затраты времени.

Cache Usage Эффективность использования кэш-памяти. Связана с

локальностью данных. Характерное время доступа к данным из

L1 20 тактов, из L2 250 тактов.

LLC Miss Промахи кэш-памяти уровня, ближайшего к оперативной памяти.

Split

Loads/Split

Stores

Загрузка/выгрузка элемента данных, когда он занимает 2 строки

кэш-памяти (длина строки 64 байта).

108Высокопроизводительные вычисления на Grid системах 2017

Page 109: Мастер класс Инструменты и библиотеки для

Метрика Событие Описание

DTLB Overhead DTLB_LOAD_MISSES.STLB_HIT

DTLB_MISSESDTLB (Data Translation Look-ahead Buffers) позволяют минимизировать

обращения к таблице страниц, используемой при работе с виртуальной

памятью. Буферы организованы в многоуровневую иерархию, чем

больше путь к требуемым данным, тем больше накладные расходы.

Memory Bus

Transactions

Количество транзакций через шину.

Vectorization

Usage

Для Intel® XeonТМ Phi. Отношение числа элементов данных,

обработанных векторными инструкциями, к числу векторных

инструкций. Значения 8, 16 соответствуют хорошей векторизации

циклов.

Bus Lock Блокировки доступа к шине. Возникают при использовании различных

видов синхронизации.

Execution Stalls RESOURCE_STALLS.ANY Вычислительные ресурсы ЦП используются полностью, однако

операции с большой латентностью сериализуются, ожидая критически

важные ресурсы.

Issued uOps UOPS_ISSUED.ANY Количество микроинструкций, выполняемых ядром. На каждом такте

аппаратный поток генерирует до 4 микроинструкций. Если реальное

количество меньше, производительность.

ICache Misses ICACHE.MISSES Промахи кэш-памяти декодированных инструкций.

Другие.

109Высокопроизводительные вычисления на Grid системах 2017

Page 110: Мастер класс Инструменты и библиотеки для

Intel® VTune™ Amplifier позволяет: � определить, какие части программы содержат «хотспоты» (потребляют большую часть

процессорного времени);

� определить, какие последовательности вызовов определяют производительность

приложения;

� определить, какие части программы неэффективно используют процессор;

� выявить объекты синхронизации, которые негативно влияют на производительность

программы;

� локализовать участки кода, в которых неэффективно используются аппаратные ресурсы:

память, шина и др.;

� анализировать производительность, конфликты потоков, простои, энергопотребление;

� определить, где и почему работа приложения приводит к неэффективному потреблению

электроэнергии (только в Linux);

� другие виды анализа (в том числе Frame и Task анализ).

110Высокопроизводительные вычисления на Grid системах 2017

Page 111: Мастер класс Инструменты и библиотеки для

Результаты расширенного анализа аппаратной EBS-статистики отображаются с помощью

предустановленных средств просмотра:

� Hotspots – определение фрагментов программы, на выполнение которых затрачивается

наибольшая часть процессорного времени.

� Hardware Event Counts – счётчик событий процессора.

� Hardware Event Sample Counts – счётчик полной статистики событий процессора.

� Hardware Issues – определение фрагментов программы, неэффективно использующих

аппаратные ресурсы.

� General Exploration – определение проблем, связанных с неэффективным использованием

ресурсов микроархитектуры Sandy Bridge и Intel® Atom™.

� Bandwidth – определение фрагментов программы, генерирующих большой поток данных в

DRAM для микроархитектур Sandy Bridge, Ivy Bridge и Nehalem.

� Если выбрана опция Collect stacks, все средства просмотра дополняются метриками,

помогающими определить критические пути вызовов функций, проанализировать

конфликты потоков и энергопотребление для этих путей.

111Высокопроизводительные вычисления на Grid системах 2017

Page 112: Мастер класс Инструменты и библиотеки для

Эффективность использования процессора� Idle – все ядра находятся в состоянии ожидания. Ни один поток не выполняется.

� Poor – доля одновременно работающих ядер < 50%.

� Ok – доля одновременно работающих ядер от 51% до 85%.

� Ideal – доля одновременно работающих ядер > 86%.

Эффективность многопоточного параллелизма� Idle – все потоки находятся в состоянии ожидания. Ни один поток не выполняется.

� Poor – низкая эффективность. Доля используемых потоков < 50% от степени параллелизма

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

� Ok – хорошая эффективность. Доля используемых потоков от 51% до 85% от степени

параллелизма архитектуры.

� Ideal – очень хорошая эффективность. Доля используемых потоков от 86% до 115% от степени

параллелизма архитектуры.

� Over – избыточная эффективность. Доля используемых потоков > 115% от степени параллелизма

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

Высокопроизводительные вычисления на Grid системах 2017

Page 113: Мастер класс Инструменты и библиотеки для

Виды анализа Intel® Vtune Amplifier XE

Algorithm analysis

� Basic Hotspots. Интервал сбора статистики 10 мс. Используются ЦП таймеры высокой точности. Интервал

сбора статистики GPU 1000 мкс. Построение временной диаграммы. Сбор статистики по пользовательским

задачам.

� Advanced Hotspots. Используется для определения положения «хотспотов». В дополнение к

базовому уровню анализируются стеки вызовов, переключения контекста, анализируется метрика CPI

и другие аспекты. Анонсированы небольшие накладные расходы. Для сбора статистики используется

драйвер. Статистика собирается по событиям CPU_CLK_UNHALTED.REF_TSC,

CPU_CLK_UNHALTED.THREAD, INST_RETIRED.ANY.

� Concurrency. Анализ реализации многопоточного параллелизма на уровне логических ядер. Этот

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

� Locks and Waits. Блокировки и простои. Этот вид анализа позволяет определить ожжидание при

синхронизации, операций ввода-вывода, а также их влияние на производительность приложения.

Высокопроизводительные вычисления на Grid системах 2017

Page 114: Мастер класс Инструменты и библиотеки для

Intel Core 2 Processor Analysis� General Exploration.

� Memory Accsess.

� Bandwidth.

� Bandwidth Breakdown.

� Cycles and uOps.

Nehalem / Westmere Analysis

(Core i5, Core i7, Xeon E7, …)� General Exploration.

� Memory Access.

� Read Bandwidth.

� Write Bandwidth.

� Cycles and uOps.

� Front End Investigation.Sandy Bridge / Ivy Bridge / Haswell Analysis

(Intel® XeonTM E5, Core i3, Core i5, Core i7, …)� General Exploration. Около 40 событий.

� Memory Access. Более 10 событий.

� Bandwidth. Оценка объёма данных, считываемых из и записываемых в память

через контроллер памяти, определение, достигается ли насыщение пропускной

способности. 4 события.

� Access Contention. Анализ работы с кэш-памятью, блокировок, влияющих на

быстродействие и т.л.

� Cycles and uOps.

� Branch Analysis. Анализ эффективности предсказания ветвлений.

� Client Analysis.

� Core Port Saturation.

� Port Saturation.

Высокопроизводительные вычисления на Grid системах 2017

Page 115: Мастер класс Инструменты и библиотеки для

Intel Atom Processor AnalysisGeneral Exploration.

Knights Corner Platform Analysis

(Intel® XeonTM Phi)� Hotspots.

� General Exploration.

� Bandwidth.

Power Analysis� CPU Sleep States.

� CPU Frequency.

Custom Analysis

Высокопроизводительные вычисления на Grid системах 2017

Page 116: Мастер класс Инструменты и библиотеки для

Intel® Inspector XE 2013

116Высокопроизводительные вычисления на Grid системах 2017

Page 117: Мастер класс Инструменты и библиотеки для

Многоплатформенный: MS Windows, Linux.

Поддержка: C/C++, C#, Fortran.

Интеграция с Microsoft Visual Studio (включая VS 2012).

Специальная подготовка кода не требуется.

Поиск и локализация:

� некорректного доступа к памяти;

� утечек памяти;

� некорректного использования указателей;

� переполнения буферов;

� гонок за данными (heap races, stack races);

� взаимных блокировок;

� доступа к чужим стекам;

� и других ошибок работы с памятью и реализации многопоточности.

Поддержка Intel® XeonTM Phi.

Возможность анализа MPI-приложений на ошибки памяти и ошибки многопоточности.

Поддержка Intel® TBB, Intel® CilkTM Plus, OpenMP.

Возможность ограничивать область анализа.

Поддержка командной работы над проектом.

Высокопроизводительные вычисления на Grid системах 2017

Page 118: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 119: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 120: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 121: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 122: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 123: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 124: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 125: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017

Page 126: Мастер класс Инструменты и библиотеки для

Высокопроизводительные вычисления на Grid системах 2017