2012-12-26 52 views
0

是否可以修复使用OpenMP在特定内核上运行的一个功能?使用openMP在指定的内核上执行特定功能

例如:我有即两个功能:Foo1foo2的

而且我的电脑(Linux操作系统)有两个核心:CORE0核心-1

所以,我怎么能在核心-1同时运行应用Foo1总是CORE0foo2的始终?

我使用C++进行编码。

请帮忙!!

+3

阅读术语[进程关联性](http://en.wikipedia.org/wiki/Processor_affinity)。 –

回答

0

感谢@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。

1

听起来好像要

  1. 设置的OpenMP线程数为2(omp_set_num_threads(2)),和
  2. 并行区域,检查线程ID和呼叫Foo1Foo2相应。

在OpenMP文档中介绍了如何完成这些操作。

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

+1

其实我想将Foo1绑定到core0和Foo2到core1.我有一些绑定它的命令:export OMP_PROC_BIND = true会将线程绑定到特定的核心,即不会有切换,或者我们可以使用以下设置CPU Affinity:GOMP_CPU_AFFINITY =“0 1”它将线程0设置为core0,将线程1设置为core1。 – Aizen