Partilhar via


Funções de espaço de nomes de concorrência (AMP)

As seguintes funções são definidas no Concurrency namespace (AMP):

all_memory_fence

Bloqueia a execução de todas as threads num tile até que todos os acessos à memória sejam concluídos. Isto garante que todos os acessos à memória são visíveis para outros tópicos no tile de tópicos e são executados na ordem do programa.

inline void all_memory_fence(const tile_barrier& _Barrier) restrict(amp);

Parâmetros

_Barrier
Um objeto tile_barrier.

amp_uninitialize

Desinicializa o ambiente de execução do AMP em C++. É legal chamar esta função várias vezes ao longo da vida útil de uma aplicação. Chamar qualquer API AMP C++ após chamar esta função reinicializará o tempo de execução do AMP C++. Note-se que é ilegal usar objetos AMP C++ entre chamadas a esta função, o que resultará em comportamentos indefinidos. Além disso, chamar simultaneamente esta função e qualquer outra API AMP é ilegal e resultaria em comportamentos indefinidos.

void __cdecl amp_uninitialize();

comparação e troca atômica

Compara atómicamente o valor armazenado numa localização de memória especificada no primeiro argumento para igualdade com o valor do segundo argumento especificado, e se os valores forem iguais, o valor na localização de memória é alterado para o do terceiro argumento especificado.

inline bool atomic_compare_exchange(
    _Inout_ int* _Dest,
    _Inout_ int* _Expected_value,
    int value
    ) restrict(amp)

