Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. •...

70
Высокопроизводительные библиотеки Intel С.А.Немнюгин Высокопроизводительные вычисления на GRID системах. Архангельск, 2012

Transcript of Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. •...

Page 1: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

С.А.Немнюгин

Высокопроизводительные вычисления на GRID системах. Архангельск, 2012

Page 2: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Содержание

• Общая характеристика Intel® Math Kernel Library.

• Состав Intel® Math Kernel Library.

• Общая характеристика и состав Intel® Integrated Performance Primitives.

• Intel® Threading Building Blocks.

Page 3: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Общая характеристикаIntel® Math Kernel libraryIntel® Math Kernel library

Page 4: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

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

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

ScaLAPACK, солверы для разреженных систем, быстрое преобразование

Фурье, векторизованные математические функции и т.д.

Многоплатформенная библиотека, однако ScaLAPACK не поддерживается в

Mac OS* X.

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

Входит в состав следующих пакетов:

• IntelR Parallel Studio XE

• IntelR Cluster Studio XE

• IntelR C++ Studio XE

• IntelR Composer XE

• IntelR C++ Composer XE

• IntelR Fortran Composer XE

Page 5: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Состав Intel® Math Kernel LibraryLibrary

Page 6: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

- BLAS (Basic Linear Algebra Subroutines);

- SparseBLAS (Basic Linear Algebra Subroutines);

- PBLAS (Parallel BLAS).

BLAS – эффективная библиотека, в которой реализованы основные операции:

векторно-векторные (1 уровень), матрично-векторные (2 уровень) и матрично-векторно-векторные (1 уровень), матрично-векторные (2 уровень) и матрично-

матричные (3 уровень). Библиотека оптимизируется под разные архитектуры и

используется в качестве «ядра» других библиотек более высокого уровня).

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

матрицами.

PBLAS – параллельная реализация BLAS для вычислительных систем с

распределённой памятью. Построена на основе MPI.

Page 7: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Модуль линейной алгебры (решение систем линейных алгебраических

уравнений, решение спектральных задач). Включает следующие

компоненты:

- LAPACK (Linear Algebra PACKage);

-- ScaLAPACK.

LAPACK содержит подпрограммы решения систем линейных

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

(вычисления собственных значений и собственных векторов),

