Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Reprezentuje widok N-wymiarowy danych przechowywanych w innym kontenerze.
Składnia
template <
typename value_type,
int _Rank = 1
>
class array_view : public _Array_view_base<_Rank, sizeof(value_type)/sizeof(int)>;
template <
typename value_type,
int _Rank
>
class array_view<const value_type, _Rank> : public _Array_view_base<_Rank, sizeof(value_type)/sizeof(int)>;
Parametry
value_type
Typ danych elementów w array_view obiekcie.
_Ranga
Ranga array_view obiektu.
Elementy członkowskie
Konstruktory publiczne
| Nazwa/nazwisko | opis |
|---|---|
| konstruktor array_view | Inicjuje nowe wystąpienie klasy array_view. Nie ma domyślnego konstruktora dla elementu array<T,N>. Wszystkie konstruktory są ograniczone do uruchamiania tylko na procesorze CPU i nie można ich wykonać w obiekcie docelowym Direct3D. |
| ~array_view Destruktor | array_view Niszczy obiekt. |
Metody publiczne
| Nazwa/nazwisko | opis |
|---|---|
| copy_to | Kopiuje zawartość array_view obiektu do określonego miejsca docelowego przez wywołanie metody copy(*this, dest). |
| data | Zwraca wskaźnik do danych pierwotnych obiektu array_view. |
| discard_data | Odrzuca bieżące dane bazowe tego widoku. |
| get_extent | Zwraca obiekt zakresu obiektu array_view. |
| get_ref | Zwraca odwołanie do indeksowanego elementu. |
| get_source_accelerator_view | Zwraca accelerator_view, w którym znajduje się źródło array_view danych obiektu . |
| odświeżyć | array_view Powiadamia obiekt, że jego powiązana pamięć została zmodyfikowana poza interfejsemarray_view. Wywołanie tej metody powoduje, że wszystkie buforowane informacje są nieaktualne. |
| reinterpret_as | Zwraca tablicę jednowymiarową zawierającą wszystkie elementy w array_view obiekcie. |
| sekcja | Zwraca podsekcję array_view obiektu znajdującego się w określonym miejscu pochodzenia i opcjonalnie, który ma określony zakres. |
| synchronize | Synchronizuje wszelkie modyfikacje wprowadzone w array_view obiekcie z powrotem do jego danych źródłowych. |
| synchronize_async | Asynchronicznie synchronizuje wszelkie modyfikacje wprowadzone w array_view obiekcie z powrotem do danych źródłowych. |
| synchronize_to | Synchronizuje wszelkie modyfikacje wprowadzone w array_view obiekcie do określonego accelerator_view. |
| synchronize_to_async | Asynchronicznie synchronizuje wszelkie modyfikacje wprowadzone w array_view obiekcie do określonego accelerator_view. |
| view_as | array_view Tworzy obiekt innej rangi przy użyciu danych tego array_view obiektu. |
Operatory publiczne
| Nazwa/nazwisko | opis |
|---|---|
| operator() | Zwraca wartość elementu określonego przez parametr lub parametry. |
| operator[] | Zwraca element określony przez parametry. |
| operator = | Kopiuje zawartość określonego array_view obiektu do tego. |
Stałe publiczne
| Nazwa/nazwisko | opis |
|---|---|
| ranga, stała | Przechowuje rangę array_view obiektu. |
Składowe danych
| Nazwa/nazwisko | opis |
|---|---|
| rozciągłość | extent Pobiera obiekt, który definiuje kształt array_view obiektu. |
| source_accelerator_view | Pobiera accelerator_view, w którym znajduje się źródło array_view danych obiektu |
| value_type | Typ wartości tablicy array_view i powiązanej. |
Uwagi
Klasa array_view reprezentuje widok danych zawartych w obiekcie tablicy lub podsekcji array obiektu.
Dostęp do array_view obiektu, w którym znajdują się dane źródłowe (lokalnie) lub w innym akceleratorze lub domenie spójności (zdalnie). Gdy uzyskujesz zdalny dostęp do obiektu, widoki są kopiowane i buforowane w razie potrzeby. Z wyjątkiem efektów automatycznego buforowania array_view obiekty mają profil wydajności podobny do tego obiektu array . W przypadku uzyskiwania dostępu do danych za pośrednictwem widoków występuje niewielka kara za wydajność.
Istnieją trzy scenariusze zdalnego użycia:
Widok wskaźnika pamięci systemowej jest przekazywany za pomocą parallel_for_each wywołania akceleratora i dostępu do akceleratora.
Widok tablicy znajdującej się w akceleratorze jest przekazywany za pomocą
parallel_for_eachwywołania innego akceleratora i jest do niej dostępny.Dostęp do widoku tablicy znajdującej się w akceleratorze jest dostępny na procesorze CPU.
W każdym z tych scenariuszy przywoływane widoki są kopiowane przez środowisko uruchomieniowe do lokalizacji zdalnej, a w przypadku modyfikacji wywołań do array_view obiektu zostaną skopiowane z powrotem do lokalizacji lokalnej. Środowisko uruchomieniowe może zoptymalizować proces kopiowania zmian z powrotem, może kopiować tylko zmienione elementy lub kopiować również niezmienione części. Nakładające array_view się obiekty w jednym źródle danych nie mają gwarancji zachowania integralności referencyjnej w lokalizacji zdalnej.
Należy zsynchronizować dowolny dostęp wielowątkowy do tego samego źródła danych.
Środowisko uruchomieniowe gwarantuje buforowanie danych w array_view obiektach:
Wszystkie dobrze zsynchronizowane dostępy do
arrayobiektu iarray_viewobiektu na nim w kolejności programu są zgodne z szeregową relacją przed.Wszystkie dobrze zsynchronizowane dostępy do nakładających
array_viewsię obiektów na tym samym akceleratorze w jednymarrayobiekcie są aliasowane za pośrednictwemarrayobiektu. Wywołują one całkowitą liczbę wystąpień przed relacją, która przestrzega porządku programowego. Nie ma buforowania.array_viewJeśli obiekty są wykonywane na różnych akceleratorach, kolejność dostępu jest niezdefiniowana, tworząc warunek wyścigu.
Podczas tworzenia array_view obiektu przy użyciu wskaźnika w pamięci systemowej należy zmienić obiekt widoku array_view tylko za pomocą array_view wskaźnika. Alternatywnie należy wywołać refresh() jeden z array_view obiektów dołączonych do wskaźnika systemowego, jeśli podstawowa pamięć natywna zostanie zmieniona bezpośrednio, zamiast za pośrednictwem array_view obiektu.
Każda akcja powiadamia array_view obiekt, że podstawowa pamięć natywna została zmieniona i że wszystkie kopie znajdujące się w akceleratorze są nieaktualne. Jeśli zastosujesz się do tych wytycznych, widoki oparte na wskaźniku są identyczne z widokami macierzy równoległych danych.
Hierarchia dziedziczenia
_Array_view_shape
_Array_view_base
array_view
Wymagania
Nagłówek: amp.h
Przestrzeń nazw: współbieżność
~array_view
array_view Niszczy obiekt.
~array_view()restrict(amp,cpu);
array_view
Inicjuje nowe wystąpienie klasy array_view.
array_view(
array<value_type, _Rank>& _Src)restrict(amp,cpu);
array_view(
const array_view& _Other)restrict(amp,cpu);
explicit array_view(
const Concurrency::extent<_Rank>& _Extent) restrict(cpu);
template <
typename _Container
>
array_view(
const Concurrency::extent<_Rank>& _Extent,
_Container& _Src) restrict(cpu);
array_view(
const Concurrency::extent<_Rank>& _Extent,
value_type* _Src)restrict(amp,cpu);
explicit array_view(
int _E0) restrict(cpu);
template <
typename _Container
>
explicit array_view(
_Container& _Src,
typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);
template <
typename _Container
>
explicit array_view(
int _E0,
_Container& _Src) restrict(cpu);
explicit array_view(
int _E0,
int _E1) __CPU_ONLY;
template <
typename _Container
>
explicit array_view(
int _E0,
int _E1,
_Container& _Src) restrict(cpu);
explicit array_view(
int _E0,
int _E1,
int _E2) __CPU_ONLY;
template <
typename _Container
>
explicit array_view(
int _E0,
int _E1,
int _E2,
_Container& _Src);
explicit array_view(
int _E0,
_In_ value_type* _Src)restrict(amp,cpu);
template <
typename _Arr_type,
int _Size
>
explicit array_view(
_In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);
explicit array_view(
int _E0,
int _E1,
_In_ value_type* _Src)restrict(amp,cpu);
explicit array_view(
int _E0,
int _E1,
int _E2,
_In_ value_type* _Src)restrict(amp,cpu);
array_view(
const array<value_type, _Rank>& _Src)restrict(amp,cpu);
array_view(
const array_view<value_type, _Rank>& _Src)restrict(amp,cpu);
array_view(
const array_view<const value_type, _Rank>& _Src)restrict(amp,cpu);
template <
typename _Container
>
array_view(
const Concurrency::extent<_Rank>& _Extent,
const _Container& _Src) restrict(cpu);
template <
typename _Container
>
explicit array_view(
const _Container& _Src,
typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);
array_view(
const Concurrency::extent<_Rank>& _Extent,
const value_type* _Src)restrict(amp,cpu);
template <
typename _Arr_type,
int _Size
>
explicit array_view(
const _In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);
template <
typename _Container
>
array_view(
int _E0,
const _Container& _Src);
template <
typename _Container
>
array_view(
int _E0,
int _E1,
const _Container& _Src);
template <
typename _Container
>
array_view(
int _E0,
int _E1,
int _E2,
const _Container& _Src);
array_view(
int _E0,
const value_type* _Src)restrict(amp,cpu);
array_view(
int _E0,
int _E1,
const value_type* _Src) restrict(amp,cpu);
array_view(
int _E0,
int _E1,
int _E2,
const value_type* _Src) restrict(amp,cpu);
Parametry
_Arr_type
Typ elementu tablicy w stylu C, z której są dostarczane dane.
_Kontener
Argument szablonu, który musi określać kontener liniowy obsługujący element data() i size() elementy członkowskie.
_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.
_Rozciągłość
Zakres w każdym wymiarze tego array_viewelementu .
_Inny
Obiekt typu array_view<T,N> , z którego ma inicjować nowy array_viewobiekt .
_Rozmiar
Rozmiar tablicy w stylu C, z której są dostarczane dane.
_Src
Wskaźnik do danych źródłowych, które zostaną skopiowane do nowej tablicy.
copy_to
Kopiuje zawartość array_view obiektu do określonego obiektu docelowego przez wywołanie metody copy(*this, dest).
void copy_to(
array<value_type, _Rank>& _Dest) const;
void copy_to(
array_view<value_type, _Rank>& _Dest) const;
Parametry
_Dest
Obiekt do skopiowania.
dane
Zwraca wskaźnik do danych pierwotnych obiektu array_view.
value_type* data() const restrict(amp,
cpu);
const value_type* data() const restrict(amp,
cpu);
Wartość zwracana
Wskaźnik do nieprzetworzonych danych obiektu array_view.
discard_data
Odrzuca bieżące dane bazowe tego widoku. Jest to wskazówka optymalizacji dla środowiska uruchomieniowego używanego w celu uniknięcia kopiowania bieżącej zawartości widoku do miejsca docelowego accelerator_view , do którego jest uzyskiwany dostęp, a jego użycie jest zalecane, jeśli istniejąca zawartość nie jest potrzebna. Ta metoda jest operacją no-op, jeśli jest używana w kontekście ograniczeń(amp)
void discard_data() const restrict(cpu);
rozciągłość
extent Pobiera obiekt, który definiuje kształt array_view obiektu.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_extent
Zwraca obiekt array_view zakresu obiektu.
Concurrency::extent<_Rank> get_extent() const restrict(cpu, amp);
Wartość zwracana
extent Obiekt array_view obiektu
get_ref
Pobierz odwołanie do elementu indeksowanego przez _Index. W przeciwieństwie do innych operatorów indeksowania na potrzeby uzyskiwania dostępu do array_view procesora CPU ta metoda nie synchronizuje niejawnie zawartości tego array_view z procesorem CPU. Po dokonaniu dostępu do array_view w lokalizacji zdalnej lub wykonaniu operacji kopiowania obejmującej tę array_view użytkownicy są odpowiedzialni za jawną synchronizację array_view z procesorem CPU przed wywołaniem tej metody. Niepowodzenie w tym celu powoduje niezdefiniowane zachowanie.
value_type& get_ref(
const index<_Rank>& _Index) const restrict(amp, cpu);
Parametry
_Indeks
Indeks.
Wartość zwracana
Odwołanie do elementu indeksowanego przez _Index
get_source_accelerator_view
Zwraca accelerator_view, w którym znajduje się źródło danych array_view. Jeśli array_view nie ma źródła danych, ten interfejs API zgłasza runtime_exception
accelerator_view get_source_accelerator_view() const;
Wartość zwracana
operator()
Zwraca wartość elementu określonego przez parametr lub parametry.
value_type& operator() (
const index<_Rank>& _Index) const restrict(amp,cpu);
typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator() (
int _I) const restrict(amp,cpu);
value_type& operator() (
int _I0,
int _I1) const restrict(amp,cpu);
value_type& operator() (
int _I0,
int _I1,
int _I2) const 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
Indeks w pierwszym wymiarze.
_I1
Indeks w drugim wymiarze.
_I2
Indeks w trzecim wymiarze.
_Ja
Lokalizacja elementu.
Wartość zwracana
Wartość elementu określonego przez parametr lub parametry.
operator[]
Zwraca element określony przez parametry.
typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator[] (
int _I) const restrict(amp,cpu);
value_type& operator[] (
const index<_Rank>& _Index) const restrict(amp,cpu);
Parametry
_Indeks
Indeks.
_Ja
Indeks.
Wartość zwracana
Wartość elementu w indeksie lub array_view przewidywany wymiar najbardziej znaczący.
operator =
Kopiuje zawartość określonego array_view obiektu do tego.
array_view& operator= (
const array_view& _Other) restrict(amp,cpu);
array_view& operator= (
const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);
Parametry
_Inny
array_view Obiekt do skopiowania.
Wartość zwracana
Odwołanie do tego array_view obiektu.
ranga
Przechowuje rangę array_view obiektu.
static const int rank = _Rank;
Odśwież
array_view Powiadamia obiekt, że jego powiązana pamięć została zmodyfikowana poza interfejsemarray_view. Wywołanie tej metody powoduje, że wszystkie buforowane informacje są nieaktualne.
void refresh() const restrict(cpu);
reinterpret_as
Ponownie interpretuje array_view za pomocą jednowymiarowej array_view, która jako opcja może mieć inny typ wartości niż array_view źródłowa.
Składnia
template <
typename _Value_type2
>
array_view< _Value_type2, _Rank> reinterpret_as() const restrict(amp,cpu);
template <
typename _Value_type2
>
array_view<const _Value_type2, _Rank> reinterpret_as() const restrict(amp,cpu);
Parametry
_Value_type2
Typ danych nowego array_view obiektu.
Wartość zwracana
array_view Obiekt lub obiekt constarray_view, który jest oparty na tym array_view, z typem elementu przekonwertowanym z T na _Value_type2, i rangą zmniejszoną z N do 1.
Uwagi
Czasami wygodnie jest wyświetlić tablicę wielowymiarową jako liniową, jednowymiarową tablicę, która może mieć inny typ wartości niż tablica źródłowa. Można to osiągnąć przy array_view użyciu tej metody.
Ostrzeżenie Ponowne interpretowanie obiektu array_view przy użyciu innego typu wartości jest potencjalnie niebezpieczną operacją. Ta funkcja powinna być używana z ostrożnością.
Oto 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_view obiektu znajdującego się w określonym miejscu pochodzenia i opcjonalnie, który ma określony zakres.
array_view section(
const Concurrency::index<_Rank>& _Section_origin,
const Concurrency::extent<_Rank>& _Section_extent) const restrict(amp,cpu);
array_view section(
const Concurrency::index<_Rank>& _Idx) const restrict(amp,cpu);
array_view section(
const Concurrency::extent<_Rank>& _Ext) const restrict(amp,cpu);
array_view section(
int _I0,
int _E0) const restrict(amp,cpu);
array_view section(
int _I0,
int _I1,
int _E0,
int _E1) const restrict(amp,cpu);
array_view 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.
Wartość zwracana
Podsekcja array_view 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 skojarzonym zakresie, które mają indeksy większe niż indeksy elementów w index obiekcie.
source_accelerator_view
Pobiera accelerator_view źródłową, z którą jest skojarzona ta array_view.
__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;
synchronize
Synchronizuje wszelkie modyfikacje wprowadzone w array_view obiekcie z powrotem do jego danych źródłowych.
void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);
void synchronize() const restrict(cpu);
Parametry
_Access_type
Zamierzone access_type na accelerator_view docelowej. Ten parametr ma wartość access_type_readdomyślną .
synchronize_async
Asynchronicznie synchronizuje wszelkie modyfikacje wprowadzone w array_view obiekcie z powrotem do danych źródłowych.
concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);
concurrency::completion_future synchronize_async() const restrict(cpu);
Parametry
_Access_type
Zamierzone access_type na accelerator_view docelowej. Ten parametr ma wartość access_type_readdomyślną .
Wartość zwracana
Przyszłość, na którą należy poczekać na zakończenie operacji.
synchronize_to
Synchronizuje wszelkie modyfikacje wprowadzone w tym array_view do określonego accelerator_view.
void synchronize_to(
const accelerator_view& _Accl_view,
access_type _Access_type = access_type_read) const restrict(cpu);
void synchronize_to(
const accelerator_view& _Accl_view) const restrict(cpu);
Parametry
_Accl_view
Docelowa accelerator_view do synchronizacji.
_Access_type
Żądany access_type na accelerator_view docelowej. Ten parametr ma wartość domyślną access_type_read.
synchronize_to_async
Asynchronicznie synchronizuje wszelkie modyfikacje wprowadzone w tym array_view do określonego accelerator_view.
concurrency::completion_future synchronize_to_async(
const accelerator_view& _Accl_view,
access_type _Access_type = access_type_read) const restrict(cpu);
concurrency::completion_future synchronize_to_async(
const accelerator_view& _Accl_view) const restrict(cpu);
Parametry
_Accl_view
Docelowa accelerator_view do synchronizacji.
_Access_type
Żądany access_type na accelerator_view docelowej. Ten parametr ma wartość domyślną access_type_read.
Wartość zwracana
Przyszłość, na którą należy poczekać na zakończenie operacji.
value_type
Typ wartości array_view i powiązana tablica.
typedef typenamevalue_type value_type;
view_as
Ponownie interpretuje to array_view jako inną array_view rangę.
template <
int _New_rank
>
array_view<value_type,_New_rank> view_as(
const Concurrency::extent<_New_rank>& _View_extent) const 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 nowego array_view obiektu.
_View_extent
Zmiana kształtu extent.
value_type
Typ danych elementów zarówno w oryginalnym obiekcie tablicy , jak i zwróconym array_view obiekcie.
Wartość zwracana
Obiekt array_view , który jest skonstruowany.