IA-64 アーキテクチャーで実行されることを想定したアプリケーションでは、-ivdep-parallel オプション (Linux*) または /Qivdep-parallel オプション (Windows*) は、IVDEP プラグマが指定されたループにループ運搬のメモリー依存がないことを保証します。この手法は、スパース・マトリクス・アプリケーションに役立ちます。
Mac OS*: このオプションはサポートされていません。
例えば、次のループはループ運搬の依存がないことを示す ivdep 宣言子の他に parallel オプションを必要とします。
例 |
---|
#pragma ivdep for (i=1; i<n; i++) { e[ix[2][i]] = e[ix[2][i]]+1.0; e[ix[3][i]] = e[ix[3][i]]+2.0; } |
例えば、次のループは、a() への格納でループ運搬の依存がないことを示す IVDEP プラグマの他に parallel オプションを必要とします。
例 |
---|
#pragma ivdep for (j=0; j<n; j++) { a[b[j]] = a[b[j]] + 1; } |
prefetch 宣言子は、IA-64 アーキテクチャーでのみサポートされます。
構文は、次のとおりです。
#pragma prefetch var:hint:distance
ここで、hint の値は 0 (T0)、1 (NT1)、2 (NT2)、または 3
(NTA) です。
次の例は、prefetch 宣言子の使用方法を示します。
例 |
---|
for (i=i0; i!=i1; i+=is) {
float sum = b[i]; int ip = srow[i]; int c = col[ip];
#pragma noprefetch col #pragma prefetch value:1:80 #pragma prefetch x:1:40
for(; ip<srow[i+1]; c=col[++ip]) sum -= value[ip] * x[c]; y[i] = sum; } |
「ベクトル化のサポート」も参照してください。