Я использую программу параллельного умножения матриц на Mac Pro с процессором Xeon. Я создаю 8 потоков (столько же потоков, сколько ядер), и нет общих проблем с записью (нет записи в те же места). По некоторым причинам мое использование pthread_create
и pthread_join
примерно вдвое медленнее, чем использование #pragma openmp
.
Никаких других отличий нет ... одинаковые параметры компиляции, одинаковое количество потоков в обоих случаях, одинаковый код (за исключением частей pragma / pthread
, очевидно) и т. Д.
А петли очень большие - я не распараллеливаю маленькие петли.
(Я не могу опубликовать код, потому что это школьная работа.)
Почему это может происходить? Разве OpenMP не использует сами потоки POSIX? Как это может быть быстрее?