array クラス
データをアクセラレータに移動するために使用するデータ コンテナーを表します。
構文
template <typename value_type, int _Rank>
friend class array;
パラメーター
value_type
データの要素型。
_Rank
配列のランク。
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
array コンストラクター | array クラスの新しいインスタンスを初期化します。 |
~array デストラクター | array オブジェクトを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
copy_to | array の内容を別の array にコピーします。 |
data | 配列の生データへのポインターを返します。 |
get_accelerator_view | 配列が割り当てられた位置を表す accelerator_view オブジェクトを返します。 このプロパティは CPU 上でのみアクセスできます。 |
get_associated_accelerator_view | array オブジェクトをインスタンス化するためにステージング コンストラクターが呼び出されたときにパラメーターとして渡される、2 番目の accelerator_view オブジェクトを取得します。 |
get_cpu_access_type | 配列の access_type を返します。 このメソッドは CPU 上でのみアクセスできます。 |
get_extent | 配列の extent オブジェクトを返します。 |
reinterpret_as | array オブジェクトのすべての要素を含む 1 次元配列を返します。 |
section | 指定された原点にある array オブジェクトのサブセクションを返し、これは必要に応じて範囲が指定されます。 |
view_as | array オブジェクトから構築された array_view オブジェクトを返します。 |
パブリック演算子
名前 | 説明 |
---|---|
operator std::vector<value_type> |
copy(*this, vector) を使用して、配列を std::vector オブジェクトに暗黙的に変換します。 |
operator() | パラメーターによって指定された要素の値を返します。 |
operator[] | 指定したインデックス位置にある要素を返します。 |
operator= | 指定された array オブジェクトの内容をこのオブジェクトにコピーします。 |
パブリック定数
名前 | 説明 |
---|---|
rank 定数 | 配列のランクを格納します。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
accelerator_view | 配列が割り当てられた位置を表す accelerator_view オブジェクトを取得します。 このプロパティは CPU 上でのみアクセスできます。 |
associated_accelerator_view | array オブジェクトをインスタンス化するためにステージング コンストラクターが呼び出されたときにパラメーターとして渡される、2 番目の accelerator_view オブジェクトを取得します。 |
cpu_access_type | CPU が配列の記憶域にアクセスする方法を表す access_type を取得します。 |
extent | 配列の図形を定義する範囲を取得します。 |
解説
array<T,N>
型は、アクセラレータや CPU など、特定の位置にある、密で正規の (ジャグ配列でない) N 次元配列を表します。 配列の要素のデータ型は T
で、ターゲット アクセラレータと互換性のある型である必要があります。 ランクは N
であり、配列のランクは静的に決定され、型の一部です。配列の範囲は、ランタイムによって決定され、extent<N>
クラスを使用して表されます。
いくつかの機能は、ランク 1、2、および 3 で array
オブジェクトに特化していますが、配列はどの次元数も指定できます。 次元の引数を省略すると、既定値は 1 です。
配列データはメモリ内に連続して配置されます。 最下位の次元で "1" 異なる要素はメモリでは隣接しています。
配列が別の配列にコピーされる場合は詳細コピーが実行されるため、配列は論理的に値型であると見なされます。 2 つの配列が同じデータを指すことはありません。
array<T,N>
型はいくつかのシナリオで使用されます。
アクセラレータの計算で使用できるデータ コンテナーとして。
ホスト CPU にメモリを保持するデータ コンテナーとして (他の配列との間でコピーするために使用できます)。
ホストとデバイス間のコピーの高速の仲介役として機能するステージング オブジェクトとして。
継承階層
array
要件
ヘッダー: amp.h
名前空間: Concurrency
~配列
array
オブジェクトを破棄します。
~array() restrict(cpu);
accelerator_view
配列が割り当てられた位置を表す accelerator_view オブジェクトを取得します。 このプロパティは CPU 上でのみアクセスできます。
__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;
配列
array クラスの新しいインスタンスを初期化します。 array<T,N>
の既定のコンストラクターがありません。 すべてのコンストラクターは CPU でのみ実行されます。 これらは、Direct3D ターゲットで実行することはできません。
explicit array(
const Concurrency::extent<_Rank>& _Extent) restrict(cpu);
explicit array(
int _E0) restrict(cpu);
explicit array(
int _E0,
int _E1) restrict(cpu);
explicit array(
int _E0,
int _E1,
int _E2) restrict(cpu);
array(
const Concurrency::extent<_Rank>& _Extent,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
int _E0,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
int _E0,
int _E1,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
int _E0,
int _E1,
int _E2,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
const Concurrency::extent<_Rank>& _Extent,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
array(
int _E0,
accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
array(
int _E0,
int _E1,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
array(
int _E0,
int _E1,
int _E2,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first,
_InputIterator _Src_last) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av,
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
const Concurrency::extent<_Rank>& _Extent,
_InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
_InputIterator _Src_first,
_InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0, _InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1, _InputIterator _Src_first, _InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1, _InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2, _InputIterator _Src_first, _InputIterator _Src_last,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
template <typename _InputIterator>
array(
int _E0,
int _E1,
int _E2, _InputIterator _Src_first,
Concurrency::accelerator_view _Av,
Concurrency::accelerator_view _Associated_Av) restrict(cpu);
explicit array(
const array_view<const value_type, _Rank>& _Src) restrict(cpu);
array(
const array_view<const value_type, _Rank>& _Src,
accelerator_view _Av
access_type _Cpu_access_type = access_type_auto) restrict(cpu);
array(
const array_view<const value_type, _Rank>& _Src,
accelerator_view _Av,
accelerator_view _Associated_Av) restrict(cpu);
array(const array& _Other) restrict(cpu);
array(array&& _Other) restrict(cpu);
パラメーター
_Associated_Av
配列の優先ターゲットの位置を指定する accelerator_view。
_Av
配列の位置を指定する accelerator_view オブジェクト。
_Cpu_access_type
CPU 上の配列に必要な access_type。 このパラメーターには、CPU の access_type_auto
決定をランタイムに任せる access_type
の既定値があります。 配列の実際の CPU access_type
は get_cpu_access_type
メソッドを使用してクエリを実行できます。
_Extent
配列の各次元の範囲。
_E0
このセクションの範囲の最上位のコンポーネント。
_E1
このセクションの範囲の最上位の次のコンポーネント。
_E2
このセクションの範囲の最下位のコンポーネント。
_InputIterator
入力反復子の型。
_Src
コピーするオブジェクト。
_Src_first
ソース コンテナーへの先頭の反復子。
_Src_last
ソース コンテナーへの終了の反復子。
_Other
その他のデータ ソース。
_Rank
セクションのランク。
value_type
コピーされた要素のデータ型。
associated_accelerator_view
array
オブジェクトをインスタンス化するためにステージング コンストラクターが呼び出されたときにパラメーターとして渡される、2 番目の accelerator_view オブジェクトを取得します。
__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;
copy_to
array
の内容を別の array
にコピーします。
void copy_to(
array<value_type, _Rank>& _Dest) const ;
void copy_to(
array_view<value_type, _Rank>& _Dest) const ;
パラメーター
_Dest
コピー先の array_view オブジェクト。
cpu_access_type
この配列に許可されている CPU access_type を取得します。
__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;
data
array
の生データへのポインターを返します。
value_type* data() restrict(amp, cpu);
const value_type* data() const restrict(amp, cpu);
戻り値
配列の生データへのポインター。
extent
array
の形状を定義する extent オブジェクトを取得します。
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_accelerator_view
array
オブジェクトが割り当てられた位置を表す accelerator_view オブジェクトを返します。 このプロパティは CPU 上でのみアクセスできます。
Concurrency::accelerator_view get_accelerator_view() const;
戻り値
array
オブジェクトが割り当てられた位置を表す accelerator_view
オブジェクト。
get_associated_accelerator_view
array
オブジェクトをインスタンス化するためにステージング コンストラクターが呼び出されたときにパラメーターとして渡される、2 番目の accelerator_view オブジェクトを取得します。
Concurrency::accelerator_view get_associated_accelerator_view() const ;
戻り値
ステージング コンストラクターに渡される 2 番目の accelerator_view オブジェクト。
get_cpu_access_type
この配列に対して許可される CPU access_type を返します。
access_type get_cpu_access_type() const restrict(cpu);
戻り値
get_extent
array
の extent オブジェクトを返します。
Concurrency::extent<_Rank> get_extent() const restrict(amp,cpu);
戻り値
extent
の array
オブジェクトです。
operator std::vector<value_type>
copy(*this, vector)
を使用して、配列を std::vector オブジェクトに暗黙的に変換します。
operator std::vector<value_type>() const restrict(cpu);
パラメーター
value_type
ベクターの要素のデータ型。
戻り値
配列に含まれるデータのコピーを含む型 vector<T>
のオブジェクト。
operator()
パラメーターによって指定された要素の値を返します。
value_type& operator() (const index<_Rank>& _Index) restrict(amp,cpu);
const value_type& operator() (const index<_Rank>& _Index) cons t restrict(amp,cpu);
value_type& operator() (int _I0, int _I1) restrict(amp,cpu);
const value_type& operator() (int _I0, int _I1) const restrict(amp,cpu) ;
value_type& operator() (int _I0, int _I1, int _I2) restrict(amp,cpu);
const value_type& operator() (int _I0, int _I1, int _I2) const restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator()(int _I) restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator()(int _I) const restrict(amp,cpu);
パラメーター
_Index
要素の場所。
_I0
このセクションの原点の最上位のコンポーネント。
_I1
このセクションの原点の最上位の次のコンポーネント。
_I2
このセクションの原点の最下位のコンポーネント。
_I
要素の場所。
戻り値
パラメーターで指定される要素の値。
operator[]
指定したインデックス位置にある要素を返します。
value_type& operator[](const index<_Rank>& _Index) restrict(amp,cpu);
const value_type& operator[]
(const index<_Rank>& _Index) const restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator[](int _i) restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator[](int _i) const restrict(amp,cpu);
パラメーター
_Index
インデックスです。
_I
インデックスです。
戻り値
指定したインデックス位置にある要素。
operator=
指定された array
オブジェクトの内容をコピーします。
array& operator= (const array& _Other) restrict(cpu);
array& operator= (array&& _Other) restrict(cpu);
array& operator= (
const array_view<const value_type, _Rank>& _Src) restrict(cpu);
パラメーター
_Other
コピー元の array
オブジェクト。
_Src
コピー元の array
オブジェクト。
戻り値
この array
オブジェクトへの参照。
rank
array
のランクを格納します。
static const int rank = _Rank;
reinterpret_as
必要に応じてソース配列とは値型が異なる可能性のある 1 次元 array_view を使用して配列を再解釈します。
構文
template <typename _Value_type2>
array_view<_Value_type2,1> reinterpret_as() restrict(amp,cpu);
template <typename _Value_type2>
array_view<const _Value_type2, 1> reinterpret_as() const restrict(amp,cpu);
パラメーター
_Value_type2
返されたデータのデータ型。
戻り値
要素型が T から ElementType に再解釈され、ランクが N から 1 に下げられた配列に基づく array_view または const array_view オブジェクト。
解説
ソース配列とは異なる値型が通常含まれている、線形の、1 次元配列のように、多次元配列を表示すると都合のよい場合があります。 これを実現するには、このメソッドを使用できます。 注意 異なる値型を使用して配列オブジェクトを再解釈することは、安全でない演算である可能性があります。 この機能を慎重に使用することをお勧めします。
コードの例は次のとおりです。
struct RGB { float r; float g; float b; };
array<RGB,3> a = ...;
array_view<float,1> v = a.reinterpret_as<float>();
assert(v.extent == 3*a.extent);
section
指定された原点にある array
オブジェクトのサブセクションを返し、これは必要に応じて範囲が指定されます。
array_view<value_type,_Rank> section(
const Concurrency::index<_Rank>& _Section_origin,
const Concurrency::extent<_Rank>& _Section_extent) restrict(amp,cpu);
array_view<const value_type,_Rank> section(
const Concurrency::index<_Rank>& _Section_origin,
const Concurrency::extent<_Rank>& _Section_extent) const restrict(amp,cpu);
array_view<value_type,_Rank> section(
const Concurrency::extent<_Rank>& _Ext) restrict(amp,cpu);
array_view<const value_type,_Rank> section(
const Concurrency::extent<_Rank>& _Ext) const restrict(amp,cpu);
array_view<value_type,_Rank> section(
const index<_Rank>& _Idx) restrict(amp,cpu);
array_view<const value_type,_Rank> section(
const index<_Rank>& _Idx) const restrict(amp,cpu);
array_view<value_type,1> section(
int _I0,
int _E0) restrict(amp,cpu);
array_view<const value_type,1> section(
int _I0,
int _E0) const restrict(amp,cpu);
array_view<value_type,2> section(
int _I0,
int _I1,
int _E0,
int _E1) restrict(amp,cpu);
array_view<const value_type,2> section(
int _I0,
int _I1,
int _E0,
int _E1) const restrict(amp,cpu);
array_view<value_type,3> section(
int _I0,
int _I1,
int _I2,
int _E0,
int _E1,
int _E2) restrict(amp,cpu);
array_view<const value_type,3> section(
int _I0,
int _I1,
int _I2,
int _E0,
int _E1,
int _E2) const restrict(amp,cpu);
パラメーター
_E0
このセクションの範囲の最上位のコンポーネント。
_E1
このセクションの範囲の最上位の次のコンポーネント。
_E2
このセクションの範囲の最下位のコンポーネント。
_Ext
セクションのエクステントを指定する extent オブジェクト。 原点は 0 です。
_Idx
原点の位置を指定する index オブジェクト。 サブセクションは残りの範囲です。
_I0
このセクションの原点の最上位のコンポーネント。
_I1
このセクションの原点の最上位の次のコンポーネント。
_I2
このセクションの原点の最下位のコンポーネント。
_Rank
セクションのランク。
_Section_extent
セクションのエクステントを指定する extent オブジェクト。
_Section_origin
原点の位置を指定する index オブジェクト。
value_type
コピーされた要素のデータ型。
戻り値
指定された原点にある array
オブジェクトのサブセクションを返し、これは必要に応じて範囲が指定されます。 index
オブジェクトのみを指定すると、サブセクションには index
オブジェクトの要素のインデックスより大きなインデックスを持つ関連するグリッドのすべての要素が含まれます。
view_as
異なるランクの array_view として、この配列を再解釈します。
template <int _New_rank>
array_view<value_type,_New_rank> view_as(
const Concurrency::extent<_New_rank>& _View_extent) restrict(amp,cpu);
template <int _New_rank>
array_view<const value_type,_New_rank> view_as(
const Concurrency::extent<_New_rank>& _View_extent) const restrict(amp,cpu);
パラメーター
_New_rank
パラメーターとして渡された extent
オブジェクトのランク。
_View_extent
新しい array_view オブジェクトを構築するために使用するエクステント。
value_type
元の array
オブジェクトと返された array_view
オブジェクトの両方にある要素のデータ型。
戻り値
構築される array_view オブジェクト。