Функции пространства имен Concurrency (AMP)

Следующие функции определяются в 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();

атомное_сравнение_и_обмен

Атомарно сравнивает значение, хранящееся в расположении памяти, указанном в первом аргументе для равенства со значением второго указанного аргумента, и если значения совпадают, значение в расположении памяти изменяется на значение третьего указанного аргумента.

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)

Атомарно выполняет побитовую операцию 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

Атомарно вычисляет максимальное значение между значением, хранящимся в расположении памяти, указанном в первом аргументе, и значением, указанным во втором аргументе, и сохраняет его в том же расположении памяти.

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)

Атомарно выполняет побитовую операцию 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
Значение, используемое в побитовом вычислении ИЛИ.

Возвращаемое значение

Исходное значение расположения памяти.

Функция 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.

Возвращаемое значение

Исходное значение расположения памяти.

копия

Копирует объект 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
Конечный итератор для исходного контейнера.

тип значения
Тип данных скопированных элементов.

асинхронное копирование

Копирует объект 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
Конечный итератор для исходного контейнера.

тип значения
Тип данных скопированных элементов.

Возвращаемое значение

Объект 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);

глобальный барьер памяти

Блокирует выполнение всех потоков на плитке до завершения всех доступов к глобальной памяти. Это гарантирует, что глобальные операции доступа к памяти видны другим потокам в плитке потока и выполняются в порядке программы.

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.

См. также

Пространство имен "Concurrency" (C++ AMP)