[英]OpenMP parallelization of non-for loop
到目前为止,我仅使用OpenMP来并行化C ++中的循环。 但是我想知道是否可以执行其他代码行,这些代码不是并行的for循环。
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);
}
}
看起来正确吗?
这就是OMP节的用途:)
int main() {
#pragma omp parallel sections
{
#pragma omp section
{
minimization(a,b);
}
#pragma omp section
{
checkForNaN(x);
}
}
}
不,它看起来不正确。 它将执行minimization(a,b);
和checkForNaN(x);
在所有线程中。
相反,这将执行并行化:
int main() {
// read data
#pragma omp parallel sections
{
#pragma omp section
{
minimization (a,b);
}
#pragma omp section
{
checkForNaN(x);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.