array — Klasa

Reprezentuje kontener danych używany do przenoszenia danych do akceleratora.

Składnia

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

Parametry

Value_type
Typ elementu danych.

_Rank
Ranga tablicy.

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
konstruktor tablicy Inicjuje nowe wystąpienie klasy array.
~array Destruktor array Niszczy obiekt.

Metody publiczne

Nazwa/nazwisko opis
copy_to Kopiuje zawartość tablicy do innej tablicy.
Danych Zwraca wskaźnik do danych pierwotnych tablicy.
get_accelerator_view Zwraca obiekt accelerator_view reprezentujący lokalizację, w której jest przydzielana tablica. Dostęp do tej właściwości można uzyskać tylko na procesorze CPU.
get_associated_accelerator_view Pobiera drugi obiekt accelerator_view , który jest przekazywany jako parametr, gdy konstruktor przejściowy jest wywoływany w celu utworzenia wystąpienia array obiektu.
get_cpu_access_type Zwraca access_type tablicy. Dostęp do tej metody można uzyskać tylko na procesorze CPU.
get_extent Zwraca obiekt zakresu tablicy.
reinterpret_as Zwraca tablicę jednowymiarową zawierającą wszystkie elementy w array obiekcie.
sekcja Zwraca podsekcję array obiektu, który znajduje się w określonym miejscu pochodzenia i, opcjonalnie, który ma określony zakres.
view_as Zwraca obiekt array_view skonstruowany z array obiektu .

Operatory publiczne

Nazwa/nazwisko opis
operator std::vector<value_type> Używa copy(*this, vector) metody do niejawnego konwertowania tablicy na obiekt std::vector .
Operator() Zwraca wartość elementu, która jest określona przez parametry.
operator[] Zwraca element znajdujący się w określonym indeksie.
operator = Kopiuje zawartość określonego array obiektu do tego.

Stałe publiczne

Nazwa/nazwisko opis
ranga, stała Przechowuje rangę tablicy.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
Accelerator_view Pobiera obiekt accelerator_view reprezentujący lokalizację, w której jest przydzielana tablica. Dostęp do tej właściwości można uzyskać tylko na procesorze CPU.
associated_accelerator_view Pobiera drugi obiekt accelerator_view , który jest przekazywany jako parametr, gdy konstruktor przejściowy jest wywoływany w celu utworzenia wystąpienia array obiektu.
cpu_access_type Pobiera access_type, który reprezentuje sposób, w jaki procesor może uzyskać dostęp do magazynu tablicy.
Zakresie Pobiera zakres, który definiuje kształt tablicy.

Uwagi

