次の方法で共有


コンカレンシー名前空間関数 (AMP)

名前空間 (AMP) では、次の関数が定義されています。

すべてのメモリフェンス

すべてのメモリ アクセスが完了するまでタイルのすべてのスレッドの実行をブロックします。 これによって、すべてのメモリ アクセスがスレッド タイルの他のスレッドから参照でき、プログラムの順序で実行されます。

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

パラメーター

_Barrier
オブジェクト。

amp_uninitialize

C++ AMP ランタイムを初期化前の状態に戻します。 アプリケーションの有効期間中にこの関数を複数回呼び出すことは有効です。 この関数を呼び出した後でいずれかの C++ AMP API を呼び出すと、C++ AMP のランタイムが再初期化されます。 この関数の複数の呼び出しにまたがって C++ AMP オブジェクトを使用することは無効であり、それにより未定義の動作が発生することに注意してください。 また、この関数と他の AMP API を同時に呼び出すことは無効であり、未定義の動作が発生します。

void __cdecl amp_uninitialize();

アトミック・コンペア・エクスチェンジ

1 番目の引数で指定されたメモリ位置に格納されている値を 2 番目に指定された引数の値と等しいかどうかアトミックに比較し、値が同じ場合、メモリ位置の値は 3 番目に指定された引数の値に変更されます。

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)

パラメーター

_Dest
比較される値の 1 つが読み取られ、新しい値 (ある場合) が格納される位置。

_期待値
比較される 2 番目の値が読み取られる位置。

value
が と等しい場合、 によって指定したメモリ位置に格納される値。

戻り値

操作が正常に終了した場合は 。それ以外の場合は 。

atomic_exchange関数 (C++ AMP)

宛先の場所の値をアトミック操作として設定します。

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)

パラメーター

_Dest
宛先位置へのポインター。

value
新しい値です。

戻り値

宛先の場所の元の値。

atomic_fetch_add関数 (C++ AMP)

メモリ位置の値にアトミックに値を追加します。

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)

パラメーター

_Dest
メモリ位置へのポインター。

value
追加する値。

戻り値

メモリ位置の元の値。

atomic_fetch_and関数 (C++ AMP)

値とメモリ位置の値のビットごとの AND 演算をアトミックに実行します。

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)

パラメーター

_Dest
メモリ位置へのポインター。

value
ビットごとの AND 計算で使用する値。

戻り値

メモリ位置の元の値。

atomic_fetch_dec

指定したメモリ位置に格納されている値をアトミックにデクリメントします。

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

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

パラメーター

_Dest
メモリ内でデクリメントされる値の位置。

戻り値

メモリ位置に格納されている元の値。

atomic_fetch_inc

指定されたメモリ位置に格納されている値をアトミックにインクリメントします。

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

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

パラメーター

_Dest
インクリメントされる値のメモリでの位置。

戻り値

メモリ位置に格納されている元の値。

atomic_fetch_max

最初の引数で指定されたメモリ位置に格納されている値と 2 番目の引数で指定された値の間での最大値をアトミックに計算し、同じメモリ位置に格納します。

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)

パラメーター

_Dest
比較される値の 1 つが読み取られ、2 つの値の最大値が格納される位置。

value
指定した位置の値と比較する値。

戻り値

指定した位置に格納される元の値。

atomic_fetch_min

最初の引数で指定されたメモリ位置に格納されている値と 2 番目の引数で指定された値の間での最小値をアトミックに計算し、同じメモリ位置に格納します。

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)

パラメーター

_Dest
比較される値の 1 つが読み取られ、2 つの値の最小値が格納される位置。

value
指定した位置の値と比較する値。

戻り値

指定した位置に格納される元の値。

atomic_fetch_or関数 (C++ AMP)

値とメモリ位置の値を使用してビットごとの OR 演算をアトミックに実行します。

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)

パラメーター

_Dest
メモリ位置へのポインター。

value
ビットごとの OR 計算で使用する値。

戻り値

メモリ位置の元の値。

atomic_fetch_sub 関数 (C++ AMP)

