2012-05-15 45 views
1

我在我的程序中使用了openmp,但並沒有加快速度。我的猜測是,因爲它每次在循環openmp被使用時都會產生線程。有沒有辦法在程序中產生一次線程。如何用openmp產生一次線程

+1

除了產卵線程外,還有一些gazzilion其他的東西可能會減慢速度。你能提供更多的細節嗎?比如特定的循環? – Mysticial

+0

可能的重複http://stackoverflow.com/questions/10589798/openmp-create-threads-only-once –

+0

此問題已經被回答[這裏](http://stackoverflow.com/questions/8132565/how- DO--ASK-的OpenMP到創建線程-only-once的-AT-每個運行的最節目)。基本上,大多數OpenMP運行時只在程序開始時創建線程。所以肯定還有另一個減速的原因。 – betabandido

回答

1

你絕對應該提供代碼,根據其他評論。

一般來說,openMP應用程序設計爲在其處理器數量的1-4倍之間運行線程。

對於任何人誰是有興趣在控制線程的數量產生了,從:https://computing.llnl.gov/tutorials/openMP/

多少個線程?

線程的並行區域的數量由下面的因素決定的,按優先級順序:

  • 評價IF子句的NUM_THREADS子句的
  • 設置
  • 使用OMP_SET_NUM_THREADS的()庫函數
  • OMP_NUM_THREADS環境變量的設置
  • 實現默認 - 通常是一個節點上的CPU數量,雖然它可能是dy namic(見下一個項目符號)。

線程被從0(主線程)到N-1

如何設置線程數環境變量的一個例子:

export OMP_NUM_THREADS=8 

希望它能幫助。