0
我有一個函數myFunc(),它在內部使用OMP循環,但不會消耗所有可用的內核。在更高層次上,我在一個循環內多次調用這個函數。有沒有一個簡單的方法來在這個外部循環上使用OMP,但不限制每個循環傳遞給一個單獨的線程?C++ OpenMP在每個循環中有多個線程
e.g:
// I have 24 cores
// Would like to allow each for loop pass to have 12 cores
for (int outIter=0; outIter<2; outIter++) {
x[outIter] = myFunc(...) // This function has OMP inside
}
謝謝,是的,我知道它不是平行的。如果我在for循環的正上方放置pragma語句,我的理解是這隻會爲每個循環迭代提供一個單獨的線程(正常用例是loop_iterations >> number_of_cores)。因爲只有一個線程可用,所以循環內的任何其他OMP調用都將被取消。在函數內部,for循環遍歷少量迭代,這就是爲什麼我要這樣做。 – user2364295
沒有繼續你的omp電話。這只是將外環分解爲兩個。它不會將內部操作限制爲2個內核。如果您從指定KMP_AFFINITY中另外獲得任何內容,您可能必須查看。 –