如何使用OpenMP加速递归代码?

时间:2012-06-15 07:08:28

标签: openmp

如何使用OpenMP加速递归代码?基本上,我必须在这里加速程序中的S功能。代码如下。

void S(Oct* oct, unsigned int l) {
    S(oct, l+1);
    A(oct, l);
    S(oct, l+1);
    AR(oct,l);
}

2 个答案:

答案 0 :(得分:1)

查看代码,我会说代码不可并行化。由于S()是一个递归函数,在函数内添加openmp pragma会导致创建线程的开销。它不会真正改善性能。此外,您不应该并行化其他函数A()和AR()。它还会产生相同的开销性能问题。

我建议首先并行化调用S()的源代码,或者分解代码以消除递归(然后你可能有可能使用openmp进行并行化)。

答案 1 :(得分:1)

我想推荐英特尔的Cilk Plus。英特尔icpc编译器支持cilk,它适用于递归函数并行化。 https://www.cilkplus.org/tutorial-cilk-plus-keywords