array (Clase)

Representa un contenedor de datos utilizado para mover datos a un acelerador.

Sintaxis

template <typename value_type, int _Rank>
friend class array;

Parámetros

value_type
Tipo de elemento de los datos.

_Rank
Rango de la matriz.

Miembros

Constructores públicos

Nombre Descripción
array Constructor Inicializa una nueva instancia de la clase array.
~array Destructor Destruye el objeto array.

Métodos públicos

Nombre Descripción
copy_to Copia el contenido de la matriz en otra matriz.
data Devuelve un puntero a los datos sin procesar de la matriz.
get_accelerator_view Devuelve el objeto accelerator_view que representa la ubicación donde se asigna la matriz. Solo se puede acceder a esta propiedad en la CPU.
get_associated_accelerator_view Obtiene el segundo objeto accelerator_view que se pasa como parámetro cuando se llama a un constructor de almacenamiento provisional para crear una instancia del objeto array.
get_cpu_access_type Devuelve el access_type de la matriz. Solo se puede acceder a este método en la CPU.
get_extent Devuelve el objeto extent de la matriz.
reinterpret_as Devuelve una matriz unidimensional que contiene todos los elementos del objeto array.
section Devuelve una subsección del objeto array que se encuentra en el origen especificado y que, opcionalmente, tiene la extensión especificada.
view_as Devuelve un objeto array_view que se construye a partir del objeto array.

Operadores públicos

Nombre Descripción
operator std::vector<value_type> Usa copy(*this, vector) para convertir implícitamente la matriz en un objeto std::vector.
operator() Devuelve el valor de elemento especificado por los parámetros.
operator[] Devuelve el elemento que se encuentra en el índice especificado.
operator= Copia el contenido del objeto array especificado en este.

Constantes públicas

Nombre Descripción
rank (Constante) Almacena la clasificación de la matriz.

Miembros de datos públicos

Nombre Descripción
accelerator_view Obtiene el objeto accelerator_view que representa la ubicación donde se asigna la matriz. Solo se puede acceder a esta propiedad en la CPU.
associated_accelerator_view Obtiene el segundo objeto accelerator_view que se pasa como parámetro cuando se llama a un constructor de almacenamiento provisional para crear una instancia del objeto array.
cpu_access_type Obtiene el access_type que representa cómo la CPU puede acceder al almacenamiento de la matriz.
extent Obtiene la extensión que define la forma de la matriz.

Comentarios

El tipo array<T,N> representa una matriz densa y normal (no escalonada) N-dimensional que se encuentra en una ubicación específica, como un acelerador o la CPU. El tipo de datos de los elementos de la matriz es T, que debe ser de un tipo que sea compatible con el acelerador de destino. Aunque la clasificación, N, de la matriz se determina estáticamente y forma parte del tipo, el runtime determina la extensión de la matriz y se expresa mediante la clase extent<N>.

Una matriz puede tener cualquier número de dimensiones, aunque algunas funcionalidades están especializadas para objetos array con rango uno, dos y tres. Si omite el argumento de dimensión, el valor predeterminado es 1.

Los datos de la matriz se presentan contiguamente en la memoria. Los elementos que difieren en uno en la dimensión menos significativa están adyacentes en la memoria.

Las matrices se consideran lógicamente tipos de valor, porque cuando se copia una matriz en otra, se realiza una copia en profundidad. Dos matrices nunca apuntan a los mismos datos.

El tipo array<T,N> se usa en varios escenarios:

  • Como contenedor de datos que se puede usar en los cálculos en un acelerador.

  • Como contenedor de datos para contener memoria en la CPU del host (que se puede usar para copiar hacia y desde otras matrices).

  • Como objeto de almacenamiento provisional para actuar como intermediario rápido en las copias de host a dispositivo.

Jerarquía de herencia

array

Requisitos

Encabezado: amp.h

Espacio de nombres: simultaneidad

~Matriz

Destruye el objeto array.

~array() restrict(cpu);

accelerator_view

Obtiene el objeto accelerator_view que representa la ubicación donde se asigna la matriz. Solo se puede acceder a esta propiedad en la CPU.

__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;

array

Inicializa una nueva instancia de la clase array. No hay ningún constructor predeterminado para array<T,N>. Todos los constructores solo se ejecutan en la CPU. No se pueden ejecutar en un destino de Direct3D.

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

explicit array(
    int _E0) restrict(cpu);

explicit array(
    int _E0,
    int _E1) restrict(cpu);

explicit array(
    int _E0,
    int _E1,
    int _E2) restrict(cpu);

