到目前为止,我只使用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);
}
}
看起来是否正确?
答案 0 :(得分:4)
这就是OMP章节用于:)
int main() {
#pragma omp parallel sections
{
#pragma omp section
{
minimization(a,b);
}
#pragma omp section
{
checkForNaN(x);
}
}
}
答案 1 :(得分:1)
不,它看起来不正确。它会在您拥有的所有主题中执行minimization(a,b);
和checkForNaN(x);
。
相反,这将进行并行化:
int main() {
// read data
#pragma omp parallel sections
{
#pragma omp section
{
minimization (a,b);
}
#pragma omp section
{
checkForNaN(x);
}
}
}