如何使用 OpenMP 加速递归代码?基本上,我这里要加快程序中的S函数。代码如下。
void S(Oct* oct, unsigned int l) {
S(oct, l+1);
A(oct, l);
S(oct, l+1);
AR(oct,l);
}
如何使用 OpenMP 加速递归代码?基本上,我这里要加快程序中的S函数。代码如下。
void S(Oct* oct, unsigned int l) {
S(oct, l+1);
A(oct, l);
S(oct, l+1);
AR(oct,l);
}
查看您的代码,我会说代码不可并行化。由于 S() 是一个递归函数,因此在函数内部添加 openmp pragma 会导致创建线程的开销。它不会真正提高性能。此外,您也不应该并行化那些其他函数,A() 和 AR()。它还将产生相同的开销性能问题。
我建议要么首先并行化调用 S() 的源代码,要么分解代码以消除递归(然后你可能有可能使用 openmp 并行化)。
我想推荐英特尔的 Cilk Plus。Intel icpc 编译器支持 cilk,它有利于递归函数并行化。 https://www.cilkplus.org/tutorial-cilk-plus-keywords