Compartir a través de


array_view (Clase)

Representa una vista N dimensional sobre los datos contenidos en otro contenedor.

Sintaxis

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

Parámetros

value_type
El tipo de datos de los elementos en el elemento array_view.

_Rank
La clasificación del objeto array_view.

Miembros

Constructores públicos

Nombre Descripción
array_view Constructor Inicializa una nueva instancia de la clase array_view. No hay ningún constructor predeterminado para array<T,N>. Todos los constructores están restringidos a ejecutarse solo en la CPU y no se pueden ejecutar en un destino de Direct3D.
~array_view Destructor Destruye el objeto array_view.

Métodos públicos

Nombre Descripción
copy_to Copia el contenido del objeto array_view en el destino especificado al llamar a copy(*this, dest).
data Devuelve un puntero a los datos sin procesar del array_view.
discard_data Descarta los datos actuales subyacentes a esta vista.
get_extent Devuelve el objeto de extensión del objeto array_view.
get_ref Devuelve una referencia al elemento indexado.
get_source_accelerator_view Devuelve la accelerator_view donde se encuentra el origen de datos de array_view.
refresh Notifica al objeto array_view que se ha modificado su memoria límite fuera de la interfaz array_view. Una llamada a este método representa toda la información almacenada en caché obsoleta.
reinterpret_as Devuelve una matriz unidimensional que contiene todos los elementos del objeto array_view.
section Devuelve una subsección del objeto array_view que se encuentra en el origen especificado y que, opcionalmente, tiene la extensión especificada.
synchronize Sincroniza de nuevo cualquier modificación realizada en el objeto array_view con sus datos de origen.
synchronize_async Sincroniza de nuevo asincrónicamente cualquier modificación realizada en el objeto array_view con sus datos de origen.
synchronize_to Sincroniza las modificaciones realizadas en el objeto array_view con el accelerator_view especificado.
synchronize_to_async Sincroniza asincrónicamente las modificaciones realizadas en el objeto array_view con el accelerator_view especificado.
view_as Genera un array_view objeto de una clasificación diferente mediante los datos de este array_view objeto.

Operadores públicos

Nombre Descripción
operator() Devuelve el valor del elemento especificado por el parámetro o los parámetros.
operator[] Devuelve el elemento especificado por los parámetros.
operator= Copia el contenido del objeto array_view especificado en este.

Constantes públicas

Nombre Descripción
rank (Constante) Almacena la clasificación del objeto array_view.

Miembros de datos

Nombre Descripción
extent Obtiene el objeto extent que define la forma del objeto array_view.
source_accelerator_view Obtiene la accelerator_view donde se encuentra el origen de datos de array_view.
value_type El tipo de valor de array_view y la matriz de límites.

Comentarios

La clase array_view representa una vista de los datos contenidos en un objeto de matriz o una subsección de un objeto array.

Puede acceder al objeto array_view donde se encuentran los datos de origen (localmente) o en un acelerador diferente o en un dominio de coherencia (de forma remota). Cuando se accede al objeto de forma remota, las vistas se copian y se almacenan en caché según sea necesario. Excepto en el caso de los efectos del almacenamiento en caché automático, los objetos array_view tienen un perfil de rendimiento similar al de los objetos array. Hay una pequeña penalización de rendimiento cuando se accede a los datos a través de vistas.

Hay tres escenarios de uso remoto:

  • Una vista a un puntero de memoria del sistema se pasa mediante una llamada de parallel_for_each a un acelerador y se accede a ella en el acelerador.

  • Se pasa una vista a una matriz ubicada en un acelerador mediante una llamada de parallel_for_each a otro acelerador y se accede a ella allí.

  • Se accede en la CPU a una vista de una matriz ubicada en un acelerador.

En cualquiera de estos escenarios, el runtime copia las vistas a las que se hace referencia en la ubicación remota y, si se modifican mediante las llamadas al objeto array_view, se copian de nuevo en la ubicación local. El runtime podría optimizar el proceso de copiar nuevamente los cambios; podría copiar solo elementos modificados o también copiar partes sin cambios. No se garantiza que los objetos superpuestos array_view en un origen de datos mantengan la integridad referencial en una ubicación remota.

Debe sincronizar cualquier acceso de multithreading al mismo origen de datos.

El runtime realiza las siguientes garantías relativas al almacenamiento en caché de datos en objetos array_view:

  • Todos los accesos bien sincronizados a un objeto array y un objeto array_view en él en cuanto al orden de programa obedecen una relación serial del tipo ocurre-antes.

  • Todos los accesos bien sincronizados a objetos superpuestos array_view en el mismo acelerador de un solo objeto array reciben un alias a través del objeto array. Inducen una relación total ocurre-antes a la que obedece el orden del programa. No hay almacenamiento en caché. Si los objetos array_view se ejecutan en distintos aceleradores, el orden de acceso no está definido, lo que crea una condición de carrera.

