Partager via


array_view, classe

Représente une vue dimensionnelle N sur les données conservées dans un autre conteneur.

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

Paramètres

  • _Value_type
    Type de données des éléments de l'objet array_view.

  • _Rank
    Rang de l'objet array_view.

Membres

Constructeurs publics

Nom

Description

array_view::array_view, constructeur

Initialise une nouvelle instance de la classe array_view. Il n'existe pas de constructeur public par défaut pour array<T,N>. Tous les constructeurs sont limités à l'exécution sur le processeur seul et ne peuvent pas être exécutés sur une cible Direct3D.

array_view::~array_view, destructeur

Détruit l'objet array_view.

Méthodes publiques

Nom

Description

array_view::copy_to, méthode

Copie le contenu de l'objet array_view vers la destination spécifiée en appelant copy(*this, dest).

array_view::data, méthode

Retourne un pointeur vers les données brutes de array_view.

array_view::discard_data, méthode

Ignore les données actuelles sous-jacentes de cette vue.

array_view::get_extent, méthode

Retourne l'objet d'étendue de l'objet array_view.

array_view::get_ref, méthode

Retourne une référence à l'élément indexé.

array_view::get_source_accelerator_view, méthode

Retourne l'accelerator_view où la source de données de l'array_view est localisée.

array_view::refresh, méthode

Informe l'objet array_view que sa mémoire liée a été modifiée en dehors de l'interface array_view. Un appel à cette méthode affiche toutes les informations mises en cache périmées.

array_view::reinterpret_as, méthode

Retourne un tableau unidimensionnel qui contient tous les éléments de l'objet array_view.

array_view::section, méthode

Retourne une sous-section de l'objet array_view qui est à l'origine spécifiée et, éventuellement, qui a l'étendue spécifiée.

array_view::synchronize, méthode

Synchronise les modifications apportées à l'objet array_view vers ses données sources.

array_view::synchronize_async, méthode

Synchronise de façon asynchrone toutes les modifications apportées à l'objet array_view avec ses données sources.

array_view::synchronize_to, méthode

Synchronise les modifications apportées à l'objet array_view en fonction de l'accelerator_viewspécifié.

array_view::synchronize_to_async, méthode

Synchronise de façon asynchrone toutes les modifications apportées à l'objet array_view en fonction de la vue accelerator_viewspécifiée.

array_view::view_as, méthode

Génère un objet array_view d'un rang différent utilisant les données de cet objet array_view.

Opérateurs publics

Nom

Description

array_view::operator(), opérateur

Retourne la valeur de l'élément spécifié par le paramètre ou les paramètres.

array_view::operator[], opérateur

Retourne l'élément spécifié par les paramètres.

array_view::operator=, opérateur

Copie le contenu de l'objet array_view spécifié dans cet objet.

Constantes publiques

Nom

Description

array_view::rank, constante

Stocke le rang de l'objet array_view.

Membres de données

Nom

Description

array_view::extent, données membres

Obtient l'objet extent qui définit la forme de l'objet array_view.

array_view::source_accelerator_view, membre de données

Obtient l'accelerator_view où la source de données de l'array_view est localisée

array_view::value_type, membre de données

Type valeur de array_view et du tableau de limite.

Remarques

La classe array_view représente une vue dans les données contenues dans un objet array ou une sous-section d'un objet array.

Vous pouvez accéder à l'objet array_view où les données sources sont situées (localement) ou sur un accélérateur différent ou un domaine de cohérence (à distance). Lorsque vous accédez à l'objet à distance, les vues sont copiées et mises en cache selon vos besoins. À l'exception des effets de mise en cache automatique, les objets array_view ont un profil de performances semblables à celui des objets array. Il existe une légère baisse de performances lorsque vous accédez aux données via les vues.

Il existe trois scénarios d'usage distants :

  • Une vue vers un pointeur de mémoire système est passée au moyen d'un appel à parallel_for_each sur un accélérateur et accédé dans l'accélérateur.

  • Une vue sur un tableau situé sur un accélérateur est passée au moyen d'un appel à parallel_for_each sur un autre accélérateur et est accessible à partir de celui-ci.

  • Une vue sur un tableau située sur un accélérateur est accédée sur l'UC.

Dans n'importe lequel de ces scénarios, les vues référencées sont copiées par le runtime à l'emplacement distant et, si modifiées par les appels à l'objet array_view, sont copiées vers l'emplacement local. Le runtime peut optimiser le processus de copie de modifications, peut copier uniquement les éléments modifiés, ou peut également copier les parties inchangées. Faire chevaucher des objets array_view sur une source de données ne garantit pas de maintenir l'intégrité référentielle dans un emplacement distant.

Vous devez synchroniser tout accès multithread à la même source de données.

Le runtime établit les garanties suivantes concernant la mise en cache des données dans les objets array_view :

  • Tous les accès bien synchronisés à un objet array et un objet array_view dessus dans la commande de programme obéissent à une relation de série d'avant évènement.

  • Tous les accès bien synchronisés à un objet array_view chevauchant sur le même accélérateur sur un objet unique d'alias array via l'objet array. Celles-ci induisent une relation d'évènement-avant totale à laquelle obéit la commande de programme. Il n'existe aucune mise en cache. Si les objets array_view s'exécutent sur des accélérateurs différents, l'ordre d'accès n'est pas défini, créant une condition de concurrence.

Lorsque vous créez un objet array_view à l'aide d'un pointeur dans la mémoire système, vous devez modifier l'objet array_view de vue uniquement via le pointeur array_view. Sinon, vous devez appeler refresh() sur l'un des objets array_view joints au pointeur système, si la mémoire native sous-jacente est modifiée directement, plutôt que par l'objet array_view.

Chacune des actions informe l'objet array_view que la mémoire native sous-jacente est modifiée et que toutes les copies qui se trouvent sur un accélérateur sont obsolètes. Si vous suivez ces instructions, les vues basées sur un pointeur sont identiques à celles fournies aux vues des tableaux de données parallèles.

Hiérarchie d'héritage

_Array_view_shape

_Array_view_base

array_view

Configuration requise

En-tête : amp.h

Espace de noms d'accès : Concurrency

Voir aussi

Référence

Concurrency, espace de noms (C++ AMP)