inline bool atomic_compare_exchange(
    _Inout_ unsigned int* _Dest,
    _Inout_ unsigned int* _Expected_value,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
O local a partir do qual um dos valores a comparar é lido, e onde o novo valor, se existir, deve ser armazenado.

_Valor_Esperado
A localização a partir da qual o segundo valor a comparar é lida.

value
O valor a armazenar na localização de memória especificada por _Dest se _Dest é igual a _Expected_value.

Valor de retorno

true se a operação for bem-sucedida; caso contrário, false.

Função atomic_exchange (C++ AMP)

Define o valor da localização de destino como uma operação atómica.

inline int atomic_exchange(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_exchange(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

inline float atomic_exchange(
    _Inout_ float* _Dest,
    float value
    ) restrict(amp)

Parâmetros

_Dest
Ponteiro para a localização de destino.

value
O novo valor.

Valor de retorno

O valor original do local de destino.

Função atomic_fetch_add (C++ AMP)

Adiciona de forma atómica um valor ao valor de uma localização de memória.

inline int atomic_fetch_add(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_fetch_add(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
Apontador para a localização da memória.

value
O valor a acrescentar.

Valor de retorno

O valor original do endereço de memória.

Função atomic_fetch_and (C++ AMP)

Atomicamente realiza uma operação bit a bit AND de um valor e do valor de uma localização de memória.

inline int atomic_fetch_and(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_fetch_and(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
Apontador para a localização da memória.

value
O valor a usar no cálculo bit a bit AND.

Valor de retorno

O valor original do endereço de memória.

atomic_fetch_dec

Decrementa atomicamente o valor armazenado na localização de memória especificada.

inline int atomic_fetch_dec(_Inout_ int* _Dest
    ) restrict(amp)

inline unsigned int atomic_fetch_dec(_Inout_ unsigned int* _Dest) restrict(amp);

Parâmetros

_Dest
A posição na memória do valor a ser decrementado.

Valor de retorno

O valor original armazenado no endereço de memória.

atomic_fetch_inc

Incrementa atomicamente o valor armazenado na localização de memória especificada.

inline int atomic_fetch_inc(_Inout_ int* _Dest) restrict(amp);

inline unsigned int atomic_fetch_inc(_Inout_ unsigned int* _Dest) restrict(amp);

Parâmetros

_Dest
A localização na memória do valor a ser incrementado.

Valor de retorno

O valor original armazenado no endereço de memória.

atomic_fetch_max

Calcula atomicamente o valor máximo entre o valor armazenado na localização de memória especificada no primeiro argumento e o valor especificado no segundo argumento, e armazena-o na mesma localização de memória.

inline int atomic_fetch_max(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_fetch_max(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
O local a partir do qual um dos valores a comparar é lido, e onde o máximo dos dois valores deve ser armazenado.

value
O valor a ser comparado com o valor no local especificado.

Valor de retorno

O valor original armazenado na localização especificada.

atomic_fetch_min

Calcula atomicamente o valor mínimo entre o valor armazenado na localização de memória especificada no primeiro argumento e o valor especificado no segundo argumento, e armazena-o na mesma localização de memória.

inline int atomic_fetch_min(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_fetch_min(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
O local a partir do qual um dos valores a comparar é lido, e onde o mínimo dos dois valores deve ser armazenado.

value
O valor a ser comparado com o valor no local especificado.

Valor de retorno

O valor original armazenado na localização especificada.

atomic_fetch_or Função (C++ AMP)

Atomicamente executa uma operação OR bit a bit com um valor e o valor de uma localização de memória.

inline int atomic_fetch_or(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_fetch_or(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
Apontador para a localização da memória.

value
O valor a usar no cálculo de OR bit a bit.

Valor de retorno

O valor original do endereço de memória.

Função atomic_fetch_sub (C++ AMP)

Subtrai de forma atómica um valor de um endereço de memória.

inline int atomic_fetch_sub(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_fetch_sub(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
Ponteiro para a localização de destino.

value
O valor a subtrair.

Valor de retorno

O valor original do endereço de memória.

Função atomic_fetch_xor (AMP C++)

Executa atomicamente uma operação XOR bit a bit entre um valor e uma localização de memória.

inline int atomic_fetch_xor(
    _Inout_ int* _Dest,
    int value
    ) restrict(amp)

inline unsigned int atomic_fetch_xor(
    _Inout_ unsigned int* _Dest,
    unsigned int value
    ) restrict(amp)

Parâmetros

_Dest
Apontador para a localização da memória.

value
O valor a usar no cálculo do XOR.

Valor de retorno

O valor original do endereço de memória.

copy

Copia um objeto AMP em C++. Todos os requisitos de transferência de dados síncronos são cumpridos. Não podes copiar dados ao correr código num acelerador. A forma geral desta função é copy(src, dest).

template <typename value_type, int _Rank>
void copy(
    const array<value_type, _Rank>& _Src,
    array<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
void copy(
    InputIterator _SrcFirst,
    InputIterator _SrcLast,
    array<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
void copy(
    InputIterator _SrcFirst,
    array<value_type, _Rank>& _Dest);

template <typename OutputIterator, typename value_type, int _Rank>
void copy(
    const array<value_type, _Rank>& _Src,
   OutputIterator _DestIter);

template <typename value_type, int _Rank>
void copy(
    const array<value_type, _Rank>& _Src,
    array_view<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
void copy(
    const array_view<const value_type, _Rank>& _Src,
    array<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
void copy(
    const array_view<value_type, _Rank>& _Src,
    array<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
void copy(
    const array_view<const value_type, _Rank>& _Src,
    array_view<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
void copy(
    const array_view<value_type, _Rank>& _Src,
    array_view<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
void copy(
    InputIterator _SrcFirst,
    InputIterator _SrcLast,
    array_view<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
void copy(
    InputIterator _SrcFirst,
    array_view<value_type, _Rank>& _Dest);

template <typename OutputIterator, typename value_type, int _Rank>
void copy(
    const array_view<value_type, _Rank>& _Src,
    OutputIterator _DestIter);

Parâmetros

_Dest
O objeto para o qual copiar.

_DestIter
Um iterador de saída para a posição inicial no destino.

InputIterator
O tipo do iterador de entrada.

OutputIterator
O tipo do iterador de saída.

_Rank
A classificação do objeto de onde copiar ou do objeto para o qual copiar.

_Src
Para se opor à cópia.

_SrcFirst
Um iterador inicial no contêiner de origem.

_SrcLast
Um iterador final no contentor de origem.

value_type
O tipo de dados dos elementos que são copiados.

copy_async

Copia um objeto AMP em C++ e devolve um objeto completion_future que pode ser esperado. Não podes copiar dados ao correr código num acelerador. A forma geral desta função é copy(src, dest).

template <typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array<value_type, _Rank>& _Src,
    array<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
concurrency::completion_future copy_async(InputIterator _SrcFirst, InputIterator _SrcLast,
    array<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
concurrency::completion_future copy_async(InputIterator _SrcFirst,
    array<value_type, _Rank>& _Dest);

template <typename OutputIterator, typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array<value_type, _Rank>& _Src, OutputIterator _DestIter);

template <typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array<value_type, _Rank>& _Src,
    array_view<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array_view<const value_type, _Rank>& _Src,
    array<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array_view<value_type, _Rank>& _Src,
    array<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array_view<const value_type, _Rank>& _Src,
    array_view<value_type, _Rank>& _Dest);

template <typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array_view<value_type, _Rank>& _Src,
    array_view<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
concurrency::completion_future copy_async(InputIterator _SrcFirst, InputIterator _SrcLast,
    array_view<value_type, _Rank>& _Dest);

template <typename InputIterator, typename value_type, int _Rank>
concurrency::completion_future copy_async(InputIterator _SrcFirst,
    array_view<value_type, _Rank>& _Dest);

template <typename OutputIterator, typename value_type, int _Rank>
concurrency::completion_future copy_async(
    const array_view<value_type, _Rank>& _Src, OutputIterator _DestIter);

Parâmetros

_Dest
O objeto para o qual copiar.

_DestIter
Um iterador de saída para a posição inicial no destino.

InputIterator
O tipo do iterador de entrada.

OutputIterator
O tipo do iterador de saída.

_Rank
A classificação do objeto de onde copiar ou do objeto para o qual copiar.

_Src
Para se opor à cópia.

_SrcFirst
Um iterador inicial no contêiner de origem.

_SrcLast
Um iterador final no contentor de origem.

value_type
O tipo de dados dos elementos que são copiados.

Valor de retorno

Um future<void> que pode ser aguardado.

direct3d_abort

Aborta a execução de uma função com a restrict(amp) cláusula de restrição. Quando o runtime do AMP deteta a chamada, levanta uma exceção runtime_exception com a mensagem de erro "Reference Rasterizer: Shader abort instruction hit".

void direct3d_abort() restrict(amp);

direct3d_errorf

Imprime uma cadeia formatada na janela de saída do Visual Studio. É chamada a partir de uma função com a restrict(amp) cláusula de restrição. Quando o runtime do AMP deteta a chamada, gera uma exceção runtime_exception com a mesma cadeia de formatação.

void direct3d_errorf(
    const char *,
...) restrict(amp);

direct3d_printf

Imprime uma cadeia formatada na janela de saída do Visual Studio. É chamada a partir de uma função com a restrict(amp) cláusula de restrição.

void direct3d_printf(
    const char *,
...) restrict(amp);

barreira_global_de_memória

Bloqueia a execução de todas as threads num tile até que todos os acessos globais à memória estejam concluídos. Isto garante que os acessos à memória global são visíveis para outras threads no bloco de threads e são executados pela ordem do programa.

inline void global_memory_fence(const tile_barrier& _Barrier) restrict(amp);

Parâmetros

_Barrier
Um objeto tile_barrier

Função parallel_for_each (C++ AMP)

Executa uma função através do domínio de computação. Para mais informações, consulte Visão Geral do AMP em C++.

template <int _Rank, typename _Kernel_type>
void parallel_for_each(
    const extent<_Rank>& _Compute_domain,
    const _Kernel_type& _Kernel);

template <int _Dim0, int _Dim1, int _Dim2, typename _Kernel_type>
void parallel_for_each(
    const tiled_extent<_Dim0, _Dim1, _Dim2>& _Compute_domain,
   const _Kernel_type& _Kernel);

template <int _Dim0, int _Dim1, typename _Kernel_type>
void parallel_for_each(
    const tiled_extent<_Dim0, _Dim1>& _Compute_domain,
    const _Kernel_type& _Kernel);

template <int _Dim0, typename _Kernel_type>
void parallel_for_each(
    const tiled_extent<_Dim0>& _Compute_domain,
    const _Kernel_type& _Kernel);

template <int _Rank, typename _Kernel_type>
void parallel_for_each(
    const accelerator_view& _Accl_view,
    const extent<_Rank>& _Compute_domain,
    const _Kernel_type& _Kernel);

template <int _Dim0, int _Dim1, int _Dim2, typename _Kernel_type>
void parallel_for_each(
    const accelerator_view& _Accl_view,
    const tiled_extent<_Dim0, _Dim1, _Dim2>& _Compute_domain,
    const _Kernel_type& _Kernel);

template <int _Dim0, int _Dim1, typename _Kernel_type>
void parallel_for_each(
    const accelerator_view& _Accl_view,
    const tiled_extent<_Dim0, _Dim1>& _Compute_domain,
    const _Kernel_type& _Kernel);

template <int _Dim0, typename _Kernel_type>
void parallel_for_each(
    const accelerator_view& _Accl_view,
    const tiled_extent<_Dim0>& _Compute_domain,
    const _Kernel_type& _Kernel);

Parâmetros

_Accl_view
O accelerator_view objeto para executar o cálculo paralelo.

_Compute_domain
Um extent objeto que contém os dados para o cálculo.

_Dim0
A dimensão do tiled_extent objeto.

_Dim1
A dimensão do tiled_extent objeto.

_Dim2
A dimensão do tiled_extent objeto.

_Kernel
Um lambda ou objeto de função que toma um argumento do tipo "index<_Rank>" e realiza o cálculo paralelo.

_Kernel_type
Um lambda ou funtor.

_Rank
O nível do alcance

tile_static_memory_fence

Bloqueia a execução de todas as threads num tile até que todos os acessos de memória pendentes tile_static estejam concluídos. Isto garante que os acessos à memória sejam visíveis para outros threads no tile de threads, e que os acessos sejam executados na ordem do programa.

inline void tile_static_memory_fence(const tile_barrier& _Barrier) restrict(amp);

Parâmetros

_Barrier
Um objeto chamado tile_barrier.

Consulte também

Namespace de Concorrência (C++ AMP)