факторизации матриц разного вида (LU, QR, Холецкого, Шура, факторизации матриц разного вида (LU, QR, Холецкого, Шура,

сингулярного и других) и т.д. Процедуры предназначены для работы с

хорошо заполненными и ленточными матрицами, вещественными и

комплексными, в форматах с простой и двойной точностью

(www.netlib.org/lapack).

ScaLAPACK – параллельная библиотека подпрограмм линейной алгебры,

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

(www.netlib.org/scalapack).

Page 8: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

- PARDISO (PARallel DIrect SOlver);

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

PARDISO – потокобезопасная, эффективная библиотека, предназначенная для

решения систем линейных алгебраических уравнений с большими решения систем линейных алгебраических уравнений с большими

разрежёнными матрицами, как симметричными, так и несимметричными

(www.pardiso-project.org). Подпрограммы библиотеки реализованы как для

систем с общей, так и с распределённой памятью.

Page 9: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Векторные функции:

- VML (Vector Mathematical Library);

- VSL (Vector Statistical Library).

VML – векторные реализации математических функций.

VSL – параллельные (многопоточные) реализации генераторов VSL – параллельные (многопоточные) реализации генераторов

псевдослучайных чисел.

Page 10: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Модуль быстрого преобразования Фурье:

- FFT (Fast Fourier Transform);

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

Фурье.

Модуль поддержки решения дифференциальных уравнений в частных Модуль поддержки решения дифференциальных уравнений в частных

производных:

- TT (Trigonometric Transforms);

- PL (Poisson Library).

Optimization solvers (метод наименьших квадратов):

Page 11: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

BLAS – Basic Linear Algebra SubroutinesSubroutines

Page 12: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

BLAS – Basic Linear Algebra Subroutines

Структура:

� 1 уровень: векторно-векторные;

� 2 уровень: матрично-векторные;

� 3 уровень: матрично-матричные.

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

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

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

матрицы хранятся последовательно, по столбцам;

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

диагонали матрицы.

Page 13: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 14: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 15: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Структура:

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

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

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

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

Page 16: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 17: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

LAPACK – Linear Algebra PackagePackage

Page 18: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

LAPACK – Linear Algebra PACKage

Структура:

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

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

оценка его погрешности, обращение матриц;

� решение спектральных задач для симметричных и несимметричных матриц, метод � решение спектральных задач для симметричных и несимметричных матриц, метод

наименьших квадратов: ортогональные разложения (QR, LQ), сингулярные

разложения, линейный метод наименьших квадратов, обобщённый метод

наименьших квадратов;

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

Page 19: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 20: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 21: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 22: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

SS – Sparse Solvers

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

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

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

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

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

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

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

невязок.

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

ILUO и ILUT (Incomplete LU).

Page 23: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

VML – Vector Mathematical LibraryLibrary

Page 24: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 25: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

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

корни

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

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

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

Sin Sinh Pow Exp Add

Cos Cosh Powx Ln Sub

Tan Tanh Sqrt Log10 Div

Asin Asinh Mul

Acos Acosh Abs

Atan Atanh Conj

Page 26: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Форматы

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

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

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

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

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

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

Page 27: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

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

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

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

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

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

Вызовом

vmlSetMode(VML_EP)

Page 28: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

VSL – Vector Statistical LibraryLibrary

Page 29: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

VSL – Vector Statistical Library

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

статистика.

Структура

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

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

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

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

Статистика

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

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

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

разрядный

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

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

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

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

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

разрядный

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

На сдвиговом

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

связью

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

е

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

статистики

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

корреляции

Генератор

Wichmann-Hill

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

Page 30: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

#include ”mkl_vsl.h”

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

status = vslNewStream(&stream, VSL_BRNG_MT19937, SEED)status = vslNewStream(&stream, VSL_BRNG_MT19937, SEED)

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

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

1.0)

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

status = vslDeleteStream(&stream)

Page 31: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

FFT – Fast Fourier Transform librarylibrary

Page 32: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

FFT – Fast Fourier Transform

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

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

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

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

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

Page 33: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 34: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 35: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 36: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 37: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

DFL – Data Fitting Library

Page 38: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

DFL – Data Fitting Library

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

Структура

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

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

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

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

эрмитовы,

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

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

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

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

Массив узлов

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

слева,

непрерывные

справа

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

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

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

Page 39: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Page 40: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Примеры

Page 41: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

#include <windows.h>

#include <stdio.h>

#include "mkl.h"

#include "gettimeofday.h"

#define N 100000000

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

int i;

double gDotProduct = 0;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);

}

Page 42: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Вычисление собственных значений

program eigenLAPACK

integer, parameter :: NIN = 5, NOUT = 6

integer :: I, IFAIL, INFO, J, N

character(1) :: UPLO='U'

real, allocatable, dimension(:,:) :: A

real, allocatable, dimension(:) :: D

real, allocatable, dimension(:) :: E, TAU

real, allocatable, dimension(:) :: WORK

real, allocatable, dimension(:,:) :: Z

external f06qfe, sorgtr, ssteqr, ssytrd, x04caeexternal f06qfe, sorgtr, ssteqr, ssytrd, x04cae

write(NOUT, *) 'N=?'

read(NIN,*) N

allocate(D(N))

LWORK = 64 * N

allocate(WORK(LWORK))

allocate(E(N-1))

allocate(TAU(N-1))

LDA = N

allocate(A(LDA, N))

LDZ = N

allocate(Z(LDZ, N))

Page 43: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

allocate(TAU(N-1))

LDA = N

allocate(A(LDA, N))

LDZ = N

allocate(Z(LDZ, N))

