Funkcje przestrzeni nazw współbieżności (AMP)
all_memory_fence
Blokuje wykonywanie wszystkich wątków na kafelku do momentu ukończenia dostępu do wszystkich pamięci. Gwarantuje to, że wszystkie dostępy do pamięci są widoczne dla innych wątków na kafelku wątku i są wykonywane w kolejności programu.
inline void all_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Parametry
_Bariera
Obiekt tile_barrier
.
amp_uninitialize
Uninitializuje środowisko uruchomieniowe C++ AMP. Jest to legalne, aby wywołać tę funkcję wielokrotnie w okresie istnienia aplikacji. Wywołanie dowolnego interfejsu API AMP języka C++ po wywołaniu tej funkcji spowoduje ponowne zainicjowanie środowiska uruchomieniowego C++ AMP. Należy pamiętać, że używanie obiektów AMP języka C++ w wywołaniach tej funkcji jest niedozwolone i spowoduje to niezdefiniowane zachowanie. Ponadto równoczesne wywoływanie tej funkcji i innych interfejsów API AMP jest nielegalne i spowodowałoby niezdefiniowane zachowanie.
void __cdecl amp_uninitialize();
atomic_compare_exchange
Niepodzielne porównuje wartość przechowywaną w lokalizacji pamięci określonej w pierwszym argumencie równości z wartością drugiego określonego argumentu, a jeśli wartości są takie same, wartość w lokalizacji pamięci zostanie zmieniona na wartość trzeciego określonego argumentu.
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)
Parametry
_Dest
Lokalizacja, z której należy porównać jedną z wartości, jest odczytywana i do której ma być przechowywana nowa wartość, jeśli istnieje.
_Expected_value
Lokalizacja, z której jest porównywana druga wartość, jest odczytywana.
wartość
Wartość, która ma być przechowywana w lokalizacji pamięci określonej przez _Dest
parametr , jeśli _Dest
jest równa _Expected_value
.
Wartość zwracana
true
jeśli operacja zakończyła się pomyślnie; w przeciwnym razie, false
.
atomic_exchange, funkcja (C++ AMP)
Ustawia wartość lokalizacji docelowej jako operację niepodzielna.
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)
Parametry
_Dest
Wskaźnik do lokalizacji docelowej.
wartość
Nowa wartość.
Wartość zwracana
Oryginalna wartość lokalizacji docelowej.
atomic_fetch_add, funkcja (C++ AMP)
Niepodzielne dodawanie wartości do wartości lokalizacji pamięci.
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)
Parametry
_Dest
Wskaźnik do lokalizacji pamięci.
wartość
Wartość do dodania.
Wartość zwracana
Oryginalna wartość lokalizacji pamięci.
atomic_fetch_and, funkcja (C++ AMP)
Niepodzielne wykonuje bitową operację AND wartości i wartości lokalizacji pamięci.
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)
Parametry
_Dest
Wskaźnik do lokalizacji pamięci.
wartość
Wartość do użycia w obliczeniach bitowych AND.
Wartość zwracana
Oryginalna wartość lokalizacji pamięci.
atomic_fetch_dec
Niepodzielne dekrementuje wartość przechowywaną w określonej lokalizacji pamięci.
inline int atomic_fetch_dec(_Inout_ int* _Dest
) restrict(amp)
inline unsigned int atomic_fetch_dec(_Inout_ unsigned int* _Dest) restrict(amp);
Parametry
_Dest
Lokalizacja w pamięci wartości, która ma zostać zdekrementowana.
Wartość zwracana
Oryginalna wartość przechowywana w lokalizacji pamięci.
atomic_fetch_inc
Niepodzielne zwiększa wartość przechowywaną w określonej lokalizacji pamięci.
inline int atomic_fetch_inc(_Inout_ int* _Dest) restrict(amp);
inline unsigned int atomic_fetch_inc(_Inout_ unsigned int* _Dest) restrict(amp);
Parametry
_Dest
Lokalizacja w pamięci wartości, która ma być zwiększana.
Wartość zwracana
Oryginalna wartość przechowywana w lokalizacji pamięci.
atomic_fetch_max
Niepodziealnie oblicza maksymalną wartość między wartością przechowywaną w lokalizacji pamięci określonej w pierwszym argumencie a wartością określoną w drugim argumencie i przechowuje ją w tej samej lokalizacji pamięci.
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)
Parametry
_Dest
Lokalizacja, z której należy porównać jedną z wartości, jest odczytywana i do której mają być przechowywane maksymalnie dwie wartości.
wartość
Wartość, która ma być porównywana z wartością w określonej lokalizacji.
Wartość zwracana
Oryginalna wartość przechowywana w określonej lokalizacji.
atomic_fetch_min
Niepodziealnie oblicza wartość minimalną między wartością przechowywaną w lokalizacji pamięci określonej w pierwszym argumencie a wartością określoną w drugim argumencie i przechowuje ją w tej samej lokalizacji pamięci.
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)
Parametry
_Dest
Lokalizacja, z której należy porównać jedną z wartości, jest odczytywana i do której mają być przechowywane co najmniej dwie wartości.
wartość
Wartość, która ma być porównywana z wartością w określonej lokalizacji.
Wartość zwracana
Oryginalna wartość przechowywana w określonej lokalizacji.
atomic_fetch_or, funkcja (C++ AMP)
Niepodzielne wykonuje bitową operację OR z wartością i wartością lokalizacji pamięci.
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)
Parametry
_Dest
Wskaźnik do lokalizacji pamięci.
wartość
Wartość do użycia w obliczeniach bitowych OR.
Wartość zwracana
Oryginalna wartość lokalizacji pamięci.
atomic_fetch_sub, funkcja (C++ AMP)
Niepodzielne odejmowanie wartości z lokalizacji pamięci.
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)
Parametry
_Dest
Wskaźnik do lokalizacji docelowej.
wartość
Wartość do odjęciu.
Wartość zwracana
Oryginalna wartość lokalizacji pamięci.
atomic_fetch_xor, funkcja (C++ AMP)
Niepodzielne wykonuje bitową operację XOR wartości i lokalizacji pamięci.
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)
Parametry
_Dest
Wskaźnik do lokalizacji pamięci.
wartość
Wartość do użycia w obliczeniach XOR.
Wartość zwracana
Oryginalna wartość lokalizacji pamięci.
kopiowanie
Kopiuje obiekt C++ AMP. Wszystkie wymagania dotyczące synchronicznego transferu danych są spełnione. Nie można kopiować danych podczas uruchamiania kodu w akceleratorze. Ogólna forma tej funkcji to 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);
Parametry
_Dest
Obiekt do skopiowania.
_DestIter
Iterator danych wyjściowych do pozycji początkowej w miejscu docelowym.
InputIterator
Typ iteratora wejściowego.
OutputIterator
Typ iteratora wyjściowego.
_Ranga
Ranga obiektu do skopiowania z lub obiektu do skopiowania.
_Src
Aby obiekt skopiować.
_SrcFirst
Iterator początkowy do kontenera źródłowego.
_SrcLast
Iterator końcowy do kontenera źródłowego.
value_type
Typ danych elementów, które są kopiowane.
copy_async
Kopiuje obiekt C++ AMP i zwraca obiekt completion_future , na który można czekać. Nie można kopiować danych podczas uruchamiania kodu w akceleratorze. Ogólna forma tej funkcji to 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);
Parametry
_Dest
Obiekt do skopiowania.
_DestIter
Iterator danych wyjściowych do pozycji początkowej w miejscu docelowym.
InputIterator
Typ iteratora wejściowego.
OutputIterator
Typ iteratora wyjściowego.
_Ranga
Ranga obiektu do skopiowania z lub obiektu do skopiowania.
_Src
Aby obiekt skopiować.
_SrcFirst
Iterator początkowy do kontenera źródłowego.
_SrcLast
Iterator końcowy do kontenera źródłowego.
value_type
Typ danych elementów, które są kopiowane.
Wartość zwracana
Element future<void>
, który można zaczekać.
direct3d_abort
Przerywa wykonywanie funkcji z klauzulą restrict(amp)
ograniczenia. Gdy środowisko uruchomieniowe AMP wykryje wywołanie, zgłasza runtime_exception wyjątek z komunikatem o błędzie "Odwołanie do rasterizatora: uściślić instrukcję abort".
void direct3d_abort() restrict(amp);
direct3d_errorf
Drukuje sformatowany ciąg w oknie danych wyjściowych programu Visual Studio. Jest wywoływana z funkcji z klauzulą restrict(amp)
ograniczenia. Gdy środowisko uruchomieniowe AMP wykryje wywołanie, zgłasza wyjątek runtime_exception z tym samym ciągiem formatowania.
void direct3d_errorf(
const char *,
...) restrict(amp);
direct3d_printf
Drukuje sformatowany ciąg w oknie danych wyjściowych programu Visual Studio. Jest wywoływana z funkcji z klauzulą restrict(amp)
ograniczenia.
void direct3d_printf(
const char *,
...) restrict(amp);
global_memory_fence
Blokuje wykonywanie wszystkich wątków na kafelku do momentu ukończenia dostępu do całej pamięci globalnej. Dzięki temu dostęp do pamięci globalnej jest widoczny dla innych wątków na kafelku wątku i jest wykonywany w kolejności programu.
inline void global_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Parametry
_Bariera
Obiekt tile_barrier
parallel_for_each, funkcja (C++ AMP)
Uruchamia funkcję w domenie obliczeniowej. Aby uzyskać więcej informacji, zobacz C++ AMP Overview (Omówienie języka 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);
Parametry
_Accl_view
Obiekt accelerator_view
do uruchamiania obliczeń równoległych.
_Compute_domain
extent
Obiekt, który zawiera dane obliczeń.
_Dim0
Wymiar tiled_extent
obiektu.
_Dim1
Wymiar tiled_extent
obiektu.
_Dim2
Wymiar tiled_extent
obiektu.
_Jądro
Obiekt lambda lub funkcji, który przyjmuje argument typu "index<_Rank>" i wykonuje obliczenia równoległe.
_Kernel_type
Lambda lub functor.
_Ranga
Ranga zakresu.
tile_static_memory_fence
Blokuje wykonywanie wszystkich wątków na kafelku do momentu ukończenia wszystkich zaległych tile_static
dostępu do pamięci. Gwarantuje to, że tile_static
dostęp do pamięci jest widoczny dla innych wątków na kafelku wątku i że dostępy są wykonywane w kolejności programu.
inline void tile_static_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Parametry
_Bariera
Obiekt tile_barrier.