Partilhar via


Funções do namespace de simultaneidade (AMP)

all_memory_fence

Bloqueia a execução de todos os threads em um bloco até que todos os acessos à memória tenham sido concluídos. Isso garante que todos os acessos à memória estejam visíveis para outros threads no bloco de thread e sejam 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

Cancela a inicialização do runtime C++ AMP. É legal chamar essa função várias vezes durante o tempo de vida de um aplicativo. Chamar qualquer API C++ AMP depois de chamar essa função reinicializará o runtime C++ AMP. Observe que é ilícito usar objetos C++ AMP entre chamadas para essa função e isso resultará em um comportamento indefinido. Além disso, chamar simultaneamente essa função e qualquer outra API AMP é ilícita e resultaria em um comportamento indefinido.

void __cdecl amp_uninitialize();

atomic_compare_exchange

Compara atomicamente o valor armazenado em um local de memória especificado no primeiro argumento para igualdade com o valor do segundo argumento especificado e, se os valores forem iguais, o valor no local da memória será 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 do qual um dos valores a serem comparados é lido e no qual o novo valor, se houver, deve ser armazenado.

_Expected_value
O local do qual o segundo valor a ser comparado é lido.

value
O valor a ser armazenado no local de memória especificado por _Dest se _Dest for 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 do local 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
Um ponteiro para o local de destino.

value
O novo valor.

Valor de retorno

O valor original do local de destino.

Função atomic_fetch_add (C++ AMP)

Adicione atomicamente um valor ao valor de um local 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
Ponteiro para o local da memória.

value
O valor a ser adicionado.

Valor de retorno

O valor original do local da memória.

Função atomic_fetch_and (C++ AMP)

Executa atomicamente uma operação AND bit a bit de um valor e o valor de um local 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
Ponteiro para o local da memória.

value
O valor a ser usado no cálculo AND bit a bit.

Valor de retorno

O valor original do local da memória.

atomic_fetch_dec

Diminui atomicamente o valor armazenado no local de memória especificado.

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
O local na memória do valor a ser reduzido.

Valor de retorno

O valor original armazenado no local da memória.

atomic_fetch_inc

Incrementa atomicamente o valor armazenado no local de memória especificado.

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
O local na memória do valor a ser incrementado.

Valor de retorno

O valor original armazenado no local da memória.

atomic_fetch_max

Computa atomicamente o valor máximo entre o valor armazenado no local de memória especificado no primeiro argumento e o valor especificado no segundo argumento e o armazena no mesmo local 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 do qual um dos valores a serem comparados é lido e para o qual o máximo dos dois valores deve ser armazenado.

value
O valor a ser comparado ao valor no local especificado.

Valor de retorno

O valor original armazenado no local especificado.

atomic_fetch_min

Computa atomicamente o valor mínimo entre o valor armazenado no local de memória especificado no primeiro argumento e o valor especificado no segundo argumento e o armazena no mesmo local 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 do qual um dos valores a serem comparados é lido e para o qual o mínimo dos dois valores deve ser armazenado.

value
O valor a ser comparado ao valor no local especificado.

Valor de retorno

O valor original armazenado no local especificado.

Função atomic_fetch_or (C++ AMP)

Executa atomicamente uma operação OR bit a bit com um valor e o valor de um local 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
Ponteiro para o local da memória.

value
O valor a ser usado no cálculo OR bit a bit.

Valor de retorno

O valor original do local da memória.

Função atomic_fetch_sub (C++ AMP)

Subtrai atomicamente um valor de um local 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
Um ponteiro para o local de destino.

value
O valor a ser subtraído.

Valor de retorno

O valor original do local da memória.

Função atomic_fetch_xor (C++ AMP)

Executa atomicamente uma operação XOR bit a bit de um valor e um local 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
Ponteiro para o local da memória.

value
O valor a ser usado no cálculo XOR.

Valor de retorno

O valor original do local da memória.

copy

Copia um objeto C++ AMP. Todos os requisitos de transferência de dados síncronos são atendidos. Você não pode copiar dados ao executar o código em um acelerador. A forma geral dessa 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 para o qual copiar ou o objeto para o qual copiar.

_Src
Para o objeto a ser copiado.

_SrcFirst
Um iterador inicial no contêiner de origem.

_SrcLast
Um iterador final no contêiner de origem.

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

copy_async

Copia um objeto C++ AMP e retorna um objeto completion_future que pode ser aguardado. Você não pode copiar dados ao executar o código em um acelerador. A forma geral dessa 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 para o qual copiar ou o objeto para o qual copiar.

_Src
Para o objeto a ser copiado.

_SrcFirst
Um iterador inicial no contêiner de origem.

_SrcLast
Um iterador final no contêiner de origem.

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

Valor de retorno

Um future<void> que pode ser esperado.

direct3d_abort

Anula a execução de uma função com a cláusula de restrição restrict(amp). Quando o runtime do AMP detecta a chamada, ele gera uma exceção runtime_exception com a mensagem de erro "Rasterizador de referência: clique na instrução de anulação do sombreador".

void direct3d_abort() restrict(amp);

direct3d_errorf

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

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

direct3d_printf

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

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

global_memory_fence

Bloqueia a execução de todos os threads em um bloco até que todos os acessos de memória globais tenham sido concluídos. Isso garante que os acessos de memória globais sejam visíveis para outros threads no bloco de thread e sejam executados na 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 no domínio de computação. Para mais informações, confira Visão geral de C++ AMP.

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 objeto accelerator_view no qual executar a computação paralela.

_Compute_domain
Um objeto extent que contém os dados para a computação.

_Dim0
A dimensão do objeto tiled_extent.

_Dim1
A dimensão do objeto tiled_extent.

_Dim2
A dimensão do objeto tiled_extent.

_Kernel
Um objeto lambda ou de função que usa um argumento do tipo "index<_Rank>" e executa a computação paralela.

_Kernel_type
Um lambda ou functor.

_Rank
A classificação da extensão.

tile_static_memory_fence

Bloqueia a execução de todos os threads em um bloco até que todos os acessos de memória tile_static pendentes tenham sido concluídos. Isso garante que os acessos à memória tile_static fiquem visíveis para outros threads no bloco de thread 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 tile_barrier.

Confira também

Namespace de simultaneidade (C++ AMP)