2011-07-14 40 views
5

3天前我開始使用OpenMP。我想知道如何使用#pragma使每個單核運行一個線程。在更多的細節: -在OpenMP中,我怎樣才能讓每個單核心運行一個線程?

int ncores = omp_get_num_procs();

for(i = 0; i < ncores;i++){

....

}

我想這個for循環分佈在我有那麼的核心,我應該用什麼#pragma

另一件事,那些#pragmas是什麼意思?

#pragma omp parallel

#pragma omp for

#pragma omp parallel for

我與#pragmas

謝謝很多有點糊塗.. :)

回答

8

螺紋釘扎

我想知道如何使用#pragma使每個單核運行一個 單線程。

您使用哪種openmp實現?答案依賴於此。

固定不是用編譯指示定義的。你將不得不使用環境變量。當使用gcc,可以使用環境變量到管腳線程核心:

GOMP_CPU_AFFINITY="0-3" ./main 

結合第一線程到第一核心,所述第二線程的第二,等等。有關更多信息,請參見gomp documentation(第3節,環境變量)。我忘記了如何對PGI和其他編譯器做同樣的事情,但是您應該能夠爲使用流行搜索引擎的編譯器找到答案。

OpenMP編譯

有沒有辦法避免閱讀文檔。例如,請參閱this link to an IBM website。我發現tutorial by Blaise Barney相當有用。

1

新的OpenMP實現(3.0+)使你的生活變得更輕鬆。您可以簡單地將以下行添加到.bashrc或.bash_profile中。

export OMP_PROC_BIND = true

相關問題