Распараллеливание на компьютерах с общей памятью

Смотреть слайды в полном размере
Презентация Распараллеливание на компьютерах с общей памятью

Презентация «Распараллеливание на компьютерах с общей памятью» содержит 45 слайдов и доступна в формате ppt. Размер файла: 175.45 KB

Вы можете предварительно ознакомиться с презентацией, просмотреть текст и слайды к ней, а также, в случае, если она вам подходит - скачать файл для редактирования или печати.

Просмотреть и скачать

Pic.1
Спецкурс кафедры «Вычислительной математки» Параллельные алгоритмы вычислительной алгебры Александр
Спецкурс кафедры «Вычислительной математки» Параллельные алгоритмы вычислительной алгебры Александр Калинкин Сергей Гололобов
Pic.2
Часть 3: Распараллеливание на компьютерах с общей памятью Средства программирования для компьютеров
Часть 3: Распараллеливание на компьютерах с общей памятью Средства программирования для компьютеров с общей памятью (OpenMP, TBB, Cilk, OpenCL, OpenACC) Понятие потока в вычислениях на компьютерах с …
Pic.3
Средства программирования для компьютеров с общей памятью Компьютер с общей памятью (shared memory)
Средства программирования для компьютеров с общей памятью Компьютер с общей памятью (shared memory) Особенность: автоматический обмен информацией через общую память (все ядра могут прочитать любой …
Pic.4
Средства программирования для компьютеров с общей памятью Основное средство программирования: OpenMP
Средства программирования для компьютеров с общей памятью Основное средство программирования: OpenMP (система директив препроцессора, которые сообщают компилятору, какие куски кода можно …
Pic.5
Понятие потока Поток (нить, thread) – блок команд и данных для исполнения на одном из исполняющих мо
Понятие потока Поток (нить, thread) – блок команд и данных для исполнения на одном из исполняющих модулей\ядер (могут быть виртуальными) Потоки деляться на физические (привязанные к ядрам …
Pic.6
Понятие потока Нужно знать, что существуют механизмы, которые позволяют пытаться установить связь ме
Понятие потока Нужно знать, что существуют механизмы, которые позволяют пытаться установить связь между реальными, виртуальными и программными потоками (affinity) – либо через функции (GLibc), либо …
Pic.7
Уровни параллелизма
Уровни параллелизма
Pic.8
Физический уровень для 2-процессорного сервера
Физический уровень для 2-процессорного сервера
Pic.9
Виртуальный физический (hyperthreading) уровень (тот же сервер)
Виртуальный физический (hyperthreading) уровень (тот же сервер)
Pic.10
Уровень операционной системы (тот же сервер)
Уровень операционной системы (тот же сервер)
Pic.11
Уровень программы (тот же сервер)
Уровень программы (тот же сервер)
Pic.12
Влияние гиперсрединга
Влияние гиперсрединга
Pic.13
Влияние операционной системы (перетасовка)
Влияние операционной системы (перетасовка)
Pic.14
Влияние неоднородной (NUMA) памяти
Влияние неоднородной (NUMA) памяти
Pic.15
Влияние распределения потоков по ядрам 1
Влияние распределения потоков по ядрам 1
Pic.16
Влияние распределения потоков по ядрам 2
Влияние распределения потоков по ядрам 2
Pic.17
Инструменты Intel для решения проблем
Инструменты Intel для решения проблем
Pic.18
Работа с установками affinity
Работа с установками affinity
Pic.19
Рекомендации
Рекомендации
Pic.20
Особенности параллельных программ Основа – обычная последовательная программа Дополнена директивами
Особенности параллельных программ Основа – обычная последовательная программа Дополнена директивами препроцессора, которые сообщают компилятору информацию о том, какого рода параллелизм возможен в …
Pic.21
Представление об управляющих конструкциях OpenMP Принцип работы: интерпретация куска программы как п
Представление об управляющих конструкциях OpenMP Принцип работы: интерпретация куска программы как программы для многих потоков . . . Как при этом выглядит программа? Сейчас узнаем. . .
Pic.22
Представление об управляющих конструкциях OpenMP Директивы компилятора: #pragma omp NAME [clause [cl
Представление об управляющих конструкциях OpenMP Директивы компилятора: #pragma omp NAME [clause [clause]…] (Си) <!,*,c>$OMP NAME [clause [clause]…] (Фортран) Пример #pragma omp parallel for …
Pic.23
Представление об управляющих конструкциях OpenMP Полезные функции void omp_set_num_threads(int num_t
Представление об управляющих конструкциях OpenMP Полезные функции void omp_set_num_threads(int num_threads); (Си) subroutine omp_set_num_threads(num_threads) (Фортран) integer num_threads int …
Pic.24
Представление об управляющих конструкциях OpenMP Полезные функции для продвинутого параллелизма void
Представление об управляющих конструкциях OpenMP Полезные функции для продвинутого параллелизма void omp_init_lock(omp_lock_t *lock); void omp_init_nest_lock(omp_nest_lock_t *lock); subroutine …
Pic.25
Представление об управляющих конструкциях OpenMP Пример OpenMP программы #pragma omp parallel for pr
Представление об управляющих конструкциях OpenMP Пример OpenMP программы #pragma omp parallel for private(i) firstprivate(N) shared(a,b) lastprivate(j) for (i=0; i<N; i++,j++) { sum+=a[i]*b[i]; }
Pic.26
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 0) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 0) sum=0. 0; for (int i=0; i<N; i++) { sum+=a[i]*b[i]; }
Pic.27
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 1) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 1) sum=0. 0; #pragma omp parallel for for (int i=0; i<N; i++) { sum+=a[i]*b[i]; }
Pic.28
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 2) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 2) sum=0. 0; #pragma omp parallel for for (int i=0; i<N; i++) { #pragma omp atomic sum+=a[i]*b[i]; }
Pic.29
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 3) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 3) sum=0. 0; #pragma omp parallel for reduction(+:sum) for (int i=0; i<N; i++) { sum+=a[i]*b[i]; }
Pic.30
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 4) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 4) sum=0. 0; #pragma omp parallel for reduction(+:sum) num_threads(4) for (int i=0; i<N; i++) { …
Pic.31
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 5) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 5) sum=0. 0; #pragma omp parallel for reduction(+:sum) shared(a,b) for (int i=0; i<N; i++) { …
Pic.32
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 6) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 6) sum=0. 0; #pragma omp parallel for reduction(+:sum) shared(a,b) schedule(dynamic) for (int i=0; i<N; …
Pic.33
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 7) sum=0. 0
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 7) sum=0. 0; int M=32; #pragma omp parallel for reduction(+:sum) shared(a,b) for (int i=0; i<N/M; i++) { …
Pic.34
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 8) #pragma
Примеры простейших эффективных и неэффективных алгоритмов Скалярное произведение (Версия 8) #pragma omp parallel sections { #pragma omp section { //printf("I'm thread No. %i\n", …
Pic.35
Примеры простейших эффективных и неэффективных алгоритмов Итог: Увы, но на другом компьютере результ
Примеры простейших эффективных и неэффективных алгоритмов Итог: Увы, но на другом компьютере результаты могут существенно отличаться от приведённых в таблице выше. . .
Pic.36
Синхронизация параллельных вычислений Простейшая конструкция синхронизации: barrier #pragma omp barr
Синхронизация параллельных вычислений Простейшая конструкция синхронизации: barrier #pragma omp barrier !$omp barrier Исполнение параллельного кода присотанавливается до тех пор, пока все потоки не …
Pic.37
Синхронизация параллельных вычислений loop: #pragma omp parallel for shared(a,b) reduction(+:sum) fo
Синхронизация параллельных вычислений loop: #pragma omp parallel for shared(a,b) reduction(+:sum) for (int i=begin; i<end; i++) { sum+=a[i]*b[i]; }
Pic.38
Синхронизация параллельных вычислений Конструкции Single & Master #pragma omp single\master !$om
Синхронизация параллельных вычислений Конструкции Single & Master #pragma omp single\master !$omp single\master Исполнение данной части кода происходит одним из потоков и содержит барьер неявно …
Pic.39
Синхронизация параллельных вычислений loop: #pragma omp parallel for shared(a,b) reduction(+:sum) fo
Синхронизация параллельных вычислений loop: #pragma omp parallel for shared(a,b) reduction(+:sum) for (int i=begin; i<end; i++) { sum+=a[i]*b[i]; }
Pic.40
Синхронизация параллельных вычислений Конструкция Critical #pragma omp critical !$omp critical Испол
Синхронизация параллельных вычислений Конструкция Critical #pragma omp critical !$omp critical Исполнение данной части кода происходит потоками по очереди Польза: Гарантирует исполнение куска кода …
Pic.41
Синхронизация параллельных вычислений loop: #pragma omp parallel for shared(a,b) reduction(+:sum) fo
Синхронизация параллельных вычислений loop: #pragma omp parallel for shared(a,b) reduction(+:sum) for (int i=begin; i<end; i++) { sum+=a[i]*b[i]; }
Pic.42
Синхронизация параллельных вычислений Конструкция Flush #pragma omp flush !$omp flush Делает видимой
Синхронизация параллельных вычислений Конструкция Flush #pragma omp flush !$omp flush Делает видимой всем часть памяти (переменные), которые принадлежат данному потоку Польза: Позволяет организовать …
Pic.43
Немного об OpenMP 4. * OpenMP 4. 0 – это ответ на вызов альтернативного стандарта OpenACC Дополнения
Немного об OpenMP 4. * OpenMP 4. 0 – это ответ на вызов альтернативного стандарта OpenACC Дополнения, связанные с использованием вспомогательных устройств типа Intel® Xeon Phi™ или GPGPU всевозможных …
Pic.44
Резюме Компьютер с общей памятью является простейшим вариантом параллельного компьютера Компьютер с
Резюме Компьютер с общей памятью является простейшим вариантом параллельного компьютера Компьютер с общей памятью исполняет потоки команд с данными (threads) Наиболее устоявшийся подход к …
Pic.45
Задания на понимание Напишите программу на Си, которая выполняет Версии 0-8 алгоритма для вычисления
Задания на понимание Напишите программу на Си, которая выполняет Версии 0-8 алгоритма для вычисления скалярного произведения на вашем многоядерном компьютере для векторов длины 67108864. Выпишите …


Скачать презентацию

Если вам понравился сайт и размещенные на нем материалы, пожалуйста, не забывайте поделиться этой страничкой в социальных сетях и с друзьями! Спасибо!