Freigeben über


array-Klasse

Stellt einen Datencontainer dar, mit dem Daten auf eine Zugriffstaste verschoben werden.

Syntax

template <typename value_type, int _Rank>
friend class array;

Parameter

value_type
Der Elementtyp der Daten.

_Rank
Der Rang des Arrays.

Member

Öffentliche Konstruktoren

Name Beschreibung
Arraykonstruktor Initialisiert eine neue Instanz der array-Klasse.
~array Destructor Zerstört das array-Objekt.

Öffentliche Methoden

Name Beschreibung
copy_to Kopiert den Inhalt des array-Objekts in ein anderes array-Objekt.
data Gibt einen Zeiger auf die Rohdaten des array-Objekts zurück.
get_accelerator_view Gibt das accelerator_view -Objekt zurück, das die Position darstellt, an der das Array zugeordnet ist. Auf diese Eigenschaft kann nur auf der CPU zugegriffen werden.
get_associated_accelerator_view Ruft das zweite accelerator_view-Objekt ab, das als Parameter übergeben wird, wenn ein Stagingkonstruktor aufgerufen wird, um das array Objekt zu instanziieren.
get_cpu_access_type Gibt den access_type des Arrays zurück. Auf diese Methode kann nur auf der CPU zugegriffen werden.
get_extent Gibt das Umfangsobjekt des Arrays zurück.
reinterpret_as Gibt ein eindimensionales Array zurück, das alle Elemente im array-Objekt enthält.
section Gibt einen Unterabschnitt des array-Objekts zurück, das sich am angegebenen Ursprung befindet und optional den angegebenen Wertebereich hat.
view_as Gibt ein array_view -Objekt zurück, das aus dem array Objekt erstellt wird.

Öffentliche Operatoren

Name Beschreibung
operator std::vector<value_type> Wird copy(*this, vector) verwendet, um das Array implizit in ein std::vector -Objekt zu konvertieren.
operator() Gibt den Elementwert zurück, der von den Parametern angegeben wird.
operator[] Gibt das Element am angegebenen Index zurück.
operator= Kopiert den Inhalt des angegebenen array-Objekts in dieses Objekt.

Öffentliche Konstanten

Name Beschreibung
rank-Konstante Speichert den Rang des Arrays.

Öffentliche Datenmember

Name Beschreibung
accelerator_view Ruft das accelerator_view -Objekt, das die Position darstellt, an der das Array zugeordnet ist. Auf diese Eigenschaft kann nur auf der CPU zugegriffen werden.
associated_accelerator_view Ruft das zweite accelerator_view-Objekt ab, das als Parameter übergeben wird, wenn ein Stagingkonstruktor aufgerufen wird, um das array Objekt zu instanziieren.
cpu_access_type Ruft die access_type , die angibt, wie die CPU auf den Speicher des Arrays zugreifen kann.
extent Ruft den Wertebereich ab, der die Form des Arrays definiert.

Hinweise

Der Typ array<T,N> stellt ein dichtes und normales (nicht getaggtes) Ndimensionales Array dar, das sich an einer bestimmten Position befindet, z. B. eine Zugriffstaste oder die CPU. Der Datentyp der Elemente im Array ist T. Der Typ muss mit der Zielzugriffstaste kompatibel ist. Obwohl der Rang, N, des Arrays statisch ermittelt und Teil des Typs ist, wird der Wertebereich des Arrays durch die Laufzeit bestimmt und durch Verwendung der extent<N>-Klasse ausgedrückt.

Ein Array kann eine beliebige Anzahl Dimensionen haben, obwohl einige Funktionen für array-Objekte mit dem Rang eins, zwei und drei spezialisiert ist. Wenn Sie das Dimensionsargument weglassen, ist der Standardwert 1.

Arraydaten grenzen im Arbeitsspeicher aneinander. Elemente, die sich in der unwichtigsten Dimension um eins unterscheiden, grenzen im Arbeitsspeicher aneinander.

Arrays werden logisch als Werttypen betrachtet, da beim Kopieren eines Arrays in ein anderes eine tiefe Kopie ausgeführt wird. Zwei Arrays zeigen nie auf die gleichen Daten.

Der array<T,N>-Typ wird in verschiedenen Szenarien verwendet:

  • Als Datencontainer, der in Berechnungen auf einer Zugriffstaste verwendet werden kann.

  • Als Datencontainer zum Vorhalten von Arbeitsspeicher auf der Host-CPU (die zum Kopieren in und von anderen Arrays verwendet werden kann).

  • Als Stagingobjekt, um in Kopien vom Host zum Gerät als schneller Vermittler zu fungieren.

Vererbungshierarchie

array

Anforderungen

Header: amp.h

Namespace: Parallelität

~Anordnung

Zerstört das array-Objekt.

~array() restrict(cpu);

accelerator_view

Ruft das accelerator_view -Objekt, das die Position darstellt, an der das Array zugeordnet ist. Auf diese Eigenschaft kann nur auf der CPU zugegriffen werden.

__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;

array

