プリフェッチ

プリフェッチ を挿入する目的は、データをキャッシュにロードするタイミングのヒントをプロセッサに知らせてキャッシュ・ミスを減らすことです。プリフェッチによる最適化では、次のオプションを実装しています。

-prefetch[-]

プリフェッチ挿入を有効または無効 (-prefetch-) にします。このオプションでは、-O3 が指定されている必要があります。-O3 でのデフォルト設定は -prefetch です。

コンパイラの最適化を容易にするには、次のことを考慮します。

 -prefetch[-] を使用した最適化方法の詳細は、『インテル® Pentium® 4 プロセッサおよび インテル® Xeon™ プロセッサ最適化リファレンス・マニュアル』を参照してください。

-prefetch オプションの他に、組込みサブルーチン MM_PREFETCH およびコンパイラ・ディレクティブ PREFETCH も使用できます。サブルーチン MM_PREFETCH は、1 つのメモリ・キャッシュ・ライン上の指定のアドレスからデータをプリフェッチします。コンパイラ・ディレクティブ PREFETCH は、メモリからのデータ・プリフェッチを有効にします。

次の例は Itanium® ベース・システムでのみ有効です。

do j=1,lastrow-firstrow+1
  i = rowstr(j)
 iresidue = mod( rowstr(j+1)-i, 8 )
 sum = 0.d0
CDEC$ NOPREFETCH a,p,colidx
do k=i,i+iresidue-1
  sum = sum +  a(k)*p(colidx(k))
enddo
CDEC$ NOPREFETCH colidx
CDEC$ PREFETCH a:1:40
CDEC$ PREFETCH p:1:20
 do k=i+iresidue, rowstr(j+1)-8, 8
  sum = sum + a(k  )*p(colidx(k  ))
&      + a(k+1)*p(colidx(k+1)) + a(k+2)*p(colidx(k+2))
&      + a(k+3)*p(colidx(k+3)) + a(k+4)*p(colidx(k+4))
&      + a(k+5)*p(colidx(k+5)) + a(k+6)*p(colidx(k+6))
&      + a(k+7)*p(colidx(k+7))
  enddo
 q(j) = sum
enddo

詳細については、『Intel ® Fortran Language Reference』(英語) マニュアルを参照してください。