是否可以修复使用OpenMP在特定内核上运行的一个功能?使用openMP在指定的内核上执行特定功能
例如:我有即两个功能:Foo1和foo2的
而且我的电脑(Linux操作系统)有两个核心:CORE0和核心-1。
所以,我怎么能在核心-1同时运行应用Foo1总是CORE0和foo2的始终?
我使用C++进行编码。
请帮忙!!
是否可以修复使用OpenMP在特定内核上运行的一个功能?使用openMP在指定的内核上执行特定功能
例如:我有即两个功能:Foo1和foo2的
而且我的电脑(Linux操作系统)有两个核心:CORE0和核心-1。
所以,我怎么能在核心-1同时运行应用Foo1总是CORE0和foo2的始终?
我使用C++进行编码。
请帮忙!!
感谢@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至核心-1。
听起来好像要
omp_set_num_threads(2)
),和Foo1
或Foo2
相应。在OpenMP文档中介绍了如何完成这些操作。
另一种方法是创建两个openMP任务,每个任务运行一个函数。
其实我想将Foo1绑定到core0和Foo2到core1.我有一些绑定它的命令:export OMP_PROC_BIND = true会将线程绑定到特定的核心,即不会有切换,或者我们可以使用以下设置CPU Affinity:GOMP_CPU_AFFINITY =“0 1”它将线程0设置为core0,将线程1设置为core1。 – Aizen
阅读术语[进程关联性](http://en.wikipedia.org/wiki/Processor_affinity)。 –