Dela via


matrisklass

Representerar en datacontainer som används för att flytta data till en accelerator.

Syntax

template <typename value_type, int _Rank>
friend class array;

Parameterar

value_type
Elementtypen för data.

_Rang
Matrisens rangordning.

Medlemmar

Offentliga konstruktorer

Namn Beskrivning
matriskonstruktor Initierar en ny instans av klassen array.
~matrisdestructor Förstör objektet array .

Offentliga metoder

Namn Beskrivning
copy_to Kopierar innehållet i matrisen till en annan matris.
data Returnerar en pekare till matrisens rådata.
get_accelerator_view Returnerar det accelerator_view objekt som representerar platsen där matrisen allokeras. Den här egenskapen kan endast nås på processorn.
get_associated_accelerator_view Hämtar det andra accelerator_view objekt som skickas som en parameter när en mellanlagringskonstruktor anropas för att instansiera array objektet.
get_cpu_access_type Returnerar matrisens access_type . Den här metoden kan endast nås på processorn.
get_extent Returnerar matrisens utbredningsobjekt .
reinterpret_as Returnerar en endimensionell matris som innehåller alla element i array objektet.
sektion Returnerar ett underavsnitt av objektet array som är på det angivna ursprunget och, om du vill, som har den angivna omfattningen.
view_as Returnerar ett array_view objekt som är konstruerat från array objektet.

Offentliga operatörer

Namn Beskrivning
operator std::vector<value_type> Används copy(*this, vector) för att implicit konvertera matrisen till ett std::vector-objekt .
operator() Returnerar det elementvärde som anges av parametrarna.
operatorn[] Returnerar elementet som finns i det angivna indexet.
operator= Kopierar innehållet i det angivna array objektet till det här objektet.

Offentliga konstanter

Namn Beskrivning
rankningskonstant Lagrar matrisens rangordning.

Medlemmar i offentliga data

Namn Beskrivning
accelerator_view Hämtar det accelerator_view objekt som representerar platsen där matrisen allokeras. Den här egenskapen kan endast nås på processorn.
associated_accelerator_view Hämtar det andra accelerator_view objekt som skickas som en parameter när en mellanlagringskonstruktor anropas för att instansiera array objektet.
cpu_access_type Hämtar access_type som representerar hur processorn kan komma åt lagringen av matrisen.
utsträckning Hämtar den omfattning som definierar matrisens form.

Anmärkningar

Typen array<T,N> representerar en tät och vanlig (inte taggig) N-dimensionell matris som finns på en specifik plats, till exempel en accelerator eller CPU. Datatypen för elementen i matrisen är T, som måste vara av en typ som är kompatibel med målacceleratorn. Även om rangordningen , N, (av matrisen bestäms statiskt och är en del av typen, bestäms matrisens omfattning av körningen och uttrycks med hjälp av klassen extent<N>.

En matris kan ha valfritt antal dimensioner, även om vissa funktioner är specialiserade för array objekt med rangordning ett, två och tre. Om du utelämnar dimensionsargumentet är standardvärdet 1.

Matrisdata anges sammanhängande i minnet. Element som skiljer sig åt med en i den minst signifikanta dimensionen är intilliggande i minnet.

Matriser anses logiskt vara värdetyper, eftersom en djupkopiering utförs när en matris kopieras till en annan matris. Två matriser pekar aldrig på samma data.

Typen array<T,N> används i flera scenarier:

  • Som en datacontainer som kan användas i beräkningar på en accelerator.

  • Som en datacontainer för att lagra minne på värdprocessorn (som kan användas för att kopiera till och från andra matriser).

  • Som ett mellanlagringsobjekt som fungerar som en snabb mellanhand i kopior från värd till enhet.

Arvshierarki

array

Kravspecifikation

rubrik: amp.h

namnområde: Samtidighet

~samling

Förstör objektet array .

~array() restrict(cpu);

accelerator_view

Hämtar det accelerator_view objekt som representerar platsen där matrisen allokeras. Den här egenskapen kan endast nås på processorn.

__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;

array

Initierar en ny instans av matrisklassen. Det finns ingen standardkonstruktor för array<T,N>. Alla konstruktorer körs endast på processorn. De kan inte köras på ett Direct3D-mål.

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);

Parameterar

_Associated_Av
En accelerator_view som anger matrisens önskade målplats.

_Genomsnittlig
Ett accelerator_view objekt som anger platsen för matrisen.

_Cpu_access_type
Önskad access_type för matrisen på processorn. Den här parametern har ett standardvärde för access_type_auto att lämna CPU-bestämningen access_type till körningen. Den faktiska processorn access_type för matrisen kan efterfrågas med hjälp av get_cpu_access_type metoden .

_Utsträckning
Omfattningen i varje dimension i matrisen.

_E0
Den viktigaste komponenten i omfattningen av det här avsnittet.

_E1
Den näst viktigaste komponenten i omfattningen av det här avsnittet.

_E2
Den minst betydande komponenten i omfattningen av det här avsnittet.

_InputIterator
Typ av iterator för indata.

_Src
Så här gör du ett objekt som ska kopieras.

_Src_first
En inledande iterator i källcontainern.

_Src_last
En slut iterator i källcontainern.

_Annan
Annan datakälla.

_Rang
Avsnittets rangordning.

value_type
Datatypen för de element som kopieras.

associated_accelerator_view

Hämtar det andra accelerator_view objekt som skickas som en parameter när en mellanlagringskonstruktor anropas för att instansiera array objektet.

__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;

copy_to