!

! Initialization of upper triangular part of A

!

do i=1, N

do j=i, N

a(i, j)=3.8*i-2.*j

enddo

enddo

!

! Reduce A to tridiagonal form

!

call ssytrd(UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO)

Page 44: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

!

! Copy A into Z

!

call f06qfe(UPLO, N, N, A, LDA, Z, LDZ)

!

! Form Q explicitly, storing the result in Z

!

call sorgtr(UPLO, N, Z, LDZ, TAU, WORK, LWORK, INFO)

!

! Calculate all the eigenvalues and eigenvectors of A

!

call ssteqr('V', N, D, E, Z, LDZ, WORK, INFO)

write(NOUT,*)

if(INFO >0) then

write(NOUT,*) 'Failure to converge.'

else

Page 45: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

!

! Uncomment to print eigenvalues and eigenvectors

!

!write(NOUT,*) 'Eigenvalues'

!write(NOUT, "(3X,(8F12.4))") (D(I),I=1,N)

!IFAIL = 0

!

!call x04cae('General', ' ', N, N, Z, LDZ, 'Eigenvectors',

IFAIL)IFAIL)

end if

deallocate(D)

deallocate(WORK)

deallocate(E)

deallocate(TAU)

deallocate(A)

deallocate(Z)

end

Page 46: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Метод Монте-Карло

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <omp.h>

#include <time.h>

#include <iostream>

#include <mkl_vsl.h>

#define BRNG VSL_BRNG_MCG31

#define METHOD 0

#define BLOCK_SIZE 1000#define BLOCK_SIZE 1000

using namespace std;

const int SamplingSize = 1000;

const int ChainLength = 1000;

int N;

Page 47: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

void setComponentChain(double * P[],int Chain[],int Component,

int last[]){

Chain[0] = Component;

double r;

double rand[BLOCK_SIZE];

VSLStreamStatePtr stream;

vslNewStream(&stream, BRNG, (int) clock());

vdRngUniform(METHOD, stream, BLOCK_SIZE, &r, 0.0, 1.0);

int state = Chain[0];

int steps = 0;

for(int i = 1; i < ChainLength; i++){

if (state!= N - 1){

r = rand[i];r = rand[i];

if (r > 0.0){

double sum = 0.0;

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

sum += P[state][j];

if (r <= sum){

state = j;

Chain[i] = state;

break;

}

}

}

Page 48: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

else if (r == 1.0){

last[0] = i;

Chain[i] = N-1;

break;

}

if(Chain[i] < 0 || Chain[i] > N-1){

last[0] = i;

break;

}

}

else{

last[0] = i;

break;break;

}

}

vslDeleteStream( &stream );

}

Page 49: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Общая характеристика и состав Intel® Integrated Performance PrimitivesPerformance Primitives

Page 50: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Intel ® Integrated Performance Primitives

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

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

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

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

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

Page 51: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Intel ® Integrated Performance Primitives

Состав:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Page 52: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

#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()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);

}

Page 53: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Пример. Умножение матриц

#include <stdio.h>

#include "gettimeofday.h“

#define NUM 2025

#include "ippm.h"

int main()

{

int i, j;

/* Matrix with width=4 and height=3 */

static Ipp64f a[NUM * NUM];static Ipp64f a[NUM * NUM];

int aWidth = NUM;

int aHeight = NUM;

int aStride2 = sizeof(Ipp64f);

int aStride1 = NUM*sizeof(Ipp64f);

/* Matrix with width=height=NUM */

static Ipp64f b[NUM * NUM];

int bWidth = NUM;

int bHeight = NUM;

int bStride2 = sizeof(Ipp64f);

int bStride1 = NUM*sizeof(Ipp64f);

Page 54: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

/* Destination matrix has width=height=NUM */

static Ipp64f c[NUM * NUM];

int cStride2 = sizeof(Ipp64f);

int cStride1 = NUM*sizeof(Ipp64f);

for (i=0; i< NUM;i++) {

for (j=0; j<NUM;j++) {

a[i * NUM + j] = 3 * i - 2 * j + 1;

b[i * NUM + j] = -2 * i + 1 * j + 3;

}

}

printf("NUM:%d\n",NUM);

ippmMul_mm_64f((Ipp64f*)a, aStride1, aStride2, aWidth, aHeight, (Ipp64f*)b,

bStride1, bStride2, bWidth, bHeight, c, cStride1, cStride2);

}

