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 i array_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 jednym array obiekcie są aliasowane za pośrednictwem array 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_viewelementu .

_Innych
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);

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_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.

Zobacz też

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