array_view-Klasse

Stellt eine n-dimensionale Ansicht der Daten dar, die in einem anderen Container vorgehalten werden.

Syntax

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

Parameter

value_type
Der Datentyp der Elemente im array_view-Objekt.

_Rank
Der Rang des array_view-Objekts.

Member

Öffentliche Konstruktoren

Name Beschreibung
array_view-Konstruktor Initialisiert eine neue Instanz der array_view-Klasse. Für "array<T,N>" ist kein Standardkonstruktor vorhanden. Alle Konstruktoren sind auf die CPU beschränkt und können nicht auf einem Direct3D-Ziel ausgeführt werden.
~array_view Destruktor Zerstört das array_view-Objekt.

Öffentliche Methoden

Name Beschreibung
copy_to Kopiert den Inhalt des array_view-Objekts in das angegebene Ziel durch Aufrufen von copy(*this, dest).
data Gibt einen Zeiger auf die Rohdaten des array_view-Objekts zurück.
discard_data Verwirft die aktuellen Daten, die dieser Ansicht zugrunde liegen.
get_extent Gibt das extent-Objekt des array_view-Objekts zurück.
get_ref Gibt einen Verweis auf das indizierte Element zurück.
get_source_accelerator_view Gibt die accelerator_view zurück, in der sich die Datenquelle der array_view Datei befindet.
Aktualisieren Benachrichtigt das array_view-Objekt, dass sein gebundener Speicher außerhalb der array_view-Schnittstelle geändert wurde. Ein Aufruf dieser Methode führt dazu, dass alle zwischengespeicherten Informationen veraltet sind.
reinterpret_as Gibt ein eindimensionales Array zurück, das alle Elemente im array_view-Objekt enthält.
section Gibt einen Unterabschnitt des array_view-Objekts zurück, das sich am angegebenen Ursprung befindet und optional den angegebenen Wertebereich hat.
synchronize Synchronisiert alle Änderungen am array_view-Objekt wieder mit den entsprechenden Quelldaten.
synchronize_async Synchronisiert asynchron alle Änderungen, die an dem array_view Objekt vorgenommen wurden, wieder mit seinen Quelldaten.
synchronize_to Synchronisiert alle Änderungen, die an dem array_view Objekt vorgenommen wurden, mit dem angegebenen accelerator_view.
synchronize_to_async Synchronisiert asynchron alle Änderungen, die an dem array_view Objekt vorgenommen wurden, mit dem angegebenen accelerator_view.
view_as Erzeugt ein array_view Objekt einer anderen Rangfolge mithilfe der Daten dieses array_view Objekts.

Öffentliche Operatoren

Name Beschreibung
operator() Gibt den Wert des Elements zurück, das durch den Parameter bzw. die Parameter angegeben wird.
operator[] Gibt das Element zurück, das von den Parametern angegeben wird.
operator= Kopiert den Inhalt des angegebenen array_view-Objekts in dieses Objekt.

Öffentliche Konstanten

Name Beschreibung
rank-Konstante Speichert den Rang des array_view-Objekts.

Datenelemente

Name Beschreibung
extent Ruft das extent-Objekt ab, das die Form des array_view-Objekts definiert.
source_accelerator_view Ruft die accelerator_view ab, in der sich die Datenquelle der array_view Datei befindet.
value_type Der Werttyp des array_view-Objekts und das gebundene Array.

Hinweise

Die array_view Klasse stellt eine Ansicht in die Daten dar, die in einem Arrayobjekt oder einem Unterabschnitt eines array Objekts enthalten sind.

Sie können auf das array_view-Objekt mit den Quelldaten (lokal) oder über eine andere Zugriffstaste oder eine Kohärenzdomäne (remote) zugreifen. Wenn Sie auf das Objekt remote zugreifen, werden Ansichten ggf. kopiert und zwischengespeichert. Mit Ausnahme der Auswirkungen des automatischen Zwischenspeicherns verfügen array_view-Objekte über ein ähnliches Leistungsprofil wie array-Objekte. Geringe Leistungseinbußen sind zu verzeichnen, wenn Sie über Ansichten auf die Daten zugreifen.

