OpenMP 线程在同一 CPU 核心上执行

12 浏览
0 Comments

OpenMP 线程在同一 CPU 核心上执行

配置:Windows 10,mingw-x64,Core 2(4个逻辑核心)

以下代码

#include 
#include 
#include 
int main() {
    #pragma omp parallel
    {
        std::printf("在线程:%d 上执行任务,位于核心 #%d\n", omp_get_thread_num(),\
                      GetCurrentProcessorNumber());
    }
    return 0;
}

有时输出结果为:

在线程:1 上执行任务,位于核心 #1
在线程:0 上执行任务,位于核心 #2
在线程:2 上执行任务,位于核心 #2
在线程:3 上执行任务,位于核心 #2

虽然大多数情况下输出结果为:

在线程:2 上执行任务,位于核心 #1
在线程:1 上执行任务,位于核心 #3
在线程:0 上执行任务,位于核心 #2
在线程:3 上执行任务,位于核心 #0

这是预期的结果。

如何确保线程在不同的核心上具有亲和性?有没有一种方法可以强制调度程序这样做?

0