使用OpenMP在指定的核心上执行特定函数

Executing a particular function on specified core using openMP

本文关键字:执行 函数 核心 OpenMP 使用      更新时间:2023-10-16

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

例如:我有两个函数: foo1 foo2

和我的计算机(Linux OS)有两个内核: core0 core1

那么,如何在core0 和 foo2上运行应用程序 foo1始终在core1上同时

我正在使用C 进行编码。

请帮忙!

听起来您想

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

在OpenMP文档中描述了这些事情。

另一种方法是创建两个OpenMP任务,每个任务运行您的一个功能。

感谢@novelocrocat和@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结合。