Sdílet prostřednictvím


array_view – třída

Představuje ndimenzionální zobrazení dat uložených v jiném kontejneru.

Syntaxe

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
Datový typ prvků v objektu array_view .

_Hodnost
Pořadí objektu array_view .

Členové

Veřejné konstruktory

Název Popis
konstruktor array_view Inicializuje novou instanci array_view třídy. Neexistuje žádný výchozí konstruktor pro array<T,N>. Všechny konstruktory jsou omezeny tak, aby běžely pouze na procesoru a nelze je spustit v cíli Direct3D.
~array_view Destruktor array_view Zničí objekt.

Veřejné metody

Název Popis
copy_to Zkopíruje obsah objektu array_view do určeného cíle voláním copy(*this, dest).
data Vrátí ukazatel na nezpracovaná data array_view.
discard_data Zahodí aktuální data, která jsou základem tohoto zobrazení.
get_extent Vrátí objekt rozsahu array_view objektu.
get_ref Vrátí odkaz na indexovaný prvek.
get_source_accelerator_view Vrátí accelerator_view, kde se nachází zdroj array_view dat.
osvěžit Upozorní objekt, array_view že jeho vázaná paměť byla změněna mimo array_view rozhraní. Volání této metody vykreslí všechny informace uložené v mezipaměti zastaralé.
reinterpret_as Vrátí jednorozměrné pole, které obsahuje všechny prvky v objektu array_view .
section Vrátí pododdíl objektu array_view , který je v zadaném původu, a volitelně i se zadaným rozsahem.
synchronize Synchronizuje všechny změny provedené v objektu array_view zpět do zdrojových dat.
synchronize_async Asynchronně synchronizuje všechny změny provedené v objektu array_view zpět do zdrojových dat.
synchronize_to Synchronizuje všechny změny provedené v objektu array_view do zadaného accelerator_view.
synchronize_to_async Asynchronně synchronizuje všechny změny provedené v objektu array_view se zadaným accelerator_view.
view_as array_view Vytvoří objekt jiného pořadí pomocí dat tohoto array_view objektu.

Veřejné operátory

Název Popis
operator() Vrátí hodnotu prvku, který je určen parametrem nebo parametry.
operator[] Vrátí prvek, který je určen parametry.
operator= Zkopíruje obsah zadaného array_view objektu do tohoto objektu.

Veřejné konstanty

Název Popis
rank – konstanta Uloží pořadí objektu array_view .

Datové členy

Název Popis
rozsah extent Získá objekt, který definuje tvar objektuarray_view.
source_accelerator_view Získá accelerator_view, kde se nachází zdroj array_view dat
value_type Typ hodnoty array_view a vázaného pole.

Poznámky

Třída array_view představuje pohled na data obsažená v objektu pole nebo pododdílu objektu array .

K objektu array_view , kde se zdrojová data nacházejí (místně) nebo na jiném akcelerátoru nebo v doméně soudržnosti (vzdáleně). Při vzdáleném přístupu k objektu se zobrazení zkopírují a ukládají do mezipaměti podle potřeby. S výjimkou účinků automatického ukládání do mezipaměti array_view mají objekty profil výkonu podobný array profilu objektu. Při přístupu k datům prostřednictvím zobrazení je malý trest výkonu.

Existují tři scénáře vzdáleného použití:

  • Zobrazení ukazatele systémové paměti se předává prostřednictvím parallel_for_each volání akcelerátoru a přístup k akcelerátoru.

  • Zobrazení pole umístěného na akcelerátoru se předává voláním jiného parallel_for_each akcelerátoru a je tam přístupný.

  • Zobrazení pole umístěného v akcelerátoru je přístupné na procesoru.

V některém z těchto scénářů se odkazovaná zobrazení zkopírují modulem runtime do vzdáleného umístění a v případě změny voláními objektu array_view se zkopírují zpět do místního umístění. Modul runtime může optimalizovat proces kopírování změn zpět, může kopírovat pouze změněné prvky nebo může kopírovat také nezměněné části. Překrývající array_view se objekty v jednom zdroji dat nejsou zaručeny pro zachování referenční integrity ve vzdáleném umístění.

Je nutné synchronizovat jakýkoli přístup s více vlákny do stejného zdroje dat.

Modul runtime zajišťuje následující záruky týkající se ukládání dat do mezipaměti v array_view objektech:

  • Všechny dobře synchronizované přístupy k objektu array a array_view objektu na něm v pořadí programu dodržují sériový přístup-před relace.

  • Všechny dobře synchronizované přístupy k překrývajícím array_view se objektům na stejném akcelerátoru na jednom array objektu jsou aliasy prostřednictvím objektu array . Indukují celkový počet výskytů před vztahem, který dodržuje pořadí programů. Ukládání do mezipaměti neexistuje. array_view Pokud se objekty spouští na různých akcelerátorech, pořadí přístupu není definováno a vytváří podmínku časování.

