Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
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
El rango del arreglo.
Miembros
Constructores públicos
| Nombre | Descripción |
|---|---|
| Constructor de Arrays | Inicializa una nueva instancia de la clase array. |
| ~destructor de arreglo | 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 está asignada la matriz. Solo se puede acceder a esta propiedad en la CPU. |
| obtener_vista_aceleradora_asociada | Obtiene el segundo objeto accelerator_view que se pasa como parámetro cuando se llama a un constructor temporal para instanciar el objeto . |
| 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 la posición de inicio especificada 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 especificado array en este. |
Constantes públicas
| Nombre | Descripción |
|---|---|
| Constante de rango | Almacena la clasificación de la matriz. |
Miembros de datos públicos
| Nombre | Descripción |
|---|---|
| accelerator_view | Obtiene el objeto accelerator_view que representa el lugar donde se asigna el array. 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 temporal para instanciar el objeto . |
| cpu_access_type | Obtiene el access_type, que representa la manera en que la CPU puede acceder al almacenamiento del array. |
| alcance | Obtiene la extensión que define la forma de la matriz. |
Comentarios
El tipo array<T,N> representa una matriz densa y regular (no escalonada) N-dimensional que se encuentra en una localizació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 el rango, N, de la matriz se determina estáticamente y forma parte del tipo, el tiempo de ejecución 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 de tipo 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: Concurrencia
~arreglo
Destruye el objeto array.
~array() restrict(cpu);
vista_acelerador
Obtiene el objeto accelerator_view que representa la ubicación donde se aloja el array. 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 por defecto 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 access_type deseado para la matriz en la CPU. Este parámetro tiene un valor predeterminado de access_type_auto dejando la determinación de la CPU access_type al runtime. La CPU access_type real para la matriz se puede consultar usando el método get_cpu_access_type.
_Extent
La extensión de cada dimensión de la matriz.
_E0
El componente más significativo en relación con el alcance de esta sección.
_E1
El penúltimo componente más significativo del alcance de esta sección.
_E2
El componente menos significativo del alcance de esta sección.
_InputIterator
El tipo de iterador de entrada.
_Src
Oponerse a copiar.
_Src_first
Un iterador inicial en el contenedor fuente.
_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.
vista_acelerador_asociado
Obtiene el segundo objeto accelerator_view que se pasa como parámetro cuando se llama a un constructor de preparación para instanciar el objeto array.
__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;
copiar_a
Copia el contenido del array a otro array.
void copy_to(
array<value_type, _Rank>& _Dest) const ;
void copy_to(
array_view<value_type, _Rank>& _Dest) const ;
Parámetros
_Dest
El objeto array_view al que se copiará.
tipo_de_acceso_a_la_cpu
Obtiene el tipo de acceso de la CPU permitido para este arreglo.
__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.
alcance
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 donde 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 temporal para instanciar el objeto .
Concurrency::accelerator_view get_associated_accelerator_view() const ;
Valor devuelto
El segundo objeto accelerator_view pasado al constructor de preparación.
get_cpu_access_type
Devuelve el tipo de acceso de la CPU permitido para este array.
access_type get_cpu_access_type() const restrict(cpu);
Valor devuelto
get_extent
Devuelve el objeto
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 el array 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 que están en el array.
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 componente penúltimo 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.
operador[]
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.
operador =
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 cual copiar.
_Src
El objeto array desde el que se va a copiar.
Valor devuelto
Una referencia a este objeto array.
clasificación
Almacena el rango del array.
static const int rank = _Rank;
reinterpretar_como
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 la información devuelta.
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);
sección
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 en relación con el alcance de esta sección.
_E1
El penúltimo componente más significativo del alcance de esta sección.
_E2
El componente menos significativo del alcance de esta sección.
_Ext
El objeto de extensión que especifica los límites 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 componente penúltimo 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 de extensión que especifica los límites 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 la posición de inicio especificada y que, opcionalmente, tiene la extensión especificada. Cuando solo se especifica el objeto index, la subsección contiene todos los elementos en la cuadrícula asociada que tengan índices mayores que los índices de los elementos en el objeto index.
ver_como
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 pasado como parámetro.
_View_extent
Hasta qué punto se utiliza para construir el nuevo objeto array_view.
value_type
El tipo de datos de los elementos en ambos, el objeto array original y el objeto array_view devuelto.
Valor devuelto
El array_view objeto que se construye.
Consulte también
Espacio de nombres Concurrency (C++ AMP)