インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
アドバイスに従ってアノテーションを追加する前に、指定されているルーチンが定数関数またはコンカレント・セーフな関数であることを確認してください。
これ以外のルーチンの場合は、#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);
}
}