嗨,我最近开始在 openMP 中编程。我想知道每次重新启动时是否有任何指令可用于将特定线程与特定线程相关联。
假设我有 4 个核心,每个核心有 4 个线程。核心 1 - 线程 1 核心 2 - 线程 2 核心 3 - 线程 3 核心 4 - 线程 4。
现在,我想要的是,每次调度/启动线程 1 时,它都应该在核心 1 本身上启动。它就像线程绑定。
嗨,我最近开始在 openMP 中编程。我想知道每次重新启动时是否有任何指令可用于将特定线程与特定线程相关联。
假设我有 4 个核心,每个核心有 4 个线程。核心 1 - 线程 1 核心 2 - 线程 2 核心 3 - 线程 3 核心 4 - 线程 4。
现在,我想要的是,每次调度/启动线程 1 时,它都应该在核心 1 本身上启动。它就像线程绑定。
当前的 OpenMP 修订版中没有这样的编译指示,但指定绑定的标准方法将出现在 OpenMP 4.0 中。在此之前,您可以使用特定于供应商的绑定扩展,例如 GNU 的GOMP_CPU_AFFINITY或 Intel 的KMP_AFFINITY。
您可以创建一个调用 4 个函数的包装器,即 F1()、F2()、F3() 和 F4()。
现在使用,
#pragma omp sections
{
#pragma omp section
{
F1()
}
#pragma omp section
{
F2()
}
#pragma omp section
{
F3()
}
#pragma omp section
{
F4()
}
}
这里 F1() 将始终在 thread0 上运行,F2() 在 thread1 上运行,依此类推。
现在在终端中执行此操作:
导出 GOMP_CPU_AFFINITY="0 1 2 3"
现在 Thread0 连接到 Core0 , Thread1 连接到 Core1 等等。