Partilhar via


array_view Classe

Representa uma vista N-dimensional sobre os dados armazenados noutro contentor.

Sintaxe

template <
    typename value_type,
    int _Rank = 1
>
class array_view : public _Array_view_base<_Rank, sizeof(value_type)/sizeof(int)>;

template <
    typename value_type,
    int _Rank
>
class array_view<const value_type, _Rank> : public _Array_view_base<_Rank, sizeof(value_type)/sizeof(int)>;

Parâmetros

value_type
O tipo de dados dos elementos do objeto array_view.

_Rank
A classificação do objeto array_view.

Membros

Construtores Públicos

Nome Description
array_view Constructor Inicializa uma nova instância da array_view classe. Não existe um construtor padrão para array<T,N>. Todos os construtores estão restritos a correr apenas no CPU e não podem ser executados num alvo Direct3D.
~array_view Destrutor Destrói o array_view objeto.

Métodos Públicos

Nome Description
copy_to Copia o conteúdo do array_view objeto para o destino especificado chamando copy(*this, dest).
Dados Devolve um ponteiro para os dados brutos do array_view.
descartar_dados Descarta os dados atuais subjacentes a esta visão.
get_extent Devolve o objeto de extensão do objeto array_view.
get_ref Devolve uma referência ao elemento indexado.
get_source_accelerator_view Devolve a accelerator_view onde a fonte de dados do array_view está localizada.
atualizar Notifica o array_view objeto que a sua memória limitada foi modificada fora da array_view interface. Uma chamada a este método torna toda a informação em cache obsoleta.
reinterpret_as Devolve um array unidimensional que contém todos os elementos do array_view objeto.
secção Devolve uma subsecção do array_view objeto que está na origem especificada e, opcionalmente, que tem a extensão especificada.
sincronizar Sincroniza quaisquer modificações feitas ao array_view objeto com os seus dados de origem.
synchronize_async Sincroniza assíncronamente quaisquer modificações feitas ao array_view objeto com os seus dados de origem.
synchronize_to Sincroniza quaisquer modificações feitas ao array_view objeto com a accelerator_view especificada.
synchronize_to_async Sincroniza assíncronamente quaisquer modificações feitas ao array_view objeto com a accelerator_view especificada.
visualizar_como Produz um array_view objeto de ordem diferente usando os dados desse array_view objeto.

Operadores Públicos

Nome Description
operador() Devolve o valor do elemento especificado pelo parâmetro ou parâmetros.
operator[] Devolve o elemento especificado pelos parâmetros.
operador= Copia o conteúdo do objeto especificado array_view para este.

Constantes Públicas

Nome Description
Constante de Rank Armazena a classificação do array_view objeto.

Membros de Dados

Nome Description
Extensão Obtém o extent objeto que define a forma do array_view objeto.
source_accelerator_view Obtém a accelerator_view onde a fonte de dados do array_view está localizada
value_type O tipo de valor do array_view e do array limitado.

Observações

A array_view classe representa uma visão dos dados contidos num objeto array ou numa subseção de um array objeto.

Pode aceder ao array_view objeto onde os dados de origem estão localizados (localmente) ou num acelerador diferente ou num domínio de coerência (remotamente). Quando acedes ao objeto remotamente, as vistas são copiadas e armazenadas em cache conforme necessário. Exceto pelos efeitos do cache automático, array_view os objetos têm um perfil de desempenho semelhante ao dos array objetos. Existe uma pequena penalização de desempenho quando acedes aos dados através das vistas.

Existem três cenários de utilização remota:

  • Uma vista para um ponteiro de memória do sistema é transmitida através de uma chamada parallel_for_each a um acelerador e acedida através do acelerador.

  • Uma vista para um array localizado num acelerador é transmitida através de uma parallel_for_each chamada para outro acelerador e é acedida aí.

  • A visualização de um array localizado num acelerador é acedida na CPU.

Em qualquer um destes cenários, as vistas referenciadas são copiadas pelo runtime para a localização remota e, se modificadas pelas chamadas ao array_view objeto, são copiadas de volta para a localização local. O tempo de execução pode otimizar o processo de cópia das alterações, pode copiar apenas elementos alterados, ou pode copiar também partes inalteradas. Objetos sobrepostos array_view numa única fonte de dados não garantem manter a integridade referencial numa localização remota.

Deve sincronizar qualquer acesso multithreaded à fonte de dados igual.

