ループ・キャリー・メモリ依存の不在

Itanium® ベース・アプリケーションの場合、-ivdep_parallel オプションは IVDEP ディレクティブが指定されたループにループ・キャリー・メモリ依存が存在しないことを示します。この手法は、スパース・マトリックス・アプリケーションに役立ちます。例えば、次のループはループ・キャリー依存がないことを示す IVDEP ディレクティブの他に -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;

}

次の例では、このオプションと IVDEP ディレクティブの使用により、a() への格納でループキャリー依存が存在しないことを示します。

#pragma ivdep

for (j=0; j<n; j++)

{

  a[b[j]] = a[b[j]] + 1;

}

PREFETCH ディレクティブ

PREFETCH ディレクティブは、Itanium ベース・システムでのみサポートされます。

構文:

#pragma prefetch var:hint:distance

ここで、hint の値は 0 (T0)、1 (NT1)、2 (NT2)、または 3 (NTA) です。

例:  

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;

}