Когда следует использовать библиотеку OpenMP? - PullRequest
3 голосов
/ 08 апреля 2011

Как я понимаю, OpenMP - это стандарт, а также библиотека для реализации многопоточности в коде C ++.

В Visual C ++ уже есть API-интерфейсы потоков для Windows, а в UNIX есть POSIX-потоки.Я не понимаю, почему это требуется, или в каком сценарии это применимо для использования OpenMP.

РЕДАКТИРОВАТЬ: Есть ли у OpenMP также улучшенная производительность, по сравнению с использованием CreateThread или других функций POSIX (при условии, что подобный код былparellilized)

Ответы [ 2 ]

8 голосов
/ 08 апреля 2011

Системные API потоков (такие как потоки POSIX) требуют, чтобы вы выполняли огромную работу вручную (настройку потоков, разделение работы между потоками, синхронизацию, когда они завершены, разрыв потоков и т. Д.) , Много и много кода, который скрывает то, что вы действительно пытаетесь сделать. И подвержен ошибкам. И утомительно. И зависит от платформы.

OpenMP сделает все это за вас. На мой взгляд, он наиболее подходит для параллелизма данных ; во многих случаях это так же просто, как поместить директиву #pragma omp перед, например, цикл for, и этот цикл будет автоматически многопоточным. Но его также можно использовать для параллелизма задач .

OpenMP не улучшает производительность , в том смысле, что всегда можно написать ручной код многопоточности, который выполняет как минимум ту же версию, что и версия OpenMP. Но очень часто OpenMP дает вам + 90% от теоретической оптимальной производительности с 5 минутами кодирования (при условии, что вы сначала написали свои циклы дружественным к потокам способом).

Я рекомендую прочитать статью Википедии , чтобы найти несколько хороших примеров.

3 голосов
/ 08 апреля 2011

Например, когда вы пытаетесь сделать переносимый код. OpenMP работает как на Windows, так и на Unix-системах. Более того, в большинстве случаев его намного проще использовать, чем манипулировать потоками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...