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
aarray_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 jednomarray
objektu jsou aliasy prostřednictvím objektuarray
. 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_type2
a 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.