是否可以使用 OpenMP 修复一个函数以在特定内核上运行?
例如:我有两个函数,即:Foo1和Foo2
我的电脑(Linux 操作系统)有两个核心:core0 和 core1。
那么,我怎样才能同时运行应用程序Foo1始终在core0和Foo2始终在core1?
我正在使用 C++ 进行编码。
听起来你想要
omp_set_num_threads(2)
),并且 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_CPU_AFFINITY="0 1"
将线程 1 绑定到 core0,将线程 2 绑定到 core1。