Функции пространства имен Concurrency (AMP)
all_memory_fence
Блокирует выполнение всех потоков на плитке до завершения всех обращений к памяти. Это гарантирует, что все доступы к памяти видны другим потокам в плитке потока и выполняются в порядке программы.
inline void all_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Параметры
_Barrier
Объект tile_barrier
.
amp_uninitialize
Неинициализирует среду выполнения C++ AMP. Эта функция может вызываться несколько раз в течение времени существования приложений. Вызов любого API C++ AMP после вызова этой функции повторно инициализирует среду выполнения C++ AMP. Обратите внимание, что использование объектов C++ AMP для вызовов этой функции является незаконным и приведет к неопределенному поведению. Кроме того, одновременный вызов этой функции и любых других API AMP является незаконным и приведет к неопределенному поведению.
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
Расположение, из которого сравнивается второе значение, считывается.
значение
Значение, которое должно храниться в расположении памяти, указанном в _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
Указатель на расположение назначения.
значение
Новое значение.
Возвращаемое значение
Исходное значение целевого расположения.
функция 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
Указатель на расположение памяти.
значение
Добавляемое значение.
Возвращаемое значение
Исходное значение расположения памяти.
Функция 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
Указатель на расположение памяти.
значение
Значение, используемое в побитовом вычислении 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
Атомарно вычисляет максимальное значение между значением, хранящимся в расположении памяти, указанном в первом аргументе, и значением, указанным во втором аргументе, и сохраняет его в том же расположении памяти.
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
Расположение, из которого выполняется сравнение одного из значений, и с которым следует хранить максимум двух значений.
значение
Значение, которое нужно сравнить со значением в указанном расположении.
Возвращаемое значение
Исходное значение, хранящееся в указанном расположении.
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
Расположение, из которого выполняется сравнение одного из значений, считывается, и с которым следует хранить минимум двух значений.
значение
Значение, которое нужно сравнить со значением в указанном расположении.
Возвращаемое значение
Исходное значение, хранящееся в указанном расположении.
функция 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
Указатель на расположение памяти.
значение
Значение, используемое в побитовом вычислении ИЛИ.
Возвращаемое значение
Исходное значение расположения памяти.
Функция 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
Указатель на расположение назначения.
значение
Вычитаемое значение.
Возвращаемое значение
Исходное значение расположения памяти.
функция 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
Указатель на расположение памяти.
значение
Значение, используемое в вычислении XOR.
Возвращаемое значение
Исходное значение расположения памяти.
copy
Копирует объект AMP C++ . Выполняются все требования к синхронной передаче данных. Невозможно скопировать данные при выполнении кода в акселераторе. Общая форма этой функции 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
Копирует объект AMP C++ и возвращает объект 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
объекта.
_Ядро
Лямбда-объект или объект-функция, принимающее аргумент типа "index<_Rank>" и выполняющий параллельные вычисления.
_Kernel_type
Лямбда-лямбда-функтор.
_Rank
Ранг экстента.
tile_static_memory_fence
Блокирует выполнение всех потоков на плитке до завершения всех незавершенных tile_static
обращений к памяти. Это гарантирует, что tile_static
доступ к памяти отображается другим потокам в плитке потока и выполняется в порядке программы.
inline void tile_static_memory_fence(const tile_barrier& _Barrier) restrict(amp);
Параметры
_Barrier
Объект tile_barrier.