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가 매우 강해서...

좋은 웹페이지 즐겨찾기