C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++とLinuxで高精度タイマーを作成する方法

C++で高精度タイマーを作成するには、標準ライブラリの chrono を利用するのが最も簡単な方法です。chrono ライブラリには高解像度クロックが用意されており、ナノ秒単位という非常に細かい精度で時間を計測できます。

本記事では、プログラムの実行時間をナノ秒単位で計測するサンプルを紹介します。基本的な流れは以下の通りです。

  1. 計測開始時点の時刻を取得する
  2. 計測終了時点の時刻を取得する
  3. 両者の差分を計算し、経過時間を求める

ここでは例として、空のループを回すことで一定の負荷を発生させ、その処理にかかる時間を計測します。

サンプルコード

#include <iostream>
#include <chrono>

typedef std::chrono::high_resolution_clock Clock;

int main() {
    // 計測開始時刻を取得
    auto start_time = Clock::now();

    // 空のループで時間稼ぎ
    for (int i = 0; i < 200000000; i++) {
        // 何もしない空ループ
    }

    // 計測終了時刻を取得
    auto end_time = Clock::now();

    // 差分をナノ秒に変換して出力
    std::cout << "Time difference:"
              << std::chrono::duration_cast<std::chrono::nanoseconds>(end_time - start_time).count()
              << " nanoseconds" << std::endl;

    return 0;
}

実行結果

Time difference: 536395307 nanoseconds

コードのポイント

std::chrono::high_resolution_clock は、システムが提供する中で最も高い精度を持つクロックです。Clock::now() を呼び出すことで現在時刻のタイムスタンプを取得でき、2つのタイムスタンプの差を std::chrono::duration_cast でナノ秒単位に変換することで、正確な経過時間を得られます。

なお、実行結果の数値はマシンの性能やコンパイル時の最適化オプションによって変動します。また、最適化によって空ループ自体が削除される場合があるため、実際のベンチマークでは -O0 オプションでコンパイルしたり、ループ内に副作用のある処理を入れるなどの工夫が必要です。

  1. CSSとJavaScriptでアコーディオン(開閉パネル)を作成する方法をわかりやすく解説

    CSSとJavaScriptを組み合わせることで、クリックすると内容が開閉する「アコーディオン(折りたたみパネル)」を簡単に実装できます。本記事では、実際に動作するサンプルコードをもとに、その作成手順と仕組みを詳しく解説します。 アコーディオンの実装例 以下は、HTML・CSS・JavaScriptを使ってアコーディオンを実装した完全なサンプルコードです。 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, ini

  2. Linuxの時刻をNTPサーバーと同期する方法【systemd対応・非対応両方を解説】

    パソコンの内蔵時計は完璧ではありません。数日、数週間、あるいは数か月が経つと時刻が徐々にずれ込み、実際の時間を正しく表示しなくなります。たとえば、実際には「10時33分」なのに「10時30分」と表示されるといった具合です。昔のパソコンでは、定期的に手動で時計を合わせるのが一般的でした。しかし、インターネット接続が普及して以降、現代のOSはNTPサーバーの助けを借りて時計を自動的に調整するようになりました。NTPとは?NTPは「Network Time Protocol(ネットワーク・タイム・プロトコル)」の略称です。ネットワーク接続を通じてコンピューターの時計を同期させ、常に正確な時刻を保つた