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.
_Ranga
Ranga tablicy.
Elementy członkowskie
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. |
data | 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. |
rozciągłość | 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ść
~tablica
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 .
_Rozciągłość
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.
_Inny
Inne źródło danych.
_Ranga
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 array
elementu .
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.
rozciągłość
Pobiera obiekt zakresu, który definiuje kształt array
obiektu .
__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.
_Ja
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.
_Ja
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
_Inny
array
Obiekt do skopiowania.
_Src
array
Obiekt do skopiowania.
Wartość zwracana
Odwołanie do tego array
obiektu.
ranga
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.
_Ranga
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.