次の方法で共有


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_view コンストラクター

array_view クラスの新しいインスタンスを初期化します。 array<T,N> の既定のコンストラクターがありません。 すべてのコンストラクターは、CPU 上のみで実行されるように制限されており、Direct3D ターゲット上で実行することはできません。

array_view::~array_view デストラクター

array_view オブジェクトを破棄します。

パブリック メソッド

名前

説明

array_view::copy_to メソッド

copy(*this, dest) を呼び出して array_view オブジェクトの内容を指定されたコピー先にコピーします。

array_view::data メソッド

array_view の生データへのポインターを返します。

array_view::discard_data メソッド

このビューの基となる現在のデータを破棄します。

array_view::get_extent メソッド

array_view オブジェクトの範囲オブジェクトを返します。

array_view::get_ref メソッド

インデックス付けされた要素への参照を返します。

array_view::get_source_accelerator_view メソッド

array_view のデータ ソースが存在する accelerator_view を返します。

array_view::refresh メソッド

バインドされたメモリが array_view インターフェイスの外部で変更されたことを array_view オブジェクトに通知します。 このメソッドの呼び出しによって、すべてのキャッシュされた情報が表示されます。

array_view::reinterpret_as メソッド

array_view オブジェクトのすべての要素を含む 1 次元配列を返します。

array_view::section メソッド

指定された原点に array_view オブジェクトのサブセクションを返し、これは必要に応じて範囲が指定されます。

array_view::synchronize メソッド

array_view オブジェクトへの変更をそのソース データに同期して戻します。

array_view::synchronize_async メソッド

array_view オブジェクトへの変更をそのソース データに非同期に同期して戻します。

array_view::synchronize_to メソッド

array_view オブジェクトに行われた変更を指定された accelerator_view と同期します。

array_view::synchronize_to_async メソッド

array_view オブジェクトに行われた変更を指定された accelerator_view と非同期に同期します。

array_view::view_as メソッド

この array_view を使用して異なるランクの array_view オブジェクトを生成します。

パブリック演算子

名前

説明

array_view::operator() 演算子

パラメーターによって指定された要素の値を返します。

array_view::operator[] 演算子

パラメーターで指定された要素を返します。

array_view::operator= 演算子

指定された array_view オブジェクトの内容をこのオブジェクトにコピーします。

パブリック定数

名前

説明

array_view::rank 定数

array_view オブジェクトのランクを格納します。

データ メンバー

名前

説明

array_view::extent データ メンバー

array_view オブジェクトの形状を定義する extent オブジェクトを取得します。

array_view::source_accelerator_view データ メンバー

array_view のデータ ソースが存在する accelerator_view を取得します。

array_view::value_type データ メンバー

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

参照

関連項目

Concurrency 名前空間 (C++ AMP)