インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。
このトピックは、ALLOC 修飾子と OFFLOAD ディレクティブのセットを使用する方法について説明します。
ALLOC 修飾子には、部分配列参照が含まれます。この修飾子を指定すると、コプロセッサーの割り当ては配列の形状に制限されます。配列内ではユニットストライドのみ許可されます。2 つ以上のランクが含まれている場合、2 つ目以降のインデックス式でその次元のすべての要素を指定しなければなりません。部分配列は連続していなければなりません。
データは、IN または OUT 式で指定された配列の一部に転送されます。このため、メモリー割り当てとデータ転送で別の配列スライス参照を使用できます。
ALLOC 修飾子で使用される部分の最初の次元の下限が非ゼロの場合、メモリー割り当てはその要素から始まります。下限よりも前のメモリーは割り当てられないため、プログラムから参照しないでください。この部分を参照しないことにより、配列全体の割り当てを行うことなく、配列のより小さな部分をコプロセッサーに転送することができます。
配列 A には、CPU の 15 個の要素、A(1:15) が含まれます。
ALLOC 修飾子は、コプロセッサーの 8 個の要素 A(3:10) (青とオレンジの領域) を割り当てます。
コプロセッサーの要素 A(1:2) (灰色の領域) は初期化されません。
IN 節は、要素 A(4:8) (オレンジの領域) を CPU からコプロセッサーに転送します。
INTEGER :: A (15) ! 8 個の要素を割り当て ! 要素 4 から 5 個のデータ要素を転送 !DIR$ OFFLOAD … IN ( A(4:8) : ALLOC ( (3:10) ) … …
INTEGER, ALLOCATABLE :: B (:,:) ALLOCATE (B (5,4)) ! コプロセッサーで 16 個の要素を割り当て (列 2 から 5) ! 形状は 5x4、最初の列は割り当て不可 ! データを列 3 にのみ転送 !DIR$ OFFLOAD … IN ( B (3, :) : ALLOC ( 2:5, : ) … …
下記の図の説明は次のとおりです。
B は CPU で形状 5x4 の配列を許可します。
コプロセッサーで、ALLOC 修飾子は行 2 から 5 (青とオレンジの領域) のすべての列を割り当てます。
コプロセッサーで、行 1 (灰色の領域) は割り当てられません。
IN 節は、行 3 (3: :) (オレンジの領域) をコプロセッサーに転送します。