Es gibt drei remote Anwendungsszenarios:

  • Eine Ansicht zu einem Systemspeicherzeiger wird über einen parallel_for_each Aufruf an eine Zugriffstaste übergeben und auf die Zugriffstaste zugegriffen.

  • Eine Ansicht eines Arrays auf einer Zugriffstaste wird mithilfe eines parallel_for_each- Aufrufs an eine andere Zugriffstaste übergeben und der Zugriff erfolgt hier.

  • Auf eine Ansicht eines Arrays auf einer Zugriffstaste wird auf der CPU zugegriffen.

In jedem dieser Szenarien werden die verwiesen Ansichten von der Laufzeit an den Remotespeicherort kopiert und wieder an den lokalen Speicherort kopiert, wenn sie durch die Aufrufe des array_view-Objekts geändert werden. Die Laufzeit kann den Prozess des Zurückkopierens von Änderungen optimieren, nur geänderte Elemente kopieren oder auch unveränderte Teile kopieren. Für überlappende array_view-Objekte in einer Datenquelle wird keine referenzielle Integrität in einem Remotespeicherort garantiert.

Sie müssen jeden den Multithreadzugriff die gleiche Datenquelle synchronisieren.

Die Laufzeit übernimmt im Hinblick auf das Zwischenspeichern von Daten in array_view-Objekte folgende Garantien:

  • Alle gut synchronisierten Zugriffe auf ein array-Objekt und ein darin enthaltenes array_view-Objekt in der Programmreihenfolge unterliegen einer seriellen Happens-Before-Beziehung.

  • Alle gut synchronisierten Zugriffe auf überlappende array_view-Objekte auf der gleichen Zugriffstaste eines einzelnen array-Objekts werden über das array-Objekt mit einem Alias versehen. Sie führen zu einer Occurs-Before-Beziehung, die der Programmreihenfolge unterliegt. Es erfolgt kein Zwischenspeichern. Wenn die array_view-Objekte über verschiedene Zugriffstasten ausgeführt werden, ist die Reihenfolge des Zugriffs nicht definiert, was zu einer Racebedingung führt.

Wenn Sie ein array_view-Objekt mithilfe eines Zeigers im Systemspeicher erstellen, können Sie das array_view-Ansichtsobjekt nur über den array_view-Zeiger ändern. Alternativ müssen Sie refresh() für eines der array_view-Objekte aufrufen, die dem Systemzeiger angefügt sind, wenn der zugrunde liegende systemeigene Arbeitsspeicher nicht über das array_view-Objekt, sondern direkt geändert wird.

Bei beiden Aktionen wird das array_view-Objekt benachrichtigt, dass der zugrunde liegende systemeigene Arbeitsspeicher geändert wird und alle Kopien, die sich auf einer Zugriffstaste befinden, veraltet sind. Wenn Sie diese Richtlinien befolgen, sind die zeigerbasierten Ansichten mit denen identisch, die für die Ansichten von datenparallelen Arrays bereitgestellt werden.

Vererbungshierarchie

_Array_view_shape

_Array_view_base

array_view

Anforderungen

Header: amp.h

Namespace: Parallelität

~array_view

Zerstört das array_view-Objekt.

~array_view()restrict(amp,cpu);

array_view

Initialisiert eine neue Instanz der array_view-Klasse.

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

Parameter

_Arr_type
Der Elementtyp eines Arrays im C-Format, von dem Daten angegeben werden.

_Container
Ein Vorlagenargument, das einen linearen Container angeben muss, der data()- und size()-Member unterstützt.

_E0
Die wichtigste Komponente des Umfangs dieses Abschnitts.

_E1
Die zweitwichtigste Komponente des Umfangs dieses Abschnitts.

_E2
Die unwichtigste Komponente des Umfangs dieses Abschnitts.

_Umfang
Der Umfang in jeder Dimension dieses array_view-Objekts.

_Other
Ein Objekt des Typs array_view<T,N>, von dem das neue array_view-Objekt initialisiert werden soll.

_Größe
Die Größe eines Arrays im C-Format, von dem Daten angegeben werden.

_Src
Ein Zeiger auf die Quelldaten, die in das neue Array kopiert werden.

copy_to

Kopiert den Inhalt des array_view Objekts durch Aufrufen copy(*this, dest)des Objekts in das angegebene Zielobjekt.

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

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

Parameter

_Dest
Das Objekt, in das kopiert wird.

data

Gibt einen Zeiger auf die Rohdaten des array_view-Objekts zurück.

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

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

