我在带有Xeon处理器的Mac Pro上运行完全并行的矩阵乘法程序.我创建了8个线程(与核心一样多的线程),并且没有共享写入问题(没有写入相同的位置).出于某种原因,我使用pthread_create和使用的pthread_join速度大约是使用速度的两倍#pragma openmp.
在任何事情上没有其他差异......相同的编译选项,两种情况下相同的线程数,相同的代码(pthread显然除了pragma/部分)等.
循环非常大 - 我没有并行化小循环.
(我不能真正发布代码,因为它是学校的工作.)
为什么会发生这种情况?OpenMP不使用POSIX线程吗?怎么会更快?
在Win32中,您可以通过在CREATE_SUSPENDED中使用dwCreationFlags参数来创建挂起模式的线程.我正在寻找与pthreads类似的功能.请注意,我不希望在运行它之后暂停该线程,然后使用条件变量暂停它,但实际上是在挂起模式下创建它,然后稍后启动它.
使用这种方法的优点是我可以在运行之前为该线程分配一些属性.例如,在启动之前将其绑定到某个核心,这比首次启动更有效,然后将其分配给核心,因为它可能会从一个核心移动到另一个核心.
如果不可能,我们至少可以在调用pthread_create时将线程绑定到核心吗?