O tempo de execução garante as seguintes garantias relativamente à cache de dados nos array_view objetos:

  • Todos os acessos devidamente sincronizados a um objeto array e a um objeto array_view relacionado em ordem de programa obedecem a uma relação de precedência serial.

  • Todos os acessos bem sincronizados a objetos sobrepostos array_view no mesmo acelerador num único array objeto são aliasados através do array objeto. Induzem uma relação de precedência total que obedece à ordem do programa. Não existe cache. Se os objetos array_view estiverem a ser executados em aceleradores diferentes, a ordem de acesso é indefinida, criando uma condição de disputa.

Quando você cria um array_view objeto usando um ponteiro na memória do sistema, deve alterar o objeto de visualização array_view apenas através do ponteiro array_view. Em alternativa, deve chamar refresh() num dos objetos array_view que estão ligados ao ponteiro de sistema, caso a memória nativa subjacente seja alterada diretamente, em vez de através do objeto array_view.

Qualquer uma das ações notifica o array_view objeto de que a memória nativa subjacente foi alterada e que quaisquer cópias localizadas num acelerador estão desatualizadas. Se seguir estas diretrizes, as vistas baseadas em ponteiros são idênticas às fornecidas para as visualizações de arrays paralelos a dados.

Hierarquia de herança

_Array_view_shape

_Array_view_base

array_view

Requerimentos

Cabeçalho: amp.h

Espaço de Nomes: Concorrência

~array_view

Destrói o array_view objeto.

~array_view()restrict(amp,cpu);

array_view

Inicializa uma nova instância da array_view classe.

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

array_view(
    const array_view& _Other)restrict(amp,cpu);

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

template <
    typename _Container
>
array_view(
    const Concurrency::extent<_Rank>& _Extent,
    _Container& _Src) restrict(cpu);

array_view(
    const Concurrency::extent<_Rank>& _Extent,
    value_type* _Src)restrict(amp,cpu);

explicit array_view(
    int _E0) restrict(cpu);

template <
    typename _Container
>
explicit array_view(
    _Container& _Src,
    typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);

template <
    typename _Container
>
explicit array_view(
    int _E0,
    _Container& _Src) restrict(cpu);

explicit array_view(
    int _E0,
    int _E1) __CPU_ONLY;

template <
    typename _Container
>
explicit array_view(
    int _E0,
    int _E1,
    _Container& _Src) restrict(cpu);

explicit array_view(
    int _E0,
    int _E1,
    int _E2) __CPU_ONLY;

template <
    typename _Container
>
explicit array_view(
    int _E0,
    int _E1,
    int _E2,
    _Container& _Src);

explicit array_view(
    int _E0,
    _In_ value_type* _Src)restrict(amp,cpu);

template <
    typename _Arr_type,
    int _Size
>
explicit array_view(
    _In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);

explicit array_view(
    int _E0,
    int _E1,
    _In_ value_type* _Src)restrict(amp,cpu);

explicit array_view(
    int _E0,
    int _E1,
    int _E2,
    _In_ value_type* _Src)restrict(amp,cpu);

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

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

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

template <
    typename _Container
>
array_view(
    const Concurrency::extent<_Rank>& _Extent,
    const _Container& _Src) restrict(cpu);

template <
    typename _Container
>
explicit array_view(
    const _Container& _Src,
    typename std::enable_if<details::_Is_container<_Container>::type::value, void **>::type = 0) restrict(cpu);

array_view(
    const Concurrency::extent<_Rank>& _Extent,
    const value_type* _Src)restrict(amp,cpu);

template <
    typename _Arr_type,
    int _Size
>
explicit array_view(
    const _In_ _Arr_type (& _Src) [_Size]) restrict(amp,cpu);

template <
    typename _Container
>
array_view(
    int _E0,
    const _Container& _Src);

template <
    typename _Container
>
array_view(
    int _E0,
    int _E1,
    const _Container& _Src);

template <
    typename _Container
>
array_view(
    int _E0,
    int _E1,
    int _E2,
    const _Container& _Src);

array_view(
    int _E0,
    const value_type* _Src)restrict(amp,cpu);

array_view(
    int _E0,
    int _E1,
    const value_type* _Src) restrict(amp,cpu);

array_view(
    int _E0,
    int _E1,
    int _E2,
    const value_type* _Src) restrict(amp,cpu);

Parâmetros

_Arr_type
O tipo de elemento de um array do estilo C a partir do qual os dados são fornecidos.

