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

1 つの変数から別の変数へのデータの移動

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

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

INTO 修飾子は、CPU 上の 1 つの変数からコプロセッサー上の別の変数へ (またはその逆に) データを転送します。INTO 修飾子を使用する場合、variable-ref リストでは 1 つの項目のみ指定できます。この制限により、1 つのソースとデスティネーション間で一対一の対応が確立されます。

INTOIN 節を使用すると、データは CPU オブジェクトからコプロセッサー・オブジェクトへコピーされます。ALLOC_IFFREE_IF、および ALLOC 修飾子を INTO 式に適用できます。

INTOOUT 節を使用すると、データはコプロセッサー・オブジェクトから CPU オブジェクトへコピーされます。ALLOC_IFFREE_IF、および ALLOC 修飾子を OUT 式に適用できます。

INTO 修飾子と INOUT および NOCOPY 節を使用することはできません。

INTO 修飾子を使用すると、ソース式は INTO 式で指定されたメモリー範囲にコピーする要素のストリームを生成します。ソースとデスティネーションのメモリー範囲がオーバーラップすると、未定義の動作を引き起こします。異なる IN および OUT 節からの転送では順序を仮定することができません。

次の例について考えてみます。

INTEGER :: P (1000), P1 (2000)
INTEGER :: RANK1 (1000), RANK2 (10, 100)

!          部分コピー
!DIR$ OFLOAD … IN ( P (1:500) : INTO ( P1 (501:1000) ) ) …

!          オーバーラップ・コピー、結果は未定義
!DUR$ OFFLOAD … IN ( P (1:600) : INTO ( P1 (1:600) ) ) … &
&               IN ( P (601:1000) : INTO ( P1 (100:499) ) ) …

!          ランクの変更は不可 - エラー
!DIR $ OFFLOAD … OUT ( RANK1, OUT (RANK2) ) …

関連情報