Al crear un objeto array_view mediante un puntero en la memoria del sistema, debe cambiar el objeto de vista array_view solo a través del puntero array_view. Como alternativa, debe llamar a refresh() en uno de los objetos array_view adjuntos al puntero del sistema, si la memoria nativa subyacente se cambia directamente, en lugar de a través del objeto array_view.

Cualquiera de las acciones notifica al objeto array_view que memoria nativa subyacente ha cambiado y que las copias que se encuentran ubicadas en un acelerador están obsoletas. Si sigue estas directrices, las vistas basadas en puntero son idénticas a las proporcionadas a las vistas de matrices paralelas de datos.

Jerarquía de herencia

_Array_view_shape

_Array_view_base

array_view

Requisitos

Encabezado: amp.h

Espacio de nombres: simultaneidad

~array_view

Destruye el objeto array_view.

~array_view()restrict(amp,cpu);

array_view

Inicializa una nueva instancia de la clase array_view.

array_view(
    array<value_type, _Rank>& _Src)restrict(amp,cpu);

array_view(
    const array_view& _Other)restrict(amp,cpu);

explicit array_view(
    const Concurrency::extent<_Rank>& _Extent) restrict(cpu);

template <
    typename _Container
>
array_view(
    const Concurrency::extent<_Rank>& _Extent,
    _Container& _Src) restrict(cpu);

array_view(
    const Concurrency::extent<_Rank>& _Extent,
    value_type* _Src)restrict(amp,cpu);

explicit array_view(
    int _E0) restrict(cpu);

template <
    typename _Container
>
explicit array_view(
    _Container& _Src,
    typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);

template <
    typename _Container
>
explicit array_view(
    int _E0,
    _Container& _Src) restrict(cpu);

explicit array_view(
    int _E0,
    int _E1) __CPU_ONLY;

template <
    typename _Container
>
explicit array_view(
    int _E0,
    int _E1,
    _Container& _Src) restrict(cpu);

explicit array_view(
    int _E0,
    int _E1,
    int _E2) __CPU_ONLY;

template <
    typename _Container
>
explicit array_view(
    int _E0,
    int _E1,
    int _E2,
    _Container& _Src);

explicit array_view(
    int _E0,
    _In_ value_type* _Src)restrict(amp,cpu);

template <
    typename _Arr_type,
    int _Size
>
explicit array_view(
    _In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);

explicit array_view(
    int _E0,
    int _E1,
    _In_ value_type* _Src)restrict(amp,cpu);

explicit array_view(
    int _E0,
    int _E1,
    int _E2,
    _In_ value_type* _Src)restrict(amp,cpu);

array_view(
    const array<value_type, _Rank>& _Src)restrict(amp,cpu);

array_view(
    const array_view<value_type, _Rank>& _Src)restrict(amp,cpu);

array_view(
    const array_view<const value_type, _Rank>& _Src)restrict(amp,cpu);

template <
    typename _Container
>
array_view(
    const Concurrency::extent<_Rank>& _Extent,
    const _Container& _Src) restrict(cpu);

template <
    typename _Container
>
explicit array_view(
    const _Container& _Src,
    typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);

array_view(
    const Concurrency::extent<_Rank>& _Extent,
    const value_type* _Src)restrict(amp,cpu);

template <
    typename _Arr_type,
    int _Size
>
explicit array_view(
    const _In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);

template <
    typename _Container
>
array_view(
    int _E0,
    const _Container& _Src);

template <
    typename _Container
>
array_view(
    int _E0,
    int _E1,
    const _Container& _Src);

template <
    typename _Container
>
array_view(
    int _E0,
    int _E1,
    int _E2,
    const _Container& _Src);

array_view(
    int _E0,
    const value_type* _Src)restrict(amp,cpu);

array_view(
    int _E0,
    int _E1,
    const value_type* _Src) restrict(amp,cpu);

array_view(
    int _E0,
    int _E1,
    int _E2,
    const value_type* _Src) restrict(amp,cpu);

Parámetros

_Arr_type
El tipo de elemento de una matriz de estilo C a partir de la cual se proporcionan los datos.

_Container
Un argumento de plantilla que debe especificar un contenedor lineal que admita miembros data() y size().

_E0
El componente más significativo de la extensión de esta sección.

_E1
El siguiente componente más significativo de la extensión de esta sección.

_E2
El componente menos significativo de la extensión de esta sección.

_Extent
La extensión en cada dimensión de esta matriz array_view.

_Other
Un objeto de tipo array_view<T,N> a partir del cual se inicializará el nuevo objeto array_view.

_Size
El tamaño de una matriz de estilo C a partir de la cual se proporcionan los datos.

