ループカウントとループ分配

LOOP COUNT (N) ディレクティブ

LOOP COUNT (n) ディレクティブはループカウントが n になるように指定します。n は整数定数です。

LOOP COUNT の値はソフトウェアのパイプライン化、ベクトル化およびループ変換に使用されるヒューリスティックに影響を与えます。

!DEC$ LOOP COUNT (10000)
do i =1,m
b(i) = a(i) +1 !This is likely to enable
!the loop to get software-
!pipelined
enddo

ディレクティブの詳細は、『Intel® Fortran Language Reference』(英語) の「General Directives」にある「Directive Enhanced Compilation」を参照してください。

ループ分配ディレクティブ

DISTRIBUTE POINT ディレクティブはループ分配の実行優先度を示します。

ループ分配は、大きなループを小さなループに分配することがあります。これは、より多くのループにおいてソフトウェアのパイプライン化を有効にします。ディレクティブをループの内側に置く場合、分配はディレクティブの後で行われ、あらゆるループキャリーの依存性が無視されます。ディレクティブをループの前に置く場合、コンパイラは分配する場所を決定し、データ依存性を監視します。現在、ループの内側に置かれた場合、1 つの distribute ディレクティブのみがサポートされます。

!DEC$ DISTRIBUTE POINT
do i =1, m
b(i) = a(i) +1
....
c(i) = a(i) + b(i) !Compiler will decide where

 !to distribute.

 !Data dependency is observed
....
d(i) = c(i) + 1
enddo


do i =1, m
b(i) = a(i) +1
....
!DEC$  DISTRIBUTE POINT
call  sub(a, n)    !Distribution will start here,

 !ignoring all loop-carried

 !dependency
c(i) = a(i) + b(i)
....
d(i) = c(i) + 1
enddo

ディレクティブの詳細は、『Intel® Fortran Language Reference』(英語) の「General Directives」にある「Directive Enhanced Compilation」を参照してください。