インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
%s をルーチン "%s" の宣言に追加して、行 %d のループを並列化します。別の方法として、"%s" を追加することで同様の効果を得ることもできます。
アドバイスに従ってアノテーションを追加する前に、指定されているルーチンが定数関数またはコンカレント・セーフな関数であることを確認してください。
これ以外のルーチンの場合は、#pragma forceinline recursive を使用してインライン展開してみてください。 これにより効果が得られることがあります。
次の例について考えてみます。
#define N 10000 double A[N], B[N]; int bar(int); void foo(){ int i; for (i=0;i<N;i++){ A[i] = B[i] * bar(i); } }
この例では、呼び出されるルーチン bar についてのより詳しい情報がなければコンパイラーはループを並列化しません。
安全であることが分かっている場合は、次のようにプラグマを追加できます。
#define N 10000 double A[N], B[N]; void foo(){ int i; #pragma forceinline recursive for (i=0;i<N;i++){ A[i] = B[i] * bar(i); } }
ルーチンがアノテーションのセマンティクスに沿っていることを確認してください。別の方法として、forceinline recursive プラグマを使用してルーチンをインライン展開することでループを並列化することもできます (この方法で必ず並列化されるとは限りません)。