_Src
Un puntero a los datos de origen que se copiarán en la nueva matriz.

copy_to

Copia el contenido del objeto array_view en el objeto de destino especificado al llamar a copy(*this, dest).

void copy_to(
    array<value_type, _Rank>& _Dest) const;

void copy_to(
    array_view<value_type, _Rank>& _Dest) const;

Parámetros

_Dest
El objeto en el que se copia.

data

Devuelve un puntero a los datos sin procesar del array_view.

value_type* data() const restrict(amp,
    cpu);

const value_type* data() const restrict(amp,
    cpu);

Valor devuelto

Un puntero a los datos sin procesar de array_view.

discard_data

Descarta los datos actuales subyacentes a esta vista. Esta es una sugerencia de optimización para el runtime que se usa para evitar copiar el contenido actual de la vista en un accelerator_view de destino en el cual se accede a ella y se recomienda su uso si no se necesita el contenido existente. Este método no implica ninguna operación cuando se usa en un contexto restrict(amp)

void discard_data() const restrict(cpu);

extent

Obtiene el objeto extent que define la forma del objeto array_view.

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

get_extent

Devuelve el objeto extent del objeto array_view.

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

Valor devuelto

El objeto extent del objeto array_view

get_ref

Obtenga una referencia al elemento indexado por _Index. A diferencia de los otros operadores de indexación para acceder al array_view en la CPU, este método no sincroniza implícitamente este contenido de array_view con la CPU. Después de acceder a array_view en una ubicación remota o realizar una operación de copia que implique a esta array_view, los usuarios son responsables de sincronizar explícitamente la array_view con la CPU antes de llamar a este método. Si no lo hacen, se produce un comportamiento indefinido.

value_type& get_ref(
    const index<_Rank>& _Index) const restrict(amp, cpu);

Parámetros

_Index
El índice.

Valor devuelto

Una referencia al elemento indexado por _Index

get_source_accelerator_view

Devuelve la accelerator_view donde se encuentra el origen de datos de la array_view. Si la array_view no tiene un origen de datos, esta API produce una runtime_exception

accelerator_view get_source_accelerator_view() const;

Valor devuelto

operator()

Devuelve el valor del elemento especificado por el parámetro o los parámetros.

value_type& operator() (
    const index<_Rank>& _Index) const restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator() (
    int _I) const restrict(amp,cpu);

value_type& operator() (
    int _I0,
    int _I1) const restrict(amp,cpu);

value_type& operator() (
    int _I0,
    int _I1,
    int _I2) const restrict(amp,cpu);

typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator() (
    int _I) const restrict(amp,cpu);

Parámetros

_Index
La ubicación del elemento.

_I0
El índice en la primera dimensión.

_I1
El índice en la segunda dimensión.

_I2
El índice en la tercera dimensión.

_I
La ubicación del elemento.

Valor devuelto

Devuelve el valor del elemento especificado por el parámetro o los parámetros.

operator[]

Devuelve el elemento especificado por los parámetros.

typename details::_Projection_result_type<value_type,_Rank>::_Const_result_type operator[] (
    int _I) const restrict(amp,cpu);

value_type& operator[] (
    const index<_Rank>& _Index) const restrict(amp,cpu);

Parámetros

_Index
El índice.

_I
El índice.

Valor devuelto

El valor del elemento en el índice o un array_view proyectado en la dimensión más significativa.

operator=

Copia el contenido del objeto array_view especificado en este.

array_view& operator= (
    const array_view& _Other) restrict(amp,cpu);

array_view& operator= (
    const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);

Parámetros

_Other
El objeto array_view desde el que se va a copiar.

Valor devuelto

La referencia a este objeto array_view.

rank

Almacena la clasificación del objeto array_view.

static const int rank = _Rank;

actualizar

Notifica al objeto array_view que se ha modificado su memoria límite fuera de la interfaz array_view. Una llamada a este método representa toda la información almacenada en caché obsoleta.

void refresh() const restrict(cpu);

reinterpret_as

Reinterpreta la array_view a través de una array_view unidimensional, que opcionalmente puede tener un tipo de valor diferente al de la array_view de origen.

Sintaxis

template <
    typename _Value_type2
>
array_view< _Value_type2, _Rank> reinterpret_as() const restrict(amp,cpu);

template <
    typename _Value_type2
>
array_view<const _Value_type2, _Rank> reinterpret_as() const restrict(amp,cpu);

Parámetros

_Value_type2
El tipo de datos del objeto array_view nuevo.

Valor devuelto

Un objeto array_view o objeto const array_view que se basa en este array_view, con el tipo de elemento convertido de T a _Value_type2y el rango reducido de N a 1.

Comentarios

A veces resulta conveniente ver una matriz multidimensional como si fuera una matriz unidimensional lineal, que podría tener un tipo de valor diferente al de la matriz de origen. Puede lograrlo en un array_view mediante este método.