Při vytváření objektu array_view pomocí ukazatele v systémové paměti je nutné změnit objekt zobrazení array_view pouze přes array_view ukazatel. Alternativně je nutné zavolat refresh() jeden z array_view objektů, které jsou připojeny k systémovému ukazateli, pokud je základní nativní paměť změněna přímo, nikoli přes array_view objekt.

Každá akce upozorní array_view objekt, že je změněna základní nativní paměť a že všechny kopie umístěné v akcelerátoru jsou zastaralé. Pokud budete postupovat podle těchto pokynů, budou zobrazení založená na ukazatelích shodná s zobrazeními polí paralelních dat.

Hierarchie dědičnosti

_Array_view_shape

_Array_view_base

array_view

Požadavky

Záhlaví: amp.h

Namespace: Souběžnost

~array_view

array_view Zničí objekt.

~array_view()restrict(amp,cpu);

array_view

Inicializuje novou instanci array_view třídy.

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 prvku pole ve stylu jazyka C, ze kterého jsou data zadána.

_Kontejner
Argument šablony, který musí určovat lineární kontejner, který podporuje data() a size() členy.

_E0
Nejvýznamnější komponenta rozsahu této části.

_E1
Nejvýznamnější komponenta rozsahu této části.

_E2
Nejméně významná součást rozsahu této části.

_Rozsah
Rozsah v každé dimenzi tohoto array_view.

_Jiný
Objekt typu array_view<T,N> , ze kterého chcete inicializovat nový array_view.

_Velikost
Velikost pole ve stylu jazyka C, ze kterého jsou data zadána.

_Src
Ukazatel na zdrojová data, která se zkopírují do nového pole.

copy_to

Zkopíruje obsah objektu array_view do zadaného cílového objektu voláním copy(*this, dest).

void copy_to(
    array<value_type, _Rank>& _Dest) const;

void copy_to(
    array_view<value_type, _Rank>& _Dest) const;

Parametry

_Dest
Objekt, do který chcete kopírovat.

data

Vrátí ukazatel na nezpracovaná data array_view.

value_type* data() const restrict(amp,
    cpu);

const value_type* data() const restrict(amp,
    cpu);

Návratová hodnota

Ukazatel na nezpracovaná data array_view.

discard_data

Zahodí aktuální data, která jsou základem tohoto zobrazení. Jedná se o nápovědu pro optimalizaci modulu runtime, který se používá, aby se zabránilo kopírování aktuálního obsahu zobrazení do cíle accelerator_view , na který se přistupuje, a jeho použití se doporučuje v případě, že stávající obsah není potřeba. Tato metoda je no-op při použití v kontextu restrict(amp)

void discard_data() const restrict(cpu);

rozsah

extent Získá objekt, který definuje tvar objektuarray_view.

__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;

get_extent

Vrátí objekt rozsahu objektuarray_view.

Concurrency::extent<_Rank> get_extent() const restrict(cpu, amp);

Návratová hodnota

Objekt extent objektu array_view

get_ref

Získejte odkaz na prvek indexovaný _Index. Na rozdíl od ostatních operátorů indexování pro přístup k array_view procesoru tato metoda implicitně nesynchronizuje obsah tohoto array_view s procesorem. Po přístupu k array_view na vzdáleném umístění nebo provedení operace kopírování zahrnující tuto array_view uživatelé zodpovídají za explicitní synchronizaci array_view s procesorem před voláním této metody. Výsledkem selhání je nedefinované chování.

value_type& get_ref(
    const index<_Rank>& _Index) const restrict(amp, cpu);

Parametry

_Index
Index.

Návratová hodnota

Odkaz na prvek indexovaný _Index

get_source_accelerator_view

Vrátí accelerator_view, kde se nachází zdroj dat array_view. Pokud array_view zdroj dat nemá, vyvolá toto rozhraní API runtime_exception

accelerator_view get_source_accelerator_view() const;

Návratová hodnota

operator()

Vrátí hodnotu prvku, který je určen parametrem nebo 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

_Index
Umístění elementu.

_I0
Index v první dimenzi.

_I1
Index ve druhé dimenzi.

_I2
Index ve třetí dimenzi.

_Já
Umístění elementu.

Návratová hodnota

Hodnota prvku, který je určen parametrem nebo parametry.

operator[]