Page 55: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Пример. Вычисление собственных значений

#include <stdio.h>

#include "ippm.h"

#include "ippcore.h“

#define NUM 200

void printf_va_Ipp32f(const char* msg, Ipp32f* buf,

int length, int count, IppStatus st )

{ int i, j;

if( st < ippStsNoErr ) {

printf( "Error %d, %s\n", st, ippGetStatusString( st )); printf( "Error %d, %s\n", st, ippGetStatusString( st ));

}

else

{

printf("%s \n", msg );

for( j=0; j < count; j++) {

for( i=0; i < length; i++) {

printf("%f ", buf[j*length+i]); }

printf("\n"); } }

}

Page 56: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

void printf_m_Ipp32f(const char* msg, Ipp32f* buf,

int width, int height, IppStatus st )

{ int i, j;

if( st < ippStsNoErr ) {

printf( "Error %d, %s\n", st, ippGetStatusString( st ));

}

else

{

printf("%s \n", msg );

for( j=0; j < height; j++) {

for( i=0; i < width; i++) {

printf("%f ", buf[j*width+i]); }

printf("\n"); } } printf("\n"); } }

}

static double a[NUM*NUM];

//routine to initialize symmteric matrix

void init_arr(double row, double col, Ipp32f a[])

{

int i,j;

for (i=0; i< NUM;i++) {

for (j=0; j<i+1;j++) {

a[i*NUM+j] = row*i+col*j;

a[j*NUM+i] = a[i*NUM+j];

}}}

Page 57: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

int main()

{

int i, j;

double start, stop;

/* Source matrix with width=4 and height=4 */

Ipp32f pSrc[NUM*NUM];

int srcStride2 = sizeof(Ipp32f);

int srcStride1 = NUM*sizeof(Ipp32f);

Ipp32f pBuffer[NUM*NUM]; /* Buffer location */

int widthHeight = NUM;

Ipp32f pDstValues[NUM]; /* Eigenvalues location */

Ipp32f pDstVectors[NUM*NUM]; /* Eigenvectors location */

int dstStride2 = sizeof(Ipp32f);int dstStride2 = sizeof(Ipp32f);

int dstStride1 = NUM*sizeof(Ipp32f);

// initialize the arrays with data

init_arr(3,-2,pSrc);

start = wcgettimeofday();

IppStatus status=ippmEigenValuesVectorsSym_m_32f((const Ipp32f*)pSrc,

srcStride1, srcStride2, pBuffer, pDstVectors, dstStride1, dstStride2, pDstValues, widthHeight);

Page 58: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

if (status == ippStsNoErr) {

printf("Computation done\n");

//printf_va_Ipp32f("Eigenvalues:", pDstValues, NUM, 1, status);

//printf_m_Ipp32f("Eigenvectors :", pDstVectors, NUM, NUM, status);

}

else

{

printf("Function returns status: %s \n", ippGetStatusString(status));

}

}

Page 59: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Intel® Threading Building BlocksBlocks

Page 60: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Intel ® Threading Building Blocks

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

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

Если код написан на языке C++, лучше Intel® TBB.

Intel® TBB хорошо подходит, если код в значительной степени объектно-ориентирован и в нем широко используются шаблоны C++ и определяемые пользователем типы. ориентирован и в нем широко используются шаблоны C++ и определяемые пользователем типы.

Если код написан на C или Fortran, лучше выбрать OpenMP, поскольку этот API лучше соответствует стилю структурного программирования.

