C++セミナー(上級)処理時間計測

HOME->講習会->プログラミングセミナー->C++セミナー(上級)


リアルタイム処理が求められるような場合には,自分が作成したシステムがどのくらいの処理時間を要するのかを計測する必要があります.また,他人が作成したライブラリの処理時間について評価を行う際にも処理時間を計測することがあります.C++では,chronoライブラリを使用した処理時間の計測方法があるので紹介します.

目次

・chronoライブラリ
・chronoによる処理時間計測

chronoライブラリ

chronoライブラリは,C++11以降で追加されたもので,時間計測用のライブラリになります.それまでは,C言語での「clock関数」を使用していましたが,精度が低いため,マイクロ秒やナノ秒単位での計測は困難でしたが,chronoの登場によりナノ秒単位での計測が可能となりました(他にも計測方法はありましたが,Windowsのみ,Linuxのみといったプラットフォームに依存したものでした).

chronoライブラリを使用するには「chrono」をインクルードする必要があります.

chronoによる処理時間計測

chronoで処理時間計測をするには以下のように行います.

#include <iostream>
#include <chrono>

int main()
{
    auto start = std::chrono::high_resolution_clock::now();

    // 何かしらの処理
    for(int i=0; i<100; i++);

    auto end = std::chrono::high_resolution_clock::now();
    std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count() << std::endl;
}

計測したい処理の処理前のクロックを「std::chrono::high_resolution_clock::now()」を呼び出して取得し,計測したい処理を行います.処理後に再度「std::chrono::high_resolution_clock::now()」を呼び出して,クロックを取得することで処理時間を計測します.クロックを実際の「秒」に変換する際には以下のように行います.

std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count() 

上記の場合では,ナノ秒となっていますが,「std::chrono::nanoseconds」の部分を変更することでミリ秒などに変換が可能です.

キャスト単位
std::chrono::hours
std::chrono::minutes
std::chrono::seconds
std::chrono::millisecondsミリ秒
std::chrono::microsecondsマイクロ秒
std::chrono::nanosecoundsナノ秒

この時,指定した単位以下については切り捨てが行われるので注意が必要です.