Initialisiert eine neue Instanz der Arrayklasse. Für "array<T,N>" ist kein Standardkonstruktor vorhanden. Alle Konstruktoren werden nur auf der CPU ausgeführt. Sie können nicht auf einem Direct3D-Ziel ausgeführt werden.

explicit array(
    const Concurrency::extent<_Rank>& _Extent) restrict(cpu);

explicit array(
    int _E0) restrict(cpu);

explicit array(
    int _E0,
    int _E1) restrict(cpu);

explicit array(
    int _E0,
    int _E1,
    int _E2) restrict(cpu);

array(
    const Concurrency::extent<_Rank>& _Extent,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    int _E1,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    int _E1,
    int _E2,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    const Concurrency::extent<_Rank>& _Extent,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    int _E1,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    int _E1,
    int _E2,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1, _InputIterator _Src_first, _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2, _InputIterator _Src_first, _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

explicit array(
    const array_view<const value_type, _Rank>& _Src) restrict(cpu);

array(
    const array_view<const value_type, _Rank>& _Src,
    accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    const array_view<const value_type, _Rank>& _Src,
    accelerator_view _Av,
    accelerator_view _Associated_Av) restrict(cpu);

array(const array& _Other) restrict(cpu);

array(array&& _Other) restrict(cpu);

Parameter

_Associated_Av
Ein accelerator_view-Objekt, das den bevorzugten Zielort des Arrays angibt.

_Av
Ein accelerator_view-Objekt , das die Position des Arrays angibt.

_Cpu_access_type
Die gewünschte access_type für das Array auf der CPU. Dieser Parameter hat den Standardwert access_type_auto und überlässt die Bestimmung des CPU- access_type-Objekts der Laufzeit. Das tatsächliche CPU-access_type-Objekt für das Array kann mithilfe der get_cpu_access_type-Methode abgefragt werden.

_Umfang
Der Umfang in jeder Dimension des Arrays.

_E0
Die wichtigste Komponente des Umfangs dieses Abschnitts.

_E1
Die zweitwichtigste Komponente des Umfangs dieses Abschnitts.

_E2
Die unwichtigste Komponente des Umfangs dieses Abschnitts.

_InputIterator
Der Typ des Eingabeiterators.

_Src
Das zu kopierende Objekt.

_Src_first
Ein Anfangsiterator in den Quellcontainer.

_Src_last
Ein Endeiterator in den Quellcontainer.

_Other
Andere Datenquelle.

_Rank
Der Rang des Abschnitts.

value_type
Der Datentyp der Elemente, die kopiert werden.

associated_accelerator_view

Ruft das zweite accelerator_view-Objekt ab, das als Parameter übergeben wird, wenn ein Stagingkonstruktor aufgerufen wird, um das array Objekt zu instanziieren.

__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;

copy_to

Kopiert den Inhalt des Inhalts array in eine andere array.

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

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

Parameter

_Dest
Das array_view Objekt, in das kopiert werden soll.

cpu_access_type

Ruft das für dieses Array zulässige access_type-Objekt für die CPU ab.

__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;

data

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

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

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

Rückgabewert

Ein Zeiger auf die Rohdaten des array-Objekts.

extent

Ruft das Umfangsobjekt ab, das die Form der .array

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

get_accelerator_view

Gibt das accelerator_view -Objekt zurück, das die Position darstellt, an der das array Objekt zugeordnet ist. Auf diese Eigenschaft kann nur auf der CPU zugegriffen werden.

Concurrency::accelerator_view get_accelerator_view() const;

Rückgabewert

Das accelerator_view Objekt, das die Position darstellt, an der das array Objekt zugeordnet ist.

get_associated_accelerator_view

Ruft das zweite accelerator_view-Objekt ab, das als Parameter übergeben wird, wenn ein Stagingkonstruktor aufgerufen wird, um das array Objekt zu instanziieren.

Concurrency::accelerator_view get_associated_accelerator_view() const ;

Rückgabewert

Das zweite accelerator_view-Objekt , das an den Stagingkonstruktor übergeben wurde.

get_cpu_access_type

Gibt das CPU-access_type-Objekt zurück, das für dieses Array zulässig ist.

access_type get_cpu_access_type() const restrict(cpu);

Rückgabewert

get_extent

Gibt das Umfangsobjekt der array.

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

Rückgabewert

Das extent-Objekt von array.

operator std::vector<value_type>

Wird copy(*this, vector) verwendet, um das Array implizit in ein std::vector -Objekt zu konvertieren.

operator std::vector<value_type>() const restrict(cpu);

Parameter

value_type
Der Datentyp der Elemente des Vektors.

Rückgabewert

Ein Objekt des Typs vector<T>, das eine Kopie der Daten im Array enthält.

Operator()

Gibt den Elementwert zurück, der von den Parametern angegeben wird.

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

const value_type& operator() (const index<_Rank>& _Index) cons  t restrict(amp,cpu);

value_type& operator() (int _I0, int _I1) restrict(amp,cpu);

const value_type& operator() (int _I0, int _I1) const restrict(amp,cpu)  ;

value_type& operator() (int _I0, int _I1, int _I2) restrict(amp,cpu);

const value_type& operator() (int _I0, int _I1, int _I2) const restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator()(int _I) 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
Die wichtigste Komponente des Ursprungs dieses Abschnitts.

_I1
Die zweitwichtigste Komponente des Ursprungs dieses Abschnitts.

_I2
Die unwichtigste Komponente des Ursprungs dieses Abschnitts.

_I
Der Speicherort des Elements.

Rückgabewert

Der Elementwert, der von den Parametern angegeben wird.

operator[]

Gibt das Element am angegebenen Index zurück.

value_type& operator[](const index<_Rank>& _Index) restrict(amp,cpu);

const value_type& operator[]
    (const index<_Rank>& _Index) const restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator[](int _i) restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator[](int _i) const restrict(amp,cpu);

Parameter

_Index
Der Index.

_I
Der Index.

Rückgabewert

Das Element am angegebenen Index.

operator =

Kopiert den Inhalt des angegebenen array Objekts.

array& operator= (const array& _Other) restrict(cpu);

array& operator= (array&& _Other) restrict(cpu);

array& operator= (
    const array_view<const value_type, _Rank>& _Src) restrict(cpu);

Parameter

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

_Src
Das array-Objekt, aus dem kopiert werden soll.

Rückgabewert

Ein Verweis auf das array-Objekt.

rank

Speichert den Rang der array.

static const int rank = _Rank;

reinterpret_as

Interpretiert das Array über eine eindimensionale array_view neu, die optional einen anderen Werttyp als das Quellarray aufweisen kann.

Syntax

template <typename _Value_type2>
array_view<_Value_type2,1> reinterpret_as() restrict(amp,cpu);

template <typename _Value_type2>
array_view<const _Value_type2, 1> reinterpret_as() const restrict(amp,cpu);

Parameter

_Value_type2
Der Datentyp der zurückgegebenen Daten.

Rückgabewert

Ein array_view- oder const-array_view-Objekt, das auf dem Array basiert, wobei der Elementtyp von T auf ElementType neu interpretiert wird und der Rang von N auf 1 reduziert wurde.

Hinweise

Manchmal ist es hilfreich, ein mehrdimensionales Array so anzuzeigen, als wäre es ein lineares, eindimensionales Array, möglicherweise mit einem anderen Werttyp als das Quellarray. Sie können dazu diese Methode verwenden. Achtung : Das Erneute Interpretieren eines Arrayobjekts mithilfe eines anderen Werttyps ist ein potenziell unsicherer Vorgang. Es empfiehlt sich, diese Funktion mit Bedacht zu verwenden.

Der folgende Code gibt 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-Objekts zurück, das sich am angegebenen Ursprung befindet und optional den angegebenen Wertebereich hat.

array_view<value_type,_Rank> section(
    const Concurrency::index<_Rank>& _Section_origin,
    const Concurrency::extent<_Rank>& _Section_extent) restrict(amp,cpu);

array_view<const value_type,_Rank> section(
    const Concurrency::index<_Rank>& _Section_origin,
    const Concurrency::extent<_Rank>& _Section_extent) const restrict(amp,cpu);

array_view<value_type,_Rank> section(
    const Concurrency::extent<_Rank>& _Ext) restrict(amp,cpu);

array_view<const value_type,_Rank> section(
    const Concurrency::extent<_Rank>& _Ext) const restrict(amp,cpu);

array_view<value_type,_Rank> section(
    const index<_Rank>& _Idx) restrict(amp,cpu);

array_view<const value_type,_Rank> section(
    const index<_Rank>& _Idx) const restrict(amp,cpu);

array_view<value_type,1> section(
    int _I0,
    int _E0) restrict(amp,cpu);

array_view<const value_type,1> section(
    int _I0,
    int _E0) const restrict(amp,cpu);

array_view<value_type,2> section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) restrict(amp,cpu);

array_view<const value_type,2> section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) const restrict(amp,cpu);

array_view<value_type,3> section(
    int _I0,
    int _I1,
    int _I2,
    int _E0,
    int _E1,
    int _E2) restrict(amp,cpu);

array_view<const value_type,3> 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.

value_type
Der Datentyp der Elemente, die kopiert werden.

Rückgabewert

Gibt einen Unterabschnitt des array-Objekts zurück, 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 Raster, deren Indizes größer sind als die Indizes der Elemente im index-Objekt.

view_as

Interpretiert dieses Array als array_view einer anderen Rangfolge neu.

template <int _New_rank>
array_view<value_type,_New_rank> view_as(
    const Concurrency::extent<_New_rank>& _View_extent) 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 extent-Objekts wurde als Parameter übergeben.

_View_extent
Das Ausmaß, in dem das neue array_view-Objekt erstellt wird.

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

Rückgabewert

Das array_view-Objekt , das erstellt wird.

Siehe auch

Concurrency-Namespace (C++ AMP)