インテル® C++ コンパイラー 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 節からの転送では順序を仮定することができません。

int p[1000], p1[2000];
int rank1[1000], rank2[10][100];

// 部分コピー
#pragma offload … in( p[0:500] : into (p1[500:500]) )

// オーバーラップ・コピー、結果は未定義
#pragma offload …    in( p[0:600]   : into (p1[0:600]) )    \
                     in( p[601:400] : into (p1[100:400]) ) 
// 形状の変更は不可
// エラー! 
#pragma offload …    out( rank1 : into(rank2) )

関連情報