Classe array
Representa um contêiner de dados usado para mover dados para um acelerador.
Sintaxe
template <typename value_type, int _Rank>
friend class array;
Parâmetros
value_type
O tipo de elemento dos dados.
_Rank
A classificação da matriz.
Membros
Construtores públicos
Nome | Descrição |
---|---|
Construtor array | Inicializa uma nova instância da classe array . |
Destruidor ~array | Destrói o objeto array . |
Métodos públicos
Nome | Descrição |
---|---|
copy_to | Copia o conteúdo da matriz para outra matriz. |
data | Retorna um ponteiro para os dados brutos da matriz. |
get_accelerator_view | Retorna o objeto accelerator_view que representa o local onde a matriz é alocada. Essa propriedade só pode ser acessada na CPU. |
get_associated_accelerator_view | Obtém o segundo objeto accelerator_view que é passado como um parâmetro quando um construtor de preparo é chamado para instanciar o objeto array . |
get_cpu_access_type | Retorna o access_type da matriz. Esse método só pode ser acessado na CPU. |
get_extent | Retorna o objeto extent da matriz. |
reinterpret_as | Retorna uma matriz unidimensional que contém todos os elementos no objeto array . |
section | Retorna uma subseção do objeto array que está na origem especificada e, opcionalmente, que tem a extensão especificada. |
view_as | Retorna um objeto array_view que é construído a partir do objeto array . |
Operadores públicos
Nome | Descrição |
---|---|
operator std::vector<value_type> |
Usa copy(*this, vector) para converter implicitamente a matriz em um objeto std::vector. |
operador() | Retorna o valor do elemento especificado pelos parâmetros. |
operador | Retorna o elemento que está no índice especificado. |
operator= | Copia o conteúdo do objeto especificado array para este objeto. |
Constantes públicas
Nome | Descrição |
---|---|
Constante rank | Armazena a classificação da matriz. |
Membros de Dados Públicos
Nome | Descrição |
---|---|
accelerator_view | Obtém o objeto accelerator_view que representa o local onde a matriz é alocada. Essa propriedade só pode ser acessada na CPU. |
associated_accelerator_view | Obtém o segundo objeto accelerator_view que é passado como um parâmetro quando um construtor de preparo é chamado para instanciar o objeto array . |
cpu_access_type | Obtém o access_type que representa como a CPU pode acessar o armazenamento da matriz. |
extent | Obtém a extensão que define a forma da matriz. |
Comentários
O tipo array<T,N>
representa uma matriz N dimensional densa e regular (não irregular) que está localizada em um local específico, como um acelerador ou a CPU. O tipo de dados dos elementos na matriz é T
, que deve ser de um tipo compatível com o acelerador de destino. Embora a classificação, N
, da matriz seja determinada estaticamente e faça parte do tipo, a extensão da matriz é determinada pelo runtime e é expressa usando a classe extent<N>
.
Uma matriz pode ter qualquer número de dimensões, embora alguma funcionalidade seja especializada para objetos array
com classificação um, dois e três. Se você omitir o argumento de dimensão, o padrão será 1.
Os dados da matriz são dispostos contiguamente na memória. Elementos que diferem por um na dimensão menos significativa são adjacentes na memória.
As matrizes são logicamente consideradas como tipos de valor, pois quando uma matriz é copiada para outra matriz, uma cópia profunda é executada. Duas matrizes nunca apontam para os mesmos dados.
O tipo array<T,N>
é usado em vários cenários:
Como um contêiner de dados que pode ser usado em cálculos em um acelerador.
Como um contêiner de dados para manter a memória na CPU do host (que pode ser usada para copiar de e para outras matrizes).
Como um objeto de preparo para atuar como um intermediário rápido em cópias de host para dispositivo.
Hierarquia de herança
array
Requisitos
Cabeçalho: amp.h
Namespace: Simultaneidade
~array
Destrói o objeto array
.
~array() restrict(cpu);
accelerator_view
Obtém o objeto accelerator_view que representa o local onde a matriz é alocada. Essa propriedade só pode ser acessada na CPU.
__declspec(property(get= get_accelerator_view)) Concurrency::accelerator_view accelerator_view;
matriz
Inicializa uma nova instância da classe de matriz. Não há construtor padrão para array<T,N>
. Todos os construtores são executados somente na CPU. Eles não podem ser executados em um destino 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
Um accelerator_view que especifica o local de destino preferencial da matriz.
_Av
Um objeto accelerator_view que especifica o local da matriz.
_Cpu_access_type
O access_type desejado para a matriz na CPU. Esse parâmetro tem um valor padrão de access_type_auto
deixando a determinação access_type
de CPU para o runtime. O access_type
de CPU real para a matriz pode ser consultado usando o método get_cpu_access_type
.
_Extent
A extensão em cada dimensão da matriz.
_E0
O componente mais significativo da extensão desta seção.
_E1
O componente próximo ao mais significativo da extensão desta seção.
_E2
O componente menos significativo da extensão desta seção.
_InputIterator
O tipo do iterador de entrada.
_Src
Para o objeto a ser copiado.
_Src_first
Um iterador inicial no contêiner de origem.
_Src_last
Um iterador final no contêiner de origem.
_Other
Outra fonte de dados.
_Rank
A classificação da seção.
value_type
O tipo de dados dos elementos que são copiados.
associated_accelerator_view
Obtém o segundo objeto accelerator_view que é passado como um parâmetro quando um construtor de preparo é chamado para instanciar o objeto array
.
__declspec(property(get= get_associated_accelerator_view)) Concurrency::accelerator_view associated_accelerator_view;
copy_to
Copia o conteúdo do array
para outro array
.
void copy_to(
array<value_type, _Rank>& _Dest) const ;
void copy_to(
array_view<value_type, _Rank>& _Dest) const ;
Parâmetros
_Dest
O objeto array_view para o qual copiar.
cpu_access_type
Obtém o access_type de CPU permitido para essa matriz.
__declspec(property(get= get_cpu_access_type)) access_type cpu_access_type;
data
Retorna um ponteiro para os dados brutos de array
.
value_type* data() restrict(amp, cpu);
const value_type* data() const restrict(amp, cpu);
Valor de retorno
Um ponteiro para os dados brutos da matriz.
extent
Obtém o objeto de extensão que define a forma de array
.
__declspec(property(get= get_extent)) Concurrency::extent<_Rank> extent;
get_accelerator_view
Retorna o objeto accelerator_view que representa o local onde o objeto array
é alocado. Essa propriedade só pode ser acessada na CPU.
Concurrency::accelerator_view get_accelerator_view() const;
Valor de retorno
O objeto accelerator_view
que representa o local onde o objeto array
é alocado.
get_associated_accelerator_view
Obtém o segundo objeto accelerator_view que é passado como um parâmetro quando um construtor de preparo é chamado para instanciar o objeto array
.
Concurrency::accelerator_view get_associated_accelerator_view() const ;
Valor de retorno
O segundo objeto accelerator_view passado para o construtor de preparo.
get_cpu_access_type
Retorna o access_type de CPU permitido para essa matriz.
access_type get_cpu_access_type() const restrict(cpu);
Valor de retorno
get_extent
Retorna o objeto extent de array
.
Concurrency::extent<_Rank> get_extent() const restrict(amp,cpu);
Valor de retorno
O objeto extent
do objeto array
.
operator std::vector<value_type>
Usa copy(*this, vector)
para converter implicitamente a matriz em um objeto std::vector.
operator std::vector<value_type>() const restrict(cpu);
Parâmetros
value_type
O tipo de dados dos elementos do vetor.
Valor de retorno
Um objeto do tipo vector<T>
que contém uma cópia dos dados contidos na matriz.
operador()
Retorna o valor do elemento especificado pelos 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
O local do elemento.
_I0
O componente mais significativo da origem desta seção.
_I1
O componente próximo ao mais significativo da origem desta seção.
_I2
O componente menos significativo da origem desta seção.
_I
O local do elemento.
Valor de retorno
O valor do elemento especificado pelos parâmetros.
operador
Retorna o elemento que está no í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
O índice .
_I
O índice .
Valor de retorno
O elemento que está no índice especificado.
operator=
Copia o conteúdo do objeto array
especificado.
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
O objeto array
do qual copiar.
_Src
O objeto array
do qual copiar.
Valor de retorno
Uma referência a esse objeto array
.
rank
Armazena a classificação de array
.
static const int rank = _Rank;
reinterpret_as
Reinterpreta a matriz por meio de um array_view unidimensional, que opcionalmente pode ter um tipo de valor diferente da matriz de origem.
Sintaxe
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
O tipo de dados referente aos dados retornados.
Valor de retorno
Um objeto array_view ou const array_view baseado na matriz, com o tipo de elemento reinterpretado de T para ElementType e a classificação reduzida de N para 1.
Comentários
Às vezes, é conveniente exibir uma matriz multidimensional como se fosse uma matriz linear unidimensional, possivelmente com um tipo de valor diferente da matriz de origem. Você pode usar esse método para conseguir isso. Cuidado Reinterpretar um objeto de matriz usando um tipo de valor diferente é uma operação potencialmente insegura. Recomendamos que você use essa funcionalidade com cuidado.
O código a seguir fornece um exemplo.
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
Retorna uma subseção do objeto array
que está na origem especificada e, opcionalmente, que tem a extensão 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
O componente mais significativo da extensão desta seção.
_E1
O componente próximo ao mais significativo da extensão desta seção.
_E2
O componente menos significativo da extensão desta seção.
_Ext
O objeto extent que especifica a extensão da seção. A origem é 0.
_Idx
O objeto de index que especifica o local da origem. A subseção é o restante da extensão.
_I0
O componente mais significativo da origem desta seção.
_I1
O componente próximo ao mais significativo da origem desta seção.
_I2
O componente menos significativo da origem desta seção.
_Rank
A classificação da seção.
_Section_extent
O objeto extent que especifica a extensão da seção.
_Section_origin
O objeto de index que especifica o local da origem.
value_type
O tipo de dados dos elementos que são copiados.
Valor de retorno
Retorna uma subseção do objeto array
que está na origem especificada e, opcionalmente, que tem a extensão especificada. Quando apenas o objeto index
é especificado, a subseção contém todos os elementos na grade associada que têm índices maiores que os índices dos elementos no objeto index
.
view_as
Reinterpreta essa matriz como um array_view de uma classificação 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
A classificação do objeto extent
passado como um parâmetro.
_View_extent
A extensão usada para construir o novo objeto array_view.
value_type
O tipo de dados dos elementos no objeto original array
e no objeto retornado array_view
.
Valor de retorno
O objeto array_view que é construído.