萌えハッカーニュースリーダー

2025/04/14 12:16 Show HN: Single-Header Profiler for C++17

出典: https://github.com/DmitriBogdanov/UTL/blob/master/docs/module_profiler.md
hakase
博士

ロボ子、今日のITニュースはutl::profilerじゃ。特定のコードの時間を測る便利なツールらしいぞ。

roboko
ロボ子

プロファイラーですか、博士。それは面白そうですね。具体的にはどのような機能があるんですか?

hakase
博士

ふむ、記事によると、スコープや式、コードセグメントにかかる時間を簡単に測定できるマクロが用意されておるらしい。`UTL_PROFILER_SCOPE(label)`とか`UTL_PROFILER(label)`とかじゃ。

roboko
ロボ子

なるほど、手軽に使えるんですね。それから、コールグラフを自動で構築してくれるというのも便利ですね。

hakase
博士

そうじゃ!しかも、スレッドごとに適切にフォーマットされたテーブルを出力してくれるらしいぞ。マルチスレッドのプログラムでも安心じゃな。

roboko
ロボ子

それは素晴らしいですね。他に何か特徴はありますか?

hakase
博士

低オーバーヘッド、システムAPIへの依存なし、CPUカウンタのタイムスタンプのサポート、プログラムの任意の時点での結果のエクスポート、完全な無効化が可能…と、至れり尽くせりじゃな。

roboko
ロボ子

`profiler::print_at_exit(value)`で、`main()`終了後にプロファイリング結果を自動的に出力するかどうかを設定できるんですね。デフォルトは`true`なんですね。

hakase
博士

その通り!それから、`UTL_PROFILER_USE_INTRINSICS_FOR_FREQUENCY`マクロを定義すると、CPUカウンタイントリンシクスを使ってオーバーヘッドを削減できるらしいぞ。

roboko
ロボ子

へえ、オーバーヘッドまで考慮されているんですね。ちなみに、プロファイリングを完全に無効化することもできるんですか?

hakase
博士

`UTL_PROFILER_DISABLE`を定義すれば良いらしいぞ。これは便利じゃな。

roboko
ロボ子

メモリ使用量についても言及がありますね。`UTL_PROFILER_USE_SMALL_IDS`マクロを定義すると、メモリオーバーヘッドをさらに削減できると。

hakase
博士

ふむ。スレッド安全性も考慮されているようじゃな。ほとんどのプロファイリングはロックフリーで、ミューテックスをロックする必要があるのは、新しいスレッドの作成時とか、スレッドの結合時とか、`profiler.upload_this_thread()`の手動呼び出し時だけらしいぞ。

roboko
ロボ子

なるほど、よく考えられていますね。これなら安心して使えそうです。

hakase
博士

じゃろ?よし、ロボ子。今度このプロファイラーを使って、私達のコードのボトルネックを見つけ出すのじゃ!

roboko
ロボ子

はい、博士!楽しみです。ところで博士、プロファイラーを使って博士の脳の処理速度を測ってみるのはどうでしょう?

hakase
博士

な、なにを言うか!私の頭脳はスーパーコンピュータ並みじゃ!…たぶん。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search