_Container
Um argumento de modelo que deve especificar um container linear capaz de suportar data() e size() como membros.

_E0
O componente mais significativo da extensão desta secção.

_E1
O penúltimo componente mais significativo da extensão desta secção.

_E2
O componente menos significativo da extensão desta secção.

_Extent
A extensão em cada dimensão deste array_view.

_Other
Um objeto do tipo array_view<T,N> a partir do qual inicializar o novo array_view.

_Tamanho
O tamanho de um array de estilo C do qual os dados são fornecidos.

_Src
Um apontador para os dados de origem que serão copiados para o novo array.

copiar_para

Copia o conteúdo do array_view objeto para o objeto de destino especificado chamando copy(*this, dest).

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

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

Parâmetros

_Dest
O objeto para copiar.

dados

Devolve um ponteiro para os dados brutos do array_view.

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

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

Valor de retorno

Um apontador para os dados brutos do array_view.

descartar_dados

Descarta os dados atuais subjacentes a esta visão. Esta é uma dica de otimização para o tempo de execução usada para evitar copiar o conteúdo atual da vista para um destino accelerator_view onde é acedida, e a sua utilização é recomendada caso o conteúdo existente não seja necessário. Este método é um no-op quando usado num contexto restrict(amp)

void discard_data() const restrict(cpu);

extensão

Obtém o extent objeto que define a forma do array_view objeto.

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

get_extent

Devolve o objeto de extensão do array_view objeto.

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

Valor de retorno

O extent objeto do array_view objeto

get_ref

Obtenha uma referência ao elemento indexado por _Index. Ao contrário dos outros operadores de indexação para aceder à array_view da CPU, este método não sincroniza implicitamente o conteúdo desta array_view com a CPU. Após aceder ao array_view numa localização remota ou realizar uma operação de cópia envolvendo este array_view os utilizadores são responsáveis por sincronizar explicitamente o array_view com a CPU antes de chamar este método. Não o fazer resulta em comportamentos indefinidos.

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

Parâmetros

_Index
O índice.

Valor de retorno

Referência ao elemento indexado por _Index

obter_visualização_do_acelerador_de_fonte

Devolve o accelerator_view em que está localizada a fonte de dados do array_view. Se o array_view não tiver uma fonte de dados, esta API lança uma runtime_exception

accelerator_view get_source_accelerator_view() const;

Valor de retorno

operador()

Devolve o valor do elemento especificado pelo parâmetro ou parâmetros.

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

typename details::_Projection_result_type<value_type,_Rank>::_Result_type operator() (
    int _I) const restrict(amp,cpu);

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

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

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

Parâmetros

_Index
A localização do elemento.

_I0
O índice na primeira dimensão.

_I1
O índice na segunda dimensão.

_I2
O índice na terceira dimensão.

_Eu
A localização do elemento.

Valor de retorno

O valor do elemento especificado pelo parâmetro ou parâmetros.

operador[]

Devolve o elemento especificado pelos parâmetros.

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

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

Parâmetros

_Index
O índice.

_Eu
O índice.

Valor de retorno

O valor do elemento no índice, ou uma projeção de array_view na dimensão mais significativa.

operador=

Copia o conteúdo do objeto especificado array_view para este.

array_view& operator= (
    const array_view& _Other) restrict(amp,cpu);

array_view& operator= (
    const array_view<value_type, _Rank>& _Other) restrict(amp,cpu);

Parâmetros

_Other
O array_view objeto a partir do qual copiar.

Valor de retorno

Uma referência a este array_view objeto.

classificar

Armazena a classificação do array_view objeto.

static const int rank = _Rank;

actualizar

Notifica o array_view objeto que a sua memória limitada foi modificada fora da array_view interface. Uma chamada a este método torna toda a informação em cache obsoleta.

void refresh() const restrict(cpu);

reinterpretar_como

Reinterpreta o array_view através de um array_view unidimensional, que como opção pode ter um tipo de valor diferente do array_view fonte.

Sintaxe

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

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

Parâmetros

_Value_type2
O tipo de dados do novo objeto array_view.

Valor de retorno

Um array_view objeto ou um objeto const array_view que se baseia neste array_view, com o tipo de elemento convertido de T para _Value_type2, e o posto reduzido de N para 1.

Observações

Por vezes, é conveniente ver um array multidimensional como um array linear unidimensional, que pode ter um tipo de valor diferente do array de origem. Pode conseguir isto num array_view usando este método.

