C++ 使用openMP在指定内核上执行特定函数

C++ 使用openMP在指定内核上执行特定函数,c++,parallel-processing,openmp,core,C++,Parallel Processing,Openmp,Core,是否可以使用OpenMP修复在特定内核上运行的一个函数 例如:我有两个函数,即:Foo1和Foo2 我的计算机(Linux操作系统)有两个核心:core0和core1 那么,我如何同时在core0上运行应用程序Foo1和Foo2始终在core1上运行呢 我用C++进行编码。< /P> 请帮忙 听起来你想这么做 将OpenMP线程数设置为2(omp\u set\u num\u threads(2)),并 在并行区域中,检查线程ID并相应地调用Foo1或Foo2 OpenMP文档中描述了如何执行这些

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

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

我的计算机(Linux操作系统)有两个核心:core0core1

那么,我如何同时在core0上运行应用程序Foo1和Foo2始终在core1上运行呢

<>我用C++进行编码。< /P>
请帮忙

听起来你想这么做

  • 将OpenMP线程数设置为2(
    omp\u set\u num\u threads(2)
    ),并
  • 在并行区域中,检查线程ID并相应地调用
    Foo1
    Foo2
  • OpenMP文档中描述了如何执行这些操作


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

    感谢@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\u CPU\u AFFINITY=“0 1”


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

    阅读这个术语。实际上,我想将Foo1绑定到core0,Foo2绑定到core1。我得到了一些绑定它的命令:export-OMP\u-PROC\u-bind=true将线程绑定到特定的核心,即不进行切换,或者我们可以使用:GOMP\u-CPU\u-Affinity=“0-1”设置CPU相关性。它将线程0设置为core0,将线程1设置为core1。