我最近發現了thread pools的概念。據我所知,GCC,ICC和MSVC都使用OpenMP的線程池。我很想知道當我改變線程數時會發生什麼?例如,我們假設默認的線程數是8。我創建了一個由八個線程組成的團隊,然後在後面的章節中我會完成四個線程,然後我回到八個線程。帶OpenMP的線程池:開銷和更改線程數
#pragma omp parallel for
for(int i=0; i<n; i++)
#pragma omp parallel for num_threads(4)
for(int i=0; i<n; i++)
#pragma omp parallel for
for(int i=0; i<n; i++)
這是我現在居然這樣做,因爲我的代碼部分變得更壞的結果與超線程,所以我底線的物理內核數量數量(只對那部分代碼)。如果我做了相反的事情(4線程,然後8,然後4)呢?
每次更改線程數時是否都要重新創建線程池?如果沒有,添加或刪除線程是否會導致任何重大開銷?
線程池的開銷是多少?即每個線程的工作量是多少?
當需要更多的時候,'libgomp'產生額外的線程,但不會殺死已經產生的線程,而是讓它們在對接障礙中睡覺。實際開銷可以使用EPCC的[OpenMP microbenchmarks](http://www2.epcc.ed.ac.uk/computing/research_activities/openmpbench/openmp_index.html)進行測量。 –