44
Начало Основы OpenMP Использование OpenMP Заключение Название Классификации параллельных архитектур Основные концепции Введение в технологию OpenMP Семинар по использованию вычислительного кластера 4 апреля 2010 г. Семинар по использованию вычислительного кластера 1 / 33

Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Введение в технологию OpenMPСеминар по использованию вычислительного кластера

4 апреля 2010 г.

Семинар по использованию вычислительного кластера 1 / 33

Page 2: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Классификация Флинна

Классификация параллельных архитектур (М.Флинн)

SIMD (Single Instruction, Multiple Data streams) — один поток команд,множество потоков данных.

MIMD (Multiple Instruction, Multiple Data streams) — множество потоковкоманд, множество потоков данных.

Семинар по использованию вычислительного кластера 2 / 33

Page 3: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Классификация по типу используемой памяти

. . .

. . .

. . .

Рис. 1: Архитектуры с общей и распределённой памятью

Семинар по использованию вычислительного кластера 3 / 33

Page 4: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Многопоточный параллелизм

. . . . . .

последовательныйучасток

параллельныйучасток

начало развилка слияние конец

основной поток

Рис. 2: Концепция многопоточного параллелизма

Семинар по использованию вычислительного кластера 4 / 33

Page 5: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Закон Амдала

Оценка ускорения (G. Amdahl)

a 61

(1− p) +pn

a — ускорение программы;p — распараллеливаемая часть программы (доля общего времени вы-

полнения);n — количество используемых процессоров.

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

a→ 11− p

при n→ +∞

Семинар по использованию вычислительного кластера 5 / 33

Page 6: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Закон Амдала

Оценка ускорения (G. Amdahl)

a 61

(1− p) +pn

a — ускорение программы;p — распараллеливаемая часть программы (доля общего времени вы-

полнения);n — количество используемых процессоров.

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

a→ 11− p

при n→ +∞

Семинар по использованию вычислительного кластера 5 / 33

Page 7: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Закон Амдала

Оценка ускорения (G. Amdahl)

a 61

(1− p) +pn

a — ускорение программы;p — распараллеливаемая часть программы (доля общего времени вы-

полнения);n — количество используемых процессоров.

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

a→ 11− p

при n→ +∞

Семинар по использованию вычислительного кластера 5 / 33

Page 8: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Закон Амдала

Оценка ускорения (G. Amdahl)

a 61

(1− p) +pn

a — ускорение программы;p — распараллеливаемая часть программы (доля общего времени вы-

полнения);n — количество используемых процессоров.

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

a→ 11− p

при n→ +∞

Семинар по использованию вычислительного кластера 5 / 33

Page 9: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Закон Амдала

Оценка ускорения (G. Amdahl)

a 61

(1− p) +pn

a — ускорение программы;p — распараллеливаемая часть программы (доля общего времени вы-

полнения);n — количество используемых процессоров.

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

a→ 11− p

при n→ +∞

Семинар по использованию вычислительного кластера 5 / 33

Page 10: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Закон Амдала (окончание)

n

a

1 4 16 64 256 1024 40961

20

p = 0,50p = 0,75p = 0,90p = 0,95

Рис. 3: Примеры графиков

Семинар по использованию вычислительного кластера 6 / 33

Page 11: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

НазваниеКлассификации параллельных архитектурОсновные концепции

Организация многопоточности вручную

Пример (использование библиотеки POSIX Threads)

int main(){

int i;pthread_t ahThreads[MY_NUM_THREADS];for (i = 0; i < MY_NUM_THREADS; ++ i)

pthread_create(&ahThreads[i], NULL, g_afnThreadProcs[i], NULL);

// . . .for (i = 0; i < MY_NUM_THREADS; ++ i)

pthread_join(ahThreads[i], NULL);// . . .

}

Семинар по использованию вычислительного кластера 7 / 33

Page 12: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ОпределенияИстория OpenMPНастройка среды

Назначение OpenMP

Определение

OpenMP (Open Multi-Processing) — программный интерфейс длясоздания многопоточных приложений на многопроцессорныхсистемах с разделяемой (общей) памятью.

Компоненты

директивы компилятора — расширения языков С/C++ и Fortran;библиотечные функции;переменные окружения.

Семинар по использованию вычислительного кластера 8 / 33

Page 13: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ОпределенияИстория OpenMPНастройка среды

Краткая история OpenMP

Год Событие1998 OpenMP 1.0 (Fortran)1999 OpenMP 1.0 (С/C++)2000 OpenMP 2.0 (Fortran)2002 OpenMP 2.0 (С/C++)2005 OpenMP 2.5 (С/C++/Fortran)2008 OpenMP 3.0 (С/C++/Fortran)

Таблица 1: Основные этапы развития OpenMP

Семинар по использованию вычислительного кластера 9 / 33

Page 14: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ОпределенияИстория OpenMPНастройка среды

Настройка среды Microsoft Visual Studio 2008

Рис. 4: Настройки компилятора в среде Microsoft Visual Studio 2008

Семинар по использованию вычислительного кластера 10 / 33

