并发命名空间函数 (AMP)

all_memory_fence

阻止分片中所有线程的执行,直到所有内存访问完成。 这可确保所有内存访问都对线程分片中的其他线程可见,并按程序顺序执行。

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

参数

_Barrier
tile_barrier 对象。

amp_uninitialize

取消初始化 C++ AMP 运行时。 在应用程序生存期内多次调用此函数是合法的。 在调用此函数后调用任何 C++ AMP API 都将重新初始化 C++ AMP 运行时。 请注意,在对此函数的几次调用之间使用 C++ AMP 对象不合法,这样做会造成未定义的行为。 此外,同时调用此函数和任何其他 AMP API 也不合法,将造成未定义的行为。

void __cdecl amp_uninitialize();

atomic_compare_exchange

以原子方式比较存储在第一个参数中指定内存位置的值与第二个指定参数的值是否相等;如果值相同,位于该内存位置的值会被更改为第三个指定参数的值。

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
从中读取要比较的一个值并且要向其存储新值(如果有)的位置。

_Expected_value
从中读取要比较的第二个值的位置。

value
要存储到 _Dest 指定的内存位置的值(如果 _Dest 等于 _Expected_value)。

返回值

如果操作成功,则为 true;否则为 false

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)

以原子方式执行一个值和内存位置值的按位与运算。

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
用于执行按位与计算的值。

返回值

内存位置的初始值。

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

以原子方式计算存储在第一个参数中指定内存位置的值与在第二个参数中指定的值之间的最大值,并将其存储在同一个内存位置。

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
从中读取要比较的一个值并且要向其存储这两个值的最大值的位置。

value
要与指定位置的值做比较的值。

返回值

存储在指定位置的原始值。

atomic_fetch_min

以原子方式计算存储在第一个参数中指定内存位置的值与在第二个参数中指定的值之间的最小值,并将其存储在同一个内存位置。

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
从中读取要比较的一个值并且要向其存储这两个值的最小值的位置。

value
要与指定位置的值做比较的值。

返回值

存储在指定位置的原始值。

atomic_fetch_or 函数 (C++ AMP)

通过一个值和一个内存位置的值在原子级别执行按位或运算。

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
用于执行按位或计算的值。

返回值

内存位置的初始值。

atomic_fetch_sub Function (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)

以原子方式执行值和内存位置的按位异或操作。

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) 计算的值。

返回值

内存位置的初始值。

copy

复制 C++ AMP 对象。 满足所有同步数据传输要求。 在加速器上运行代码时,无法复制数据。 该函数的一般形式为 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);

参数

_Dest
要复制到的对象。

_DestIter
在目标的起始位置的输出迭代器。

InputIterator
输入迭代器的类型。

OutputIterator
输出迭代器的类型。

_Rank
作为复制的源和目标的对象的排名。

_Src
要复制的对象。

_SrcFirst
源容器中的起始迭代器。

_SrcLast
源容器中的结束迭代器。

value_type
复制的元素的数据类型。

copy_async

复制 C++ AMP 对象并返回可以等待的 completion_future 对象。 在加速器上运行代码时,无法复制数据。 该函数的一般形式为 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);

参数

_Dest
要复制到的对象。

_DestIter
在目标的起始位置的输出迭代器。

InputIterator
输入迭代器的类型。

OutputIterator
输出迭代器的类型。

_Rank
作为复制的源和目标的对象的排名。

_Src
要复制的对象。

_SrcFirst
源容器中的起始迭代器。

_SrcLast
源容器中的结束迭代器。

value_type
复制的元素的数据类型。

返回值

可以等待的 future<void>

direct3d_abort

restrict(amp) 限制子句中止函数的执行。 当 AMP 运行时检测该调用时,将引发 runtime_exception 异常并显示错误消息“参考光栅器: 命中着色器中止指令”。

void direct3d_abort() restrict(amp);

direct3d_errorf

将带格式的字符串输出到 Visual Studio 输出窗口。 它是从具有 restrict(amp) 限制子句的函数中调用的。 当 AMP 运行时检测到该调用时,引发具有相同格式的字符串的 runtime_exception 异常。

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

direct3d_printf

将带格式的字符串输出到 Visual Studio 输出窗口。 它是从具有 restrict(amp) 限制子句的函数中调用的。

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

global_memory_fence

在所有全局内存访问完成之前,阻止分片中所有线程的执行。 这可确保全局内存访问对线程分片中的其他线程可见,并按程序顺序执行。

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
要运行并行计算的 accelerator_view 对象。

_Compute_domain
包含计算数据的 extent 对象。

_Dim0
tiled_extent 对象的维度。

_Dim1
tiled_extent 对象的维度。

_Dim2
tiled_extent 对象的维度。

_Kernel
一个 lambda 或函数对象,该对象采用一个“index_Rank”类型的参数并执行并行计算<>。

_Kernel_type
lambda 或函子。

_Rank
盘区的排名。

tile_static_memory_fence

在所有未完成的 tile_static 内存访问完成之前,阻止分片中所有线程的执行。 这可确保 tile_static 内存访问对线程分片中的其他线程可见,并按程序顺序执行。

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

参数

_Barrier
tile_barrier 对象。

另请参阅

并发命名空间 (C++ AMP)