Смешивание OpenMP с pthreads - PullRequest
       9

Смешивание OpenMP с pthreads

8 голосов
/ 15 сентября 2011

У меня вопрос: стоит ли смешивать OpenMP с pthreads?Есть ли приложения, которые объединяют эти два.Это хорошая практика, чтобы смешать эти два?Или типичные приложения обычно просто используют один из двух.

Ответы [ 6 ]

9 голосов
/ 15 сентября 2011

Как правило, лучше просто использовать один или другой.Но для себя, по крайней мере, я регулярно смешиваю два, и это безопасно, если все сделано правильно.

Наиболее распространенный случай, который я делаю, это когда у меня есть библиотека более низкого уровня, которая содержит потоки с использованием pthreads, ноя вызываю его в пользовательском приложении, которое использует OpenMP.

В некоторых случаях это небезопасно.Например, если вы уничтожили pthread перед тем, как выйти из всех областей OpenMP в этом потоке.

0 голосов
/ 24 сентября 2015

Мне очень трудно, чтобы вам понадобилось использовать pthreads, если вы уже используете OpenMP. Вы можете использовать прагму section для запуска процедур с различными функциями. Я лично использовал его для реализации параллелизма конвейера.

В настоящее время OpenMP делает гораздо больше, чем pthreads, поэтому, если вы используете OpenMP, вы покрыты. Например, в GCC 5.0 forward реализованы расширения OpenMP, которые экспортируют код в графический процессор. : D

0 голосов
/ 18 сентября 2015

Конечно.Я делаю это все время.Ты должен быть осторожен.Зачем это делать?Потому что есть некоторые случаи, в которых вы должны!В моделях со сложными задачами, таких как конвейерные функции, в которых вы хотите поддерживать работу канала, это может быть единственным способом воспользоваться всей доступной мощностью.

0 голосов
/ 09 декабря 2011

В Windows и Linux это работает нормально.Однако OpenMP не работает на Mac, если он запущен в новом потоке.Он работает только в основном потоке.

Похоже, что поведение того, как смешивать два модуля потоков, не определено.Некоторые платформы / компиляторы поддерживают это, другие нет.

0 голосов
/ 15 сентября 2011

Нет проблем.

Назначение OpenMP и pthreads различно. OpenMP идеально подходит для написания параллелизма на уровне цикла. Однако OpenMP не подходит для выражения сложных потоков связи и синхронизации. OpenMP не поддерживает все виды синхронизации, такие как условные переменные.

Предостережение, как указал Mystrical, заключается в обработке и доступе к собственным потокам в параллельных конструкциях OpenMP.

К вашему сведению, Intel TBB и Cilk Plus также часто используются по-разному.

0 голосов
/ 15 сентября 2011

Я так не думаю ..

Это не очень хорошая идея. Видите ли, OpenMP в основном создан для мобильности. Теперь, если вы используете pthread, вы теряете саму его суть!

pthread может поддерживаться только POSIX-совместимыми ОС. Хотя OpenMP можно использовать практически на любой ОС, при условии, что она его поддерживает.

В любом случае, OpenMP дает вам абстракцию, намного превышающую ту, которую предоставляет pthead.

...