При использовании C++, если в программе преобладают операции обработки массивов, OpenMP может оказаться удобнее с точки зрения сложности программирования.

Page 61: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

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

Concurrent Containersconcurrent_hash_mapconcurrent_unordered_{map,set}concurrent_[bounded_]queueconcurrent_priority_queueconcurrent_vector

Thread Local Storage

Параллельные алгоритмыparallel_forparallel_for_eachparallel_invokeparallel_doparallel_scanparallel_sortparallel_[deterministic]_reduce

Macro Dataflowparallel_pipelinetbb::flow::...

61

Примитивы синхронизацииatomic, condition_variable[recursive_]mutex{spin,queuing,null} [_rw]_mutexcritical_section, reader_writer_lock

task_scheduler_inittask_scheduler_observer

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

combinableenumerable_thread_specific

Потокиstd::thread

Page 62: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Шаблоны параллельного программированияНе удается отобразить рисунок. Возможно, рисунок поврежден или недостаточно памяти для его открытия. Перезагрузите компьютер, а затем снова откройте файл. Если вместо рисунка все еще отображается красный крестик, попробуйте удалить рисунок и вставить его заново.

62

Page 63: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

• Большая часть public TBB имён находится в пространстве имён

tbb

• C++11 names are in namespace std.

#include "tbb/tbb.h"

using namespace tbb;

#include "tbb/compat/condition_variable"

63

#include "tbb/compat/condition_variable"

#include "tbb/compat/thread"

#include "tbb/compat/tuple"

Page 64: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Пример использования.

Распараллеливание цикла:

void SerialApplyFoo( float a[], size_t n ) {

for( size_t i=0; i!=n; ++i )

Foo(a[i]);

}

Page 65: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

#include "tbb/tbb.h"

using namespace tbb;

class ApplyFoo {

float *const my_a;

public:

void operator()( const blocked_range<size_t>& r ) const {

float *a = my_a;

for( size_t i=r.begin(); i!=r.end(); ++i )

Foo(a[i]);

}

ApplyFoo( float a[] ) :ApplyFoo( float a[] ) :

my_a(a)

{}

};

Page 66: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Редуктор enumerable_thread_specific

• Используется, если:

– операция коммутативна;

– тип операнда «большой».

enumerable_thread_specific<BigMatrix> sum;

...

Контейнер элементов, локальных по

отношению к потоку

66

parallel_for( 0, n, [&]( int i ) {

sum.local() += a[i];

});

... = sum.combine(std::plus<BigMatrix>());

Получение локального по отношению к потоку

элемента sum.

Возвращает результат редукции относительно элементов, локальных по отношению к потоку

Page 67: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Редуктор parallel_reduce

• Используется, если:

– операция некоммутативна;

– для производительности важна «фрагментация».

sum = parallel_reduce(

blocked_range<int>(0,n),

0.f,

[&](blocked_range<int> r, T s) -> float

Начальное значение

67

[&](blocked_range<int> r, T s) -> float

{

for( int i=r.begin(); i!=r.end(); ++i )

s += a[i];

return s;

},

std::plus<T>()

);Объединение результатов

по подинтервалам

Редукция по подинтервалу

Должно быть задано начальное значение для редукции подинтервала

r.

Page 68: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

Дерево редукции

0 0 0 0

68

0 0

Цепная редукция

Page 69: Intel - parserplus.comparserplus.com/files/labs/intel_libraries.pdfIntel® Math Kernel Library. • Intel® Math Kernel Library. • Intel® Integrated Performance Primitives. •

parallel_deterministic reduce

sum = parallel_deterministic_reduce (

blocked_range<int>(0,n,10000),

0.f,

[&](blocked_range<int> r, T s) -> float

Параметр зернистости

(по умолчанию 1)

69

[&](blocked_range<int> r, T s) -> float

{

for( int i=r.begin(); i!=r.end(); ++i )

s += a[i];

return s;

},

std::plus<T>()

);