다음을 통해 공유


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
    "인덱스 <_Rank>" 형식의 인수를 사용 하 고 병렬 계산 수행 있는 람다 또는 함수 개체입니다.

  • _Kernel_type
    람다 functor입니다.

  • _Rank
    등급의 범위입니다.

설명

parallel_for_each 함수 가속기 장치에서 데이터 병렬 계산을 시작 합니다.기본 동작을 parallel_for_each 의 이와 같은 기능 for_each, 실행 되는 함수는 컨테이너의 각 요소에 있습니다.기본 구성 요소를 호출 하 여 parallel_for_each 되는 도메인 계산, 인덱스, a 커널 함수.때 parallel_for_each parallel 작업 실행 계산 도메인에서 각 인덱스에 대 한 실행 합니다.Parallel 작업을 입력 또는 출력 배열 요소에 액세스할 수 있습니다.호출을 parallel_for_each 동기 인 것 처럼 동작 합니다.실제로 별도 장치에서 실행 하기 때문에 호출이 비동기입니다.가지 없음 보장 순서와 병렬 실행은 비-바둑판식으로 활동의 동시성에 대 한 parallel_for_each.활동은 원자 함수를 사용 하 여 통신 합니다.

바둑판식된 버전의 parallel_for_each 고정된 크기 및 1, 2 또는 3 차원에 지정 된 타일 병렬 활동 구성의 tiled_extent 인수.스레드가 동일한 타일에 있는 액세스를 사용 하 여 선언 된 변수는 tile_static 키워드.사용할 수 있는 tile_barrier::wait 메서드 선언 된 변수에 대 한 액세스를 동기화 하는 메서드는 tile_static 키워드.바둑판식으로 배열 하려면 다음과 같은 제한이 적용 parallel_for_each:

  • 타일 정도 크기의 제품 1024를 초과할 수 없습니다.

    • 3D: D0 * D1 * D2 ≤ 1024; 고 D0 ≤ 64

    • 2D: D0 * D1 ≤ 1024

    • 1D: D0 ≤ 1024

  • 바둑판식된 모눈의 첫 번째 매개 변수로 제공 된 parallel_for_each 따라 각 차원에서 해당 타일 정도 나눌 수 있어야 합니다.

자세한 내용은 타일 사용를 참조하십시오.

parallel_for_each 가속기, 일반적으로 GPU 장치에서 코드를 실행 합니다.이 가속기를 명시적으로 전달할 수 있습니다 parallel_for_each 는 선택적으로 accelerator_view 매개 변수.그렇지 않으면 대상 가속기 개체 형식에서 선택한 array<T,N> 커널 함수를 캡처합니다.모든 배열은 동일한 가속기에 바인딩되지 않으면 예외가 throw 됩니다.tiled_index 커널에 전달 된 인수 컬렉션을 포함 하는 현재 인쇄 면을 기준으로 인덱스를 포함 합니다.

_Kernel 매개 변수는 parallel_for_each 함수는 람다 또는 함수 개체 여야 합니다.람다에 액셀러레이터를 실행 하려면 포함 되어야는 restrict(amp) 절이 추가 제한 사항이 있을 수 있지만.제약 조건 절 커널 함수 중 몇 가지 제한을 부과합니다.자세한 내용은 제약 조건 절 (AMP C++)를 참조하십시오.

호출할 수 있어야 해당 _Kernel 인수는 다음 형식 중 하나를 사용 하 여 인수:

  • 비-바둑판식 배열: index<N>여기서 N 와 같은 순위를 해야는 extent<N> 사용 되는 parallel_for_each.

  • 바둑판식 배열된: A tiled_index 치수가 일치 하는 개체는 tiled_extent 개체 호출에 사용 되는 parallel_for_each.

커널 함수 반환 해야 void.

커널 함수에 다른 인수를 갖지 않는 때문에 커널에 의해 작동 하는 다른 모든 데이터 람다 또는 함수 개체를 캡처해야 합니다.캡처된 모든 데이터를 제외 하 고 값으로 전달 되어야 합니다 array<T,N> 개체 참조 나 포인터에 의해 캡처되어야 합니다.몇 가지도 캡처할 수 있습니다 개체 형식에 제한이 있습니다.자세한 내용은 제약 조건 절 (AMP C++)를 참조하십시오.

시작 하는 동안 오류가 발생 하는 경우는 parallel_for_each, 런타임에서 호출 하면 예외가 throw 됩니다.다음과 같은 이유로 예외를 throw 할 수 있습니다.

  • 셰이더를 만들지 못했습니다.

  • 버퍼를 만들지 못했습니다.

  • 잘못 된 범위를 전달 합니다.

  • 액셀러레이터 키를 일치 하지 않습니다.

요구 사항

헤더: amp.h

네임스페이스: 동시성

참고 항목

참조

Concurrency 네임스페이스(C++ AMP)