我想在另一個for循環中並行化for循環。我可以直接在內部循環中使用「#pragma omp parallel for」指令,但是我擔心每次創建一組新線程並不是最佳選擇。在外部循環(在內部循環之前)有分配和一些其他指令由單個線程完成(我分配一個矩陣在內部循環中共享,所以每個線程都應該有權訪問它)。我試圖做這樣的事情:Openmp:嵌套循環和分配
#pragma omp parallel
{
for (auto t=1;t<=time_step;++t){
#pragma omp single {
Matrix<unsigned int> newField(rows,cols);
//some instructions
}
unsigned int j;
#pragma omp for
for (unsigned int i = 2;i<=rows-1;++i){
for (j = 1;j<=cols;++j){
//Work on NewField (i,j)
}
}
#pragma omp single {
//Instruction
}
}
}
此代碼不起作用。這樣(如果我讓它工作)比每次創建線程更有效率?我做錯了什麼?
謝謝!
爲什麼不只是平行外部循環t?如果你真的在每一步創建一個新的矩陣,那麼每個線程都會寫入矩陣的私有版本。 –
你是什麼意思代碼不起作用?你有語法錯誤嗎? –
我會使用'#pragma omp master'而不是'single'。這種方式線程不需要協商哪一個執行代碼。 –