Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Egy másik tárolóban tárolt adatokra vonatkozó N dimenziós nézetet jelöl.
Szemantika
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)>;
Paraméterek
érték_típus (value_type)
Az objektum elemeinek adattípusa array_view .
_Rank
Az objektum rangja array_view .
Tagok
Nyilvános konstruktorok
| Név | Leírás |
|---|---|
| array_view Konstruktor | Inicializálja a array_view osztály új példányát. Nincs alapértelmezett konstruktor a következőhöz array<T,N>: . Az összes konstruktor csak a CPU-n futtatható, és nem futtatható Direct3D-célon. |
| ~array_view destruktor | Elpusztítja az array_view objektumot. |
Nyilvános módszerek
| Név | Leírás |
|---|---|
| másolás_ide | Az array_view objektum tartalmát a meghatározott célhelyre másolja a copy(*this, dest) meghívásával. |
| adat | Egy mutatót ad vissza a array_view nyers adataihoz. |
| discard_data | Elveti a nézet alapjául szolgáló aktuális adatokat. |
| get_extent | A array_view objektum kiterjedésobjektumát adja vissza. |
| get_ref | Az indexelt elemre mutató hivatkozást ad vissza. |
| get_source_accelerator_view | A accelerator_view adja vissza, ahol az array_view adatforrás található. |
| felfrissít | Értesíti az array_view objektumot, hogy a kötött memóriája módosult a array_view felületen kívül. A metódusnak a meghívása az összes gyorsítótárazott információt elavulttá teszi. |
| reinterpret_as | Egydimenziós tömböt ad vissza, amely az objektum összes elemét array_view tartalmazza. |
| szakasz | Az array_view objektum azon alszakaszát adja vissza, amely az adott eredetnél található, és opcionálisan, amelynek meg van adva a kiterjedése. |
| Szinkronizálni | Szinkronizálja az objektumon végrehajtott módosításokat a array_view forrásadatokkal. |
| synchronize_async | Aszinkron módon szinkronizálja az objektumon végrehajtott módosításokat a array_view forrásadatokkal. |
| synchronize_to | Szinkronizálja az array_view objektumon végrehajtott módosításokat a megadott accelerator_view. |
| synchronize_to_async | Aszinkron módon szinkronizálja az array_view objektumon végrehajtott módosításokat a megadott accelerator_view. |
| view_as | Az objektum adataival array_view egy array_view másik rangú objektumot hoz létre. |
Nyilvános operátorok
| Név | Leírás |
|---|---|
| operátor() | A paraméter vagy paraméterek által megadott elem értékét adja vissza. |
| operator[] | A paraméterek által megadott elemet adja vissza. |
| operátor= | Másolja a megadott array_view objektum tartalmát ebbe a fájlba. |
Nyilvános állandók
| Név | Leírás |
|---|---|
| rang állandó | Tárolja az objektum rangját array_view . |
Adattagok
| Név | Leírás |
|---|---|
| kiterjedés | Lekéri azt az extent objektumot, amely az array_view objektum alakját meghatározza. |
| source_accelerator_view | Lekéri a accelerator_view-t, amelyben az array_view adatforrás található |
| érték_típus (value_type) | A array_view és a kötött tömb értéktípusa. |
Megjegyzések
Az array_view osztály egy tömbobjektumban vagy egy objektum alszakaszában található adatok nézetét array jelöli.
Elérheti azt az array_view objektumot, amelyben a forrásadatok találhatók (helyileg), vagy egy másik gyorsítón vagy egy koherenciatartományon (távolról). Ha az objektumot távolról éri el, a nézeteket szükség szerint másolják és gyorsítótárazzák. Az automatikus gyorsítótárazás hatásait kivéve a array_view objektumok teljesítményprofilja hasonló a array objektumokéhoz. Kis teljesítménybeli büntetés jár, ha nézeteken keresztül fér hozzá az adatokhoz.
Három távoli használati forgatókönyv létezik:
A rendszermemória mutatójának nézetét egy parallel_for_each hívással továbbítja a rendszer egy gyorsítóhoz, és hozzáfér a gyorsítón.
A nézet egy tömbre, amely egy gyorsítón található, egy másik gyorsítón történő
parallel_for_eachhívással továbbítódik, és ott érhető el.Egy gyorsítón található tömb nézete a processzoron érhető el.
A fenti forgatókönyvek bármelyikében a futtatókörnyezet átmásolja a hivatkozott nézeteket a távoli helyre, és ha az array_view objektum hívásai módosítják, a rendszer visszamásolja a helyi helyre. A futtatókörnyezet optimalizálhatja a módosítások visszamásolásának folyamatát, csak a módosított elemeket másolhatja, vagy a változatlan részeket is másolhatja. Az egy adatforráson lévő átfedésben lévő array_view objektumok nem garantálják a hivatkozási integritás fenntartását egy távoli helyen.
Szinkronizálnia kell minden többszálú hozzáférést ugyanahhoz az adatforráshoz.
A futtatókörnyezet az alábbi garanciákat biztosítja a array_view objektumokban tárolt adatok gyorsítótárazásával kapcsolatban:
Minden egy
arrayobjektumhoz és egyarray_viewobjektumhoz tartozó, jól szinkronizált hozzáférés programrendben megfelel egy soros "happens-before" kapcsolatnak.Az ugyanazon a gyorsítón lévő, egymást átfedő
array_viewobjektumokhoz való minden jól szinkronizált hozzáférés azarrayobjektumon keresztül aliasolva van. Ezek indukálják a teljes bekövetkezik-előtt kapcsolat, amely betartja a program sorrendje. Nincs gyorsítótárazás. Ha azarray_viewobjektumok különböző gyorsítókon futnak, a hozzáférés sorrendje nem határozható meg, és versenyfeltételt hoz létre.
Ha a rendszermemóriában mutatóval hoz létre array_view objektumot, csak a mutatón keresztül kell módosítania a array_view nézetobjektumotarray_view. Alternatívaként a rendszermutatóhoz csatolt objektumok egyikét kell meghívnia refresh(), ha az alapul szolgáló natív memória közvetlenül módosul a array_view objektum által történő helyett.
Bármelyik művelet értesíti az objektumot arról array_view , hogy a mögöttes natív memória módosul, és hogy agyorsítón található másolatok elavultak. Ha követi ezeket az irányelveket, a mutatóalapú nézetek megegyeznek az adat-párhuzamos tömbök nézeteivel.
Öröklési hierarchia
_Array_view_shape
_Array_view_base
array_view
Követelmények
Fejléc: amp.h
Névtér: Konkurencia
~array_view
Elpusztítja az array_view objektumot.
~array_view()restrict(amp,cpu);
array_view
Inicializálja a array_view osztály új példányát.
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);
Paraméterek
_Arr_type
A C-stílusú tömb elemtípusa, amelyből adatokat biztosítanak.
_Konténer
Olyan sablonargumentum, amely egy lineáris tárolót kell megadjon, és amely támogatja a data() és size() tagokat.
_E0
A szakasz terjedelmének legjelentősebb összetevője.
_E1
Ennek a szakasznak a második legjelentősebb összetevője.
_E2
Ennek a szakasznak a legkisebb jelentős összetevője.
_Kiterjedés
Ennek kiterjedése az egyes dimenziókban.array_view
_Más
Olyan típusú array_view<T,N> objektum, amelyből inicializálni szeretné az újat array_view.
_Méret
Egy C-stílusú tömb mérete, amelyből adatokat szolgáltat.
_Src
Az új tömbbe másolandó forrásadatokra mutató mutató.
másolás_ide
A(z) array_view objektum tartalmát a megadott célobjektumba másolja a copy(*this, dest) meghívásával.
void copy_to(
array<value_type, _Rank>& _Dest) const;
void copy_to(
array_view<value_type, _Rank>& _Dest) const;
Paraméterek
_Dest
A másolni kívánt objektum.
adat
Egy mutatót ad vissza a array_view nyers adataihoz.
value_type* data() const restrict(amp,
cpu);
const value_type* data() const restrict(amp,
cpu);
Visszaadott érték
A array_view nyers adatainak egy mutatója.
adat_elvetése
Elveti a nézet alapjául szolgáló aktuális adatokat. Ez egy optimalizálási tipp a futtatókörnyezet számára, amely lehetővé teszi, hogy elkerüljük a nézet aktuális tartalmának másolását egy olyan célhelyre accelerator_view, amelyre hozzáférés történik, és az alkalmazása javasolt, ha a meglévő tartalom nem szükséges. Ez a metódus nem hajt végre műveletet, ha restrict(amp) környezetben használják.
void discard_data() const restrict(cpu);
szegmens
Lekéri azt az extent objektumot, amely az array_view objektum alakját meghatározza.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_extent
Az objektum kiterjedésobjektumátarray_view adja vissza.
Concurrency::extent<_Rank> get_extent() const restrict(cpu, amp);
Visszaadott érték
Az extent objektum objektuma array_view
get_ref
A _Index által indexelt elemre mutató hivatkozás lekérése. A processzoron lévő array_view elérésére szolgáló többi indexelő operátortól eltérően ez a módszer nem szinkronizálja implicit módon a array_view tartalmát a cpu-val. A array_view távoli helyen való elérése vagy a array_view bevonásával végzett másolási művelet végrehajtása után a felhasználók feladata, hogy a metódus meghívása előtt explicit módon szinkronizálják a array_view a processzorsal. Ennek elmulasztása nem definiált viselkedést eredményez.
value_type& get_ref(
const index<_Rank>& _Index) const restrict(amp, cpu);
Paraméterek
_Index
Az index.
Visszaadott érték
Hivatkozás a _Index által indexelt elemre
get_source_accelerator_view
Az az accelerator_view, ahol az array_view adatforrása található, van visszaadva. Ha az array_view nem rendelkezik adatforrással, ez az API runtime_exception-t dob
accelerator_view get_source_accelerator_view() const;
Visszaadott érték
operátor()
A paraméter vagy paraméterek által megadott elem értékét adja vissza.
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);
Paraméterek
_Index
Az elem helye.
_I0
Az első dimenzió indexe.
_I1
Az index a második dimenzióban.
_I2
Az index a harmadik dimenzióban.
_Én
Az elem helye.
Visszaadott érték
A paraméter vagy paraméterek által megadott elem értéke.
operátor[]
A paraméterek által megadott elemet adja vissza.
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);
Paraméterek
_Index
Az index.
_Én
Az index.
Visszaadott érték
Az elem értéke az indexben, vagy egy array_view , a legjelentősebb dimenzióra vetített érték.
operátor=
Másolja a megadott array_view objektum tartalmát ebbe a fájlba.
array_view& operator= (
const array_view& _Other) restrict(amp,cpu);
array_view& operator= (
const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);
Paraméterek
_Más
A array_view az objektum, amelyről másolunk.
Visszaadott érték
Hivatkozás erre a array_view objektumra.
rangsorol
Tárolja az objektum rangját array_view .
static const int rank = _Rank;
frissít
Értesíti az array_view objektumot, hogy a kötött memóriája módosult a array_view felületen kívül. A metódusnak a meghívása az összes gyorsítótárazott információt elavulttá teszi.
void refresh() const restrict(cpu);
reinterpret_as
Újraértelmezi az array_view-et egy egydimenziós array_view-on keresztül, amely lehetőségként más értéktípussal rendelkezhet, mint a forrás array_view.
Szemantika
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);
Paraméterek
_Value_type2
Az új array_view objektum adattípusa.
Visszaadott érték
Egy array_view objektum vagy egy const array_view objektum, amely ezen array_view alapul, amelynek az elemtípusa T-ről _Value_type2-re lett átalakítva, és amelynek a rangját N-ről 1-re csökkentették.
Megjegyzések
Néha célszerű egy többdimenziós tömböt lineáris, egydimenziós tömbnek tekinteni, amely más típusú lehet, mint a forrástömb. Ezt ezzel a array_view módszerrel érheti el.
Figyelmeztetés Egy array_view objektum más értéktípussal történő újraértelmezése potenciálisan nem biztonságos művelet. Ezt a funkciót körültekintően kell használni.
Íme egy példa:
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
Az array_view objektum azon alszakaszát adja vissza, amely az adott eredetnél található, és opcionálisan, amelynek meg van adva a kiterjedése.
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);
Paraméterek
_E0
A szakasz terjedelmének legjelentősebb összetevője.
_E1
Ennek a szakasznak a második legjelentősebb összetevője.
_E2
Ennek a szakasznak a legkisebb jelentős összetevője.
_Ext
A szakasz mértékét meghatározó mértékobjektum . A kiindulópont 0.
_Idx
A forrás helyét meghatározó indexobjektum . Az alszakasz a mérték többi része.
_I0
A szakasz eredetének legfontosabb összetevője.
_I1
A szakasz eredetének következő legfontosabb összetevője.
_I2
A szakasz eredetének legkevésbé jelentős összetevője.
_Rank
A szakasz rangja.
_Section_extent
A szakasz mértékét meghatározó mértékobjektum .
_Section_origin
A forrás helyét meghatározó indexobjektum .
Visszaadott érték
A megadott eredetnél található array_view objektum alszakasza, és opcionálisan a megadott kiterjedésű. Ha csak az index objektum van megadva, az alszakasz a társított mértékben tartalmazza az összes olyan elemet, amely az objektum elemeinek index indexeinél nagyobb indexekkel rendelkezik.
source_accelerator_view
Lekéri az alapul szolgáló accelerator_view-t, amelyhez ez az array_view társítva van.
__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;
szinkronizál
Szinkronizálja az objektumon végrehajtott módosításokat a array_view forrásadatokkal.
void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);
void synchronize() const restrict(cpu);
Paraméterek
_Hozzáférési_típus
A cél accelerator_view tervezett access_type. Ez a paraméter alapértelmezett értéke access_type_read.
szinkronizálás_aszinkron
Aszinkron módon szinkronizálja az objektumon végrehajtott módosításokat a array_view forrásadatokkal.
concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);
concurrency::completion_future synchronize_async() const restrict(cpu);
Paraméterek
_Hozzáférési_típus
A cél accelerator_view tervezett access_type. Ez a paraméter alapértelmezett értéke access_type_read.
Visszaadott érték
Egy jövőobjektum, amely a művelet befejezésére várakozik.
szinkronizálni valamivel
Szinkronizálja az ezen array_view-en végrehajtott módosításokat a megadott accelerator_view-hez.
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);
Paraméterek
_Accl_view
A szinkronizálandó cél "accelerator_view".
_Hozzáférési_típus
A célzott accelerator_view-on a kívánt access_type. Ez a paraméter alapértelmezett értéke access_type_read.
szinkronizálás_aszinkronra
Aszinkron módon szinkronizálja a megadott accelerator_view-hoz az array_view bármilyen módosításait.
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);
Paraméterek
_Accl_view
A szinkronizálandó cél "accelerator_view".
_Hozzáférési_típus
A célzott accelerator_view-on a kívánt access_type. Ez a paraméter alapértelmezett értéke access_type_read.
Visszaadott érték
Egy jövőobjektum, amely a művelet befejezésére várakozik.
érték_típus (value_type)
A array_view és a kötött tömb értéktípusa.
typedef typenamevalue_type value_type;
view_as
Újraértelmezi ezt array_view mint egy másik rangú array_view-t.
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);
Paraméterek
_New_rank
Az új array_view objektum rangja.
_View_extent
Az átalakítás extent.
érték_típus (value_type)
Az eredeti tömbobjektum és a visszaadott array_view objektum elemeinek adattípusa.
Visszaadott érték
A array_view létrehozott objektum.