Concurrency-Namespace-Funktionen (AMP)

all_memory_fence

Blockiert die Ausführung aller Threads in einer Kachel, bis alle Speicherzugriffe abgeschlossen sind. Dadurch wird sichergestellt, dass alle Speicherzugriffe für andere Threads in der Threadkachel sichtbar sind und in der Programmreihenfolge ausgeführt werden.

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

Parameter

_Barrier
Ein tile_barrier-Objekt.

amp_uninitialize

Hebt die Initialisierung der C++ AMP-Laufzeit auf. Es ist zulässig, diese Funktion während der Lebensdauer einer Anwendung mehrmals aufzurufen. Wenn Sie eine beliebige C++AMP-API aufrufen, nachdem Sie diese Funktion aufgerufen haben, wird die C++AMP-Laufzeit neu initialisiert. Beachten Sie, dass C++ AMP-Objekte nicht für Aufrufe dieser Funktion verwendet werden dürfen, da dies zu nicht definiertem Verhalten führen kann. Außerdem ist das gleichzeitige Aufrufen dieser Funktion und beliebiger anderer AMP-APIs unzulässig und kann zu nicht definiertem Verhalten führen.

void __cdecl amp_uninitialize();

atomic_compare_exchange

Vergleicht atomisch den Wert, der an einer Speicheradresse gespeichert wird, die im ersten Argument für Gleichheit mit dem Wert des zweiten angegebenen Arguments festgelegt ist. Wenn die Werte identisch sind, wird der Wert an der Speicheradresse in den Wert des dritten angegebenen Arguments geändert.

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)

Parameter

_Dest
Der Speicherort, aus dem einer der zu vergleichenden Werte gelesen wird und an dem der neue Wert ggf. abgelegt werden soll.

_Expected_value
Der Speicherort, aus dem der zweite zu vergleichende Wert gelesen wird.

value
Der Wert, der an dem von _Dest angegebenen Speicherort abgelegt werden soll, wenn _Dest gleich _Expected_value ist.

Rückgabewert

true, wenn der Vorgang erfolgreich ist, andernfalls false.

atomic_exchange-Funktion (C++ AMP)

Legt den Wert des Zielstandorts als atome Operation fest.

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)

Parameter

_Dest
Zeiger auf die Zielposition.

value
Der neue Wert.

Rückgabewert

Der ursprüngliche Wert des Zielspeicherorts.

atomic_fetch_add-Funktion (C++ AMP)

Atomar fügen Sie dem Wert eines Speicherspeicherorts einen Wert hinzu.

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)

Parameter

_Dest
Zeigen Sie auf den Speicherort des Arbeitsspeichers.

value
Der hinzuzufügende Wert.

Rückgabewert

Der ursprüngliche Wert des Speicherspeicherorts.

atomic_fetch_and-Funktion (C++ AMP)

Atomically perform a bitwise AND operation of a value and the value of a memory location.

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)

Parameter

_Dest
Zeigen Sie auf den Speicherort des Arbeitsspeichers.

value
Der Wert, der in der bitweisen AND-Berechnung verwendet werden soll.

Rückgabewert

Der ursprüngliche Wert des Speicherspeicherorts.

atomic_fetch_dec

Dekrementiert den Wert atomisch, der an der angegebenen Speicheradresse gespeichert ist.

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

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

Parameter

_Dest
Die Adresse im Speicher des zu dekrementierenden Werts.

Rückgabewert

Der ursprüngliche Wert, der an der Speicheradresse abgelegt ist.

atomic_fetch_inc

Inkrementiert den Wert atomisch, der an der angegebenen Speicheradresse gespeichert ist.

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

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

Parameter

_Dest
Die Adresse im Speicher des zu inkrementierenden Werts.

Rückgabewert

Der ursprüngliche Wert, der an der Speicheradresse abgelegt ist.

atomic_fetch_max

Berechnet atomisch den Maximalwert aus dem Wert, der an der im ersten Argument angegebenen Speicheradresse abgelegt wurde, und dem im zweiten Argument angegebenen Wert und speichert ihn an derselben Speicheradresse.

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)

Parameter

_Dest
Der Speicherort, aus dem einer der zu vergleichenden Werte gelesen wird und an dem das Maximum der beiden Werte gespeichert werden soll.

value
Der Wert, der mit dem Wert an der angegebenen Position verglichen werden soll.

Rückgabewert

Der ursprüngliche Wert wird an der angegebenen Position gespeichert.

atomic_fetch_min

Berechnet atomisch den Minimalwert aus dem Wert, der an der im ersten Argument angegebenen Speicheradresse abgelegt wurde, und dem im zweiten Argument angegebenen Wert und speichert ihn an derselben Speicheradresse.

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)

Parameter

_Dest
Der Speicherort, aus dem einer der zu vergleichenden Werte gelesen wird und an dem das Minimum der beiden Werte gespeichert werden soll.

value
Der Wert, der mit dem Wert an der angegebenen Position verglichen werden soll.

Rückgabewert

Der ursprüngliche Wert wird an der angegebenen Position gespeichert.

atomic_fetch_or-Funktion (C++ AMP)

Atomically perform a bitwise OR operation with a value and the value of a memory location.

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)

Parameter

_Dest
Zeigen Sie auf den Speicherort des Arbeitsspeichers.

value
Der Wert, der in der bitweisen OR-Berechnung verwendet werden soll.

Rückgabewert

