Partager via


Concurrency, fonctions de l’espace de noms (AMP)

all_memory_fence

Bloque l’exécution de tous les threads d’une vignette jusqu’à ce que tous les accès à la mémoire soient terminés. Cela garantit que tous les accès à la mémoire sont visibles par d’autres threads de la vignette de thread et qu’ils sont exécutés dans l’ordre du programme.

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

Paramètres

_Barrière
Objet tile_barrier.

amp_uninitialize

Annule l’initialisation du runtime AMP C++. Il est légal d’appeler cette fonction plusieurs fois pendant la durée de vie d’une application. L’appel d’une API AMP C++ après avoir appelé cette fonction réinitialise le runtime AMP C++. Notez qu’il est illégal d’utiliser des objets AMP C++ entre les appels à cette fonction et cela entraîne un comportement non défini. En outre, l’appel simultané de cette fonction et d’autres API AMP est illégal et entraînerait un comportement non défini.

void __cdecl amp_uninitialize();

atomic_compare_exchange

Compare atomiquement la valeur stockée à un emplacement de mémoire spécifié dans le premier argument pour l’égalité avec la valeur du deuxième argument spécifié, et si les valeurs sont identiques, la valeur à l’emplacement de mémoire est remplacée par celle du troisième argument spécifié.

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)

Paramètres

_Dest
L’emplacement à partir duquel l’une des valeurs à comparer est lue et à laquelle la nouvelle valeur, le cas échéant, doit être stockée.

_Expected_value
Emplacement à partir duquel la deuxième valeur à comparer est lue.

valeur
Valeur à stocker dans l’emplacement de mémoire spécifié par _Dest s’il _Dest est égal à _Expected_value.

Valeur de retour

true si l'opération réussit ; sinon false.

atomic_exchange Function (C++ AMP)

Définit la valeur de l’emplacement de destination en tant qu’opération atomique.

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)

Paramètres

_Dest
Pointeur vers l’emplacement de destination.

valeur
Nouvelle valeur.

Valeur de retour

Valeur d’origine de l’emplacement de destination.

atomic_fetch_add Function (C++ AMP)

Ajoutez atomiquement une valeur à la valeur d’un emplacement de mémoire.

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)

Paramètres

_Dest
Pointeur vers l’emplacement de la mémoire.

valeur
Valeur à ajouter.

Valeur de retour

Valeur d’origine de l’emplacement de mémoire.

atomic_fetch_and Function (C++ AMP)

Effectue atomiquement une opération AND au niveau du bit d’une valeur et la valeur d’un emplacement de mémoire.

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)

Paramètres

_Dest
Pointeur vers l’emplacement de la mémoire.

valeur
Valeur à utiliser dans le calcul AND au niveau du bit.

Valeur de retour

Valeur d’origine de l’emplacement de mémoire.

atomic_fetch_dec

Décrémente atomiquement la valeur stockée à l’emplacement de mémoire spécifié.

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

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

Paramètres

_Dest
Emplacement en mémoire de la valeur à décrémenter.

Valeur de retour

Valeur d’origine stockée à l’emplacement de mémoire.

atomic_fetch_inc

Incrémente atomiquement la valeur stockée à l’emplacement de mémoire spécifié.

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

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

Paramètres

_Dest
Emplacement en mémoire de la valeur à incrémenter.

Valeur de retour

Valeur d’origine stockée à l’emplacement de mémoire.

atomic_fetch_max

Calcule atomiquement la valeur maximale entre la valeur stockée à l’emplacement de mémoire spécifié dans le premier argument et la valeur spécifiée dans le deuxième argument et la stocke au même emplacement de mémoire.

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)

Paramètres

_Dest
L’emplacement à partir duquel l’une des valeurs à comparer est lue et à laquelle le maximum des deux valeurs doit être stocké.

valeur
Valeur à comparer à la valeur à l’emplacement spécifié.

Valeur de retour

Valeur d’origine stockée à l’emplacement spécifié.

atomic_fetch_min

Calcule atomiquement la valeur minimale entre la valeur stockée à l’emplacement de mémoire spécifié dans le premier argument et la valeur spécifiée dans le deuxième argument et la stocke au même emplacement de mémoire.

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)

Paramètres

_Dest
L’emplacement à partir duquel l’une des valeurs à comparer est lue et à laquelle le minimum des deux valeurs doit être stocké.

valeur
Valeur à comparer à la valeur à l’emplacement spécifié.

Valeur de retour

Valeur d’origine stockée à l’emplacement spécifié.

atomic_fetch_or Function (C++ AMP)

Effectue atomiquement une opération OR au niveau du bit avec une valeur et la valeur d’un emplacement de mémoire.

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)

Paramètres

_Dest
Pointeur vers l’emplacement de la mémoire.