Page 15: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ОпределенияИстория OpenMPНастройка среды

Настройка среды Code::Blocks

Рис. 5: Настройки компилятора в среде Code::Blocks

Семинар по использованию вычислительного кластера 11 / 33

Page 16: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ОпределенияИстория OpenMPНастройка среды

Настройка среды Code::Blocks (окончание)

Рис. 6: Настройки редактора связей в среде Code::Blocks

Семинар по использованию вычислительного кластера 12 / 33

Page 17: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ОпределенияИстория OpenMPНастройка среды

Использование командной строки

Пример (включение OpenMP в командной строке)

stu003@tplatform1:~/omp_for> gfortran -fopenmp -lgomp omp_for.f90

Семинар по использованию вычислительного кластера 13 / 33

Page 18: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ОпределенияИстория OpenMPНастройка среды

Настройка переменных окружения

Рис. 7: Настройка переменной окружения OMP_NUM_THREADS

Семинар по использованию вычислительного кластера 14 / 33

Page 19: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Директивы OpenMP

Определения

Исполняемая директива OpenMP— директива OpenMP, имеющая связанныйс ней исполняемый пользовательский код.

Декларативная директива OpenMP— директива OpenMP, имеющаясвязанные с ней пользовательские объявления, ноне исполняемый код (директива threadprivate).

Семинар по использованию вычислительного кластера 15 / 33

Page 20: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Директивы OpenMP

Определения

Исполняемая директива OpenMP— директива OpenMP, имеющая связанныйс ней исполняемый пользовательский код.

Декларативная директива OpenMP— директива OpenMP, имеющаясвязанные с ней пользовательские объявления, ноне исполняемый код (директива threadprivate).

Семинар по использованию вычислительного кластера 15 / 33

Page 21: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Структурные блоки и конструкции OpenMP

Определения

Структурный блок программы (structured block) — исполняемый оператор(возможно, составной) с единственной точкой входа в началеи единственной точкой выхода в конце, либо конструкцияOpenMP.

Конструкция OpenMP (construct) — исполняемая директива OpenMP вместесо связанным структурным блоком (если он есть), не включаякода вызываемых подпрограмм.

Семинар по использованию вычислительного кластера 16 / 33

Page 22: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Структурные блоки и конструкции OpenMP

Определения

Структурный блок программы (structured block) — исполняемый оператор(возможно, составной) с единственной точкой входа в началеи единственной точкой выхода в конце, либо конструкцияOpenMP.

Конструкция OpenMP (construct) — исполняемая директива OpenMP вместесо связанным структурным блоком (если он есть), не включаякода вызываемых подпрограмм.

Семинар по использованию вычислительного кластера 16 / 33

Page 23: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Проверка версии OpenMP

Пример (получение версии OpenMP)

#include <iostream>#include <omp.h>

