使用 openMP 在指定核心上执行特定功能

问题描述 投票:0回答:2

是否可以使用 OpenMP 修复一个函数以在特定内核上运行?

例如:我有两个函数,即:Foo1Foo2

我的电脑(Linux 操作系统)有两个核心:core0core1

那么,我怎样才能同时运行应用程序Foo1始终在core0Foo2始终在core1

我正在使用 C++ 进行编码。

c++ parallel-processing openmp cpu-cores
2个回答
1
投票

听起来你想要

  1. 将 OpenMP 线程数设置为 2 (
    omp_set_num_threads(2)
    ),并且
  2. 并行区域,检查线程ID并相应地调用
    Foo1
    Foo2

OpenMP 文档中描述了如何执行这些操作。

另一种方法是创建两个 openMP 任务,每个任务运行一个函数。


0
投票

感谢@Novelocrat 和@Joachim 的有用评论:

我是这样做的:

int main() {

#pragma omp parallel num_threads(2)
{
    #pragma omp sections
    {
        #pragma omp section
        {
            foo1();
        }
        #pragma omp section
        {
            foo2();
        }
    }
}

return 0; }

现在 foo1() 始终在线程 1 上运行,而 foo2() 始终在线程 2 上运行。

运行时设置环境变量:GOMP_CPU_AFFINITY="0 1"

将线程 1 绑定到 core0,将线程 2 绑定到 core1。

© www.soinside.com 2019 - 2024. All rights reserved.