valeur
Valeur à utiliser dans le calcul OR au niveau du bit.

Valeur de retour

Valeur d’origine de l’emplacement de mémoire.

atomic_fetch_sub Function (C++ AMP)

Soustrait atomiquement une valeur d’un emplacement de mémoire.

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)

Paramètres

_Dest
Pointeur vers l’emplacement de destination.

valeur
Valeur à soustraire.

Valeur de retour

Valeur d’origine de l’emplacement de mémoire.

atomic_fetch_xor Function (C++ AMP)

Effectue de manière atomique une opération XOR au niveau du bit d’une valeur et d’un emplacement de mémoire.

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)

Paramètres

_Dest
Pointeur vers l’emplacement de la mémoire.

valeur
Valeur à utiliser dans le calcul XOR.

Valeur de retour

Valeur d’origine de l’emplacement de mémoire.

copy

Copie un objet AMP C++. Toutes les exigences de transfert de données synchrones sont remplies. Vous ne pouvez pas copier de données lors de l’exécution du code sur un accélérateur. La forme générale de cette fonction est 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);

Paramètres

_Dest
Objet cible de la copie.

_DestIter
Itérateur de sortie à la position de début à la destination.

InputIterator
Type de l'itérateur d'entrée.

OutputIterator
Type de l’itérateur de sortie.

_Rang
Rang de l’objet à copier ou de l’objet vers lequel copier.

_Src
Objet à copier.

_SrcFirst
Itérateur de début dans le conteneur source.

_SrcLast
Itérateur de fin dans le conteneur source.

value_type
Type de données des éléments copiés.

copy_async

Copie un objet AMP C++ et retourne un objet completion_future qui peut être attendu. Vous ne pouvez pas copier de données lors de l’exécution du code sur un accélérateur. La forme générale de cette fonction est 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);

Paramètres

_Dest
Objet cible de la copie.

_DestIter
Itérateur de sortie à la position de début à la destination.

InputIterator
Type de l'itérateur d'entrée.

OutputIterator
Type de l’itérateur de sortie.

_Rang
Rang de l’objet à copier ou de l’objet vers lequel copier.

_Src
Objet à copier.

_SrcFirst
Itérateur de début dans le conteneur source.

_SrcLast
Itérateur de fin dans le conteneur source.

value_type
Type de données des éléments copiés.

Valeur de retour

Un future<void> qui peut être attendu.

direct3d_abort

Interrompt l’exécution d’une fonction avec la clause de restriction restrict(amp) . Lorsque le runtime AMP détecte l’appel, il déclenche une exception runtime_exception avec le message d’erreur « Reference Rasterizer: Shader abort instruction hit ».

void direct3d_abort() restrict(amp);

direct3d_errorf

Imprime une chaîne mise en forme dans la fenêtre de sortie de Visual Studio. Elle est appelée à partir d’une fonction avec la restrict(amp) clause de restriction. Lorsque le runtime AMP détecte l’appel, il déclenche une exception runtime_exception avec la même chaîne de mise en forme.

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

direct3d_printf

Imprime une chaîne mise en forme dans la fenêtre de sortie de Visual Studio. Elle est appelée à partir d’une fonction avec la restrict(amp) clause de restriction.

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

global_memory_fence

Bloque l’exécution de tous les threads d’une vignette jusqu’à ce que tous les accès à la mémoire globale soient terminés. Cela garantit que les accès à la mémoire globale sont visibles par d’autres threads dans la vignette de thread et qu’ils sont exécutés dans l’ordre du programme.

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

Paramètres

_Barrière
Objet tile_barrier

fonction parallel_for_each (AMP C++)

Exécute une fonction dans le domaine de calcul. Pour plus d’informations, consultez Vue d’ensemble de L’AMP 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);

Paramètres

_Accl_view
Objet accelerator_view sur lequel exécuter le calcul parallèle.

_Compute_domain
Objet extent qui contient les données du calcul.

_Dim0
Dimension de l’objet tiled_extent .

_Dim1
Dimension de l’objet tiled_extent .

_Dim2
Dimension de l’objet tiled_extent .

_Noyau
Objet lambda ou fonction qui prend un argument de type « index<_Rank> » et effectue le calcul parallèle.

_Kernel_type
Un lambda ou un fonctor.

_Rang
Rang de l’étendue.

tile_static_memory_fence

Bloque l’exécution de tous les threads d’une vignette jusqu’à ce que tous les accès en mémoire en attente tile_static aient été terminés. Cela garantit que tile_static les accès à la mémoire sont visibles par d’autres threads dans la vignette de thread et que les accès sont exécutés dans l’ordre du programme.

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

Paramètres

_Barrière
Objet tile_barrier.

Voir aussi

Concurrency, espace de noms (C++ AMP)