Typ array<T,N> reprezentuje gęstą i regularną (nie postrzępiętą) N-wymiarową tablicę, która znajduje się w określonej lokalizacji, takiej jak akcelerator lub procesor CPU. Typ danych elementów w tablicy to T, który musi być typem zgodnym z akceleratorem docelowym. Chociaż ranga, N, (tablica jest określana statycznie i jest częścią typu, zakres tablicy jest określany przez środowisko uruchomieniowe i jest wyrażany przy użyciu klasy extent<N>.

Tablica może mieć dowolną liczbę wymiarów, chociaż niektóre funkcje są wyspecjalizowane dla array obiektów z klasyfikacją jedną, dwie i trzy. Jeśli pominięto argument wymiaru, wartość domyślna to 1.

Dane tablicowe są ułożone w pamięci. Elementy, które różnią się o jeden w najmniej znaczącym wymiarze, sąsiadują z pamięcią.

Tablice są logicznie uważane za typy wartości, ponieważ podczas kopiowania tablicy do innej tablicy wykonywana jest kopia głęboka. Dwie tablice nigdy nie wskazują na te same dane.

Typ array<T,N> jest używany w kilku scenariuszach:

  • Jako kontener danych, który może być używany w obliczeniach w akceleratorze.

  • Jako kontener danych do przechowywania pamięci na procesorze hosta (który może służyć do kopiowania do i z innych tablic).

  • Jako obiekt przejściowy, który działa jako szybki pośrednik w kopiach typu host-urządzenie.

Hierarchia dziedziczenia

array

Wymagania

Nagłówek: amp.h

Przestrzeń nazw: współbieżność

~Tablicy

array Niszczy obiekt.

~array() restrict(cpu);

Accelerator_view

Pobiera obiekt accelerator_view reprezentujący lokalizację, w której jest przydzielana tablica. Dostęp do tej właściwości można uzyskać tylko na procesorze CPU.

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

tablica

Inicjuje nowe wystąpienie klasy tablicy. Nie ma domyślnego konstruktora dla elementu array<T,N>. Wszystkie konstruktory są uruchamiane tylko na procesorze CPU. Nie można ich wykonać w obiekcie docelowym 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, który określa preferowaną lokalizację docelową tablicy.

_Av
Obiekt accelerator_view określający lokalizację tablicy.

_Cpu_access_type
Żądany access_type dla tablicy na procesorze. Ten parametr ma domyślną wartość access_type_auto pozostawienia determinacji procesora CPU access_type w środowisku uruchomieniowym. Rzeczywiste użycie procesora CPU access_type dla tablicy można wykonywać przy użyciu get_cpu_access_type metody .

_Zakresie
Zakres w każdym wymiarze tablicy.

_E0
Najbardziej znaczący składnik zakresu tej sekcji.

_E1
Następny do najbardziej znaczący składnik zakresu tej sekcji.

_E2
Najmniej znaczący składnik zakresu tej sekcji.

_InputIterator
Typ iteratora wejściowego.

_Src
Aby obiekt skopiować.

_Src_first
Iterator początkowy do kontenera źródłowego.

_Src_last
Iterator końcowy do kontenera źródłowego.

_Innych
Inne źródło danych.

_Rank
Ranga sekcji.

Value_type
Typ danych elementów, które są kopiowane.

associated_accelerator_view

Pobiera drugi obiekt accelerator_view , który jest przekazywany jako parametr, gdy konstruktor przejściowy jest wywoływany w celu utworzenia wystąpienia array obiektu.

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

copy_to

Kopiuje zawartość elementu array do innego arrayelementu .

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

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

Parametry

_Dest
Obiekt array_view do skopiowania.

cpu_access_type

Pobiera access_type procesora CPU dozwolone dla tej tablicy.

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

dane

Zwraca wskaźnik do danych pierwotnych obiektu array.

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

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

Wartość zwracana

Wskaźnik do danych pierwotnych tablicy.

Zakresie

Pobiera obiekt zakresu, który definiuje kształt arrayobiektu .

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

get_accelerator_view

Zwraca obiekt accelerator_view reprezentujący lokalizację, w array której jest przydzielany obiekt. Dostęp do tej właściwości można uzyskać tylko na procesorze CPU.

Concurrency::accelerator_view get_accelerator_view() const;

Wartość zwracana

accelerator_view Obiekt reprezentujący lokalizację, w array której jest przydzielany obiekt.

get_associated_accelerator_view

Pobiera drugi obiekt accelerator_view , który jest przekazywany jako parametr, gdy konstruktor przejściowy jest wywoływany w celu utworzenia wystąpienia array obiektu.

Concurrency::accelerator_view get_associated_accelerator_view() const ;

Wartość zwracana

Drugi obiekt accelerator_view przekazany do konstruktora przejściowego.

get_cpu_access_type

Zwraca access_type procesora CPU dozwolone dla tej tablicy.

access_type get_cpu_access_type() const restrict(cpu);

Wartość zwracana

get_extent

Zwraca obiekt zakresu obiektu array.

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

Wartość zwracana

extent Obiekt obiektu array.

operator std::vector<value_type>

Używa copy(*this, vector) metody do niejawnego konwertowania tablicy na obiekt std::vector.

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

Parametry

Value_type
Typ danych elementów wektora.

Wartość zwracana

Obiekt typu vector<T> zawierający kopię danych zawartych w tablicy.

Operator()

Zwraca wartość elementu, która jest określona przez 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

_Indeks
Lokalizacja elementu.

_I0
Najbardziej znaczący składnik pochodzenia tej sekcji.

_I1
Następny do najbardziej znaczący składnik pochodzenia tej sekcji.

_I2
Najmniej znaczący składnik pochodzenia tej sekcji.

_I
Lokalizacja elementu.

Wartość zwracana

Wartość elementu określona przez parametry.

operator[]

Zwraca element znajdujący się w określonym indeksie.

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

_Indeks
Indeks.

_I
Indeks.

Wartość zwracana

Element, który znajduje się w określonym indeksie.

operator =

Kopiuje zawartość określonego array obiektu.

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

_Innych
array Obiekt do skopiowania.

_Src
array Obiekt do skopiowania.

Wartość zwracana

Odwołanie do tego array obiektu.

Rank

Przechowuje rangę klasy array.

static const int rank = _Rank;

reinterpret_as

Ponownie interpretuje tablicę za pomocą jednowymiarowej array_view, która opcjonalnie może mieć inny typ wartości niż tablica źródłowa.

Składnia

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
Typ danych zwróconych danych.

Wartość zwracana

Obiekt array_view lub const array_view, który jest oparty na tablicy, z typem elementu ponownie zinterpretowanym z T na ElementType i klasyfikacją obniżoną z N do 1.

Uwagi

Czasami wygodnie jest wyświetlić tablicę wielowymiarową, tak jakby była to liniowa, jednowymiarowa tablica, prawdopodobnie z innym typem wartości niż tablica źródłowa. Aby to osiągnąć, możesz użyć tej metody. Przestroga Ponowne interpretowanie obiektu tablicy przy użyciu innego typu wartości jest potencjalnie niebezpieczną operacją. Zalecamy, aby używać tej funkcji ostrożnie.

Poniższy kod zawiera przykład.

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

Zwraca podsekcję array obiektu, który znajduje się w określonym miejscu pochodzenia i, opcjonalnie, który ma określony zakres.

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
Najbardziej znaczący składnik zakresu tej sekcji.

_E1
Następny do najbardziej znaczący składnik zakresu tej sekcji.

_E2
Najmniej znaczący składnik zakresu tej sekcji.

_Ext
Obiekt zakresu , który określa zakres sekcji. Początek to 0.

_Idx
Obiekt indeksu określający lokalizację źródła. Podsekcja jest resztą zakresu.

_I0
Najbardziej znaczący składnik pochodzenia tej sekcji.

_I1
Następny do najbardziej znaczący składnik pochodzenia tej sekcji.

_I2
Najmniej znaczący składnik pochodzenia tej sekcji.

_Rank
Ranga sekcji.

_Section_extent
Obiekt zakresu , który określa zakres sekcji.

_Section_origin
Obiekt indeksu określający lokalizację źródła.

Value_type
Typ danych elementów, które są kopiowane.

Wartość zwracana

Zwraca podsekcję array obiektu, który znajduje się w określonym miejscu pochodzenia i, opcjonalnie, który ma określony zakres. Po określeniu index tylko obiektu podsekcja zawiera wszystkie elementy w skojarzonej siatce, które mają indeksy większe niż indeksy elementów w index obiekcie.

view_as

Ponownie interpretuje tę tablicę jako array_view innej rangi.

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
Ranga extent obiektu przekazana jako parametr.

_View_extent
Zakres używany do konstruowania nowego obiektu array_view .

Value_type
Typ danych elementów zarówno w oryginalnym array obiekcie, jak i zwróconym array_view obiekcie.

Wartość zwracana

Obiekt array_view , który jest skonstruowany.

Zobacz też

Przestrzeń nazw współbieżności (C++ AMP)