如何在openMP中将线程与核心相关联

时间:2013-01-29 22:41:52

标签: openmp

您好我最近开始在openMP中编程。 我想知道是否有任何指令可以在每次重新启动时将特定线程与特定线程相关联。

假设每个核心有4个核心和4个线程。 核心1 - 线程1 核心2 - 线程2 核心3 - 线程3 核心4 - 线程4。

现在,我想要的是,每次调度/启动线程1时,它应该从核心1本身开始。它就像线程绑定一样。

2 个答案:

答案 0 :(得分:2)

当前的OpenMP版本中没有这样的编译指示,但OpenMP 4.0中提供了指定绑定的标准方法。在此之前,您可以使用特定于供应商的绑定扩展,如GNU的GOMP_CPU_AFFINITY或英特尔的KMP_AFFINITY

答案 1 :(得分:0)

你可以创建一个包含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()将始终在thread1上运行,F2()在thread1上运行,依此类推。

现在在终端中执行此操作:

导出GOMP_CPU_AFFINITY =“0 1 2 3”

现在Thread0连接到Core0,Thread1连接到Core1,依此类推。