0

OpenMP を使用して再帰コードを高速化するにはどうすればよいですか? 基本的にはここのプログラムでS関数を高速化する必要があります。コードは以下の通りです。

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

2 に答える 2

1

あなたのコードを見ると、コードは並列化できないと思います。S() は再帰関数であるため、関数内に openmp プラグマを追加すると、スレッド作成のオーバーヘッドが発生します。それは本当にパフォーマンスを向上させません。さらに、これらの他の関数、A() および AR() も同様に並列化しないでください。また、同じオーバーヘッド パフォーマンスの問題も発生します。

最初に S() を呼び出すソース コードを並列化するか、コードを分割して再帰を排除することをお勧めします (その後、openmp を使用して並列化できる可能性があります)。

于 2012-06-15T14:43:34.423 に答える