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 array
oggetto .
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.