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 プラグマを追加すると、スレッド作成のオーバーヘッドが発生します。それは本当にパフォーマンスを向上させません。さらに、これらの他の関数、A() および AR() も同様に並列化しないでください。また、同じオーバーヘッド パフォーマンスの問題も発生します。
最初に S() を呼び出すソース コードを並列化するか、コードを分割して再帰を排除することをお勧めします (その後、openmp を使用して並列化できる可能性があります)。