是否可以使用 OpenMP 修复一个功能以在特定内核上运行?
例如:我有两个功能,即:Foo1和Foo2
我的电脑(Linux OS)有两个核心:core0和core1。
那么,我怎样才能同时在 core0 上运行应用程序Foo1和在core1上运行 Foo2呢?
我正在使用 C++ 进行编码。
请帮忙!!
是否可以使用 OpenMP 修复一个功能以在特定内核上运行?
例如:我有两个功能,即:Foo1和Foo2
我的电脑(Linux OS)有两个核心:core0和core1。
那么,我怎样才能同时在 core0 上运行应用程序Foo1和在core1上运行 Foo2呢?
我正在使用 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。