Почему потоки POSIX медленнее, чем OpenMP - PullRequest
9 голосов
/ 13 апреля 2011

Я использую программу параллельного умножения матриц на Mac Pro с процессором Xeon. Я создаю 8 потоков (столько же потоков, сколько ядер), и нет общих проблем с записью (нет записи в те же места). По некоторым причинам мое использование pthread_create и pthread_join примерно вдвое медленнее, чем использование #pragma openmp.

Никаких других отличий нет ... одинаковые параметры компиляции, одинаковое количество потоков в обоих случаях, одинаковый код (за исключением частей pragma / pthread, очевидно) и т. Д.

А петли очень большие - я не распараллеливаю маленькие петли.

(Я не могу опубликовать код, потому что это школьная работа.)

Почему это может происходить? Разве OpenMP не использует сами потоки POSIX? Как это может быть быстрее?

1 Ответ

6 голосов
/ 13 апреля 2011

(отредактировано) Чем занимается ваш основной поток?Не видя ваш код, я догадывался, что основной поток на самом деле едва работает, но все еще потребляет такты, пока завершаются pthreads, затем он запускается снова и продолжается.Каждый раз, когда для его заданных циклов возникают издержки на приостановку / продолжение других потоков.

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

...