Megosztás a következőn keresztül:


array_view osztály

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 .

_Rang
Az objektum rangja array_view .

Tagok

Nyilvános konstruktorok

Név Description
array_view Konstruktor Egy új példányt inicializál a array_view osztályból. 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 Description
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 nyers adatokhoz array_view.
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 Description
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 Description
rang állandó Tárolja az objektum rangját array_view .

Adattagok

Név Description
Mérték 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_each hí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 array objektumhoz és egy array_view objektumhoz 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_view objektumokhoz való minden jól szinkronizált hozzáférés az array objektumon 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 az array_view objektumok 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

Requirements

Fejléc: amp.h

Névtér: Konkurencia

~array_view

Elpusztítja az array_view objektumot.

~array_view()restrict(amp,cpu);

array_view

Egy új példányt inicializál a array_view osztályból.

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 nyers adatokhoz array_view.

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

Megkapja azt az extent objektumot, amely meghatározza a array_view objektum alakját.

__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

Az objektumra array_view mutató hivatkozás.

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.

_Rang
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. Ennek a paraméternek az alapértelmezett értéke a .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és_típusa
A cél accelerator_view tervezett access_type. Ennek a paraméternek az alapértelmezett értéke a .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és_típusa
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 cél accelerator_view, amelyhez szinkronizálni kell.

_Hozzáférési_típus
A célzott gyorsító nézeten a kívánt hozzáférési típus. Ez a paraméter alapértelmezett értéke access_type_read.

Visszaadott érték

Egy jövő, amelyre várni kell a művelet befejezéséhez.

érték_típus

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.

Lásd még

Egyidejűség névtere (C++ AMP)