Aviso Reinterpretar um objeto array_view usando um tipo de valor diferente é uma operação potencialmente insegura. Esta funcionalidade deve ser usada com cuidado.

Eis 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

Devolve uma subsecção do array_view objeto que está na origem especificada e, opcionalmente, que tem a extensão especificada.

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

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

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

array_view section(
    int _I0,
    int _E0) const restrict(amp,cpu);

array_view section(
    int _I0,
    int _I1,
    int _E0,
    int _E1) const restrict(amp,cpu);

array_view 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 secção.

_E1
O penúltimo componente mais significativo da extensão desta secção.

_E2
O componente menos significativo da extensão desta secção.

_Ext
O objeto de extensão que especifica a extensão da secção. A origem é 0.

_Idx
O objeto índice que especifica a localização da origem. A subseção é a parte restante da extensão.

_I0
O componente mais significativo da origem desta secção.

_I1
O segundo componente mais significativo da origem desta secção.

_I2
O componente menos significativo da origem desta secção.

_Rank
A classificação da secção.

_Section_extent
O objeto de extensão que especifica a extensão da secção.

_Section_origin
O objeto índice que especifica a localização da origem.

Valor de retorno

Uma subsecção do array_view objeto que esteja na origem especificada e, opcionalmente, que tenha a extensão especificada. Quando apenas o index objeto é especificado, a subseção contém todos os elementos na extensão associada que têm índices maiores do que os índices dos elementos no index objeto.

source_accelerator_view

Obtém o accelerator_view de origem ao qual este array_view está associado.

__declspec(property(get= get_source_accelerator_view)) accelerator_view source_accelerator_view;

sincronizar

Sincroniza quaisquer modificações feitas ao array_view objeto com os seus dados de origem.

void synchronize(access_type _Access_type = access_type_read) const restrict(cpu);

void synchronize() const restrict(cpu);

Parâmetros

_Tipo_de_acesso
O access_type pretendido no accelerator_view de destino. Este parâmetro tem um valor padrão de access_type_read.

synchronize_async

Sincroniza assíncronamente quaisquer modificações feitas ao array_view objeto com os seus dados de origem.

concurrency::completion_future synchronize_async(access_type _Access_type = access_type_read) const restrict(cpu);

concurrency::completion_future synchronize_async() const restrict(cpu);

Parâmetros

_Tipo_de_acesso
O access_type pretendido no accelerator_view de destino. Este parâmetro tem um valor padrão de access_type_read.

Valor de retorno

Um futuro para esperar que a operação termine.

synchronize_to

Sincroniza quaisquer modificações feitas a este array_view com a accelerator_view especificada.

void synchronize_to(
    const accelerator_view& _Accl_view,
    access_type _Access_type = access_type_read) const restrict(cpu);

void synchronize_to(
    const accelerator_view& _Accl_view) const restrict(cpu);

Parâmetros

_Accl_view
O alvo accelerator_view para sincronizar.

_Tipo_de_acesso
O access_type desejado no alvo accelerator_view. Este parâmetro tem um valor padrão de access_type_read.

synchronize_to_async

Sincroniza assíncronamente quaisquer modificações feitas a este array_view com a accelerator_view especificada.

concurrency::completion_future synchronize_to_async(
    const accelerator_view& _Accl_view,
    access_type _Access_type = access_type_read) const restrict(cpu);

concurrency::completion_future synchronize_to_async(
    const accelerator_view& _Accl_view) const restrict(cpu);

Parâmetros

_Accl_view
O alvo accelerator_view para sincronizar.

_Tipo_de_acesso
O tipo de acesso desejado na vista de acelerador alvo. Este parâmetro tem um valor padrão de access_type_read.

Valor de retorno

Um futuro para esperar que a operação termine.

tipo_de_valor

O tipo de valor do array_view e do array vinculado.

typedef typenamevalue_type value_type;

visualizar como

Reinterpreta isto array_view como array_view de um escalão diferente.

template <
    int _New_rank
>
array_view<value_type,_New_rank> view_as(
    const Concurrency::extent<_New_rank>& _View_extent) const 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 novo array_view objeto.

_View_extent
A remodelação extent.

value_type
O tipo de dados dos elementos no objeto array original e no objeto devolvido array_view.

Valor de retorno

O array_view objeto que é construído.

Consulte também

Espaço de Nomes de Concorrência (C++ AMP)