array_view クラス
別のコンテナーに保持されるデータの N 次元のビューを表します。
template <
typename _Value_type,
int _Rank = 1
>
class array_view : public _Array_view_base<_Rank, sizeof(_Value_type)/sizeof(int)>;
template <
typename _Value_type,
int _Rank
>
class array_view<const _Value_type, _Rank> : public _Array_view_base<_Rank, sizeof(_Value_type)/sizeof(int)>;
パラメーター
_Value_type
array_view オブジェクトの要素のデータ型。_Rank
array_view オブジェクトのランク。
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
array_view クラスの新しいインスタンスを初期化します。 array<T,N> の既定のコンストラクターがありません。 すべてのコンストラクターは、CPU 上のみで実行されるように制限されており、Direct3D ターゲット上で実行することはできません。 |
|
array_view オブジェクトを破棄します。 |
パブリック メソッド
名前 |
説明 |
---|---|
copy(*this, dest) を呼び出して array_view オブジェクトの内容を指定されたコピー先にコピーします。 |
|
array_view の生データへのポインターを返します。 |
|
このビューの基となる現在のデータを破棄します。 |
|
array_view オブジェクトの範囲オブジェクトを返します。 |
|
インデックス付けされた要素への参照を返します。 |
|
array_view のデータ ソースが存在する accelerator_view を返します。 |
|
バインドされたメモリが array_view インターフェイスの外部で変更されたことを array_view オブジェクトに通知します。 このメソッドの呼び出しによって、すべてのキャッシュされた情報が表示されます。 |
|
array_view オブジェクトのすべての要素を含む 1 次元配列を返します。 |
|
指定された原点に array_view オブジェクトのサブセクションを返し、これは必要に応じて範囲が指定されます。 |
|
array_view オブジェクトへの変更をそのソース データに同期して戻します。 |
|
array_view オブジェクトへの変更をそのソース データに非同期に同期して戻します。 |
|
array_view オブジェクトに行われた変更を指定された accelerator_view と同期します。 |
|
array_view オブジェクトに行われた変更を指定された accelerator_view と非同期に同期します。 |
|
この array_view を使用して異なるランクの array_view オブジェクトを生成します。 |
パブリック演算子
名前 |
説明 |
---|---|
パラメーターによって指定された要素の値を返します。 |
|
パラメーターで指定された要素を返します。 |
|
指定された array_view オブジェクトの内容をこのオブジェクトにコピーします。 |
パブリック定数
名前 |
説明 |
---|---|
array_view オブジェクトのランクを格納します。 |
データ メンバー
名前 |
説明 |
---|---|
array_view オブジェクトの形状を定義する extent オブジェクトを取得します。 |
|
array_view のデータ ソースが存在する accelerator_view を取得します。 |
|
array_view の値型およびバインド配列。 |
解説
array_view クラスは、array オブジェクトまたは array オブジェクトのサブセクションに含まれるデータに対するビューを表します。
ソース データが格納されている (ローカル)、または別のアクセラレータまたはコヒーレンス ドメイン (リモート) 上の、array_view オブジェクトにアクセスできます。 オブジェクトにリモートにアクセスすると、ビューは必要に応じてコピーされ、キャッシュされます。 自動キャッシュの効果を除いて、array_view オブジェクトには array オブジェクトと同様のパフォーマンス プロファイルがあります。 ビューを使用してデータにアクセスする場合、パフォーマンスがわずかに低下します。
リモートでの使用には次の 3 つの方法があります。
システム メモリ ポインターへのビューは、アクセラレータへの parallel_for_each 呼び出しによって渡され、アクセラレータでアクセスされます。
アクセラレータにある配列へのビューは、別のアクセラレータへの parallel_for_each 呼び出しによって渡され、そこでアクセスされます。
アクセラレータにある配列へのビューは CPU 上でアクセスされます。
これらのシナリオのいずれかで、参照されたビューは、リモートの場所へのランタイムによってコピーされ、array_view オブジェクトへの呼び出しによって変更される場合は、ローカルの場所へコピーして戻されます。 ランタイムは、変更をコピーして戻す処理を最適化する場合、変更された要素のみをコピーする場合、または変更されない部分もコピーする場合があります。 1 つのデータ ソースで array_view オブジェクトが重複すると、リモートの場所での参照整合性の維持が保証されません。
同じデータ ソースに対するマルチスレッド アクセスを同期する必要があります。
ランタイムは array_view オブジェクトのデータのキャッシュに関連して次の内容を保証します。
プログラムの順序での array オブジェクトと array_view オブジェクトへのすべての完全同期アクセスは、逐次事前発生リレーションシップに従います。
単一の array オブジェクトの同じアクセラレータ上で重複する array_view オブジェクトへのすべての完全同期アクセスは、array オブジェクトを使用してエイリアス化されます。 これらは、プログラムの順序に従う合計事前発生リレーションシップを引き起こします。 キャッシュはありません。 array_view オブジェクトが異なるアクセラレータで実行されている場合、アクセスの順序は未定義で、競合状態を作成します。
システム メモリのポインターを使用して array_view オブジェクトを作成する場合、array_view ポインターのみを使用してビュー array_view オブジェクトを変更する必要があります。 また、array_view オブジェクトを使用せずに、基になるネイティブ メモリが直接変更される場合は、システム ポインターに添付されている array_view オブジェクトの 1 つに refresh() を呼び出す必要があります。
どちらの操作も、基になるネイティブ メモリが変更されていること、およびアクセラレータ内にあるコピーが古くなっていることを array_view オブジェクトに通知します。 これらのガイドラインに従う場合、ポインター ベースのビューはデータ並列配列のビューに提供されるビューと同じです。
継承階層
_Array_view_shape
_Array_view_base
array_view
必要条件
ヘッダー: amp.h
名前空間: Concurrency