다음을 통해 공유


Concurrency 네임스페이스 함수(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
_Expected_value으면 _Dest 지정된 _Dest 메모리 위치에 저장할 값입니다.

Return 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
새 값입니다.

Return 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
추가할 값입니다.

Return 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 계산에 사용할 값입니다.

Return 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
감소할 값의 메모리 내 위치입니다.

Return Value

메모리 위치에 저장된 원래 값입니다.

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
증분할 값의 메모리 내 위치입니다.

Return Value

메모리 위치에 저장된 원래 값입니다.

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
지정된 위치의 값과 비교할 값입니다.

Return 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
지정된 위치의 값과 비교할 값입니다.

Return 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 계산에 사용할 값입니다.

Return 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
뺄 값입니다.

Return 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 계산에 사용할 값입니다.

Return Value

메모리 위치의 원본 값입니다.

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
복사되는 요소의 데이터 형식입니다.

Return Value

대기할 수 있는 A future<void> 입니다.

direct3d_abort

restrict(amp) 제한 절이 있는 함수의 실행을 중단합니다. AMP 런타임이 호출을 감지하면 "Reference Rasterizer: Shader abort instruction hit" 오류 메시지로 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)