Содержание
- 2. Лекция № 4
- 3. Содержание лекции Основные принципы OpenMP (продолжение) Разделение работы (work-sharing constructs) Синхронизация в OpenMP Дополнительные возможности OpenMP
- 4. Использование потоков (общее адресное пространство) Пульсирующий (fork-join) параллелизм Главный поток по мере необходимости инициирует параллельные потоки
- 5. Разделение работы (work-sharing constructs) Do/for - распараллеливание циклов (параллелизм данных) Sections - функциональное распараллеливание Single -
- 6. Конструкции do/for C/C++ #pragma omp for [clause ...] for_loop FORTRAN c$omp do [clause ...] do loop
- 7. Предложение schedule ( type, [ chunk] ) static – итерации делятся на блоки по chunk итераций
- 8. Пример schedule ( static ) В этом случае петли цикла линейно распределяются между потоками по следующей
- 9. Пример schedule ( static , chunk ) В этом случае петли цикла распределяются между потоками порциями
- 10. Пример schedule ( dynamic , chunk ) Вся загрузка делиться на порции размера chunk По умолчанию
- 11. Пример schedule ( guided , chunk ) Этот режим загрузки данных в поток работает также как
- 12. Тип schedule ( runtime [ , chunk ] ) В этом случае загрузка порций данных по
- 13. Директивное предложение reduction reduction (operator|intrinsic:var1[,var2]) определяет список переменных, для которых выполняется операция редукции (должна быть числовая)
- 14. Примеры реализации предложения reduction В каждом потоке определяется переменная sum для частичных сумм После завершения всех
- 15. C/C++ #pragma omp sections [clause ...] { #pragma omp section structured_block [#pragma omp section structured_block …]
- 16. Пример конструкции sections Каждая параллельная секция выполняется в параллельном потоке Реализуется функциональная декомпозиция Неявно в конце
- 17. C/C++ #pragma omp single [clause ...] structured_block FORTRAN c$omp single [clause ...] structured_block c$omp end single
- 18. Пример конструкции single Конструкция single используется для выполнения блока программы в параллельном режиме только в одном
- 19. Пример конструкции single nowait #pragma omp parallel for(Iterator i = list.begin(); i != list.end(); ++i )
- 20. Использование опции nowait #pragma omp for nowait for (i=0; i b[i] = f(a[i]); #pragma omp for
- 21. Совместимость директив и их параметров Физический факультет МГУ им М.В.Ломоносова
- 22. Синхронизация в OpenMP Типы синхронизации в OpenMP critical atomic barrier master ordered flush
- 23. Синхронизация в OpenMP: тип critical Поток описанный как critical section выполняется в монопольном режиме процессора Синтаксис
- 24. Синхронизация в OpenMP: тип atomic Предотвращает прерывания доступа, чтения и записи данных, находящихся в общей памяти,
- 25. Синхронизация в OpenMP: тип barrier Устанавливает режим ожидания завершения работы всех потоков по достижению barrier Синтаксис
- 26. Синхронизация в OpenMP: тип master В этом случае следующий за описанием блок выполняется только в главном
- 27. Синхронизация в OpenMP: тип ordered В этом случае в следующем за описанием блоке циклы выполняются в
- 28. Синхронизация в OpenMP: тип flush В этом случае значения всех общих переменных потоков должны быть “сброшены”
- 29. Дополнительные возможности
- 30. Миграция данных с помощью директивы threadprivate в Fortran Директива threadprivate позволяет сохранять данные параллельных потоков на
- 31. Миграция данных с помощью директивы threadprivate в С/С++ Синтаксис С/С++ #pragma omp threadprivate (cb1 [, cb2]…)
- 32. Передача данных при миграции - copyin С помощью выражения copyin можно просто передавать данные из главного
- 33. Пример передачи данных float* work; int size; float val; #pragma omp threadprivate(work,size,val) void build_work() { int
- 34. Дополнительные возможности OpenMP: функции блокировки C/C++ void omp_init_lock(omp_lock_t *lock) – блокирует объект с указателем lock void
- 35. OpenMP 3.1 Концепция задач task taskwait Вложенный параллелизм Области действия internal control variables (ICVs) Добавлена max-active-levels-var
- 36. OpenMP 4.0 Векторизация явная векторизация циклов: simd комбинация с for (#pragma omp parallel for simd) …
- 38. Скачать презентацию