Condividi tramite


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

Costruttore array_view::array_view

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.

Distruttore array_view::~array_view

Elimina l'oggetto array_view.

Metodi pubblici

Nome

Descrizione

Metodo array_view::copy_to

Copiare il contenuto dell'oggetto array_view nella destinazione specificata chiamando copy(*this, dest).

Metodo array_view::data

Restituisce un puntatore ai dati non trattati dell' array_view.

Metodo array_view::discard_data

Rimuove i dati correnti che sono alla base di questa view.

Metodo array_view::get_extent

Restituisce l'oggetto extent dell'oggetto array_view.

Metodo array_view::get_ref

Restituisce un riferimento all'elemento indicizzato.

Metodo array_view::get_source_accelerator_view

Restituisce l'oggetto accelerator_view in cui si trova l'origine dati dell'oggetto array_view.

Metodo array_view::refresh

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.

Metodo array_view::reinterpret_as

Restituisce una matrice unidimensionale contenente tutti gli elementi dell'oggetto array_view.

Metodo array_view::section

Restituisce una sottosezione dell'oggetto array_view presente all'origine specificata e, facoltativamente, con l'extent specificato.

Metodo array_view::synchronize

Sincronizza le modifiche apportate all'oggetto array_view partendo dai dati di origine.

Metodo array_view::synchronize_async

In modo asincrono, sincronizza le modifiche apportate all'oggetto array_view partendo dai dati di origine.

Metodo array_view::synchronize_to

Sincronizza le modifiche apportate all'oggetto array_view con l'oggetto accelerator_view specificato.

Metodo array_view::synchronize_to_async

Sincronizza in modo asincrono le modifiche apportate all'oggetto array_view nel accelerator_viewspecificato.

Metodo array_view::view_as

Produce un oggetto array_view con un numero di dimensioni differente utilizzando i dati di questo oggetto array_view.

Operatori pubblici

Nome

Descrizione

Operatore array_view::operator()

Restituisce il valore dell'elemento specificato dal parametro o dai parametri.

Operatore array_view::operator[]

Restituisce l'elemento specificato dai parametri.

Operatore array_view::operator=

Copia il contenuto dell'oggetto array_view specificato in questo oggetto.

Costanti pubbliche

Nome

Descrizione

Costante array_view::rank

Memorizza il numero di dimensioni dell'oggetto array_view.

Membri di dati

Nome

Descrizione

Membro dati array_view::extent

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

Membro dati array_view::source_accelerator_view

Ottiene l'oggetto accelerator_view in cui si trova l'origine dati dell'oggetto array_view.

Membro dati array_view::value_type

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

Vedere anche

Riferimenti

Spazio dei nomi Concurrency (C++ AMP)