나는 사용한다 std::for_each
std::execution::par
구조 벡터로 표현되는 거대한 입력에 대해 복잡한 계산을 수행 하는 데 합니다. 계산에는 하드웨어 (예 : 네트워크 또는 디스크 IO)와 관련된 지연이 필요하지 않으며 "단지 CPU"계산입니다. 저에게는 하드웨어 스레드가있는 OS 스레드를 더 만들지 않는 것이 합리적입니다. 그러나 Visual C ++ 2019는 평균 50 개의 스레드를 생성하며 12 개의 하드웨어 스레드 만있는 경우에도 최대 500 개의 스레드를 생성합니다.
병렬 스레드를 제한 할 수있는 방법이 거기 카운트 hardware_concurrency
로 std::for_each
하고 std::execution::par
, 또는 계산 합리적인 스레드를 함께 사용하여 사용자 지정 코드로되어 만들 수있는 유일한 방법은 std::thread
?
std::for_each
다른 알고리즘 보다 훨씬 낮은 수준이라는 것 <algorithm>
입니다. 기본 아이디어 std::execution::par
는 병렬 코드를 순차 코드처럼 단순하게 만들고 코드 및 의미 변경을 최소화하면서 기존 알고리즘을 병렬화하는 것입니다.