0
我在OpenMP的是新和 做內無需花費時間我面臨這樣的局面:對於裏面的 - 如何爲平行於創建線程
int someArray[ARRAY_SIZE];
//outer loop
for(int i = 0; i < 100; ++i) {
//inner loop
for(int j = 0; i < ARRAY_SIZE; ++i) {
//calculaations in someArray (every cell can be calculated separately)
}
//some code that needs to be run by only one thread - for example sorting someArray
}
我想使內環平行,但我嘗試過的想法(下面的代碼)不是有效的(單線程可以比多線程做得更快)。我認爲一遍又一遍地創建多個線程在這裏會花費很多時間。
我不好解決:
int someArray[ARRAY_SIZE];
//outer loop
for(int i = 0; i < 100; ++i) {
#pragma omp parallel num_threads(THREADS_NUMBER) shared(someArray)
{
//inner loop
#pragma omp for
for(int j = 0; i < ARRAY_SIZE; ++i) {
//calculaations in someArray (every cell can be calculated separately)
}
}
//some code that needs to be run by only one thread - for example sorting someArray
}
你有任何想法如何優化這個任務嗎?
但外環需要在一個線程,因爲陣列中的循環結束(這是schared資源)排序。 ARRAY_SIZE可能在六千六百萬左右。所以我想要的只是內部循環(單獨重新計算單獨的單元格)。 –
我也試圖把屏障,然後假大師 - >如果(0 = thread_number) 但其非法聲明。 –
我需要更多的上下文來幫助 - 你想達到什麼目的?您能否詳細說明您的示例,以便發現性能問題? – GaspardP