🗊 Презентация Параллельное программирование с использованием OpenMP. Лекция 2

Нажмите для полного просмотра!
Параллельное программирование с использованием OpenMP. Лекция 2, слайд №1 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №2 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №3 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №4 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №5 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №6 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №7 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №8 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №9 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №10 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №11 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №12 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №13 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №14 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №15 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №16 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №17 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №18 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №19 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №20 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №21 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №22 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №23 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №24 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №25 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №26 Параллельное программирование с использованием OpenMP. Лекция 2, слайд №27

Содержание

Вы можете ознакомиться и скачать презентацию на тему Параллельное программирование с использованием OpenMP. Лекция 2. Доклад-сообщение содержит 27 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Параллельное программирование с использованием OpenMP. Лекция 2, слайд №1
Описание слайда:

Слайд 2


Параллельное программирование с использованием OpenMP
Описание слайда:
Параллельное программирование с использованием OpenMP

Слайд 3


Директивы openmp
Описание слайда:
Директивы openmp

Слайд 4


Директива master Директива master определяет фрагмент кода, который должен быть выполнен только основным потоком Все остальные потоки пропускают...
Описание слайда:
Директива master Директива master определяет фрагмент кода, который должен быть выполнен только основным потоком Все остальные потоки пропускают данный фрагмент кода Завершение директивы не синхронизируется #pragma omp master newline structured_block

Слайд 5


Директива single Директива single определяет фрагмент кода, который должен быть выполнен только одним потоком (любым) Один поток исполняет блок в...
Описание слайда:
Директива single Директива single определяет фрагмент кода, который должен быть выполнен только одним потоком (любым) Один поток исполняет блок в single, остальные потоки приостанавливаются до завершения выполнения блока Формат директивы single #pragma omp single [clause ...] structured_block Возможные параметры (clauses) private(list) firstprivate(list) copyprivate(list) nowait

Слайд 6


Директива critical… Директива critical определяет фрагмент кода, который должен выполняться только одним потоком в каждый текущий момент времени...
Описание слайда:
Директива critical… Директива critical определяет фрагмент кода, который должен выполняться только одним потоком в каждый текущий момент времени (критическая секция) Формат директивы critical #pragma omp critical [name] newline structured_block

Слайд 7


Директива critical #include main() { int x; x = 0; #pragma omp parallel shared(x) { #pragma omp critical x = x + 1; } // end of parallel section }
Описание слайда:
Директива critical #include main() { int x; x = 0; #pragma omp parallel shared(x) { #pragma omp critical x = x + 1; } // end of parallel section }

Слайд 8


