Compartir por


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

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)