Condividi tramite


Classe array

Rappresenta un contenitore di dati utilizzato per spostare i dati in un acceleratore.

Sintassi

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

Parametri

value_type
Tipo di elemento dei dati.

_Rango
Classificazione della matrice.

Membri

Costruttori pubblici

Nome Descrizione
Costruttore di matrice Inizializza una nuova istanza della classe array.
Distruttore ~array Elimina definitivamente l'oggetto array .

Metodi pubblici

Nome Descrizione
copy_to Copia il contenuto della matrice in un'altra matrice.
data Restituisce un puntatore ai dati non elaborati della matrice.
get_accelerator_view Restituisce l'oggetto accelerator_view che rappresenta la posizione in cui viene allocata la matrice. È possibile accedere a questa proprietà solo sulla CPU.
get_associated_accelerator_view Ottiene il secondo oggetto accelerator_view passato come parametro quando viene chiamato un costruttore di staging per creare un'istanza dell'oggetto array .
get_cpu_access_type Restituisce la access_type della matrice. È possibile accedere a questo metodo solo sulla CPU.
get_extent Restituisce l'oggetto extent della matrice.
reinterpret_as Restituisce una matrice unidimensionale che contiene tutti gli elementi dell'oggetto array .
section Restituisce una sottosezione dell'oggetto array che si trova all'origine specificata e, facoltativamente, con l'extent specificato.
view_as Restituisce un oggetto array_view costruito dall'oggetto array .

Operatori pubblici

Nome Descrizione
operator std::vector<value_type> copy(*this, vector) Usa per convertire in modo implicito la matrice in un oggetto std::vector.
operator() Restituisce il valore dell'elemento specificato dai parametri.
operator[] Restituisce l'elemento in corrispondenza dell'indice specificato.
operator= Copia il contenuto dell'oggetto specificato array in questo oggetto.

Costanti pubbliche

Nome Descrizione
Costante rank Archivia il rango della matrice.

Membri dati pubblici

Nome Descrizione
accelerator_view Ottiene l'oggetto accelerator_view che rappresenta la posizione in cui viene allocata la matrice. È possibile accedere a questa proprietà solo sulla CPU.
associated_accelerator_view Ottiene il secondo oggetto accelerator_view passato come parametro quando viene chiamato un costruttore di staging per creare un'istanza dell'oggetto array .
cpu_access_type Ottiene il access_type che rappresenta il modo in cui la CPU può accedere all'archiviazione della matrice.
extent Ottiene l'extent che definisce la forma della matrice.

Osservazioni:

Il tipo array<T,N> rappresenta una matrice densa e regolare (non irregolare) N-dimensionale che si trova in una posizione specifica, ad esempio un acceleratore o la CPU. Il tipo di dati degli elementi nella matrice è T, che deve essere di un tipo compatibile con l'acceleratore di destinazione. Anche se il rango , N(della matrice viene determinato in modo statico e fa parte del tipo , l'extent della matrice è determinato dal runtime ed è espresso usando la classe extent<N>.

Una matrice può avere un numero qualsiasi di dimensioni, anche se alcune funzionalità sono specializzate per array gli oggetti con classificazione 1, due e tre. Se si omette l'argomento della dimensione, il valore predefinito è 1.

I dati della matrice sono disposti in modo contiguo in memoria. Gli elementi che differiscono da uno nella dimensione meno significativa sono adiacenti in memoria.

Le matrici sono considerate logicamente tipi valore, perché quando una matrice viene copiata in un'altra matrice, viene eseguita una copia completa. Due matrici non puntano mai agli stessi dati.

Il array<T,N> tipo viene usato in diversi scenari:

  • Come contenitore di dati che può essere usato nei calcoli su un acceleratore.

  • Come contenitore di dati per contenere la memoria nella CPU host (che può essere usata per copiare da e verso altre matrici).

  • Come oggetto di staging da usare come intermediario rapido nelle copie da host a dispositivo.

Gerarchia di ereditarietà

array

Requisiti

Intestazione: amp.h

Spazio dei nomi: Concurrency

~array

Elimina definitivamente l'oggetto array .

~array() restrict(cpu);

accelerator_view

Ottiene l'oggetto accelerator_view che rappresenta la posizione in cui viene allocata la matrice. È possibile accedere a questa proprietà solo sulla CPU.

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

array

Inizializza una nuova istanza della classe array. Non esiste alcun costruttore predefinito per array<T,N>. Tutti i costruttori vengono eseguiti solo sulla CPU. Non possono essere eseguiti su una destinazione Direct3D.

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

Parametri

_Associated_Av
Oggetto accelerator_view che specifica la posizione di destinazione preferita della matrice.

_Av
Oggetto accelerator_view che specifica la posizione della matrice.

_Cpu_access_type
Il access_type desiderato per la matrice nella CPU. Questo parametro ha un valore predefinito che access_type_auto lascia la determinazione della CPU access_type al runtime. È possibile eseguire query sulla CPU access_type effettiva per la matrice usando il get_cpu_access_type metodo .

_Misura
Extent in ogni dimensione della matrice.

_E0
Componente più significativo dell'estensione di questa sezione.

_E1
Componente successivo alla più significativa dell'estensione di questa sezione.

_E2
Componente meno significativo dell'estensione di questa sezione.

_InputIterator
Tipo di iteratore di input.

_Src
Oggetto da copiare.

_Src_first
Iteratore iniziale nel contenitore di origine.

_Src_last
Iteratore finale nel contenitore di origine.

_Altro
Altra origine dati.

_Rango
Classificazione della sezione.

