Поделиться через


Функции пространства имен 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.

См. также

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