メモリの特定の場所から値をアトミックに減算します。

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)

パラメーター

_Dest
宛先位置へのポインター。

value
減算の対象の値です。

戻り値

メモリ位置の元の値。

atomic_fetch_xor関数 (C++ AMP)

値とメモリ位置のビットごとの XOR 演算をアトミックに実行します。

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)

パラメーター

_Dest
メモリ位置へのポインター。

value
XOR 計算で使用する値。

戻り値

メモリ位置の元の値。

コピペ

C++ AMP オブジェクトをコピーします。 すべての同期データ転送の要件が満たされます。 アクセラレータでコードを実行しているときにデータをコピーすることはできません。 この関数の一般的な形式は です。

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

パラメーター

_Dest
コピー先のオブジェクト。

_DestIter
コピー先での開始位置の出力反復子。

InputIterator
入力反復子の型。

OutputIterator
出力反復子の型。

_Rank
コピー元のオブジェクトまたはコピー先のオブジェクトのランク。

_Src
コピーに異議を唱える。

_SrcFirst
ソース コンテナーの始まりのイテレータ。

_SrcLast
ソースコンテナの終端イテレータ。

value_type
コピーされた要素のデータ型。

コピー非同期

C++ AMP オブジェクトをコピーし、待機できる completion_future オブジェクトを返します。 アクセラレータでコードを実行しているときにデータをコピーすることはできません。 この関数の一般的な形式は です。

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

パラメーター

_Dest
コピー先のオブジェクト。

_DestIter
コピー先での開始位置の出力反復子。

InputIterator
入力反復子の型。

OutputIterator
出力反復子の型。

_Rank
コピー元のオブジェクトまたはコピー先のオブジェクトのランク。

_Src
コピーに異議を唱える。

_SrcFirst
ソース コンテナーの始まりのイテレータ。

_SrcLast
ソースコンテナの終端イテレータ。

value_type
コピーされた要素のデータ型。

戻り値

待機できる 。

direct3d_abort

制限句 を使用して関数の実行を中止します。 AMP ランタイムが呼び出しを検出すると、 runtime_exception 例外が発生し、"リファレンス ラスタライザー: シェーダー中止命令が発行" というエラー メッセージが返されます。

void direct3d_abort() restrict(amp);

direct3d_errorf

書式設定された文字列をVisual Studio出力ウィンドウに出力します。 これは制限句 を使用して関数から呼び出されます。 AMP ランタイムが呼び出しを検出すると、同じ書式指定文字列の runtime_exception 例外を発生させます。

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

direct3d_printf

書式設定された文字列をVisual Studio出力ウィンドウに出力します。 これは制限句 を使用して関数から呼び出されます。

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

グローバルメモリフェンス

すべてのグローバル メモリ アクセスが完了するまでタイルのすべてのスレッドの実行をブロックします。 これによって、グローバル メモリのアクセスがスレッド タイルの他のスレッドから参照でき、プログラムの順序で実行されます。

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

パラメーター

_Barrier
tile_barrier オブジェクト

parallel_for_each関数 (C++ AMP)

計算ドメインを越えて関数を実行します。 詳細については、「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);

パラメーター

_Accl_view
並列計算を実行する オブジェクト。

_Compute_domain
計算用のデータを含む オブジェクト。

_Dim0
オブジェクトの次元。

_Dim1
オブジェクトの次元。

_Dim2
オブジェクトの次元。

_Kernel
型 "index_Rank" の引数を取り、並列計算を実行するラムダまたは関数オブジェクト。

_Kernel_type
ラムダまたはファンクタ。

_Rank
範囲のランク。

タイル静的メモリフェンス

すべての未処理の メモリ アクセスが完了するまで、タイルのすべてのスレッドの実行をブロックします。 これによって、 メモリ アクセスがスレッド タイルのその他のスレッドに表示され、アクセスをプログラムの順序で実行することができます。

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

パラメーター

_Barrier
tile_barrier オブジェクト。

関連項目

コンカレンシー名前空間 (C++ AMP)