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

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Параллельное программирование с использованием OpenMP. Лекция 2 абсолютно бесплатно. Урок-презентация на эту тему содержит всего 27 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Параллельное программирование с использованием OpenMP. Лекция 2



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    27 слайдов
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    1.21 MB
  • Просмотров:
    112
  • Скачиваний:
    0
  • Автор:
    неизвестен



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

№1 слайд
Содержание слайда:

№2 слайд
Параллельное программирование
Содержание слайда: Параллельное программирование с использованием OpenMP

№3 слайд
Директивы openmp
Содержание слайда: Директивы openmp

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

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

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

№7 слайд
Директива critical include lt
Содержание слайда: Директива critical #include <omp.h> 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 #pragma omp barrier newline

№9 слайд
Директива 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) Вернуть число потоков в параллельной области int omp_get_num_threads(void) Вернуть максимальное число потоков, которое может быть создано в следующих параллельных областях без параметра num_threads int omp_get_max_threads(void)

№12 слайд
Функции управления
Содержание слайда: Функции управления выполнением… Вернуть номер потока в параллельной области 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 omp_get_nested(void) Возвращает true, если вызвана из параллельной области программы int omp_in_parallel(void)

№14 слайд
Функции управления замками В
Содержание слайда: Функции управления замками… В качестве замков используются переменные типа 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_unset_lock(omp_lock_t *lock) Попробовать захватить замок. Если замок занят, возвращает false int omp_test_lock(omp_lock_t *lock)

№16 слайд
Переменные окружения
Содержание слайда: Переменные окружения

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

№18 слайд
Векторизация цикла
Содержание слайда: Векторизация цикла

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

№20 слайд
Директива simd pragma simd
Содержание слайда: Директива 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
Содержание слайда: Директива 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
Содержание слайда: Директива 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 У
Содержание слайда: Параметр proc_bind У директивы parallel в стандарте 4.0 был добавлен параметр proc_bind, определяющий способы «привязки» потоков к исполнительным устройствам Формат параметра proc_bind #pragma omp parallel proc_bind(master | close | spread) master Назначить все потоки в команде на то же устройство, на котором исполняется master-поток

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

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

Скачать все slide презентации Параллельное программирование с использованием OpenMP. Лекция 2 одним архивом: