到目前爲止,我只使用OpenMP並行化C++中的循環。但是,我想知道我是否可以執行其他不是用於並行循環的代碼行。非for循環的OpenMP並行化
void minimization(int *a, int *x) {
// this part of the code is dependent of other library.
}
void checkForNaN(int *a){
// check nan points
}
int main() {
// read data
minimization (a,b);
checkForNaN(x);
}
考慮樣品片段上方,由此minimization(,)
和checkForNaN()
是獨立的也就是任一個的結果不影響其他一次。是否可以並行化?
我想是這樣的:
int main() {
// read data
#pragma omp parallel
{
minimization (a,b);
checkForNaN(x);
}
}
是否看起來是正確的?
您還可以使用OpenMP的任務來達到同樣的目標函數(#pragma OMP任務)。有關於任務和部分之間的差異很好的討論http://stackoverflow.com/questions/13788638/difference-between-section-and-task-openmp – Harald