Precaución Reinterpretar un objeto de array_view mediante un tipo de valor diferente es una operación potencialmente insegura. Esta funcionalidad debe usarse con cuidado.

Este es un ejemplo:

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

section

Devuelve una subsección del objeto array_view que se encuentra en el origen especificado y que, opcionalmente, tiene la extensión especificada.

array_view section(
    const Concurrency::index<_Rank>& _Section_origin,
    const Concurrency::extent<_Rank>& _Section_extent) const restrict(amp,cpu);

array_view section(
    const Concurrency::index<_Rank>& _Idx) const restrict(amp,cpu);

array_view section(
    const Concurrency::extent<_Rank>& _Ext) const restrict(amp,cpu);

array_view section(
    int _I0,
    int _E0) const restrict(amp,cpu);

array_view section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) const restrict(amp,cpu);

array_view section(
    int _I0,
    int _I1,
    int _I2,
    int _E0,
    int _E1,
    int _E2) const restrict(amp,cpu);

Parámetros

_E0
El componente más significativo de la extensión de esta sección.

_E1
El siguiente componente más significativo de la extensión de esta sección.

_E2
El componente menos significativo de la extensión de esta sección.

_Ext
El objeto extent que especifica la extensión de la sección. El origen es 0.

_Idx
El objeto index que especifica la ubicación del origen. La subsección es el resto de la extensión.

_I0
El componente más significativo del origen de esta sección.

_I1
El siguiente componente más significativo del origen de esta sección.

_I2
El componente menos significativo del origen de esta sección.

_Rank
Rango de la sección.

_Section_extent
El objeto extent que especifica la extensión de la sección.

_Section_origin
El objeto index que especifica la ubicación del origen.

Valor devuelto

Una subsección del objeto array_view que se encuentra en el origen especificado y que, opcionalmente, tiene la extensión especificada. Cuando solo se especifica el objeto index, la subsección contiene todos los elementos en la extensión asociada que tengan índices mayores que los índices de los elementos del objeto index.

source_accelerator_view

Obtiene la accelerator_view de origen a la que está asociada esta array_view.

__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;

synchronize

Sincroniza de nuevo cualquier modificación realizada en el objeto array_view con sus datos de origen.

void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);

void synchronize() const restrict(cpu);

Parámetros

_Access_type
El access_type previsto en la accelerator_view de destino. Este parámetro tiene un valor predeterminado de access_type_read.

synchronize_async

Sincroniza de nuevo asincrónicamente cualquier modificación realizada en el objeto array_view con sus datos de origen.

concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);

concurrency::completion_future synchronize_async() const restrict(cpu);

Parámetros

_Access_type
El access_type previsto en la accelerator_view de destino. Este parámetro tiene un valor predeterminado de access_type_read.

Valor devuelto

Un futuro durante el cual esperar a que se complete la operación.

synchronize_to

Sincroniza cualquier modificación realizada a esta array_view en la accelerator_view especificada.

void synchronize_to(
    const accelerator_view& _Accl_view,
    access_type _Access_type = access_type_read) const restrict(cpu);

void synchronize_to(
    const accelerator_view& _Accl_view) const restrict(cpu);

Parámetros

_Accl_view
La accelerator_view de destino con la que se sincronizará.

_Access_type
El access_type deseado en la accelerator_view de destino. Este parámetro tiene un valor predeterminado de access_type_read.

synchronize_to_async

Sincroniza asincrónicamente cualquier modificación realizada a esta array_view en la accelerator_view especificada.

concurrency::completion_future synchronize_to_async(
    const accelerator_view& _Accl_view,
    access_type _Access_type = access_type_read) const restrict(cpu);

concurrency::completion_future synchronize_to_async(
    const accelerator_view& _Accl_view) const restrict(cpu);

Parámetros

_Accl_view
La accelerator_view de destino con la que se sincronizará.

_Access_type
El access_type deseado en la accelerator_view de destino. Este parámetro tiene un valor predeterminado de access_type_read.

Valor devuelto

Un futuro durante el cual esperar a que se complete la operación.

value_type

El tipo de valor de la array_view y la matriz de límites.

typedef typenamevalue_type value_type;

view_as

Reinterpreta esta array_view como una array_view de un rango diferente.

template <
    int _New_rank
>
array_view<value_type,_New_rank> view_as(
    const Concurrency::extent<_New_rank>& _View_extent) const 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);

Parámetros

_New_rank
El rango del nuevo objeto array_view.

_View_extent
El extent que cambia de forma.

value_type
El tipo de datos de los elementos del objeto array original y del objeto array_view devuelto.

Valor devuelto

El objeto array_view que está construido.

Consulte también

Espacio de nombres de simultaneidad (C++ AMP)