Rückgabewert

Ein Zeiger auf die Rohdaten der .array_view

discard_data

Verwirft die aktuellen Daten, die dieser Ansicht zugrunde liegen. Dies ist ein Optimierungshinweis zur Laufzeit, die verwendet wird, um den aktuellen Inhalt der Ansicht in ein accelerator_view-Zielobjekt zu kopieren, auf das zugegriffen wird. Seine Verwendung wird empfohlen, wenn der aktuelle Inhalt nicht erforderlich ist. Diese Methode hat keine Funktion, wenn sie in einem restrict(amp)-Kontext verwendet wird

void discard_data() const restrict(cpu);

extent

Ruft das extent-Objekt ab, das die Form des array_view-Objekts definiert.

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

get_extent

Gibt das Umfangsobjekt des array_view Objekts zurück.

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

Rückgabewert

Das extent Objekt des array_view Objekts

get_ref

Rufen Sie einen Verweis auf das von _Index indizierte Element ab. Im Gegensatz zu anderen Indizierungsoperatoren für den Zugriff auf das array_view-Objekt auf der CPU synchronisiert diese Methode nicht implizit den Inhalt dieses array_view-Objekts mit der CPU. Nachdem Benutzer auf das array_view-Objekt auf einem Remotespeicherort zugegriffen haben oder ein Kopiervorgang mit diesem array_view-Objekt ausgeführt haben, sind sie dafür verantwortlich, das array_view-Objekt explizit mit der CPU zu synchronisieren, bevor diese Methode aufgerufen wird. Andernfalls kommt es zu nicht definiertem Verhalten.

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

Parameter

_Index
Der Index.

Rückgabewert

Verweis auf das von _Index indizierte Element

get_source_accelerator_view

Gibt das accelerator_view-Objekt zurück, in dem sich die Datenquelle des array_view-Objekts befindet. Wenn das array_view-Objekt über keine Datenquelle verfügt, löst diese API ein runtime_exception-Objekt aus.

accelerator_view get_source_accelerator_view() const;

Rückgabewert

Operator()

Gibt den Wert des Elements zurück, das durch den Parameter bzw. die Parameter angegeben wird.

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

Parameter

_Index
Der Speicherort des Elements.

_I0
Der Index in der ersten Dimension.

_I1
Der Index in der zweiten Dimension.

_I2
Der Index in der dritten Dimension.

_I
Der Speicherort des Elements.

Rückgabewert

Der Wert des Elements, das durch den bzw. die Parameter angegeben wird.

operator[]

Gibt das Element zurück, das von den Parametern angegeben wird.

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

Parameter

_Index
Der Index.

_I
Der Index.

Rückgabewert

Der Wert des Elements am Index oder ein array_view-Objekt, das auf der wichtigsten Dimension projiziert wird.

operator =

Kopiert den Inhalt des angegebenen array_view-Objekts in dieses Objekt.

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

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

Parameter

_Other
Das array_view-Objekt, aus dem kopiert werden soll.

Rückgabewert

Ein Verweis auf das array_view-Objekt.

rank

Speichert den Rang des array_view-Objekts.

static const int rank = _Rank;

Aktualisieren

Benachrichtigt das array_view-Objekt, dass sein gebundener Speicher außerhalb der array_view-Schnittstelle geändert wurde. Ein Aufruf dieser Methode führt dazu, dass alle zwischengespeicherten Informationen veraltet sind.

void refresh() const restrict(cpu);

reinterpret_as

Interpretiert das array_view-Objekt durch ein eindimensionales array_view-Objekt neu, das als Option einen anderen Werttyp als das array_view-Quellobjekt haben kann.

Syntax

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

Parameter

_Value_type2
Der Datentyp des neuen array_view-Objekts.

Rückgabewert

Ein array_view Objekt oder ein Aufkonstobjektarray_view, das auf dieser array_viewGrundlage basiert, wobei der Elementtyp von "_Value_type2inT" konvertiert wurde und der Rang von N auf 1 reduziert wurde.

Hinweise

Manchmal ist es hilfreich, ein mehrdimensionales Array als lineares, eindimensionales Array anzuzeigen, das einen anderen Werttyp als das Quellarray haben kann. Dies kann auf einem array_view-Objekt mit dieser Methode erzielt werden.

