РуЛиб - онлайн библиотека > Автор неизвестен > Самиздат, сетевая литература > Параллельное программирование на OpenMP > страница 2

Читаем онлайн «Параллельное программирование на OpenMP» 2 cтраница

стр.
(собрать) вычислительную систему, которая будет эффективно
решать поставленную задачу, но адекватна ли будет при этом цена такого решения. Можно
выделить два направления развития компьютерной техники: векторные машины (Cray) и
кластеры (обычные компьютеры, стандартное ПО).
Написание параллельных программ
Разработка параллельных программ (ПП) состоит из трех основных этапов:
Декомпозиция задачи на подзадачи. Идеально, чтобы эти подзадачи работали независимо
друг от друга (принцип локальности данных). Обмен данными между подзадачами является
дорогой операцией, особенно, если это обмен по сети.
Распределение задачи по процессорам (виртуальным процессорам). В некоторых случаях
решение этого вопроса можно оставить на усмотрение среды выполнения ПП.
Написание программы с использованием какой-либо параллельной библиотеки. Выбор
библиотеки может зависеть от платформы, на которой программа будет выполняться, от
требуемого уровня производительности и от природы самой задачи.
Параллельные архитектуры
В массе своей все вычислительные комплексы и компьютеры делятся на три группы:
Системы с распределенной памятью. Каждый процессор имеет свою память и не может
напрямую доступаться к памяти другого процессора.
Разрабатывая программы подобные системы программист в явном виде должен задать всю
систему коммуникаци (Передача сообщений – Message Passing). Библиотеки: MPI, PVM,
Shmem (Cray only).
Системы с общей (разделяемой) памятью. Процессор может напрямую обращаться в
память другого процессора. Процессоры могут сидеть на одной шине (SMP). Разделяемая
память может быть физически распределенной, но тогда стоимость доступа к удаленной
памяти может быть очень высока и это должен учитывать разработчик ПП.
Подходы к разработке ПО: Threads, директивы компилятора (OpenMP), механизм передачи
сообщения.
Комбинированные системы. В кластерах могут объединяться компьютеры различной
конфигурации.
OpenMP
Введение в OpenMP
OpenMP – механизм написания параллельных программ для систем с общей памятью.
Состоит из набора директив компилятора и библиотечных функций.
Позволяет достаточно легко создавать многопоточные приложения на С/С++, Fortran.
Поддерживается производителями аппаратуры (Intel, HP, SGI, Sun, IBM), разработчиками
компиляторов (Intel, Microsoft, KAI, PGI, PSR, APR, Absoft)
Программная модель OpenMP
Основной поток порождает дочерние потоки по мере необходимости.
Модель fork-join.
Программирование путем вставки директив компилятора в ключевые места исходного кода
программы.
Компилятор интерпретирует эти директивы и вставляет в соответствующие места
программы библиотечные вызовы для расспараллеливания участков кода.
Последовательный код
Параллельный код
void main(){
double x[1000];
for(i=0; i
стр.