LoginSignup
1
1

More than 1 year has passed since last update.

CPUタイマ性能評価(C++)

Last updated at Posted at 2022-02-19

概要

CPUタイマは,CPUが処理した時間(CPU時間)のことを指している.
複数個のCPUを用いて実行した場合は,それぞれのCPUの実行時間を加算した時間がCPU時間となる.
そのため,CPU時間は実際の経過時間より長くなることがある.
経過時間とCPU時間を用いることで並列処理の効率を評価できるので便利である.

CPUタイマにも測定可能粒度があるので使用する上ではCPUタイマの性能を知っておく必要がある.
そこで,C++のCPUタイマに対してタイマの評価指標である分解能とレイテンシーを測定してみた.

分解能
タイマが測定可能な時間粒度を指す.

レイテンシー
タイマの測定遅延時間を指す.

CPU時間

CPU時間にはシステムCPU時間とユーザCPU時間の二種類ある.

ユーザCPU時間
プログラムの実行でCPUに費やされた時間

システムCPU時間
システムコール(ファイルI/O, ディスクI/O, メモリ管理等)の実行でCPUに費やされた時間

スリープしている時間と入力待ちの時間はCPUを使用していないことになるのでCPU時間としてカウントされない.

CPU使用率

CPU時間と経過時間を用いてCPU使用率を算出する方法(boostのcpu_timer)がある.

CPU使用率=100.000*(\frac{ユーザCPU時間+システムCPU時間}{経過時間})

複数のCPUで並列処理を行っている場合は100%を超えることがある.

測定

C++で提供されているCPUタイマに対して分解能とレイテンシーを測定した.
測定対象のCPUタイマはユーザCPU時間とシステムCPU時間を計測できるCPUタイマに限定する.
ただし,レイテンシーの測定は経過時間系タイマで測定する必要があるのでchronoを使用した.

分解能とレイテンシーの測定方法は参考資料[2]の3章に記載されている方法を参考にした.

使用プログラム

分解能とレイテンシーの測定方法

Windows

WindowsのVisual Studio 2020 communityを用いてGetProcessTimesの性能評価を行った.

GetProcessTimesはboostのcpu_timerの実装で使用されている.

  • 開発環境:
    • Visual Studio 2022 community
  • PCスペック:
    • OS:Windows10 Pro(64bit)
    • CPU:Intel(R)Core(TM) i9-109000X 3.70Ghz(物理コア数:10, 論理コア数:20)
    • メインメモリ:128GB

分解能

分解能は15,625,000ナノ秒でブレることがなく安定していた.

タイマ 単位 分解能
GetProcessTimes(ユーザCPU時間) 100ナノ秒 15,625,000ナノ秒
GetProcessTimes(システムCPU時間) 100ナノ秒 15,625,000ナノ秒

レイテンシー

タイマ レイテンシー
GetProcessTimes 135.918ナノ秒

結論

分解能とレイテンシーを考慮するとWindowsのCPUタイマは秒単位なら問題なく使用できるのではないかと考えている.

Mac

MacのXcodeを用いてtimesの性能評価を行った.

timesはboostのcpu_timerの実装で使用されている.

  • 開発環境:
    • Xcode 13.2.1
  • PCスペック:
    • OS:macOS Montery(Mac mini(M1 2020))
    • CPU:Apple M1
    • メインメモリ:16GB

分解能

分解能は1.000マイクロ秒でブレることがなく安定していた.

タイマ 単位 分解能
times(ユーザCPU時間) マイクロ秒 1.000マイクロ秒
times(システムCPU時間) マイクロ秒 1.000マイクロ秒

レイテンシー

タイマ レイテンシー
times 397.201ナノ秒

結論

分解能とレイテンシーを考慮すると,MacのCPUタイマはミリ秒単位なら問題なく使用できるではないかと考えている.
レイテンシーがひどくなければマイクロ秒でも問題なく使用できていたかもしれない.

参考資料

  1. boostjp,https://boostjp.github.io/
  2. boost github, https://github.com/boostorg
  3. CPU Timer(boost), https://www.boost.org/doc/libs/1_54_0/libs/timer/doc/cpu_timers.html
  4. Optimized C++ ―最適化、高速化のためのプログラミングテクニック, Kurt Guntheroth (著), 島 敏博 (監修), 黒川 利明 (翻訳), オライリージャパン, 2017年2月.
  5. 性能評価プログラム, https://github.com/Ocean00000/CPUTimeEvaluation
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1