array_view — Klasa
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.
_Rank
Ranga array_view
obiektu.
Członkowie
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) . |
Danych | 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żania | 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 |
---|---|
Zakresie | 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_each
wywoł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
array
obiektu iarray_view
obiektu na nim w kolejności programu są zgodne z szeregową relacją przed.Wszystkie dobrze zsynchronizowane dostępy do nakładających
array_view
się obiektów na tym samym akceleratorze w jednymarray
obiekcie są aliasowane za pośrednictwemarray
obiektu. Wywołują one całkowitą liczbę wystąpień przed relacją, która przestrzega porządku programowego. Nie ma buforowania.array_view
Jeś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.
_Kontenera
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.
_Zakresie
Zakres w każdym wymiarze tego array_view
elementu .
_Innych
Obiekt typu array_view<T,N>
, z którego ma inicjować nowy array_view
obiekt .
_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);
Zakresie
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.
_I
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.
_I
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
_Innych
array_view
Obiekt do skopiowania.
Wartość zwracana
Odwołanie do tego array_view
obiektu.
Rank
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.
_Rank
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_read
domyś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_read
domyś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.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla