Содержание
- 2. СИНТАКСИС ДИРЕКТИВЫ PARALLEL #pragma omp parallel [опции ...] newline { } if (scalar_expression) num_threads (integer_expression) private
- 3. ОПЦИЯ IF if (scalar_expression) – распараллеливание по условию. Если значение выражения ≠ 0, то осуществляется распараллеливание.
- 4. ПРИМЕР #include #include using namespace std; int main() { int n; cout cout cin >> n;
- 5. ОПЦИЯ NUM_THREADS num_threads (integer_expression) – явное задание количества тредов, которые будут выполнять операторы параллельной области. По
- 6. ПРИМЕР #include #include using namespace std; int main() { int n; cout cout cin >> n;
- 7. ЧЕМ ОПРЕДЕЛЯЕТСЯ КОЛИЧЕСТВО ТРЕДОВ? Количество тредов в параллельной области определяется следующими параметрами в порядке старшинства: Значением
- 8. ОПЦИИ ДОСТУПНОСТИ ДАННЫХ Данные – Разделяемые, или общие (для всех тредов) Локальные (копии в каждом треде).
- 9. ОПЦИЯ PRIVATE private (list) - задаёт список переменных, для которых создается локальная копия в каждом треде.
- 10. ПРИМЕР float s = 0; #pragma omp parallel private(s) { s = s + 1;//некорректно }
- 11. ОПЦИЯ FIRSTPRIVATE firstprivate (list) - задаёт список переменных, для которых создается локальная копия в каждом треде.
- 12. ПРИМЕР float s = 0; #pragma omp parallel firstprivate(s) { s = s + 1;//корректно }
- 13. ОПЦИЯ SHARED shared (list) - задаёт список переменных, которые являются общими для всех тредов. Переменные должны
- 14. ОПЦИЯ DEFAULT default (shared|none) default (shared) всем переменным в параллельной области, которым явно не назначена локализация,
- 15. ОПЦИЯ REDUCTION reduction (operator: list) operator: +, *, -, &, |, ^, &&, || задаёт оператор
- 16. ПРИМЕР ... int n = 0; #pragma omp parallel reduction (+: n) { n++; cout cout
- 17. ДИРЕКТИВЫ OPENMP – PARALLEL FOR Основная директива для распараллеливания вычислений (распределения итераций цикла между тредами) .
- 18. ОГРАНИЧЕНИЯ НА ПАРАЛЛЕЛЬНЫЕ ЦИКЛЫ Результат программы не зависит от того, какой именно тред выполнит конкретную итерацию
- 19. СИНТАКСИС ДИРЕКТИВЫ PARALLEL FOR #pragma omp parallel for[опции ...] newline { ...for ... } schedule (type
- 20. СИНТАКСИС ДИРЕКТИВЫ FOR #pragma omp for[опции ...] newline { ...for ... } Используется внутри параллельной области,
- 21. ПРИМЕР: ВЫЧИСЛЕНИЕ СУММЫ void main () { int i; double ZZ, res=0.0; omp_set_num_threads(2) #pragma omp parallel
- 22. ОЦЕНКА ВРЕМЕНИ ВЫПОЛНЕНИЯ ПОСЛЕДОВАТЕЛЬНОЙ И ПАРАЛЛЕЛЬНОЙ ПРОГРАММ Функция double omp_get_wtime() возвращает в вызвавшем треде время в
- 23. ПРИМЕР ЗАМЕРА ВРЕМЕНИ ... double start_time, end_time, tick; start_time = omp_get_wtime(); ... end_time = omp_get_wtime(); tick
- 24. ПРИМЕР: ВЫЧИСЛЕНИЕ ЧИСЛА Π
- 25. ПРИМЕР: ВЫЧИСЛЕНИЕ ЧИСЛА Π void main () { long num_steps; cout cin >> num_steps; double step
- 26. ОПЦИИ ДИРЕКТИВЫ PARALLEL FOR #pragma omp parallel for[опции ...] newline { ...for ... } schedule (type
- 27. ОПЦИЯ LASTPRIVATE lastprivate (list) переменным из списка присваивается результат с последней итерации цикла - значение из
- 28. ОПЦИЯ SCHEDULE – УПРАВЛЕНИЕ НАГРУЗКОЙ schedule (type [,num_iters]) В зависимости от параметров (type, num_iters) выполнение итераций
- 29. STATIC – СТАТИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ЗАГРУЗКИ ТРЕДОВ: - КАЖДЫЙ ТРЕД (С НУЛЕВОГО) БЕРЕТ ДЛЯ ВЫПОЛНЕНИЯ БЛОК ИЗ
- 30. DYNAMIC – ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ЗАГРУЗКИ ТРЕДОВ: КАЖДЫЙ ТРЕД БЕРЕТ ДЛЯ ВЫПОЛНЕНИЯ БЛОК ИЗ ИТЕРАЦИЙ ЦИКЛА. ОСВОБОДИВШИЕСЯ
- 31. GUIDED – ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ЗАГРУЗКИ ТРЕДОВ: - КАЖДЫЙ ТРЕД БЕРЕТ ДЛЯ ВЫПОЛНЕНИЯ N0 (ЗАВИСИТ ОТ РЕАЛИЗАЦИИ)
- 32. RUNTIME – ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ЗАГРУЗКИ ТРЕДОВ CПОСОБ РАСПРЕДЕЛЕНИЯ ИТЕРАЦИЙ ВЫБИРАЕТСЯ ВО ВРЕМЯ РАБОТЫ ПРОГРАММЫ ПО ЗНАЧЕНИЮ
- 33. ПРИМЕР 1 #include #include #include int main(int argc, char *argv[]) {int i; #pragma omp parallel private(i)
- 34. РЕЗУЛЬТАТ
- 35. ЗАДАНИЕ Варьируя число итераций, тредов и размер начального блока, проанализировать распределение итераций по тредам. Изменяется ли
- 36. ПРИМЕР 2 msdn.microsoft.com/ru-ru/library/x5aw0hdf(v=vs.90).aspx
- 37. ЗАДАНИЕ Протестировать программу, изменяя значения основных параметров. Отобразить результат графически. Для каких режимов существенно количество тредов?
- 38. ПРИМЕР ИЛЛЮСТРАЦИИ
- 39. ОПЦИЯ COLLAPSE collapse(n) — n последовательных тесновложенных циклов ассоциируется с данной директивой. Для циклов образуется общее
- 40. ОПЦИЯ ORDERED Опция для указания о том, что в цикле могут встречаться директивы ordered. В этом
- 41. ОПЦИЯ NOWAIT По умолчанию в конце параллельного цикла происходит неявная барьерная синхронизация параллельно работающих тредов –
- 42. ПРИМЕР #include #define CHUNKSIZE 100 #define N 1000 main () { int i, chunk; float a[N],
- 43. ЗАКЛЮЧЕНИЕ ПО РАСПАРАЛЛЕЛИВАНИЮ ЦИКЛОВ При распараллеливании цикла надо убедиться в том, что итерации данного цикла не
- 44. ДИРЕКТИВА SECTIONS Используется для реализации функционального параллелизма. Эта директива определяет набор независимых секций кода, каждая из
- 45. СИНТАКСИС ДИРЕКТИВЫ SECTIONS #pragma omp sections [опции ...] newline private (list) firstprivate (list) lastprivate (list) reduction
- 47. Скачать презентацию