Compartir a través de


Funciones del espacio de nombres de simultaneidad (AMP)

all_memory_fence

Bloquea la ejecución de todos los subprocesos de un mosaico hasta que se hayan completado todos los accesos a memoria. Esto garantiza que todos los accesos a la memoria sean visibles para otros subprocesos del mosaico del subproceso y que se ejecuten en el orden del programa.

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

Parámetros

_Barrier
Un objeto tile_barrier.

amp_uninitialize

Anula la inicialización del runtime de C++ AMP. Es válido llamar a esta función varias veces durante la vigencia de las aplicaciones. Al llamar a cualquier API de C++ AMP después de llamar a esta función, se volverá a inicializar el runtime de C++ AMP. Tenga en cuenta que no es válido usar objetos C++ AMP en las llamadas a esta función; al hacerlo, se producirá un comportamiento indefinido. Además, llamar simultáneamente a esta función y cualquier otra API de AMP no es válido y podría dar como resultado un comportamiento indefinido.

void __cdecl amp_uninitialize();

atomic_compare_exchange

Compara de forma atómica el valor almacenado en una ubicación de memoria especificada en el primer argumento para la igualdad con el valor del segundo argumento especificado y, si los valores son iguales, el valor en la ubicación de memoria cambia al del tercer 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
La ubicación desde la que se lee uno de los valores que se va a comparar y en la que se va a almacenar el nuevo valor, si existe.

_Expected_value
La ubicación desde la que se lee el segundo valor que se va a comparar.

value
Valor que se va a almacenar en la ubicación de memoria especificada en _Dest si _Dest es igual a _Expected_value.

Valor devuelto

true si la operación es correcta; de lo contrario, false.

función atomic_exchange (C++ AMP)

Establece el valor de la ubicación de destino como una operación 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
Puntero a la ubicación de destino.

value
Nuevo valor.

Valor devuelto

El valor original de la ubicación de destino.

función atomic_fetch_add (C++ AMP)

Agregue de manera atómica un valor al valor de una ubicación de memoria.

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
Puntero a la ubicación de la memoria.

value
Valor que se va a agregar.

Valor devuelto

El valor original de la ubicación de la memoria.

función atomic_fetch_and (C++ AMP)

Realiza de manera atómica una operación AND bit a bit en relación con un valor y el valor de una ubicación de memoria.

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
Puntero a la ubicación de la memoria.

value
El valor que se va a usar en el cálculo AND bit a bit.

Valor devuelto

El valor original de la ubicación de la memoria.

atomic_fetch_dec

Disminuye de manera atómica el valor almacenado en la ubicación de memoria 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
La ubicación en la memoria del valor que se disminuirá.

Valor devuelto

El valor original almacenado en la ubicación de la memoria.

atomic_fetch_inc

Aumenta de manera atómica el valor almacenado en la ubicación de memoria 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
La ubicación en la memoria del valor que se aumentará.

Valor devuelto

El valor original almacenado en la ubicación de la memoria.

atomic_fetch_max

Calcula de forma atómica el valor máximo entre el valor almacenado en la ubicación de memoria especificada en el primer argumento y el valor especificado en el segundo argumento, y lo almacena en la misma ubicación de memoria.

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
La ubicación desde la que se lee uno de los valores que se va a comparar y en la que se almacenará el máximo de los dos valores.

value
El valor que se comparará con el valor en la ubicación especificada.

Valor devuelto

El valor original almacenado en la ubicación especificada.

atomic_fetch_min

Calcula de forma atómica el valor mínimo entre el valor almacenado en la ubicación de memoria especificada en el primer argumento y el valor especificado en el segundo argumento, y lo almacena en la misma ubicación de memoria.

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
La ubicación desde la que se lee uno de los valores que se va a comparar y en la que se almacenará el mínimo de los dos valores.

value
El valor que se comparará con el valor en la ubicación especificada.

Valor devuelto

El valor original almacenado en la ubicación especificada.

función atomic_fetch_or (C++ AMP)

Realiza de manera atómica una operación OR bit a bit en relación con un valor y el valor de una ubicación de memoria.

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
Puntero a la ubicación de la memoria.

value
El valor que se va a usar en el cálculo OR bit a bit.

Valor devuelto

El valor original de la ubicación de la memoria.

