execution_policy_tag

execution_policy_tag (실행 정책 태그)

병렬 알고리즘에 전달하는 실행 정책 객체(태그)들을 모아둔 페이지예요. <execution> 헤더, C++17부터.

출처: cppreference

본문

표준은 네 가지 실행 정책 타입의 인라인 상수 객체를 제공해요.

inline constexpr
std::execution::sequenced_policy seq { /* unspecified */ };       // (since C++17)

inline constexpr
std::execution::parallel_policy par { /* unspecified */ };        // (since C++17)

inline constexpr
std::execution::parallel_unsequenced_policy par_unseq { /* unspecified */ };  // (since C++17)

inline constexpr
std::execution::unsequenced_policy unseq { /* unspecified */ };   // (since C++20)
  • seq: 순차 실행. 스레드 간 벡터화 허용 없음.
  • par: 병렬 실행을 허용해요(여러 스레드).
  • par_unseq: 병렬 + 비순차(벡터화) 실행을 허용해요.
  • unseq: 순차이지만 비순차(벡터화) 실행을 허용해요(C++20).

이 태그들을 병렬 알고리즘의 첫 인자로 넘기면 실행 방식을 선택할 수 있어요.

std::sort(std::execution::par, v.begin(), v.end());   // 병렬 정렬

주의할 점은 병렬 실행을 쓰면 요소 접근이 동시에 일어나므로, 접근하는 함수가 데이터 경쟁이 없어야 해요. 실행 정책은 오버로드 해석을 구분하는 고유 타입으로도 쓰여요.

더 알아보기 (Learn more)

cppreference