OpenMP线程映射到物理核心

时间:2011-01-17 19:57:13

标签: openmp parallel-processing

所以我在网上看了一段时间无济于事。我是新手使用OpenMP,因此不确定这里的术语,但是有没有办法从OMPThread(由omp_get_thread_num();)给出特定机器的映射以及线程将运行的物理内核? / p>

另外,我对OMP如何分配线程感兴趣,例如,当在同一台机器上运行相同的代码时,线程0总是会在同一位置运行?感谢。

2 个答案:

答案 0 :(得分:1)

通常,操作系统负责为线程分配线程,包括使用OpenMP。这是设计上的,也是一件好事 - 您通常希望操作系统能够根据需要在内核之间移动线程(透明地移动到您的应用程序),因为它有时会中断您的应用程序。

某些操作系统API将允许设置线程关联。例如,在Windows上,您可以使用SetThreadAffinityMask强制线程进入特定核心。

答案 1 :(得分:0)

大多数时候Reed是正确的,OpenMP并不关心线程(或处理器)的线程分配。但是,由于缓存重用和数据局部性等问题,我们发现在很多情况下,将线程分配给核心可以提高OpenMP的性能。因此,如果您查看大多数OpenMP实现,您会发现通常有一些环境变量可以设置为将线程“绑定”到核心。 OpenMP ARB尚未指定任何“标准”方式,因此此时由OpenMP实现决定是否以及如何执行此操作。有关这是否应该包含在OpenMP规范中的讨论已经进行了大量讨论,如果可以,那么最好如何进行。