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
Il rango 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. |
|
Notifica all'oggetto array_view che la sua memoria associata è stata modificata al di fuori dell'interfaccia dell'array_view.Una chiamata a questo metodo rende non aggiornate tutte le informazioni memorizzate nella cache. |
|
Restituisce un array 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. |
|
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. |
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 ad un acceleratore differente o ad un dominio di coerenza (in modo remoto).Quando si accede all'oggetto in modalità remota, le view 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.C'è una lieve riduzione delle prestazioni quando si accede ai dati tramite le view.
Esistono tre scenari remoti di utilizzo:
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 memorizzando i 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.Provocano una totale relazione di pre-verifica che obbedisce all'ordine di programma.Non vi è 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 alll'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