是否可以修復使用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)。 –