1
我試圖parallelise使用OpenMP(基本上編輯就地二維數組)的Floyd-Warshall算法,但我懷疑,我以最好的方式去了解它,這裏是我到目前爲止有:C,OpenMP:我怎樣才能使這個三重循環的parallisation更好?
#pragma omp parallel for private(i, j, k) shared(g)
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
for (k = 0; k < n; k++) {
g->A[j][k] = imin(g->A[j][k], g->A[j][i] + g->A[i][k]);
}
}
}
我怎樣才能更好地利用OpenMP的任何想法呢?目前只有運行時間的一半,當然可以改進。
此外,如果將用於並行化的人對於其他技術的任何建議,我所有的耳朵。我想過MPI,但是我必須讓我的整個main
函數平行嗎?
謝謝。
編輯
上面的代碼不工作,下圖顯示了爲什麼的答案。
酷鏈接,謝謝 –
感謝您的信息,查爾斯,你能不能幫我解析它變成我的頭好一點?據我瞭解,您將行分成R/N塊,其中R是數字或行,N是線程/處理器的數量,然後將「邊緣」行廣播到其他進程。我是否正確理解這一點,甚至可以使用OpenMP?謝謝。 – Griffin
應該可以的,是的。有關OpenMP代碼,請參閱http://stackoverflow.com/q/6030658/341362(解決不同的問題),該代碼似乎使用了您需要的技術。 – Charles