Sdílet prostřednictvím


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

Jméno popis
array – konstruktor Inicializuje novou instanci array třídy.
~array – destruktor array Zničí objekt.

Veřejné metody

Jméno popis
copy_to Zkopíruje obsah pole do jiného pole.
Dat 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

Jméno 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

Jméno popis
rank – konstanta Uloží pořadí pole.

Veřejné datové členy

Jméno 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.
Rozsahu 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í , ( Npole 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.

_Rozsahu
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.

_Další
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);

Vrácená hodnota

Ukazatel na nezpracovaná data pole.

Rozsahu

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;

Vrácená 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 ;

Vrácená 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);

Vrácená hodnota

get_extent

Vrátí objekt rozsahu objektu array.

Concurrency::extent<_Rank> get_extent() const restrict(amp,cpu);

Vrácená 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.

Vrácená 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.

_I
Umístění elementu.

Vrácená 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.

_I
Index.

Vrácená 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

_Další
Objekt array , ze který chcete kopírovat.

_Src
Objekt array , ze který chcete kopírovat.

Vrácená 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.

Vrácená 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.

Vrácená 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.

Vrácená hodnota

Objekt array_view vytvořený.

Viz také

Obor názvů Concurrency (C++ AMP)