Warnung beim erneuten Interpretieren eines array_view Objekts mithilfe eines anderen Werttyps ist ein potenziell unsicherer Vorgang. Diese Funktion sollte sorgfältig verwendet werden.

Ein Beispiel:

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

Gibt einen Unterabschnitt des array_view-Objekts zurück, das sich am angegebenen Ursprung befindet und optional den angegebenen Wertebereich hat.

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

Parameter

_E0
Die wichtigste Komponente des Umfangs dieses Abschnitts.

_E1
Die zweitwichtigste Komponente des Umfangs dieses Abschnitts.

_E2
Die unwichtigste Komponente des Umfangs dieses Abschnitts.

_Extern
Das Umfangsobjekt , das den Umfang des Abschnitts angibt. Der Ursprung ist 0.

_Idx
Das Indexobjekt , das die Position des Ursprungs angibt. Der Unterabschnitt entspricht dem Rest des Umfangs.

_I0
Die wichtigste Komponente des Ursprungs dieses Abschnitts.

_I1
Die zweitwichtigste Komponente des Ursprungs dieses Abschnitts.

_I2
Die unwichtigste Komponente des Ursprungs dieses Abschnitts.

_Rank
Der Rang des Abschnitts.

_Section_extent
Das Umfangsobjekt , das den Umfang des Abschnitts angibt.

_Section_origin
Das Indexobjekt , das die Position des Ursprungs angibt.

Rückgabewert

Ein Unterabschnitt des array_view-Objekts, das sich am angegebenen Ursprung befindet und optional den angegebenen Wertebereich hat. Wenn nur das index-Objekt angegeben wird, enthält der Unterabschnitt alle Elemente im zugeordneten Wertebereich, deren Indizes größer sind als die Indizes der Elemente im index-Objekt.

source_accelerator_view

Ruft das accelerator_view-Quellobjekt ab, dem dieses array_view-Objekt zugeordnet ist.

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

synchronize

Synchronisiert alle Änderungen am array_view-Objekt wieder mit den entsprechenden Quelldaten.

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

void synchronize() const restrict(cpu);

Parameter

_Access_type
Die beabsichtigte access_type für das Ziel-accelerator_view. Der Standardwert dieses Parameters ist access_type_read.

synchronize_async

Synchronisiert asynchron alle Änderungen, die an dem array_view Objekt vorgenommen wurden, wieder mit seinen Quelldaten.

concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);

concurrency::completion_future synchronize_async() const restrict(cpu);

Parameter

_Access_type
Die beabsichtigte access_type für das Ziel-accelerator_view. Der Standardwert dieses Parameters ist access_type_read.

Rückgabewert

Ein Zeitpunkt in der Zukunft, bis zu dem auf den Abschluss des Vorgangs gewartet werden soll.

synchronize_to

Synchronisiert alle Änderungen an diesem array_view-Objekt mit dem angegebenen accelerator_view-Objekt.

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

Parameter

_Accl_view
Das accelerator_view-Zielobjekt zur Synchronisierung.

_Access_type
Das gewünschte access_type-Objekt im accelerator_view-Zielobjekt. Dieser Parameter hat den Standardwert access_type_read.

synchronize_to_async

Synchronisiert asynchron alle Änderungen an diesem array_view-Objekt mit dem angegebenen accelerator_view-Objekt.

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

Parameter

_Accl_view
Das accelerator_view-Zielobjekt zur Synchronisierung.

_Access_type
Das gewünschte access_type-Objekt im accelerator_view-Zielobjekt. Dieser Parameter hat den Standardwert access_type_read.

Rückgabewert

Ein Zeitpunkt in der Zukunft, bis zu dem auf den Abschluss des Vorgangs gewartet werden soll.

value_type

Der Werttyp des array_view-Objekts und des gebundenen Arrays.

typedef typenamevalue_type value_type;

view_as

Interpretiert dieses array_view-Objekt neu als array_view-Objekt eines abweichenden 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);

Parameter

_New_rank
Der Rang des neuen array_view-Objekts.

_View_extent
Das Umgestaltungs-extent-Objekt.

value_type
Der Datentyp der Elemente sowohl im ursprünglichen Arrayobjekt als auch im zurückgegebenen array_view Objekt.

Rückgabewert

Das array_view objekt, das erstellt wird.

Siehe auch

Concurrency-Namespace (C++ AMP)