インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

配列の一部へのメモリーの割り当て

このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

このトピックは、ALLOC 修飾子と OFFLOAD ディレクティブのセットを使用する方法について説明します。

ALLOC 修飾子には、部分配列参照が含まれます。この修飾子を指定すると、コプロセッサーの割り当ては配列の形状に制限されます。配列内ではユニットストライドのみ許可されます。2 つ以上のランクが含まれている場合、2 つ目以降のインデックス式でその次元のすべての要素を指定しなければなりません。部分配列は連続していなければなりません。

データは、IN または OUT 式で指定された配列の一部に転送されます。このため、メモリー割り当てとデータ転送で別の配列スライス参照を使用できます。

ALLOC 修飾子で使用される部分の最初の次元の下限が非ゼロの場合、メモリー割り当てはその要素から始まります。下限よりも前のメモリーは割り当てられないため、プログラムから参照しないでください。この部分を参照しないことにより、配列全体の割り当てを行うことなく、配列のより小さな部分をコプロセッサーに転送することができます。

次の例について考えてみます。
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, : ) …
…

下記の図の説明は次のとおりです。

関連情報