Vrátí prvek, který je určen 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

_Index
Index.

_Já
Index.

Návratová hodnota

Hodnota prvku v indexu nebo array_view promítnutá na nejvýznamnější dimenzi.

operator=

Zkopíruje obsah zadaného array_view objektu do tohoto objektu.

array_view& operator= (
    const array_view& _Other) restrict(amp,cpu);

array_view& operator= (
    const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);

Parametry

_Jiný
Objekt array_view , ze který chcete kopírovat.

Návratová hodnota

Odkaz na tento array_view objekt.

hodnost

Uloží pořadí objektu array_view .

static const int rank = _Rank;

dat

Upozorní objekt, array_view že jeho vázaná paměť byla změněna mimo array_view rozhraní. Volání této metody vykreslí všechny informace uložené v mezipaměti zastaralé.

void refresh() const restrict(cpu);

reinterpret_as

Reinterpretuje array_view prostřednictvím jednorozměrného array_view, který jako možnost může mít jiný typ hodnoty než zdrojová array_view.

Syntaxe

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
Datový typ nového array_view objektu.

Návratová hodnota

Objekt array_view nebo const array_view objekt, který je založen na tomto array_view, s typem prvku převeden z T na _Value_type2a pořadí snížené z N na 1.

Poznámky

Někdy je vhodné zobrazit vícerozměrné pole jako lineární jednorozměrné pole, které může mít jiný typ hodnoty než zdrojová matice. Toho můžete dosáhnout array_view pomocí této metody.

Upozornění Reinterpretace objektu array_view pomocí jiného typu hodnoty je potenciálně nebezpečná operace. Tato funkce by se měla používat opatrně.

Tady je příklad:

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

Vrátí pododdíl objektu array_view , který je v zadaném původu, a volitelně i se zadaným rozsahem.

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
Nejvýznamnější komponenta rozsahu této části.

_E1
Nejvýznamnější komponenta rozsahu této části.

_E2
Nejméně významná součást rozsahu této části.

_Ext
Objekt rozsahu , který určuje rozsah oddílu. Původ je 0.

_Idx
Objekt indexu , který určuje umístění původu. Pododdíl je zbytek rozsahu.

_I0
Nejvýznamnější komponenta původu této části.

_I1
Nejvýznamnější komponenta původu této části.

_I2
Nejméně významná součást původu této části.

_Hodnost
Pořadí oddílu.

_Section_extent
Objekt rozsahu , který určuje rozsah oddílu.

_Section_origin
Objekt indexu , který určuje umístění původu.

Návratová hodnota

Pododdíl objektu array_view , který je v zadaném původu, a volitelně i se zadaným rozsahem. Pokud je zadán pouze index objekt, pododdíl obsahuje všechny prvky v přidruženém rozsahu, které mají indexy větší než indexy prvků v objektu index .

source_accelerator_view

Získá zdroj accelerator_view, že tento array_view je přidružen.

__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;

synchronize

Synchronizuje všechny změny provedené v objektu array_view zpět do zdrojových dat.

void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);

void synchronize() const restrict(cpu);

Parametry

_Access_type
Zamýšlený access_type v cílovém accelerator_view. Tento parametr má výchozí hodnotu access_type_read.

synchronize_async

Asynchronně synchronizuje všechny změny provedené v objektu array_view zpět do zdrojových dat.

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
Zamýšlený access_type v cílovém accelerator_view. Tento parametr má výchozí hodnotu access_type_read.

Návratová hodnota

Budoucnost, na kterou se má operace dokončit.

synchronize_to

Synchronizuje všechny změny provedené v tomto array_view do zadaného 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
Cílová accelerator_view k synchronizaci.

_Access_type
Požadované access_type v cílovém accelerator_view. Tento parametr má výchozí hodnotu access_type_read.

synchronize_to_async

Asynchronně synchronizuje všechny změny provedené v tomto array_view do zadaného 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
Cílová accelerator_view k synchronizaci.

_Access_type
Požadované access_type v cílovém accelerator_view. Tento parametr má výchozí hodnotu access_type_read.

Návratová hodnota

Budoucnost, na kterou se má operace dokončit.

value_type

Typ hodnoty array_view a vázaného pole.

typedef typenamevalue_type value_type;

view_as

Reinterpretuje to array_view jako jiné array_view pořadí.

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
Pořadí nového array_view objektu.

_View_extent
Přetváření extent.

value_type
Datový typ prvků v původním objektu pole i vrácený array_view objekt.

Návratová hodnota

Objekt array_view , který je vytvořen.

Viz také

Obor názvů Concurrency (C++ AMP)