2025/04/18 13:09 Show HN: Less Slow C++

ロボ子、今日はすごいリポジトリを見つけたのじゃ!C、C++、アセンブリコードの効率的な書き方の実例集らしいぞ。

それは興味深いですね、博士。C++20の機能も利用しているとのことですが、具体的にはどのような内容なのでしょうか?

ふむ、マイクロカーネルから並列アルゴリズム、コルーチン、ポリモーフィズムまで、幅広い構造を網羅しているみたいじゃな。標準ライブラリ関数の高速化とか、カスタム範囲とイテレータによる高速な遅延ロジックとか、盛りだくさんじゃ!

並列アルゴリズムやコルーチンは、最近注目されていますよね。それらを効率的に実装する例があるのは、とても参考になりそうです。

そうじゃろう?それに、コンパイラの最適化、行列乗算の効率化、CPUの分岐予測のテスト、再帰と反復の比較、例外処理、マルチコアスケーリング、JSON処理、STLの連想コンテナの適切な使用法、正規表現エンジンの活用、ポインタタギング、UDPパケット処理、ベクトル化されたメモリ操作…もう、全部言いきれないくらいじゃ!

まるで性能改善の万能薬みたいですね。ベンチマークを実行するための推奨環境はLinux上のGCCとのことですが、他の環境でも動作するのでしょうか?

WindowsならWSL、MacOSならHomebrewかMacPortsを使うと良いみたいじゃな。CMakeとC++20をサポートするGCCまたはClangコンパイラが必要らしいぞ。

多くのサードパーティ製ライブラリも使用しているようですね。Google Benchmark、Intel oneTBB、Meta libunifex…聞いたことのないものもあります。

じゃろ?ベンチマークの安定性と再現性を高めるために、SMTを無効にして`--benchmark_enable_random_interleaving=true`フラグを使うのがオススメらしいぞ。

なるほど。ベンチマークの実行方法も詳しく解説されているのですね。User-Requested Performance CountersやLinux `perf`ツールも使えるとは。

`less_slow.cpp`ファイルにはCPU側のコードが含まれていて、ハードウェア固有の最適化のためのファイルもあるみたいじゃ。Google Benchmarkの便利な機能もたくさん紹介されているぞ!

引数のパラメータ化、基本的なベンチマーク関数の登録、異なるキャプチャ値を持つベンチマークの作成…これらを使いこなせば、より詳細な性能評価ができそうですね。

そうじゃ!スレッド平均化カウンタの指定、コンパイラの最適化の防止、メモリ同期の強制、アルゴリズムの複雑さの指定と検証、入力サイズの指定、カスタム統計の計算、反復回数の制御…もう、至れり尽くせりじゃ!

カスタムパフォーマンスカウンタの作成や、タイミング測定の制御までできるとは驚きです。GPUやIOベンチマークのカスタムタイミングも供給できるのですね。

じゃろ?エラーメッセージによるベンチマークのスキップや、スレッド数の指定、レポートの時間単位の設定、CPU時間の代わりに実時間の測定もできるんじゃ!

このリポジトリは、性能改善に役立つ情報が満載ですね。私も活用して、より効率的なコードを書けるように頑張ります。

よし、ロボ子!早速、このリポジトリを参考に、私達もスーパーハカーを目指すのじゃ!

はい、博士!

ところでロボ子、このリポジトリ、まるで私の頭の中みたいじゃな。…ちょっと整理整頓が必要かの?

博士の頭の中は、いつもカオスですものね…それが博士の魅力でもありますが。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。