Freigeben über


array_view-Klasse

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

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::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::~array_view-Destruktor

Zerstört das array_view-Objekt.

Öffentliche Methoden

Name

Beschreibung

array_view::copy_to-Methode

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

array_view::data-Methode

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

array_view::discard_data-Methode

Verwirft die aktuellen Daten, die dieser Ansicht zugrunde liegen.

array_view::get_extent-Methode

Gibt das extent-Objekt des array_view-Objekts zurück.

array_view::get_ref-Methode

Gibt einen Verweis auf das indizierte Element zurück.

array_view::get_source_accelerator_view-Methode

Gibt das accelerator_view-Objekt zurück, in dem sich die Datenquelle des array_view-Objekts befindet.

array_view::refresh-Methode

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.

array_view::reinterpret_as-Methode

Gibt ein eindimensionales Array zurück, das alle Elemente im array_view-Objekt enthält.

array_view::section-Methode

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

array_view::synchronize-Methode

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

array_view::synchronize_async-Methode

Synchronisiert asynchron alle Änderungen am array_view-Objekt wieder mit seinen Quelldaten.

array_view::synchronize_to-Method

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

array_view::synchronize_to_async-Methode

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

array_view::view_as-Methode

Erzeugt ein array_view-Objekt eines abweichenden Rangs mit den Daten dieses array_view-Objekts.

Öffentliche Operatoren

Name

Beschreibung

array_view::operator()-Operator

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

array_view::operator[]-Operator

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

array_view::operator=-Operator

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

Öffentliche Konstanten

Name

Beschreibung

array_view::rank-Konstante

Speichert den Rang des array_view-Objekts.

Datenmember

Name

Beschreibung

array_view::extent-Datenmember

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

array_view::source_accelerator_view-Datenmember

Ruft das accelerator_view-Objekt ab, in dem sich die Datenquelle des array_view-Objekts befindet.

array_view::value_type-Datenmember

Der Werttyp des array_view-Objekts und das gebundene Array.

Hinweise

Die array_view-Klasse stellt Einblicke in die Daten dar, die in einem array-Objekt oder in 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 eines Systemspeicherzeigers wird mittels eines parallel_for_each-Aufrufs einer Zugriffstaste übergeben und der Zugriff erfolgt über die Zugriffstaste.

  • 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: Nebenläufigkeit

Siehe auch

Referenz

Concurrency-Namespace (C++ AMP)