IVDEP 宣言子によるループ運搬のメモリー依存の不在

Itanium(R) ベース・アプリケーションでは、-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 宣言子

prefetch 宣言子は、Itanium ベース・システムでのみサポートされます。

構文は、次のとおりです。

次の例は、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;

}

「ベクトル化のサポート」も参照してください。