2012-12-26 53 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