array – třída
Představuje datový kontejner použitý k přesunutí dat do akcelerátoru.
Syntaxe
template <typename value_type, int _Rank>
friend class array;
Parametry
value_type
Typ prvku dat.
_Hodnost
Pořadí pole.
Členové
Veřejné konstruktory
Název | Popis |
---|---|
array – konstruktor | Inicializuje novou instanci array třídy. |
~array – destruktor | array Zničí objekt. |
Veřejné metody
Název | Popis |
---|---|
copy_to | Zkopíruje obsah pole do jiného pole. |
data | Vrátí ukazatel na nezpracovaná data pole. |
get_accelerator_view | Vrátí accelerator_view objekt, který představuje umístění, kde je pole přiděleno. K této vlastnosti lze přistupovat pouze na procesoru. |
get_associated_accelerator_view | Získá druhý accelerator_view objekt, který je předán jako parametr při pracovní konstruktor je volána k vytvoření instance objektu array . |
get_cpu_access_type | Vrátí access_type pole. K této metodě lze přistupovat pouze na procesoru. |
get_extent | Vrátí objekt rozsahu pole. |
reinterpret_as | Vrátí jednorozměrné pole, které obsahuje všechny prvky v objektu array . |
section | Vrátí pododdíl objektu array , který je v zadaném původu a volitelně má zadaný rozsah. |
view_as | Vrátí objekt array_view vytvořený z objektuarray . |
Veřejné operátory
Název | Popis |
---|---|
operator std::vector<value_type> |
Používá copy(*this, vector) se k implicitní převodu pole na objekt std::vector . |
operator() | Vrátí hodnotu prvku určenou parametry. |
operator[] | Vrátí prvek, který je v zadaném indexu. |
operator= | Zkopíruje obsah zadaného array objektu do tohoto objektu. |
Veřejné konstanty
Název | Popis |
---|---|
rank – konstanta | Uloží pořadí pole. |
Veřejné datové členy
Název | Popis |
---|---|
accelerator_view | Získá accelerator_view objekt, který představuje umístění, kde je pole přiděleno. K této vlastnosti lze přistupovat pouze na procesoru. |
associated_accelerator_view | Získá druhý accelerator_view objekt, který je předán jako parametr při pracovní konstruktor je volána k vytvoření instance objektu array . |
cpu_access_type | Získá access_type, který představuje, jak procesor může přistupovat k úložišti pole. |
rozsah | Získá rozsah, který definuje tvar pole. |
Poznámky
Typ array<T,N>
představuje hustou a běžnou (ne jagged) N-dimenzionální pole, které se nachází v určitém umístění, jako je akcelerátor nebo procesor. Datový typ prvků v poli je T
, který musí být typu, který je kompatibilní s cílovým akcelerátorem. Ačkoli pořadí , ( N
pole je určeno staticky a je součástí typu, rozsah pole je určen modulem runtime a je vyjádřen pomocí třídy extent<N>
.
Pole může mít libovolný počet dimenzí, i když některé funkce jsou specializované na array
objekty s pořadím 1, dvěma a třemi. Pokud argument dimenze vynecháte, výchozí hodnota je 1.
Data pole jsou rozložena souvisle v paměti. Prvky, které se liší o jeden v nejméně významné dimenzi, sousedí v paměti.
Matice jsou logicky považovány za typy hodnot, protože když je pole zkopírováno do jiného pole, provede se hloubková kopie. Dvě pole nikdy neodkazují na stejná data.
Typ array<T,N>
se používá v několika scénářích:
Jako datový kontejner, který lze použít ve výpočtech v akcelerátoru.
Jako datový kontejner pro uložení paměti na procesoru hostitele (který lze použít ke kopírování do a z jiných polí).
Jako přípravný objekt, který bude fungovat jako rychlý zprostředkovatel v kopiích typu hostitel-zařízení.
Hierarchie dědičnosti
array
Požadavky
Záhlaví: amp.h
Obor názvů: Souběžnost
~pole
array
Zničí objekt.
~array() restrict(cpu);
accelerator_view
Získá accelerator_view objekt, který představuje umístění, kde je pole přiděleno. K této vlastnosti lze přistupovat pouze na procesoru.
__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;
pole
Inicializuje novou instanci třídy pole. Neexistuje žádný výchozí konstruktor pro array<T,N>
. Všechny konstruktory se spouští pouze na procesoru. Nelze je spustit v cíli 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);
Parametry
_Associated_Av
Accelerator_view, která určuje upřednostňované cílové umístění pole.
_Av
Objekt accelerator_view , který určuje umístění pole.
_Cpu_access_type
Požadovaná access_type pole na procesoru. Tento parametr má výchozí hodnotu access_type_auto
pro ponechání určení procesoru access_type
na modul runtime. Skutečný procesor access_type
pole lze dotazovat pomocí get_cpu_access_type
metody.
_Rozsah
Rozsah v každé dimenzi pole.
_E0
Nejvýznamnější komponenta rozsahu této části.
_E1
Nejvýznamnější komponenta rozsahu této části.
_E2
Nejméně významná součást rozsahu této části.
_InputIterator
Typ vstupního iterátoru.
_Src
Chcete-li objekt kopírovat.
_Src_first
Počáteční iterátor do zdrojového kontejneru.
_Src_last
Koncový iterátor do zdrojového kontejneru.
_Jiný
Jiný zdroj dat.
_Hodnost
Pořadí oddílu.
value_type
Datový typ prvků, které jsou zkopírovány.
associated_accelerator_view
Získá druhý accelerator_view objekt, který je předán jako parametr při pracovní konstruktor je volána k vytvoření instance objektu array
.
__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;
copy_to
Zkopíruje obsah do array
jiného array
.
void copy_to(
array<value_type, _Rank>& _Dest) const ;
void copy_to(
array_view<value_type, _Rank>& _Dest) const ;
Parametry
_Dest
Objekt array_view , do které se má kopírovat.
cpu_access_type
Získá access_type procesoru povolené pro toto pole.
__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;
data
Vrátí ukazatel na nezpracovaná data array
.
value_type* data() restrict(amp, cpu);
const value_type* data() const restrict(amp, cpu);
Návratová hodnota
Ukazatel na nezpracovaná data pole.
rozsah
Získá objekt rozsahu, který definuje tvar array
.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_accelerator_view
Vrátí accelerator_view objekt, který představuje umístění, kde array
je objekt přidělen. K této vlastnosti lze přistupovat pouze na procesoru.
Concurrency::accelerator_view get_accelerator_view() const;
Návratová hodnota
Objekt accelerator_view
, který představuje umístění, kde array
je objekt přidělen.
get_associated_accelerator_view
Získá druhý accelerator_view objekt, který je předán jako parametr při pracovní konstruktor je volána k vytvoření instance objektu array
.
Concurrency::accelerator_view get_associated_accelerator_view() const ;
Návratová hodnota
Druhý accelerator_view objekt předaný pracovnímu konstruktoru.
get_cpu_access_type
Vrátí access_type procesoru, který je pro toto pole povolený.
access_type get_cpu_access_type() const restrict(cpu);
Návratová hodnota
get_extent
Vrátí objekt rozsahu objektu array
.
Concurrency::extent<_Rank> get_extent() const restrict(amp,cpu);
Návratová hodnota
Objekt extent
objektu array
.
operator std::vector<value_type>
Používá copy(*this, vector)
se k implicitní převodu pole na objekt std::vector.
operator std::vector<value_type>() const restrict(cpu);
Parametry
value_type
Datový typ prvků vektoru.
Návratová hodnota
Objekt typu vector<T>
, který obsahuje kopii dat obsažených v poli.
operator()
Vrátí hodnotu prvku určenou parametry.
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);
Parametry
_Index
Umístění elementu.
_I0
Nejvýznamnější komponenta původu této části.
_I1
Nejvýznamnější komponenta původu této části.
_I2
Nejméně významná součást původu této části.
_Já
Umístění elementu.
Návratová hodnota
Hodnota prvku zadaná parametry.
operator[]
Vrátí prvek, který je v zadaném indexu.
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);
Parametry
_Index
Index.
_Já
Index.
Návratová hodnota
Prvek, který je v zadaném indexu.
operator=
Zkopíruje obsah zadaného array
objektu.
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);
Parametry
_Jiný
Objekt array
, ze který chcete kopírovat.
_Src
Objekt array
, ze který chcete kopírovat.
Návratová hodnota
Odkaz na tento array
objekt.
hodnost
Ukládá pořadí array
.
static const int rank = _Rank;
reinterpret_as
Reinterpretuje pole prostřednictvím jednorozměrného array_view, který může mít volitelně jiný typ hodnoty než zdrojová matice.
Syntaxe
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);
Parametry
_Value_type2
Datový typ vrácených dat.
Návratová hodnota
Objekt array_view nebo const array_view, který je založen na poli, s typem prvku reinterpretován z T na ElementType a pořadí zmenšeno z N na 1.
Poznámky
Někdy je vhodné zobrazit multidimenzionální pole, jako by se jedná o lineární jednorozměrné pole, případně s jiným typem hodnoty než zdrojové pole. Tuto metodu můžete použít k dosažení tohoto cíle. Upozornění Reinterpretace objektu pole pomocí jiného typu hodnoty je potenciálně nebezpečná operace. Tuto funkci doporučujeme používat pečlivě.
Následující kód obsahuje příklad.
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
Vrátí pododdíl objektu array
, který je v zadaném původu a volitelně má zadaný rozsah.
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);
Parametry
_E0
Nejvýznamnější komponenta rozsahu této části.
_E1
Nejvýznamnější komponenta rozsahu této části.
_E2
Nejméně významná součást rozsahu této části.
_Ext
Objekt rozsahu , který určuje rozsah oddílu. Původ je 0.
_Idx
Objekt indexu , který určuje umístění původu. Pododdíl je zbytek rozsahu.
_I0
Nejvýznamnější komponenta původu této části.
_I1
Nejvýznamnější komponenta původu této části.
_I2
Nejméně významná součást původu této části.
_Hodnost
Pořadí oddílu.
_Section_extent
Objekt rozsahu , který určuje rozsah oddílu.
_Section_origin
Objekt indexu , který určuje umístění původu.
value_type
Datový typ prvků, které jsou zkopírovány.
Návratová hodnota
Vrátí pododdíl objektu array
, který je v zadaném původu a volitelně má zadaný rozsah. Pokud je zadán pouze index
objekt, pododdíl obsahuje všechny prvky v přidružené mřížce, které mají indexy větší než indexy prvků v objektu index
.
view_as
Reinterpretuje toto pole jako array_view jiného pořadí.
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);
Parametry
_New_rank
Pořadí objektu extent
předané jako parametr.
_View_extent
Rozsah, který se používá k vytvoření nového array_view objektu.
value_type
Datový typ prvků v původním array
i vráceném array_view
objektu.
Návratová hodnota
Objekt array_view vytvořený.