Вы находитесь на странице: 1из 2

В разработке программ очень важное место занимает этап настройки и ускорения.

До
этого программа представляет собой еще сырой материал, как правило, ее характеристики еще
далеки от запланированных.

Основные принципы настройки и ускорения программ в OpenMP

В первую очередь следует по возможности применять средства автоматизированного


распараллеливания программ.

Чтобы найти и локализовать наиболее трудоемкие участки программы, можно


воспользоваться возможностью профилирования программы (Профилирование — это сбор
характеристик программы во время ее выполнения. При профилировании замеряется время
выполнения и количество вызовов отдельных функций). В настоящее время этот процесс в
значительной степени автоматизирован. Существуют различные сервисные программы,
позволяющие проводить профилирование разрабатываемых параллельных программ (Пр.: Intel
Thread Profiler).

При профилировании программы важно выделить ее критический путь. Критический путь


в многопоточной программе – это наиболее протяженный путь на диаграмме выполнения
потоков. Для его определения необходимо проанализировать диаграмму выполнения потоков в
параллельной программе.

Диаграмма потоков в многопоточной программе

Т1, Т2, Т3 – потоки в программе

Е1, Е2, …, Е12 – события в программе

Длина отрезков на диаграмме соответствует времени выполнения потоков. Образование


параллельных потоков требует затрат времени.

В случае недостаточно эффективного распараллеливания программы следует обратить внимание:

 На распараллеливание конструкций do/for;


 На неэффективность распараллеливания небольших циклов;
 На несбалансированность потоков;
 На недопустимость многочисленных ссылок к переменным в общей памяти;
 На ограниченный объем кэш-памяти (сверхоперативная память, для уменьшения среднего
времени доступа к оперативной памяти);
Процесс – экземпляр программы во время выполнения, которому выделены системные ресурсы
(Пр.: память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не
может получить доступ к переменным другого.

Несколько потоков могут работать с одной и той же областью памяти (определенный способ
выполнения процесса).

Зависимости по данным

При распараллеливании программ надо стремиться к максимально большей независимости


параллельных потоков друг от друга. При этом следует избегать ситуаций, когда одни
параллельные потоки используют данные из других. Если таких ситуаций нет, то говорят, что
параллельные потоки независимы по данным.

Таким образом, при разработке параллельных программ с применением OpenMP важно,


анализируя параллельные алгоритмы, находить в них зависимости по данным и стараться
устранять их по мере возможности. Часто зависимости по данным между петлями циклов могут
быть исключены с помощью модификации алгоритмов. Ниже представлен пример цикла с
зависимостью по данным между петлями цикла.