Compartilhar via


Classe array_view

Representa uma visualização de N dimensões sobre os dados mantidos em outro contêiner.

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 no objeto array_view.

  • _Rank
    A classificação do objeto array_view.

Membros

Construtores Públicos

Nome

Descrição

Construtor array_view::array_view

Inicializa uma nova instância da classe array_view. Não há construtor padrão para array<T,N>. Todos os construtores são restritos a serem executados somente na CPU e não podem ser executados em um destino Direct3D.

Destruidor array_view::~array_view

Destrói o objeto array_view.

Métodos Públicos

Nome

Descrição

Método array_view::copy_to

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

Método array_view::data

Retorna um ponteiro para os dados brutos do array_view.

Método array_view::discard_data

Descarta os dados atuais subjacentes a esta exibição.

Método array_view::get_extent

Retorna o objeto extent do objeto array_view.

Método array_view::get_ref

Retorna uma referência ao elemento indexado.

Método array_view::get_source_accelerator_view

Retorna accelerator_view onde a fonte de dados de array_view está localizada.

Método array_view::refresh

Notifica o objeto array_view que sua memória associada foi alterada fora da interface array_view. Uma chamada para este método processa toda informação obsoleta em cache.

Método array_view::reinterpret_as

Retorna uma matriz de uma dimensão que contém todos os elementos no objeto array_view.

Método array_view::section

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

Método array_view::synchronize

Sincroniza qualquer modificação feita ao objeto array_view de volta ao seu dado da fonte.

Método array_view::synchronize_async

Sincroniza de forma assíncrona qualquer modificação feita ao objeto array_view de volta para os dados da fonte.

Método array_view::synchronize_to

Sincroniza qualquer modificação feita no objeto array_view para a accelerator_view especificada.

Método array_view::synchronize_to_async

Sincroniza de forma assíncrona qualquer modificação feita no objeto array_view para a accelerator_view especificada.

Método array_view::view_as

Gera um objeto array_view de uma classificação diferente usando os dados desse objeto array_view.

Operadores Públicos

Nome

Descrição

Operador array_view::operator()

Retorna o valor do elemento que é especificado pelos parâmetros.

Operador array_view::operator[]

Retorna o elemento que está especificado pelos parâmetros.

Operador array_view::operator=

Copia o conteúdo do objeto array_view especificado para esse outro.

Constantes públicas

Nome

Descrição

Constante array_view::rank

Armazena a classificação do objeto array_view.

Membros de dados

Nome

Descrição

Membro de dados array_view::extent

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

Membro de Dados array_view::source_accelerator_view

Obtém accelerator_view onde a fonte de dados de array_view está localizada

Membro de Dados array_view::value_type

O tipo de valor do array_view e a matriz associada.

Comentários

A classe array_view representa uma exibição dos dados que estão contidos em um objeto array ou em uma subseção de um objeto array.

Você pode acessar o objeto array_view onde os dados de origem estão localizados (localmente) ou em um acelerador diferente ou em um domínio de coerência (remotamente). Quando você acessa o objeto remotamente, as exibições são copiadas e armazenadas em cache, conforme necessário. Exceto pelos efeitos de cache automático, os objetos array_view têm um perfil de desempenho semelhante ao dos objetos array. Há uma pequena penalidade de desempenho quando você acessa os dados através de visualizações.

Há três cenários de uso remoto:

  • Uma exibição de um ponteiro de memória do sistema é passada por meio de uma chamada parallel_for_each a um acelerador e acessada no acelerador.

  • Uma exibição de uma matriz localizada em um acelerador é passada por meio de uma chamada parallel_for_each para outro acelerador e acessada lá.

  • Uma exibição de uma matriz localizada em um acelerador é acessada na CPU.

Em qualquer um desses cenários, as visualizações de referência são copiadas pelo tempo de execução para o local remoto e, se modificadas por chamadas para o objeto array_view, são copiadas de volta para a localização local. O tempo de execução pode otimizar o processo de copiar as alterações de volta, pode copiar apenas os elementos alterados, ou também pode copiar partes inalteradas. Objetos array_view sobrepostos em uma fonte de dados não são garantidos para manter a integridade referencial em um local remoto.

Você deve sincronizar qualquer acesso multissegmentado à mesma fonte de dados.

O tempo de execução faz as seguintes garantias sobre o armazenamento em cache de dados de objetos array_view:

  • Todos os acessos bem sincronizados a um objeto array e a um objeto array_view nele na ordem do programa obedecem a uma série acontece-antes-da-relação.

  • Alias de todos os acessos bem sincronizados a objetos array_view sobrepostos no mesmo acelerador em um único objeto array são feitos pelo objeto array. Eles induzem um relacionamento ocorre-antes total que obedece a ordem do programa. Não há armazenamento em cache. Se os objetos array_view estiverem sendo executados em aceleradores diferentes, a ordem de acesso é indefinida, criando uma condição de corrida.

Quando você cria um objeto array_view usando um ponteiro na memória do sistema, você deve alterar a exibição do objeto array_view somente através do ponteiro array_view. Alternativamente, você deve chamar refresh() em um dos objetos array_view que estão anexados ao ponteiro do sistema, se a memória nativa subjacente é modificada diretamente, em vez de através do objeto array_view.

Qualquer ação notifica ao objeto array_view que a memória nativa subjacente está modificada e que qualquer cópia localizada em um acelerador está desatualizada. Se você seguir estas diretrizes, as visualizações baseadas em ponteiro serão idênticas àquelas fornecidas para as exibições de matrizes de dados paralelos.

Hierarquia de Herança

_Array_view_shape

_Array_view_base

array_view

Requisitos

Cabeçalho: amp.h

Namespace: Simultaneidade

Consulte também

Referência

Namespace Concurrency (C++ AMP)