インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。
このトピックは、into 修飾子と offload プラグマのセットを使用する方法について説明します。
into 修飾子は、CPU 上の 1 つの変数からコプロセッサー上の別の変数へ (またはその逆に) データを転送します。into 修飾子を使用する場合、variable-ref リストでは 1 つの項目のみ指定できます。この制限により、1 つのソースとデスティネーション間で一対一の対応が確立されます。
into と in 節を使用すると、データは CPU オブジェクトからコプロセッサー・オブジェクトへコピーされます。alloc_if、free_if、および alloc 修飾子を into 式に適用できます。
into と out 節を使用すると、データはコプロセッサー・オブジェクトから CPU オブジェクトへコピーされます。alloc_if、free_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) )