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
~arreglo
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;
data
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.