Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.