array(
    const Concurrency::extent<_Rank>& _Extent,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    int _E1,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    int _E0,
    int _E1,
    int _E2,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    const Concurrency::extent<_Rank>& _Extent,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    int _E1,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

array(
    int _E0,
    int _E1,
    int _E2,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    _InputIterator _Src_last) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    const Concurrency::extent<_Rank>& _Extent,
    _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    _InputIterator _Src_first,
    _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1, _InputIterator _Src_first, _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2, _InputIterator _Src_first, _InputIterator _Src_last,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

template <typename _InputIterator>
array(
    int _E0,
    int _E1,
    int _E2, _InputIterator _Src_first,
    Concurrency::accelerator_view _Av,
    Concurrency::accelerator_view _Associated_Av) restrict(cpu);

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

array(
    const array_view<const value_type, _Rank>& _Src,
    accelerator_view _Av
    access_type _Cpu_access_type = access_type_auto) restrict(cpu);

array(
    const array_view<const value_type, _Rank>& _Src,
    accelerator_view _Av,
    accelerator_view _Associated_Av) restrict(cpu);

array(const array& _Other) restrict(cpu);

array(array&& _Other) restrict(cpu);

Parámetros

_Associated_Av
El accelerator_view que especifica la ubicación de destino preferida de la matriz.

_Av
El objeto accelerator_view que especifica la ubicación de la matriz.

_Cpu_access_type
El valor access_type para la matriz en la CPU. Este parámetro tiene un valor predeterminado de access_type_auto dejando la determinación access_type de la CPU al runtime. El access_type de la CPU real para la matriz se puede consultar mediante el método get_cpu_access_type.

_Extent
La extensión de cada dimensión de la matriz.

_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.

_InputIterator
El tipo de iterador de entrada.

_Src
El objeto que se desea copiar.

_Src_first
El iterador inicial en el contenedor de origen.

_Src_last
El iterador final en el contenedor de origen.

_Other
Otro origen de datos.

_Rank
Rango de la sección.

value_type
El tipo de datos de los elementos que se copian.

associated_accelerator_view

Obtiene el segundo objeto accelerator_view que se pasa como parámetro cuando se llama a un constructor de almacenamiento provisional para crear una instancia del objeto array.

__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;

copy_to

Copia el contenido del array en otro array.

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

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

Parámetros

_Dest
Objeto array_view en el que se copia.

cpu_access_type

Obtiene el access_type de la CPU permitido para esta matriz.

__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;

datos

Devuelve un puntero a los datos sin procesar del array.

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

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

Valor devuelto

Puntero a los datos sin procesar de la matriz.

extent

Obtiene el objeto extent que define la forma del array.

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

get_accelerator_view

Devuelve el objeto accelerator_view que representa la ubicación en la que se asigna el objeto array. Solo se puede acceder a esta propiedad en la CPU.

Concurrency::accelerator_view get_accelerator_view() const;

Valor devuelto

El objeto accelerator_view que representa la ubicación en la que se asigna el objeto array.

get_associated_accelerator_view

Obtiene el segundo objeto accelerator_view que se pasa como parámetro cuando se llama a un constructor de almacenamiento provisional para crear una instancia del objeto array.

Concurrency::accelerator_view get_associated_accelerator_view() const ;

Valor devuelto

El segundo objeto accelerator_view incluido en el constructor de almacenamiento provisional.

get_cpu_access_type

Devuelve el access_type de la CPU permitido para esta matriz.

access_type get_cpu_access_type() const restrict(cpu);

Valor devuelto

get_extent

Devuelve el objeto extent del array.

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

Valor devuelto

El objeto extent de array.

operator std::vector<value_type>

Usa copy(*this, vector) para convertir implícitamente la matriz en un objeto std::vector.

operator std::vector<value_type>() const restrict(cpu);

Parámetros

value_type
El tipo de datos de los elementos del vector.

Valor devuelto

Objeto de tipo vector<T> que contiene una copia de los datos contenidos en la matriz.

operator()

Devuelve el valor de elemento especificado por los parámetros.

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

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

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

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

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

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

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator()(int _I) 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 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.

_I
La ubicación del elemento.

Valor devuelto

Valor del elemento especificado por los parámetros.

operator[]

Devuelve el elemento que se encuentra en el índice especificado.

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

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

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator[](int _i) restrict(amp,cpu);

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

Parámetros

_Index
El índice.

_I
El índice.

Valor devuelto

El elemento que se encuentra en el índice especificado.

operator=

Copia el contenido del objeto especificado array.

array& operator= (const array& _Other) restrict(cpu);

array& operator= (array&& _Other) restrict(cpu);

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

Parámetros

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

_Src
El objeto array desde el que se va a copiar.

Valor devuelto

La referencia a este objeto array.

rank

Almacena la clasificación del array.

static const int rank = _Rank;

reinterpret_as

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

Sintaxis

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

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

Parámetros

_Value_type2
El tipo de datos de los datos devueltos.

Valor devuelto

Objeto array_view o const array_view basado en la matriz, con el tipo de elemento reinterpretado de T a ElementType y la clasificación reducida de N a 1.

Comentarios

A veces resulta conveniente ver una matriz multidimensional como si fuera una matriz unidimensional lineal, posiblemente con un tipo de valor diferente al de la matriz de origen. Puede usar este método para lograrlo. Precaución Reinterpretar un objeto de matriz mediante un tipo de valor diferente es una operación potencialmente insegura. Se recomienda usar esta funcionalidad con cuidado.

En el código siguiente se muestra 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 que se encuentra en el origen especificado y que, opcionalmente, tiene la extensión especificada.

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

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

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

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

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

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

array_view<value_type,1> section(
    int _I0,
    int _E0) restrict(amp,cpu);

array_view<const value_type,1> section(
    int _I0,
    int _E0) const restrict(amp,cpu);

array_view<value_type,2> section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) restrict(amp,cpu);

array_view<const value_type,2> section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) const restrict(amp,cpu);

array_view<value_type,3> section(
    int _I0,
    int _I1,
    int _I2,
    int _E0,
    int _E1,
    int _E2) restrict(amp,cpu);

array_view<const value_type,3> 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.

value_type
El tipo de datos de los elementos que se copian.

Valor devuelto

Devuelve una subsección del objeto array 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 de la cuadrícula asociada que tengan índices mayores que los índices de los elementos del objeto index.

view_as

Reinterpreta esta matriz 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) 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 objeto extent incluido como parámetro.

_View_extent
Extensión que se usa para construir el nuevo objeto array_view.

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 se construye.

Consulte también

Espacio de nombres de simultaneidad (C++ AMP)