Funzioni dello spazio dei nomi Concurrency (AMP)
all_memory_fence
Blocca l'esecuzione di tutti i thread in un riquadro fino al completamento di tutti gli accessi alla memoria. In questo modo tutti gli accessi alla memoria sono visibili ad altri thread nel riquadro del thread e vengono eseguiti nell'ordine di programma.
inline void all_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Parametri
_Barriera
Oggetto tile_barrier
.
amp_uninitialize
Annulla l'inizializzazione del runtime C++ AMP. È legale chiamare questa funzione più volte durante una durata delle applicazioni. La chiamata a qualsiasi API AMP C++ dopo la chiamata a questa funzione reinizializzerà il runtime C++ AMP. Si noti che non è possibile usare oggetti AMP C++ tra chiamate a questa funzione e in questo modo si verifica un comportamento non definito. Inoltre, la chiamata simultanea di questa funzione e qualsiasi altra API AMP non è valida e genera un comportamento indefinito.
void __cdecl amp_uninitialize();
atomic_compare_exchange
Confronta in modo atomico il valore archiviato in una posizione di memoria specificata nel primo argomento per verificarne l'uguaglianza con il valore del secondo argomento specificato e, se i valori sono uguali, il valore nella posizione di memoria viene modificato in quello del terzo argomento specificato.
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)
Parametri
_Dest
Posizione da cui confrontare uno dei valori da confrontare e in cui deve essere archiviato il nuovo valore.
_Expected_value
Posizione da cui viene letto il secondo valore da confrontare.
value
Valore da archiviare nella posizione di memoria specificata in da _Dest
se _Dest
è uguale a _Expected_value
.
Valore restituito
true
se l'operazione riesce; in caso contrario, false
.
Funzione atomic_exchange (C++ AMP)
Imposta il valore della posizione di destinazione come operazione atomica.
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)
Parametri
_Dest
Puntatore alla posizione di destinazione.
value
Nuovo valore.
Valore restituito
Valore originale della posizione di destinazione.
Funzione atomic_fetch_add (C++ AMP)
Aggiungere un valore atomicamente al valore di una posizione di 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)
Parametri
_Dest
Puntatore alla posizione di memoria.
value
Valore da aggiungere.
Valore restituito
Valore originale della posizione di memoria.
Funzione atomic_fetch_and (C++ AMP)
Esegue in modo atomico un'operazione AND bit per bit di un valore e il valore di una posizione di 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)
Parametri
_Dest
Puntatore alla posizione di memoria.
value
Valore da utilizzare nel calcolo AND bit per bit.
Valore restituito
Valore originale della posizione di memoria.
atomic_fetch_dec
Decrementa in modo atomico il valore archiviato nella posizione di memoria specificata.
inline int atomic_fetch_dec(_Inout_ int* _Dest
) restrict(amp)
inline unsigned int atomic_fetch_dec(_Inout_ unsigned int* _Dest) restrict(amp);
Parametri
_Dest
Posizione in memoria del valore da decrementare.
Valore restituito
Valore originale archiviato nella posizione di memoria.
atomic_fetch_inc
Incrementa in modo atomico il valore archiviato nella posizione di memoria specificata.
inline int atomic_fetch_inc(_Inout_ int* _Dest) restrict(amp);
inline unsigned int atomic_fetch_inc(_Inout_ unsigned int* _Dest) restrict(amp);
Parametri
_Dest
Posizione in memoria del valore da incrementare.
Valore restituito
Valore originale archiviato nella posizione di memoria.
atomic_fetch_max
Calcola in modo atomico il valore massimo tra il valore archiviato nella posizione di memoria specificata nel primo argomento e il valore specificato nel secondo argomento e lo archivia nella stessa posizione di 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)
Parametri
_Dest
Posizione da cui confrontare uno dei valori da confrontare e in cui archiviare il massimo dei due valori.
value
Valore da confrontare con il valore nella posizione specificata.
Valore restituito
Valore originale archiviato nella posizione specificata.
atomic_fetch_min
Calcola in modo atomico il valore minimo tra il valore archiviato nella posizione di memoria specificata nel primo argomento e il valore specificato nel secondo argomento e lo archivia nella stessa posizione di 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)
Parametri
_Dest
Posizione da cui confrontare uno dei valori da confrontare e in cui archiviare il minimo dei due valori.
value
Valore da confrontare con il valore nella posizione specificata.
Valore restituito
Valore originale archiviato nella posizione specificata.
Funzione atomic_fetch_or (C++ AMP)
Esegue in modo atomico un'operazione OR bit per bit con un valore e il valore di una posizione di 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)
Parametri
_Dest
Puntatore alla posizione di memoria.
value
Valore da utilizzare nel calcolo OR bit per bit.
Valore restituito
Valore originale della posizione di memoria.
Funzione atomic_fetch_sub (C++ AMP)
Sottrae in modo atomico un valore da una posizione di 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)
Parametri
_Dest
Puntatore alla posizione di destinazione.
value
Valore da sottrarre.
Valore restituito
Valore originale della posizione di memoria.
Funzione atomic_fetch_xor (C++ AMP)
Esegue in modo atomico un'operazione XOR bit per bit di un valore e una posizione di 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)
Parametri
_Dest
Puntatore alla posizione di memoria.
value
Valore da usare nel calcolo XOR.
Valore restituito
Valore originale della posizione di memoria.
copy
Copia un oggetto C++ AMP. Vengono soddisfatti tutti i requisiti di trasferimento dei dati sincroni. Non è possibile copiare dati durante l'esecuzione del codice su un acceleratore. La forma generale di questa funzione è 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);
Parametri
_Dest
Oggetto in cui copiare.
_DestIter
Iteratore di output nella posizione iniziale in corrispondenza della destinazione.
InputIterator
Tipo di iteratore di input.
OutputIterator
Tipo dell'iteratore di output.
_Rango
Classificazione dell'oggetto da copiare da o dall'oggetto in cui eseguire la copia.
_Src
Oggetto da copiare.
_SrcFirst
Iteratore iniziale nel contenitore di origine.
_SrcLast
Iteratore finale nel contenitore di origine.
value_type
Tipo di dati degli elementi copiati.
copy_async
Copia un oggetto AMP C++ e restituisce un oggetto completion_future che può essere aspettato. Non è possibile copiare dati durante l'esecuzione del codice su un acceleratore. La forma generale di questa funzione è 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);
Parametri
_Dest
Oggetto in cui copiare.
_DestIter
Iteratore di output nella posizione iniziale in corrispondenza della destinazione.
InputIterator
Tipo di iteratore di input.
OutputIterator
Tipo dell'iteratore di output.
_Rango
Classificazione dell'oggetto da copiare da o dall'oggetto in cui eseguire la copia.
_Src
Oggetto da copiare.
_SrcFirst
Iteratore iniziale nel contenitore di origine.
_SrcLast
Iteratore finale nel contenitore di origine.
value_type
Tipo di dati degli elementi copiati.
Valore restituito
Oggetto future<void>
che può essere aspettato.
direct3d_abort
Interrompe l'esecuzione di una funzione con la clausola di restrizione restrict(amp)
. Quando il runtime AMP rileva la chiamata, viene generata un'eccezione runtime_exception con il messaggio di errore "Reference Rasterizer: Shader abort instruction hit".
void direct3d_abort() restrict(amp);
direct3d_errorf
Stampa una stringa formattata nella finestra di output di Visual Studio. Viene chiamato da una funzione con la restrict(amp)
clausola di restrizione. Quando il runtime AMP rileva la chiamata, genera un'eccezione runtime_exception con la stessa stringa di formattazione.
void direct3d_errorf(
const char *,
...) restrict(amp);
direct3d_printf
Stampa una stringa formattata nella finestra di output di Visual Studio. Viene chiamato da una funzione con la restrict(amp)
clausola di restrizione.
void direct3d_printf(
const char *,
...) restrict(amp);
global_memory_fence
Blocca l'esecuzione di tutti i thread in un riquadro fino al completamento di tutti gli accessi alla memoria globale. Ciò garantisce che gli accessi alla memoria globale siano visibili ad altri thread nel riquadro del thread e vengano eseguiti nell'ordine di programma.
inline void global_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Parametri
_Barriera
Oggetto tile_barrier
Funzione parallel_for_each (C++ AMP)
Esegue una funzione nel dominio di calcolo. Per altre informazioni, vedere Panoramica di 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);
Parametri
_Accl_view
Oggetto accelerator_view
su cui eseguire il calcolo parallelo.
_Compute_domain
Oggetto extent
che contiene i dati per il calcolo.
_Dim0
Dimensione dell'oggetto tiled_extent
.
_Dim1
Dimensione dell'oggetto tiled_extent
.
_Dim2
Dimensione dell'oggetto tiled_extent
.
_Chicco
Oggetto lambda o funzione che accetta un argomento di tipo "index<_Rank>" ed esegue il calcolo parallelo.
_Kernel_type
Espressione lambda o functor.
_Rango
Classificazione dell'extent.
tile_static_memory_fence
Blocca l'esecuzione di tutti i thread in un riquadro fino al completamento di tutti gli accessi in memoria in sospeso tile_static
. Ciò garantisce che tile_static
gli accessi alla memoria siano visibili ad altri thread nel riquadro del thread e che gli accessi vengano eseguiti nell'ordine di programma.
inline void tile_static_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Parametri
_Barriera
Oggetto tile_barrier.