Директива barrier Директива barrier определяет точку синхронизации, которую должны достигнуть все потоки для продолжения вычислений (директива должны...
Описание слайда:
Директива barrier Директива barrier определяет точку синхронизации, которую должны достигнуть все потоки для продолжения вычислений (директива должны быть вложена в блок) Формат директивы barrier #pragma omp barrier newline

Слайд 9


Директива atomic Директива atomic определяет переменную, операция с которой (чтение/запись) должна быть выполнена как неделимая Формат директивы...
Описание слайда:
Директива atomic Директива atomic определяет переменную, операция с которой (чтение/запись) должна быть выполнена как неделимая Формат директивы atomic #pragma omp atomic newline statement_expression Возможный формат записи выражения x binop = expr , x++, ++x, x--, --x x должна быть скалярной переменной expr не должно ссылаться на x binop должна быть неперегруженной операцией вида: +, -, *, /, &, ^, |, >>,

Слайд 10


Библиотека функций openmp
Описание слайда:
Библиотека функций openmp

Слайд 11


Функции управления выполнением… Задать число потоков в параллельных областях void omp_set_num_threads(int num_threads) Вернуть число потоков в...
Описание слайда:
Функции управления выполнением… Задать число потоков в параллельных областях void omp_set_num_threads(int num_threads) Вернуть число потоков в параллельной области int omp_get_num_threads(void) Вернуть максимальное число потоков, которое может быть создано в следующих параллельных областях без параметра num_threads int omp_get_max_threads(void)

Слайд 12


Функции управления выполнением… Вернуть номер потока в параллельной области int omp_get_thread_num(void) Вернуть число процессоров, доступных...
Описание слайда:
Функции управления выполнением… Вернуть номер потока в параллельной области int omp_get_thread_num(void) Вернуть число процессоров, доступных приложению int omp_get_num_procs(void) Возвращает true, если вызвана из параллельной области программы int omp_in_parallel(void)

Слайд 13


Функции управления выполнением Включить/выключить вложенный параллелизм int omp_set_nested(int) Вернуть, включен ли вложенный параллелизм int...
Описание слайда:
Функции управления выполнением Включить/выключить вложенный параллелизм int omp_set_nested(int) Вернуть, включен ли вложенный параллелизм int omp_get_nested(void) Возвращает true, если вызвана из параллельной области программы int omp_in_parallel(void)

Слайд 14


Функции управления замками… В качестве замков используются переменные типа omp_lock_t. Инициализировать замок void omp_init_lock(omp_lock_t *lock)...
Описание слайда:
Функции управления замками… В качестве замков используются переменные типа omp_lock_t. Инициализировать замок void omp_init_lock(omp_lock_t *lock) Удалить замок void omp_destroy_lock(omp_lock_t *lock)

Слайд 15


Функции управления замками Захватить замок, если он свободен, иначе ждать освобождения void omp_set_lock(omp_lock_t *lock) Освободить захваченный...
Описание слайда:
Функции управления замками Захватить замок, если он свободен, иначе ждать освобождения void omp_set_lock(omp_lock_t *lock) Освободить захваченный ранее замок void omp_unset_lock(omp_lock_t *lock) Попробовать захватить замок. Если замок занят, возвращает false int omp_test_lock(omp_lock_t *lock)

Слайд 16


Переменные окружения
Описание слайда:
Переменные окружения

Слайд 17


Переменные окружения OMP_SCHEDULE – определяет способ распределения итераций в цикле, если в директиве for использована клауза schedule(runtime)...
Описание слайда:
Переменные окружения OMP_SCHEDULE – определяет способ распределения итераций в цикле, если в директиве for использована клауза schedule(runtime) OMP_NUM_THREADS – определяет число нитей для исполнения параллельных областей приложения OMP_NESTED – разрешает или запрещает вложенный параллелизм OMP_STACKSIZE – задать размер стека для потоков Компилятор с поддержкой OpenMP определяет макрос “_OPENMP”, который может использоваться для условной компиляции отдельных блоков, характерных для параллельной версии программы

Слайд 18


Векторизация цикла
Описание слайда:
Векторизация цикла

Слайд 19


Директива simd… Директива simd – «просьба» компилятору векторизовать нижеследующий(-ие) цикл(-ы) Формат директивы simd #pragma omp simd [clause ...]...
Описание слайда:
Директива simd… Директива simd – «просьба» компилятору векторизовать нижеследующий(-ие) цикл(-ы) Формат директивы simd #pragma omp simd [clause ...] for_loops Возможные параметры (clauses) safelen(length) simdlen(length) aligned(list[ : alignment]) collapse(n) ...

Слайд 20


Директива simd #pragma simd #pragma omp parallel for private(d1, d2, erf1, erf2, invf) for (i = 0; i < N; i++) { invf = invsqrtf(sig2 * pT[i]); d1 =...
Описание слайда:
Директива simd #pragma simd #pragma omp parallel for private(d1, d2, erf1, erf2, invf) for (i = 0; i < N; i++) { invf = invsqrtf(sig2 * pT[i]); d1 = (logf(pS0[i]/pK[i])+(r+sig2*0.5f)*pT[i])/invf; d2 = (logf(pS0[i]/pK[i])+(r-sig2*0.5f)*pT[i])/invf; erf1 = 0.5f + 0.5f * erff(d1 * invsqrt2); erf2 = 0.5f + 0.5f * erff(d2 * invsqrt2); pC[i] = pS0[i]*erf1-pK[i]*expf((-1.0f)*r*pT[i])*erf2; }

Слайд 21


Threadprivate данные
Описание слайда:
Threadprivate данные

Слайд 22


Директива threadprivate const int Size = 4; int gmas[Size]; #pragma omp threadprivate(gmas) void main() { int i; for (i = 0; i < Size; i++) gmas[i] =...
Описание слайда:
Директива threadprivate const int Size = 4; int gmas[Size]; #pragma omp threadprivate(gmas) void main() { int i; for (i = 0; i < Size; i++) gmas[i] = Size - i; #pragma omp parallel if (omp_get_thread_num() == 1) { printf("\n"); for (i = 0; i < Size; i++) printf("gmas[%d] = %d\n", i, gmas[i]); for (i = 0; i < Size; i++) gmas[i] = i; }

Слайд 23


Директива threadprivate printf("\n"); for (i = 0; i < Size; i++) printf("gmas[%d] = %d\n", i, gmas[i]); #pragma omp parallel if...
Описание слайда:
Директива threadprivate printf("\n"); for (i = 0; i < Size; i++) printf("gmas[%d] = %d\n", i, gmas[i]); #pragma omp parallel if (omp_get_thread_num() == 1) { printf("\n"); for (i = 0; i < Size; i++) printf("gmas[%d] = %d\n", i, gmas[i]); } #pragma omp parallel copyin(gmas) if (omp_get_thread_num() == 1) { printf("\n"); for (i = 0; i < Size; i++) printf("gmas[%d] = %d\n", i, gmas[i]); } }

Слайд 24


Привязка потоков
Описание слайда:
Привязка потоков

Слайд 25


Параметр proc_bind У директивы parallel в стандарте 4.0 был добавлен параметр proc_bind, определяющий способы «привязки» потоков к исполнительным...
Описание слайда:
Параметр proc_bind У директивы parallel в стандарте 4.0 был добавлен параметр proc_bind, определяющий способы «привязки» потоков к исполнительным устройствам Формат параметра proc_bind #pragma omp parallel proc_bind(master | close | spread) master Назначить все потоки в команде на то же устройство, на котором исполняется master-поток

Слайд 26


Параметр proc_bind close Распределить потоки по устройствам в порядке «деление по модулю» spread Распределить потоки по устройствам «по блокам»
Описание слайда:
Параметр proc_bind close Распределить потоки по устройствам в порядке «деление по модулю» spread Распределить потоки по устройствам «по блокам»

Слайд 27


Литература Гергель В.П. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. - М.: Изд-во Московского университета, 2010. –...
Описание слайда:
Литература Гергель В.П. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. - М.: Изд-во Московского университета, 2010. – 544 с. Дополнительная литература: Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ-Петербург, 2002. Гергель В.П. Теория и практика параллельных вычислений. - М.: Интернет-Университет, БИНОМ. Лаборатория знаний, 2007. Гергель В.П. Новые языки и технологии параллельного программирования. - М.: Издательство Московского университета, 2012. – 434 с. Гергель В.П., Баркалов К.А., Мееров И.Б., Сысоев А.В. и др. Параллельные вычисления. Технологии и численные методы. Учебное пособие в 4 томах. – Нижний Новгород: Изд-во Нижегородского госуниверситета, 2013. – 1394 с.



Похожие презентации
Mypresentation.ru
Загрузить презентацию