0

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

例如:我有两个功能,即:Foo1Foo2

我的电脑(Linux OS)有两个核心:core0core1

那么,我怎样才能同时在 core0 上运行应用程序Foo1和在core1上运行 Foo2呢?

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

请帮忙!!

4

2 回答 2

1

听起来你想

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

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

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

于 2012-12-26T09:24:38.320 回答
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。

于 2012-12-27T04:47:24.440 回答