OpenMP 및 Microsoft PPL 및 Parallel STL 비교
저번 보도
OpenMP 및 Microsoft PPL 및 Parallel STL 비교
중 MS PPL은 Sequential보다 느려 성능을 개선하고 벤치마크를 진행했다.기준은 사용했다google benchmark.
코드는 shohirose/openmp-examples/benchmark에 있습니다.
코드 해설
지난번 보도된 코드를 벤치에 쉽게 표시하기 위해 팩스를 사용했다.
parallel_benchmark.cpp
#include <benchmark/benchmark.h>
#include "function.hpp"
using namespace shirose;
std::vector<Point>& getPoints() {
static std::vector<Point> points = generatePoints(10'000'000);
return points;
}
template <typename Counter>
void BM_PiCalculation(benchmark::State& state) {
const auto& points = getPoints();
for (auto _ : state) {
const auto numPoints = state.range(0);
const auto pi = calcPi(points.data(), numPoints, Counter{});
benchmark::DoNotOptimize(pi);
}
}
BENCHMARK_TEMPLATE(BM_PiCalculation, SequentialSTLCounter)
->RangeMultiplier(4)
->Range(1 << 10, 1 << 22);
BENCHMARK_TEMPLATE(BM_PiCalculation, OpenMPCounter)
->RangeMultiplier(4)
->Range(1 << 10, 1 << 22);
BENCHMARK_TEMPLATE(BM_PiCalculation, MicrosoftPPLCounter)
->RangeMultiplier(4)
->Range(1 << 10, 1 << 22);
BENCHMARK_TEMPLATE(BM_PiCalculation, ChunkedMicrosoftPPLCounter)
->RangeMultiplier(4)
->Range(1 << 10, 1 << 22);
BENCHMARK_TEMPLATE(BM_PiCalculation, ParallelSTLCounter)
->RangeMultiplier(4)
->Range(1 << 10, 1 << 22);
BENCHMARK_TEMPLATE(BM_PiCalculation, ParallelOrVectorizedSTLCounter)
->RangeMultiplier(4)
->Range(1 << 10, 1 << 22);
BENCHMARK_MAIN();
ParallelSTLCounter
사용std::execution::par
,ParallelOrVectorizedSTLCounter
사용std::execution::par_unseq
.ChunkedMicrosoftPPLCounter
자체 분할 범위concurrency::parallel_for
내 회전 for링.각 반의 상세한 내용은 파일을 직접 보는 내용으로 구글 Benchmark와 관련된 부분을 설명할 것이다.
우선, 무작위 생성점
generatePoints
은 매우 무거운 처리이기 때문에 기준이 시작될 때getPoints
함수에서 한 번만 충분한 수량을 생성할 수 있다.각 기준점은 이 점열을 사용하여 원주율을 계산한다.데이텀 함수에 초기화 처리를 기록할 때 데이텀이 실행될 때마다 초기화 처리를 하며 데이텀 전체가 매우 느려지는 상황을 피하기 위해 데이텀 밖에서 초기화한다.결실
데이터 크기 및 CPU 시간

코어 i79700K(8개의 코어)를 사용하기 때문에 각 코어의 데이터 크기에 비해 CPU 시간(Sequential은 스레드이며 비교를 위해 병합 중)을 그렸다.
데이터 크기가 작으면 OpenMP

위의 그림은 같은 데이터 크기의 Sequential의 속도 향상률을 보여 줍니다.
OpenMP는 데이터 크기가 작은 경우(512KB 미만)가 가장 빠르고 수동으로 조정된 Chunked Microsoft PPL이 그 뒤를 이었다.데이터 크기가 커지면 STL도 OpenMP와 Chunked Microsoft PPL과 크게 다르지 않습니다.작은 루프에서 OpenMP가 매우 강해서...
Reference
이 문제에 관하여(OpenMP 및 Microsoft PPL 및 Parallel STL 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shohirose/items/94ed6857aceb61891bc9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)