我正在編寫一個程序,它必須對多個文件進行計算foobar
,foobar
可以在一個文件中並行或連續執行,程序將接收許多文件(,它們可以是不同的大小! )並且使用指定數量的線程並行或按順序應用計算foobar
。openMP如何獲得更好的工作平衡?
這是程序如何啓動8個文件與三個線程。
./program 3 file1 file2 file3 file4 file5 file6 file7 file8
我實現的默認調度是並行地影響每個文件上的一個線程來執行計算(這就是我的程序現在的工作方式!)。
版:這裏是我使用
#pragma omp parallel for private(i) schedule(guided,1)
for (i = 0; i < nbre_file; i++)
foobar(files[i]); // according to the size of files(i) foobar can react as a sequential or a parallel program (which could induce nested loops)
見下
圖像在上面的最終時間的圖像默認調度的時間花依次在最大文件file8上依次解決foobar
。
我認爲一個更好的調度將有效地處理工作平衡,可以並行地應用大文件上的計算foobar
。就像在下面的圖片中,tr我代表一個線程。
這樣的方式在最後的時間將是一個支出來解決並行foobar
(像上面我們使用了兩個線程!)上的最大文件file8
我的問題是:
可以用openmp來做這樣的調度嗎?
感謝您的回覆!
是否有可能使tr1和tr2同時在foobar [i]上工作?謝謝你的回覆 –
看看:[這](http://stackoverflow.com/questions/7149606/openmp-nested-loop)我通常避免嵌套平行區域。 – tune2fs