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
copia_in Copia il contenuto della matrice in un'altra matrice.
dati Restituisce un puntatore ai dati grezzi dell'array.
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 si invoca un costruttore di staging per istanziare l'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 .
sezione 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.
Operatore [] Restituisce l'elemento in corrispondenza dell'indice specificato.
Operatore = Copia il contenuto dell'oggetto specificato array in questo oggetto.

Costanti pubbliche

Nome Descrizione
Costante rank Archivia il rango della matrice.

Membri di 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 si invoca un costruttore di staging per istanziare l'oggetto array.
cpu_access_type Ottiene il access_type che rappresenta il modo in cui la CPU può accedere all'archiviazione della matrice.
ambito Ottiene le dimensioni che definiscono la forma dell'array.

Osservazioni:

Il tipo array<T,N> rappresenta una matrice densa e regolare (non a dente di sega) N-dimensionale che è situata in una posizione specifica, ad esempio su un acceleratore o sulla 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 grado N della matrice viene determinato in modo statico e fa parte del tipo, l'estensione della matrice è determinata dal runtime ed è espressa 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 di 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 utilizzare come un 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 un target 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 dell'array.

_Av
Oggetto accelerator_view che specifica la posizione della matrice.

_tipo_accesso_cpu
Il access_type desiderato per l'array sulla CPU. Il valore predefinito di questo parametro è access_type_auto, lasciando che l'assegnazione della CPU access_type sia determinata dal runtime. È possibile eseguire query sulla CPU access_type effettiva per la matrice usando il get_cpu_access_type metodo .

_Estensione
L'estensione in ogni dimensione dell'array.

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

_E1
La componente immediatamente meno significativa dell'estensione di questa sezione.

_E2
Componente meno significativo dell'estensione di questa sezione.

_InputIterator
Tipo di iteratore di input.

_Src
Opporsi alla copia.

_Src_first
Iteratore iniziale nel contenitore di origine.

_Src_last
Iteratore finale nel contenitore di origine.

_Altro
Altra fonte 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 si invoca un costruttore di staging per istanziare l'oggetto array.

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

copy_to

Copia il contenuto di array in un altro oggetto array.

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.

tipo_accesso_cpu

Ottiene il tipo di accesso CPU consentito per questo array.

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

data

Restituisce un puntatore ai dati grezzi 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.

estensione

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

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

ottieni_visualizzazione_acceleratore

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 si invoca un costruttore di staging per istanziare l'oggetto array.

Concurrency::accelerator_view get_associated_accelerator_view() const ;

Valore restituito

Il secondo oggetto accelerator_view passato al costruttore di staging.

ottenere_tipo_di_accesso_cpu

Restituisce il tipo di accesso CPU consentito per questa matrice.

access_type get_cpu_access_type() const restrict(cpu);

Valore restituito

get_extent

Restituisce l'oggetto extent di array.

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

Valore restituito

L'oggetto extent del 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
Il secondo componente più significativo dell'origine di questa sezione.

_I2
Componente meno significativo dell'origine di questa sezione.

_Io
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.

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

sezione

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
La componente immediatamente meno 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'estensione.

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

_I1
Il secondo componente più significativo dell'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
L'estensione utilizzata 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

L'oggetto array_view che viene costruito.

Vedi anche

Namespace Concurrency (C++ AMP)