Notatka
Dostęp do tej strony wymaga autoryzacji. Może 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.
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 |
|---|---|
| kopiuj_do | 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. |
| odrzuć_dane | 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 danych array_view. |
| odświeżyć | Powiadamia obiekt array_view, że jego powiązana pamięć została zmodyfikowana poza interfejsem array_view. Wywołanie tej metody czyni wszystkie buforowane informacje przestarzałymi. |
| 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. |
| wyświetl jako |
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 bieżącego obiektu. |
Stałe publiczne
| Nazwa/nazwisko | opis |
|---|---|
| ranga, stała | Przechowuje rangę array_view obiektu. |
Składowe danych
| Nazwa/nazwisko | opis |
|---|---|
| zakres |
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 danych array_view. |
| value_type | Typ wartościowy dla array_view i powiązanej tablicy. |
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, jak array obiekty. W przypadku uzyskiwania dostępu do danych za pośrednictwem widoków występuje niewielki spadek wydajności.
Istnieją trzy scenariusze zdalnego użycia:
Widok na wskaźnik pamięci systemowej jest przekazywany za pomocą wywołania parallel_for_each do akceleratora i dostępny na akceleratorze.
Widok tablicy znajdującej się w akceleratorze jest przekazywany drogą wywołania
parallel_for_eachdo innego akceleratora, gdzie jest 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 zapewnia następujące gwarancje dotyczące buforowania danych w obiektach array_view:
Wszystkie dobrze zsynchronizowane dostępy do obiektu
arrayi obiektuarray_viewna nim w kolejności programu przestrzegają szeregową relację typu "happens-before".Wszystkie dobrze zsynchronizowane dostępy do nakładających się
array_viewobiektów na tym samym akceleratorze w ramach jednego obiektuarraysą aliasowane przy użyciu obiektuarray. Implikują one całkowitą relację 'następuje przed', która przestrzega porządku programowego. Nie ma buforowania.array_viewJeśli obiekty są uruchamiane na różnych akceleratorach, kolejność dostępu jest niezdefiniowana, tworząc sytuację wyścigu.
Podczas tworzenia obiektu array_view za pomocą wskaźnika w pamięci systemowej, obiekt widoku array_view należy zmieniać tylko za pomocą wskaźnika array_view. Alternatywnie należy wywołać refresh() na jednym z obiektów array_view, które są dołączone do wskaźnika systemowego, jeśli podstawowa pamięć natywna zostanie zmieniona bezpośrednio, zamiast poprzez obiekt array_view.
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ć liniowy kontener obsługujący członków data() i size().
_E0
Najbardziej znaczący składnik zakresu tej sekcji.
_E1
Drugi najważniejszy składnik zasięgu tej sekcji.
_E2
Najmniej znaczący składnik zakresu tej sekcji.
_Zasięg
Zakres w każdym wymiarze tego array_view.
Pozostałe
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.
odrzuć_dane
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" w kontekście restrict(amp)
void discard_data() const restrict(cpu);
ekstent
extent Pobiera obiekt, który definiuje kształt array_view obiektu.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
uzyskaj_zakres
Zwraca obiekt rozmiaru obiektu array_view.
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 stosowanych przy uzyskiwaniu dostępu do array_view na CPU, ta metoda nie synchronizuje niejawnie zawartości tego array_view z 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
pobierz_źródłowy_widok_przyspieszacza
Zwraca akcelerator_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 rzutowany na najbardziej znaczący wymiar.
operator =
Kopiuje zawartość określonego obiektu array_view do tego obiektu.
array_view& operator= (
const array_view& _Other) restrict(amp,cpu);
array_view& operator= (
const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);
Parametry
Pozostałe
Obiekt, z którego kopiujemy.
Wartość zwracana
Odwołanie do tego array_view obiektu.
pozycjonować
Przechowuje rangę array_view obiektu.
static const int rank = _Rank;
odświeżyć
Powiadamia obiekt array_view, że jego powiązana pamięć została zmodyfikowana poza interfejsem array_view. Wywołanie tej metody czyni wszystkie buforowane informacje przestarzałymi.
void refresh() const restrict(cpu);
przekształć_na
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żesz to osiągnąć na array_view za pomocą tej metody.
Ostrzeżenie: Ponowne reinterpretowanie 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);
sekcja
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
Drugi najważniejszy składnik zasięgu 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 pozostałą częścią zakresu.
_I0
Najbardziej znaczący składnik pochodzenia tej sekcji.
_I1
Drugi pod względem ważności składnik pochodzenia tej sekcji.
_I2
Najmniej znaczący składnik pochodzenia tej sekcji.
_Ranga
Ranga sekcji.
_Section_extent
Obiekt rozmiaru, 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.
widok akceleratora źródła
Pobiera źródło accelerator_view, z którym skojarzona jest array_view.
__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;
synchronizować
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
_Typ_dostępu
Zamierzony access_type na docelowym accelerator_view. 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 docelowym accelerator_view. Ten parametr ma wartość access_type_readdomyślną .
Wartość zwracana
Przyszłość, na którą należy poczekać, aby operacja została zakończona.
synchronizować z
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
Docelowy accelerator_view, do którego należy przeprowadzić synchronizację.
_Access_type
Żądany typ dostępu w docelowym widoku akceleratora. 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
Docelowy accelerator_view do synchronizowania.
_Access_type
Żądany access_type na docelowej accelerator_view. Ten parametr ma wartość domyślną access_type_read.
Wartość zwracana
Przyszłość, na którą należy poczekać, aby operacja została zakończona.
value_type
Typ wartości array_view i powiązana tablica.
typedef typenamevalue_type value_type;
wyświetl_jako
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 w zwróconym obiekcie array_view.
Wartość zwracana
Obiekt array_view , który jest skonstruowany.