Classe array_view
Rappresenta una visualizzazione a N-dimensionale sui dati presenti in un altro contenitore.
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)>;
Parametri
_Value_type
Il tipo di dati degli elementi nell'oggetto array_view._Rank
Numero di dimensioni dell'oggetto array_view.
Membri
Costruttori pubblici
Nome |
Descrizione |
---|---|
Inizializza una nuova istanza della classe array_view. Non è presente un costruttore predefinito per array<T,N>. Tutti i costruttori sono limitati dal dover esser eseguiti sulla CPU e non possono essere eseguiti in una destinazione Direct3D. |
|
Elimina l'oggetto array_view. |
Metodi pubblici
Nome |
Descrizione |
---|---|
Copiare il contenuto dell'oggetto array_view nella destinazione specificata chiamando copy(*this, dest). |
|
Restituisce un puntatore ai dati non trattati dell' array_view. |
|
Rimuove i dati correnti che sono alla base di questa view. |
|
Restituisce l'oggetto extent dell'oggetto array_view. |
|
Restituisce un riferimento all'elemento indicizzato. |
|
Restituisce l'oggetto accelerator_view in cui si trova l'origine dati dell'oggetto array_view. |
|
Notifica all' oggetto array_view che la sua memoria associata è stata modificata fuori dall'interfaccia array_view. Una chiamata a questo metodo rende non aggiornate tutte le informazioni memorizzate nella cache. |
|
Restituisce una matrice unidimensionale contenente tutti gli elementi dell'oggetto array_view. |
|
Restituisce una sottosezione dell'oggetto array_view presente all'origine specificata e, facoltativamente, con l'extent specificato. |
|
Sincronizza le modifiche apportate all'oggetto array_view partendo dai dati di origine. |
|
In modo asincrono, sincronizza le modifiche apportate all'oggetto array_view partendo dai dati di origine. |
|
Sincronizza le modifiche apportate all'oggetto array_view con l'oggetto accelerator_view specificato. |
|
Sincronizza in modo asincrono le modifiche apportate all'oggetto array_view nel accelerator_viewspecificato. |
|
Produce un oggetto array_view con un numero di dimensioni differente utilizzando i dati di questo oggetto array_view. |
Operatori pubblici
Nome |
Descrizione |
---|---|
Restituisce il valore dell'elemento specificato dal parametro o dai parametri. |
|
Restituisce l'elemento specificato dai parametri. |
|
Copia il contenuto dell'oggetto array_view specificato in questo oggetto. |
Costanti pubbliche
Nome |
Descrizione |
---|---|
Memorizza il numero di dimensioni dell'oggetto array_view. |
Membri di dati
Nome |
Descrizione |
---|---|
Ottiene l'oggetto extent che definisce la forma dell'oggetto array_view. |
|
Ottiene l'oggetto accelerator_view in cui si trova l'origine dati dell'oggetto array_view. |
|
Tipo di valore di array_view e matrice associata. |
Note
La classe array_view rappresenta una visualizzazione dei dati contenuti in un oggetto array o in una sottosezione di un oggetto array.
È possibile accedere all'oggetto array_view in cui sono presenti i dati di origine (localmente) o a un acceleratore differente oppure a un dominio di coerenza (in modalità remota). Quando si accede all'oggetto in modalità remota, le visualizzazioni vengono copiate e memorizzate nella cache in base alle esigenze. Ad eccezione degli effetti della memorizzazione automatica nella cache, gli oggetti array_view hanno un profilo di prestazioni simile a quello degli oggetti array. Si verifica una lieve riduzione delle prestazioni quando si accede ai dati tramite le visualizzazioni.
Esistono tre scenari di utilizzo remoto:
Una view ad un puntatore alla memoria di sistema viene passata tramite una chiamata a parallel_for_each ad un acceleratore e si accede all'acceleratore.
Una view ad un array che si trova su un acceleratore viene passata tramite una chiamata a parallel_for_each ad un altro acceleratore e viene acceduta là.
Una view in un array che si trova su un acceleratore viene eseguita sulla CPU.
In ognuno di questi scenari, le view referenziate vengono copiate dal runtime alla posizione remota e, se modificate dalle chiamate all'oggetto array_view, vengono ricopiate nel percorso locale. Il runtime può ottimizzare il processo di copia delle modifiche, può copiare solo gli elementi modificati oppure può anche copiare le parti invariate. Gli oggetti array_view sovrapposti in un'origine dati non hanno garanzia di mantenere l'integrità referenziale in una posizione remota.
È necessario sincronizzare ogni accesso di più thread alla stessa origine dati.
Il runtime effettua le seguenti garanzie relativamente alla memorizzazione dei dati negli oggetti array_view :
Tutti gli accessi ben sincronizzati ad un oggetto array e ad un oggetto array_view, nell'ordine della programmazione, seguono una delazione di pre-avvenire.
Tutti gli accessi ben sincronizzati agli oggetti array_view sovrapposti, sullo stesso acceleratore su un singolo oggetto array sono in alias attraverso l'oggetto array. Causano una totale relazione di pre-verifica che obbedisce all'ordine di programma. Non è disponibile la memorizzazione nella cache. Se gli oggetti array_view sono eseguiti su acceleratori diversi, l'ordine di accesso è indefinito, creando una race condition.
Quando si crea un oggetto array_view utilizzando un puntatore nella memoria di sistema, è necessario modificare l'oggetto di visualizzazione array_view solamente tramite il puntatore all' array_view. In alternativa, è necessario chiamare refresh() su uno degli oggetti array_view associati al puntatore di sistema se la memoria nativa sottostante viene modificata direttamente, anziché attraverso l'oggetto array_view.
Qualsiasi azione notifica all' oggetto array_view che la memoria nativa sottostante è stata modificata e che tutte le copie che si trovano sull'acceleratore sono obsolete. Seguendo queste linee guida, le view basate su puntatore sono identiche a quelle fornite alle view dei vettori di dati in parallelo.
Gerarchia di ereditarietà
_Array_view_shape
_Array_view_base
array_view
Requisiti
Intestazione: amp.h
Spazio dei nomi: Concurrency