Kopierar innehållet i array till en annan array.

void copy_to(
    array<value_type, _Rank>& _Dest) const ;

void copy_to(
    array_view<value_type, _Rank>& _Dest) const ;

Parameterar

_Dest
Det array_view objekt som ska kopieras till.

cpu_access_type

Hämtar cpu-access_type som tillåts för den här matrisen.

__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;

data

Returnerar en pekare till rådata för array.

value_type* data() restrict(amp, cpu);

const value_type* data() const restrict(amp, cpu);

Returvärde

En pekare till matrisens rådata.

utsträckning

Hämtar det utsträckningsobjekt som definierar formen på array.

__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;

get_accelerator_view

Returnerar det accelerator_view objekt som representerar platsen där array objektet allokeras. Den här egenskapen kan endast nås på processorn.

Concurrency::accelerator_view get_accelerator_view() const;

Returvärde

Objektet accelerator_view som representerar platsen där array objektet allokeras.

get_associated_accelerator_view

Hämtar det andra accelerator_view objekt som skickas som en parameter när en mellanlagringskonstruktor anropas för att instansiera array objektet.

Concurrency::accelerator_view get_associated_accelerator_view() const ;

Returvärde

Det andra accelerator_view objekt som skickades till mellanlagringskonstruktorn.

get_cpu_access_type

Returnerar cpu-access_type som tillåts för den här matrisen.

access_type get_cpu_access_type() const restrict(cpu);

Returvärde

get_extent

Returnerar utbredningsobjektet för array.

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

Returvärde

Objektet extent för array.

operator std::vector<value_type>

Används copy(*this, vector) för att implicit konvertera matrisen till ett std::vector-objekt.

operator std::vector<value_type>() const restrict(cpu);

Parameterar

value_type
Datatypen för elementen i vektorn.

Returvärde

Ett objekt av typen vector<T> som innehåller en kopia av data som finns i matrisen.

operator()

Returnerar det elementvärde som anges av parametrarna.

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);

Parameterar

_Index
Platsen för elementet.

_I0
Den viktigaste komponenten i ursprunget till det här avsnittet.

_I1
Den näst viktigaste komponenten i det här avsnittets ursprung.

_I2
Den minst betydande komponenten i ursprunget till det här avsnittet.

_Jag
Platsen för elementet.

Returvärde

Elementvärdet som anges av parametrarna.

operator[]

Returnerar elementet som finns i det angivna indexet.

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);

Parameterar

_Index
Indexet.

_Jag
Indexet.

Returvärde

Elementet som finns i det angivna indexet.

operator=

Kopierar innehållet i det angivna array objektet.

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);

Parameterar

_Annan
Objektet array som ska kopieras från.

_Src
Objektet array som ska kopieras från.

Returvärde

En referens till det här array objektet.

rang

Lagrar rangordningen för array.

static const int rank = _Rank;

reinterpret_as

Omtolkar matrisen via en endimensionell array_view, som kan ha en annan värdetyp än källmatrisen.

Syntax

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);

Parameterar

_Value_type2
Datatypen för de returnerade data.

Returvärde

Ett array_view- eller nackdelar array_view objekt som baseras på matrisen, med elementtypen omtolkad från T till ElementType och rangordningen reducerad från N till 1.

Anmärkningar

Ibland är det praktiskt att visa en flerdimensionell matris som om den är en linjär, endimensionell matris, möjligen med en annan värdetyp än källmatrisen. Du kan använda den här metoden för att uppnå detta. Försiktighet Att omtolka ett matrisobjekt med hjälp av en annan värdetyp är en potentiellt osäker åtgärd. Vi rekommenderar att du använder den här funktionen noggrant.

Följande kod innehåller ett exempel.

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);

avsnitt

Returnerar ett underavsnitt av objektet array som är på det angivna ursprunget och, om du vill, som har den angivna omfattningen.

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);

Parameterar

_E0
Den viktigaste komponenten i omfattningen av det här avsnittet.

_E1
Den näst viktigaste komponenten i omfattningen av det här avsnittet.

_E2
Den minst betydande komponenten i omfattningen av det här avsnittet.

_Ext
Det utsträckningsobjekt som anger avsnittets omfattning. Ursprunget är 0.

_Idx
Indexobjektet som anger ursprungsplatsen. Underavsnittet är resten av omfattningen.

_I0
Den viktigaste komponenten i ursprunget till det här avsnittet.

_I1
Den näst viktigaste komponenten i det här avsnittets ursprung.

_I2
Den minst betydande komponenten i ursprunget till det här avsnittet.

_Rang
Avsnittets rangordning.

_Section_extent
Det utsträckningsobjekt som anger avsnittets omfattning.

_Section_origin
Indexobjektet som anger ursprungsplatsen.

value_type
Datatypen för de element som kopieras.

Returvärde

Returnerar ett underavsnitt av objektet array som är på det angivna ursprunget och, om du vill, som har den angivna omfattningen. När endast index objektet anges innehåller underavsnittet alla element i det associerade rutnätet som har index som är större än indexen för elementen index i objektet.

view_as

Omtolkar den här matrisen som en array_view av en annan rangordning.

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);

Parameterar

_New_rank
Rangordningen för objektet extent som skickas som en parameter.

_View_extent
Den omfattning som används för att konstruera det nya array_view objektet.

value_type
Datatypen för elementen i både det ursprungliga array objektet och det returnerade array_view objektet.

Returvärde

Det array_view objekt som är konstruerat.

Se även

Namnområde för samtidighet (C++ AMP)