为什么POSIX线程比OpenMP慢

时间:2011-04-13 03:27:36

标签: c pthreads openmp

我在带有Xeon处理器的Mac Pro上运行完全并行的矩阵乘法程序。我创建了8个线程(与核心一样多的线程),并且没有共享写入问题(没有写入相同的位置)。出于某种原因,我对pthread_createpthread_join的使用速度大约是使用#pragma openmp的两倍。

在任何事情上都没有其他差异......相同的编译选项,两种情况下相同的线程数,相同的代码(显然除了pragma / pthread部分)等等。

循环非常大 - 我没有并行化小循环。

(我不能真正发布代码,因为这是学校的工作。)

为什么会发生这种情况? OpenMP不使用POSIX线程吗?怎么会更快?

1 个答案:

答案 0 :(得分:6)

(编辑)的 你主要做的是什么?在没有看到你的代码的情况下,我猜测主线程实际上几乎没有运行,但是当pthreads完成时仍然在吃掉时钟周期,然后它再次启动并继续。每次给定的周期都有暂停/继续其他线程的开销。

在OpenMP中,主线程可能会进入休眠状态,并在并行区域完成时等待唤醒事件。