value_type
Tipo di dati degli elementi copiati.

associated_accelerator_view

Ottiene il secondo oggetto accelerator_view passato come parametro quando viene chiamato un costruttore di staging per creare un'istanza dell'oggetto array .

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

copy_to

Copia il contenuto dell'oggetto array in un altro arrayoggetto .

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

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

Parametri

_Dest
Oggetto array_view in cui eseguire la copia.

cpu_access_type

Ottiene il access_type cpu consentito per questa matrice.

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

data

Restituisce un puntatore ai dati non elaborati dell'oggetto array.

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

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

Valore restituito

Puntatore ai dati non elaborati della matrice.

extent

Ottiene l'oggetto extent che definisce la forma dell'oggetto array.

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

get_accelerator_view

Restituisce l'oggetto accelerator_view che rappresenta la posizione in cui viene allocato l'oggetto array . È possibile accedere a questa proprietà solo sulla CPU.

Concurrency::accelerator_view get_accelerator_view() const;

Valore restituito

Oggetto accelerator_view che rappresenta la posizione in cui viene allocato l'oggetto array .

get_associated_accelerator_view

Ottiene il secondo oggetto accelerator_view passato come parametro quando viene chiamato un costruttore di staging per creare un'istanza dell'oggetto array .

Concurrency::accelerator_view get_associated_accelerator_view() const ;

Valore restituito

Secondo oggetto accelerator_view passato al costruttore di staging.

get_cpu_access_type

Restituisce il access_type cpu consentito per questa matrice.

access_type get_cpu_access_type() const restrict(cpu);

Valore restituito

get_extent

Restituisce l'oggetto extent dell'oggetto array.

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

Valore restituito

Oggetto extent dell'oggetto array.

operator std::vector<value_type>

copy(*this, vector) Usa per convertire in modo implicito la matrice in un oggetto std::vector.

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

Parametri

value_type
Tipo di dati degli elementi del vettore.

Valore restituito

Oggetto di tipo vector<T> che contiene una copia dei dati contenuti nella matrice.

operator()

Restituisce il valore dell'elemento specificato dai parametri.

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

Parametri

_Indice
Posizione dell'elemento.

_I0
Componente più significativo dell'origine di questa sezione.

_I1
Componente successivo all'origine di questa sezione.

_I2
Componente meno significativo dell'origine di questa sezione.

_I
Posizione dell'elemento.

Valore restituito

Valore dell'elemento specificato dai parametri.

operator[]

Restituisce l'elemento in corrispondenza dell'indice specificato.

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

Parametri

_Indice
Indice.

_I
Indice.

Valore restituito

Elemento in corrispondenza dell'indice specificato.

operator=

Copia il contenuto dell'oggetto specificato array .

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

Parametri

_Altro
Oggetto array da cui copiare.

_Src
Oggetto array da cui copiare.

Valore restituito

Riferimento a questo array oggetto.

rank

Archivia il rango dell'oggetto array.

static const int rank = _Rank;

reinterpret_as

Reinterpreta la matrice tramite un array_view unidimensionale, che facoltativamente può avere un tipo di valore diverso rispetto alla matrice di origine.

Sintassi

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

Parametri

_Value_type2
Tipo di dati dei dati restituiti.

Valore restituito

Oggetto array_view o const array_view basato sulla matrice, con il tipo di elemento reinterpretato da T a ElementType e la classificazione ridotta da N a 1.

Osservazioni:

A volte è utile visualizzare una matrice multidimensionale come se fosse una matrice lineare unidimensionale, possibilmente con un tipo di valore diverso rispetto alla matrice di origine. È possibile usare questo metodo per ottenere questo risultato. Attenzione Reinterpretare un oggetto matrice usando un tipo di valore diverso è un'operazione potenzialmente non sicura. È consigliabile usare attentamente questa funzionalità.

Il codice seguente fornisce un esempio.

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

Restituisce una sottosezione dell'oggetto array che si trova all'origine specificata e, facoltativamente, con l'extent specificato.

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

Parametri

_E0
Componente più significativo dell'estensione di questa sezione.

_E1
Componente successivo alla più significativa dell'estensione di questa sezione.

_E2
Componente meno significativo dell'estensione di questa sezione.

_Ext
Oggetto extent che specifica l'extent della sezione. L'origine è 0.

_Idx
Oggetto indice che specifica la posizione dell'origine. La sottosezione è il resto dell'extent.

_I0
Componente più significativo dell'origine di questa sezione.

_I1
Componente successivo all'origine di questa sezione.

_I2
Componente meno significativo dell'origine di questa sezione.

_Rango
Classificazione della sezione.

_Section_extent
Oggetto extent che specifica l'extent della sezione.

_Section_origin
Oggetto indice che specifica la posizione dell'origine.

value_type
Tipo di dati degli elementi copiati.

Valore restituito

Restituisce una sottosezione dell'oggetto array che si trova all'origine specificata e, facoltativamente, con l'extent specificato. Quando viene specificato solo l'oggetto index , la sottosezione contiene tutti gli elementi nella griglia associata con indici maggiori degli indici degli elementi nell'oggetto index .

view_as

Reinterpreta questa matrice come array_view di un rango diverso.

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

Parametri

_New_rank
Classificazione dell'oggetto extent passato come parametro.

_View_extent
Extent utilizzato per costruire il nuovo oggetto array_view .

value_type
Tipo di dati degli elementi sia nell'oggetto originale array che nell'oggetto restituito array_view .

Valore restituito

Oggetto array_view costruito.

Vedi anche

Spazio dei nomi Concurrency (C++ AMP)