Содержание
- 2. Различие между тредами и процессами Процессы Треды
- 3. Общие и распределенные данные var var var распределенные общие
- 4. Архитектура OpenMP Приложение OpenMP компилятор OpenMP библиотека Треды ОС Пользователь Переменные среды
- 5. Модель выполнения OpenMP приложения
- 6. Работа с вычислительным пространством – число тредов Мастер-тред имеет номер 0 Число тредов, выполняющих работу определяется:
- 7. Работа с вычислительным пространством – динамическое определение числа тредов В некоторых случаях целесообразно устанавливать число тредов
- 8. Определение числа процессоров, тредов и своих координат в системе int omp_get_num_procs() возвращает количество процессоров в системе;
- 9. #include #include #include main(int argc, char* argv[]) { omp_set_num_threads(atoi(argv[1])); printf("Total number of processors is %d\n", omp_get_num_procs());
- 10. Общий синтаксис директив OpenMP #pragma omp directive_name [clause[clause ...]] newline Действия, соответствующие директиве применяются непосредственно к
- 11. Директива parallel Данная директива – единственный способ инициировать параллельное выполнение программы. #pragma omp parallel [clause ...]
- 12. #include main () { int nthreads, tid; #pragma omp parallel private(nthreads, tid) { tid = omp_get_thread_num();
- 13. Опции для данных Данные, видимые в области, объемлющей блок параллельного исполнения, являются общими (shared). Переменные, объявленные
- 14. Опция firstprivate обладает той же семантикой, что и опция private. При этом, все копии переменной инициализируются
- 15. Опция default Опция default задает опцию по-умолчанию для переменных. Пример: #pragma omp parallel default(private) Опция shared
- 16. опция reduction Опция reduction определяет что на выходе из параллельного блока переменная получит комбинированное значение. Пример:
- 17. Глобальные общие данные Проблема: опция private «работает» только для статически-видимых ссылок в пределах параллельного участка: static
- 18. Директива threadprivate #omp threadprivate (список глобальных переменных) переменные становятся общими для всех тредов: static int a;
- 19. Опция copyin Опция copyin директивы parallel определяет порядок инициализации threadprivate-переменных: эти переменные инициализируются значением на master-треде
- 20. Управление распределением вычислений Для распределения вычислений применяются конструкции: for sections single
- 21. Директива for #pragma omp for [clause ...] clause: schedule (type [,chunk]) ordered private (list) firstprivate (list)
- 22. Директива предшествует циклу for канонического типа: for(init-expr, var logical_op b, incr_expr) init_expr ::= var = expr
- 23. incr_expr ::= var ++ ++ var var -- -- var var += incr var -= incr
- 24. Опция shedule директивы for Опция shedule допускает следующие аргументы: static - распределение осуществляется статически; dynamic -
- 25. Особенности опции schedule директивы for аргумент chunk можноиспользовать только вместе с типами static, dynamic, guided по
- 26. #include #include #include main(int argc, char* argv[]) { int n, iters, t, i, j; double *a,
- 27. #include #include #include #include main(int argc, char* argv[]) { int n, iters, t, i, j; double
- 28. Результаты эксперимента Компьютер: 2 x 64-разрядный процессор Intel® Itanium-2® 1.6 ГГц.
- 29. Директива sections #pragma omp sections [clause ...] structured_block clause: private (list) firstprivate (list) lastprivate (list) reduction
- 30. Опция lastprivate обладает той же семантикой, что и опция private. При этом, значение переменной после завершения
- 31. Директива single #pragma omp single [clause ...] structured_block Директива single определяет что последующий блок будет выполняться
- 32. Директивы синхронизации master critical barrier atomic flush ordered
- 33. #pragma omp master определяет секцию кода, выполняемого только master-тредом #pragma omp critical [(name)] определяет секцию кода,
- 34. #pragma omp atomic ::== x binop = expr x ++ ++ x x -- -- x
- 35. #paragma omp flush [var-list] ::== x binop = expr x ++ ++ x x -- --
- 36. Решение уравнения Пуассона методом верхней релаксации d2u/dx2 + d2u/dy2 – a * u = f 1
- 37. Разностная схема uijnew = uij – w /b *((ui-1,j + ui+1,j)/dx2 + (ui,j-1 + +ui,j+1)/dy2 +
- 39. Скачать презентацию