到目前为止,我只使用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