Преимущества многопоточности
Опасности многопоточности
Производительность
Принципиальная схема программирования в OpenMP
Прагмы OpenMP
Процедуры OpenMP
Переменные среды OpenMP
Примеры использования OpenMP
Директивы в OpenMP
Многопоточность
< Четкое разделение логики многопоточности и бизнес-логики должно быть приоритетным для разработчиков, пишущих приложения с массовым параллелизмом. Для этого существует множество причин: простота разработки, простота отладки, а также простота внесения изменений в приложение. При разработке на C/C++ или FORTRAN’е популярным решением этой проблемы является использование OpenMP. OpenMP – это API для написания эффектного и эффективного многопоточного кода.
В сущности, OpenMP используется путем введения набора инструкций в коде в форме комментариев или аннотаций. Сначала код пишется последовательным, а затем в нужные места добавляются аннотации. А когда код компилируется после этого (OpenMP совместимым компилятором), эти аннотации учитываются, и код компилируется так, чтобы использовать потоки согласно этим аннотациям.
Преимущества многопоточности
Такой метод параллельного программирования очень выгоден. Так как программа кодируется для последовательного запуска, а для распараллеливания используются всего лишь аннотации, в случае компилирования кода на обычном компиляторе он всего лишь будет их игнорировать. Этот же код можно скомпилировать и с помощью компилятора OpenMP и запустить параллельно в несколько потоков. Это означает, что разработчику не нужно будет изменять код, если программу нужно запускать на машинах с разной архитектурой: и с поддержкой многопоточности, и без такой поддержки.
Другим преимуществом OpenMP является то, что порции кода могут аннотироваться инкрементально, с очень небольшим изменением кода. Это позволяет чаще тестировать код на правильность функционирования, что важно, поскольку разработчик мог бы распараллелить многие порции кода, что затем вызвало бы различия в исполнении кода; такие случаи компилятор редко обнаруживает, и их обязательно нужно обнаруживать путем тестирования.