我正在考慮一個線程池將執行代碼塊的設計,它可能包含OpenMP語句(主要是並行)。 (類似於:How to deal with OpenMP thread pool contention我猜)。 我的問題是,如果OpenMP並行區域每次都由不同的線程執行,它會導致問題或導致性能不佳。在線程池中執行的OpenMP代碼
編輯:
目標將是Linux操作系統(GCC)和Windows(MSVC)。
當我的第一個原型完成時(這將受到我在這裏得到的答案的影響),我會對它進行基準測試。
下面是一個簡單的例子:
class Task
{
public:
void doTask()
{
#pragma omp parallel
{
// do work in parallel
}
}
};
現在想象你創建的Task
一個實例給它一個線程池(線程0,...,螺紋-N)。一個線程執行doTask()
。之後,您再次將相同的Task對象放入線程池,並再次......。 所以doTask()
(和平行部分)將由不同的線程執行。我想知道這是否由OpenMP有效地處理(例如,該部分的線程不會每次都重新創建)。
關於什麼編譯器? – 2011-01-28 15:58:20
根據我的經驗優化代碼,有一種方法可以知道某件事是否會提高性能:進行基準測試。如果實施過於複雜,思考和創建假設只有在某些事情很慢時纔有用。創建一個真實的測試演示並進行基準測試 – 2011-01-28 16:36:33