C++の時間ライブラリchronoでの現在時刻の取得時間
C++11では、時間に関するライブラリchronoが追加されました。これによりポータビリティの高い方法で時間の計測が可能になりました。一方、短い時間を計測する場合、時刻取得関数そのものの実行時間が気になります。chronoの現在時刻の取得のための時間を簡易的に計測しました。
試験方法
system_clock::now()を多数回コールする。それを実行時間で割って1回あたりの実行時間と考える。
ソース
chrono-many.cc
#include <cstdlib>
#include <chrono>
using namespace std;
int main(int argc, char *argv[])
{
const size_t nloop = atol(argv[1]);
chrono::system_clock::time_point t;
for (size_t i = 0; i < nloop; i++)
t = std::chrono::system_clock::now();
}
Makefile
CXXFLAGS=-g3 -O3
chrono-many:
実行環境と測定結果
CPU | Core i7 CPU 860 @ 2.80GHz |
Memory | DDR2-1333MHz |
OS | Ubuntu 17.04 |
Compiler | GCC 6.2.0 |
$ time ./chrono-many 1000000000
real 0m22.301s
user 0m22.264s
sys 0m0.012s
上記より、1回あたりの平均は約22ns。測定対象時間が約1us以上なら、この関数自体のオーバーヘッドを無視できる場合も多いだろう。