Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемЛюбовь Тчанникова
1 Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 2 Томский политехнический университет
2 Функция для работы с системным таймером Функция omp_get_wtime() возвращает в вызвавшей нити астрономическое время в секундах (вещественное число двойной точности), прошедшее с некоторого момента в прошлом. Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 2 double start_time, end_time; int a[30]; omp_set_num_threads(2); start_time = omp_get_wtime(); #pragma omp parallel { #pragma omp for for(int i = 0; i
3 Модель памяти OpenMP Параллельное программирование с использованием технологии OpenMP Аксёнов С.В Нить 001 Нить 001 Нить
4 Использование статических переменных. Директива threadprivate() Директива threadprivate() может позволить сделать локальные копии для статических переменных языка Си, которые по умолчанию являются общими. Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 4 int n; #pragma omp threadprivate(n) void main() { n=5; int num; omp_set_num_threads(2); #pragma omp parallel private (num) { num=omp_get_thread_num(); cout
5 Директива copyin() Применение опции copyin позволяет инициализировать локальные копии переменной n начальным значением нити-мастера. Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 5 int n; #pragma omp threadprivate(n) void main() { n=1; int num; omp_set_num_threads(2); #pragma omp parallel private (num) copyin(n) { num=omp_get_thread_num(); cout
6 Вложенные циклы Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 6 Параллельные области Функция omp_set_nested(int) разрешает или запрещает вложенный параллелизм. Аргумент: 0 - выключение вложенного параллелизма, 1 – включение вложенного параллелизма
7 Пример: Вложенные циклы Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 7 int n; omp_set_nested(1); omp_set_num_threads(3); #pragma omp parallel private(n) { n=omp_get_thread_num(); #pragma omp parallel { printf("Часть1, Поток %d - %d\n", n, omp_get_thread_num()); } omp_set_nested(0); #pragma omp parallel private(n) { n=omp_get_thread_num(); #pragma omp parallel { printf("Часть 2, Поток %d - %d\n", n, omp_get_thread_num()); }
8 Диспетчеризация циклов Ч.1 Опция schedule(type[, chunk]) задаёт, каким образом итерации цикла распределяются между нитями; Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 8 В опции schedule параметр type задаёт следующий тип распределения ите- раций: static – блочно-циклическое распределение итераций цикла; размер блока – chunk. Первый блок из chunk итераций выполняет нулевая нить, второй блок следующая и т.д. до последней нити, затем рас- пределение снова начинается с нулевой нити. dynamic – динамическое распределение итераций с фиксированным размером блока: сначала каждая нить получает chunk итераций (по умолчанию chunk=1), та нить, которая заканчивает выполнение своей порции итераций, получает первую свободную порцию из chunk ите- раций.
9 Диспетчеризация циклов Ч.2 Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 9 guided – динамическое распределение итераций, при котором размер порции уменьшается с некоторого начального значения до величины chunk (по умолчанию chunk=1) пропорционально количеству ещё не распределённых итераций, делённому на количество нитей, выпол- няющих цикл. runtime – способ распределения итераций выбирается во время работы программы по значению переменной среды OMP_SCHEDULE. Параметр chunk при этом не задаётся.
10 Пример: Диспетчеризация циклов Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 10 omp_set_num_threads(3); int A[100], B[100], C[100], i, n; for (i=0; i
11 Пример: распределение итераций по циклам Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 11
12 Распределение итераций по нитям для static(6) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 12
13 Распределение итераций по нитям для dynamic(6) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 13
14 Распределение итераций по нитям для guided(6) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 14
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.