función atomic_fetch_sub (C++ AMP)

Resta de forma atómica un valor de una ubicación de memoria.

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
Puntero a la ubicación de destino.

value
El valor que se restará.

Valor devuelto

El valor original de la ubicación de la memoria.

función atomic_fetch_xor (C++ AMP)

Realiza de forma atómica una operación XOR bit a bit en relación con un valor y una ubicación de memoria.

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
Puntero a la ubicación de la memoria.

value
Valor que se usará en el cálculo de XOR.

Valor devuelto

El valor original de la ubicación de la memoria.

copy

Copia un objeto C++ AMP. Se cumplen todos los requisitos sincrónicos de transferencia de datos. No puede copiar datos al ejecutar código en un acelerador. La forma general de esta función es 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
El objeto en el que se copia.

_DestIter
Un iterador de salida a la posición inicial en el destino.

InputIterator
El tipo de iterador de entrada.

OutputIterator
Tipo del iterador de salida.

_Rank
La clasificación del objeto desde la que se copiará o el objeto al que se copiará.

_Src
El objeto que se desea copiar.

_SrcFirst
El iterador inicial en el contenedor de origen.

_SrcLast
El iterador final en el contenedor de origen.

value_type
El tipo de datos de los elementos que se copian.

copy_async

Copia un objeto C++ AMP y devuelve un objeto completion_future por el que se puede esperar. No puede copiar datos al ejecutar código en un acelerador. La forma general de esta función es 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
El objeto en el que se copia.

_DestIter
Un iterador de salida a la posición inicial en el destino.

InputIterator
El tipo de iterador de entrada.

OutputIterator
Tipo del iterador de salida.

_Rank
La clasificación del objeto desde la que se copiará o el objeto al que se copiará.

_Src
El objeto que se desea copiar.

_SrcFirst
El iterador inicial en el contenedor de origen.

_SrcLast
El iterador final en el contenedor de origen.

value_type
El tipo de datos de los elementos que se copian.

Valor devuelto

Un future<void> que se puede esperar.

direct3d_abort

Anula la ejecución de una función con la cláusula de restricción restrict(amp) . Cuando el tiempo de ejecución AMP detecta la llamada, provoca una excepción runtime_exception con el mensaje de error "Reference Rasterizer: Shader abort instruction hit".

void direct3d_abort() restrict(amp);

direct3d_errorf

Imprime una cadena con formato en la ventana de salida de Visual Studio. Se le llama desde una función con la cláusula de restricción restrict(amp). Cuando runtime de AMP detecta la llamada, genera una excepción runtime_exception con la misma cadena de formato.

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

direct3d_printf

Imprime una cadena con formato en la ventana de salida de Visual Studio. Se le llama desde una función con la cláusula de restricción restrict(amp).

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

global_memory_fence

Bloquea la ejecución de todos los subprocesos de un mosaico hasta que se hayan completado todos los accesos a memoria globales. Esto garantiza que todos los accesos a la memoria global sean visibles para otros subprocesos del mosaico del subproceso y que se ejecuten en el orden del programa.

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

Parámetros

_Barrier
Un objeto tile_barrier

función parallel_for_each (C++ AMP)

Ejecuta una función en el dominio de cálculo. Para obtener más información, consulte Información general sobre 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
El objeto accelerator_view en el que se va a ejecutar el cálculo paralelo.

_Compute_domain
Un objeto extent que contiene los datos de estado para el cálculo.

_Dim0
La dimensión del objeto tiled_extent.

_Dim1
La dimensión del objeto tiled_extent.

_Dim2
La dimensión del objeto tiled_extent.

_Kernel
Un objeto de función o lambda que toma un argumento de tipo "index<_Rank>" y realiza el cálculo paralelo.

_Kernel_type
Un functor o lambda.

_Rank
La clasificación de la extensión.

tile_static_memory_fence

Bloquea la ejecución de todos los subprocesos de un mosaico hasta que se hayan completado todos los accesos a la memoria tile_static restante. Esto garantiza que todos los accesos a la memoria tile_static sean visibles para otros subprocesos del mosaico del subproceso y que se ejecuten en el orden del programa.

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

Parámetros

_Barrier
Un objeto tile_barrier.

Consulte también

Espacio de nombres de simultaneidad (C++ AMP)