Der ursprüngliche Wert des Speicherspeicherorts.

atomic_fetch_sub-Funktion (C++ AMP)

Subtrahiert einen Wert atomisch von einem Speicherspeicherort.

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)

Parameter

_Dest
Zeiger auf die Zielposition.

value
Der zu subtrahierende Wert.

Rückgabewert

Der ursprüngliche Wert des Speicherspeicherorts.

atomic_fetch_xor-Funktion (C++ AMP)

Atomisch führt einen bitweisen XOR-Vorgang eines Werts und eines Speicherspeicherorts aus.

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)

Parameter

_Dest
Zeigen Sie auf den Speicherort des Arbeitsspeichers.

value
Der in der XOR-Berechnung zu verwendende Wert.

Rückgabewert

Der ursprüngliche Wert des Speicherspeicherorts.

copy

Kopiert ein C++ AMP-Objekt. Alle Anforderungen der synchronen Datenübertragung werden erfüllt. Sie können keine Daten kopieren, wenn Code auf einem Beschleuniger ausgeführt wird. Das allgemeine Format dieser Funktion ist 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);

Parameter

_Dest
Das Objekt, in das kopiert wird.

_DestIter
Ein Ausgabeiterator zur Anfangsposition am Ziel.

InputIterator
Der Typ des Eingabeiterators.

OutputIterator
Der Typ des Ausgabeiterators.

_Rank
Der Rang des Objekts, aus dem bzw. in das kopiert werden soll.

_Src
Das zu kopierende Objekt.

_SrcFirst
Ein Anfangsiterator in den Quellcontainer.

_SrcLast
Ein Endeiterator in den Quellcontainer.

value_type
Der Datentyp der Elemente, die kopiert werden.

copy_async

Kopiert ein C++AMP-Objekt und gibt ein completion_future Objekt zurück, das gewartet werden kann. Sie können keine Daten kopieren, wenn Code auf einem Beschleuniger ausgeführt wird. Das allgemeine Format dieser Funktion ist 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);

Parameter

_Dest
Das Objekt, in das kopiert wird.

_DestIter
Ein Ausgabeiterator zur Anfangsposition am Ziel.

InputIterator
Der Typ des Eingabeiterators.

OutputIterator
Der Typ des Ausgabeiterators.

_Rank
Der Rang des Objekts, aus dem bzw. in das kopiert werden soll.

_Src
Das zu kopierende Objekt.

_SrcFirst
Ein Anfangsiterator in den Quellcontainer.

_SrcLast
Ein Endeiterator in den Quellcontainer.

value_type
Der Datentyp der Elemente, die kopiert werden.

Rückgabewert

Ein future<void>-Objekt, auf das gewartet werden kann.

direct3d_abort

Bricht die Ausführung einer Funktion mit der Einschränkungsklausel restrict(amp) ab. Wenn die AMP-Laufzeit den Aufruf erkennt, löst sie eine runtime_exception -Ausnahme mit der Fehlermeldung „Referenzrasterprogramm: Anweisung zum Abbrechen von Shader ermittelt“ aus.

void direct3d_abort() restrict(amp);

direct3d_errorf

Gibt eine formatierte Zeichenfolge im Visual Studio-Ausgabefenster aus. Sie wird von einer Funktion mit der Einschränkungsklausel restrict(amp) aufgerufen. Wenn die AMP-Laufzeit den Aufruf erkennt, löst sie eine runtime_exception Ausnahme mit derselben Formatierungszeichenfolge aus.

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

direct3d_printf

Gibt eine formatierte Zeichenfolge im Visual Studio-Ausgabefenster aus. Sie wird von einer Funktion mit der Einschränkungsklausel restrict(amp) aufgerufen.

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

global_memory_fence

Blockiert die Ausführung aller Threads in einer Kachel, bis alle globalen Speicherzugriffe abgeschlossen sind. Dadurch wird sichergestellt, dass globale Speicherzugriffe für andere Threads in der Threadkachel sichtbar sind und in der Programmreihenfolge ausgeführt werden.

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

Parameter

_Barrier
Ein tile_barrier-Objekt

parallel_for_each-Funktion (C++ AMP)

Führt eine Funktion übergreifend über die "compute"-Domäne aus. Weitere Informationen finden Sie unter C++ AMP Overview.

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);

Parameter

_Accl_view
Das accelerator_view-Objekt, auf dem die parallele Berechnung ausgeführt werden soll.

_Compute_domain
Ein extent-Objekt, das die Daten für die Berechnung enthält.

_Dim0
Die Dimension des tiled_extent-Objekts.

_Dim1
Die Dimension des tiled_extent-Objekts.

_Dim2
Die Dimension des tiled_extent-Objekts.

_Kern
Ein Lambda- oder Funktionsobjekt, das ein Argument vom Typ "index<_Rank>" verwendet und die parallele Berechnung ausführt.

_Kernel_type
Ein Lambda- oder Funktionselement.

_Rank
Der Rang des Wertebereichs.

tile_static_memory_fence

Blockiert die Ausführung aller Threads in einer Kachel, bis alle ausstehenden tile_static-Speicherzugriffe abgeschlossen sind. Dadurch wird sichergestellt, dass tile_static-Speicherzugriffe für andere Threads in der Threadkachel sichtbar sind und in der Programmreihenfolge ausgeführt werden.

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

Parameter

_Barrier
Ein tile_barrier-Objekt.

Siehe auch

Concurrency-Namespace (C++ AMP)