int main(){#ifdef _OPENMPstd::cout

<< "OpenMP Version: "<< _OPENMP / 100 << " (" << _OPENMP % 100 << ")" << std::endl;

#elsestd::cout << "Sequential Version" << std::endl;

#endif}

Семинар по использованию вычислительного кластера 17 / 33

Page 24: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Формат директивы OpenMP

Формат директивы (С/C++)

#pragma omp 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉

имя — имя директивы;предложение — конструкция, задающая дополнительную информацию

и зависящая от директивы;ø — конец строки (в дальнейшем не указывается).

Формат директивы (Fortran)

!$OMP 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉C$OMP 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉*$OMP 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉

Семинар по использованию вычислительного кластера 18 / 33

Page 25: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Формат директивы OpenMP

Формат директивы (С/C++)

#pragma omp 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉

имя — имя директивы;предложение — конструкция, задающая дополнительную информацию

и зависящая от директивы;ø — конец строки (в дальнейшем не указывается).

Формат директивы (Fortran)

!$OMP 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉C$OMP 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉*$OMP 〈имя〉 [〈предложение〉 {[, ] 〈предложение〉}] 〈ø〉

Семинар по использованию вычислительного кластера 18 / 33

Page 26: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Директива parallel

Формат директивы (С/C++)

#pragma omp parallel [〈предложения〉 ]〈структурный блок〉

Формат директивы (Fortran)

!$omp parallel [〈предложения〉 ]〈структурный блок〉

!$omp end parallel

Семинар по использованию вычислительного кластера 19 / 33

Page 27: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Директива parallel

Формат директивы (С/C++)

#pragma omp parallel [〈предложения〉 ]〈структурный блок〉

Формат директивы (Fortran)

!$omp parallel [〈предложения〉 ]〈структурный блок〉

!$omp end parallel

Семинар по использованию вычислительного кластера 19 / 33

Page 28: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Директива parallel (окончание)

Действие директивы

Поток, встречающий конструкцию parallel, создаёт команду потоков,становясь для неё основным.Потокам команды присваиваются уникальные целые номера, начиная с 0(основной поток).Каждый поток исполняет код, определяемый структурным блоком,в конце которого неявно устанавливается барьер.

Семинар по использованию вычислительного кластера 20 / 33

Page 29: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Директива parallel (окончание)

Действие директивы

Поток, встречающий конструкцию parallel, создаёт команду потоков,становясь для неё основным.Потокам команды присваиваются уникальные целые номера, начиная с 0(основной поток).Каждый поток исполняет код, определяемый структурным блоком,в конце которого неявно устанавливается барьер.

Семинар по использованию вычислительного кластера 20 / 33

Page 30: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Директива parallel (окончание)

Действие директивы

Поток, встречающий конструкцию parallel, создаёт команду потоков,становясь для неё основным.Потокам команды присваиваются уникальные целые номера, начиная с 0(основной поток).Каждый поток исполняет код, определяемый структурным блоком,в конце которого неявно устанавливается барьер.

Семинар по использованию вычислительного кластера 20 / 33

Page 31: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Барьер

. . . . . .

барьер

Рис. 8: Концепция барьера

Семинар по использованию вычислительного кластера 21 / 33

Page 32: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Пример использования директивы parallel

Пример (C++)

#include <iostream>#include <omp.h>

int main(){#pragma omp parallelstd::cout << " Inside parallel block" << std::endl;

}

Семинар по использованию вычислительного кластера 22 / 33

Page 33: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Пример использования директивы parallel (окончание)

Пример (Fortran)

program omp_first!$omp parallelprint *, "Inside parallel block"!$omp end parallel

end

Семинар по использованию вычислительного кластера 23 / 33

Page 34: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Модель памяти OpenMP

Виды переменных

Общие (shared).Локальные (private).

Семинар по использованию вычислительного кластера 24 / 33

Page 35: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Область

Определения

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

Связанная область (binding region) — для заданной области — охватывающаяеё область, которая определяет для неё контекст исполненияи определяет границы её воздействия.

Семинар по использованию вычислительного кластера 25 / 33

Page 36: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Область

Определения

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

Связанная область (binding region) — для заданной области — охватывающаяеё область, которая определяет для неё контекст исполненияи определяет границы её воздействия.

Семинар по использованию вычислительного кластера 25 / 33

Page 37: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Функция omp_get_num_threads()

Объявление (С/C++)

int omp_get_num_threads(void);

Объявление (Fortran)

integer function omp_get_num_threads()

Семинар по использованию вычислительного кластера 26 / 33

Page 38: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Функция omp_get_max_threads()

Объявление (С/C++)

int omp_get_max_threads(void);

Объявление (Fortran)

integer function omp_get_max_threads()

Семинар по использованию вычислительного кластера 27 / 33

Page 39: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Функция omp_get_thread_num()

Объявление (С/C++)

int omp_get_thread_num(void);

Объявление (Fortran)

integer function omp_get_thread_num()

Семинар по использованию вычислительного кластера 28 / 33

Page 40: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Поиск максимального значения в массиве

Пример

В заданном массиве вещественных чисел найти максимальное.

Рис. 9: Параллелизм по данным

Семинар по использованию вычислительного кластера 29 / 33

Page 41: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Поиск максимального значения в массиве (продолжение)

Пример (C++)

Vector::value_type max(const Vector &rcV){if (rcV.empty())

return 0;//Vector v_max(omp_get_max_threads(), rcV[0]);

Семинар по использованию вычислительного кластера 30 / 33

Page 42: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Поиск максимального значения в массиве (продолжение)

Пример (C++, продолжение)

#pragma omp parallel{

int nSize = omp_get_num_threads();int nRank = omp_get_thread_num();size_t uChunkSize = rcV.size() / nSize;size_t uStart = nRank * uChunkSize;size_t uEnd =(nRank == nSize - 1 ?rcV.size() : (nRank + 1) * uChunkSize);

v_max[nRank] = *max_element(rcV.begin() + uStart, rcV.begin() + uEnd);

}

Семинар по использованию вычислительного кластера 31 / 33

Page 43: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

ДирективыПростейшая программаДиректива parallelОсновные функции

Поиск максимального значения в массиве (окончание)

Пример (C++, окончание)

//return *max_element(v_max.begin(), v_max.end());

}

Семинар по использованию вычислительного кластера 32 / 33

Page 44: Введение в технологию OpenMPstaff.mmcs.sfedu.ru/~dubrov/files/sl_cluster_02_openmp.pdf · Рис. 1:Архитектуры с общей и распределённой

НачалоОсновы OpenMP

Использование OpenMPЗаключение

Список литературы

Список литературы

Савельев В. А.Методические указания на тему: «Параллельное программирование:OpenMP API».Изд-во РГУ, Ростов-на-Дону, 2006.Available from: http://open-edu.sfedu.ru/pub/1931/.

Антонов А. С.Параллельное программирование с использованием технологии OpenMP:Учебное пособие.Изд-во МГУ, М., 2009.Available from: http://parallel.ru/info/parallel/openmp/.

OpenMP Application Program Interface / Version 3.0 May 2008.OpenMP Architecture Review Board, 2008.Available from: http://openmp.org/wp/openmp-specifications/.

Семинар по использованию вычислительного кластера 33 / 33