1 ポイント 投稿者 GN⁺ 2025-12-03 | 1件のコメント | WhatsAppで共有
  • C/C++コンパイラ最適化をテーマにした25日間のアドベントカレンダープロジェクト
  • 12月1日から25日まで毎日ブログ記事と動画を通じて、1件ずつ最適化事例を紹介
  • 各記事では適用時期、アセンブリの解釈、適用されない場合まで具体的に扱う
  • x86-64が中心だが、64ビットおよび32ビットのARMアーキテクチャも一部含む
  • コンパイラの動作原理を学びたい開発者向けに教育的価値が高いシリーズ

Advent of Compiler Optimisations 2025 プロジェクト概要

  • 約1年間準備されたプロジェクトで、12月1か月間毎日新しいコンパイラ最適化事例を公開
    • 12月1日から25日まで1日1本、ブログ記事と動画を投稿
    • 各コンテンツはCまたはC++のコードをもとに、コンパイラが実施する興味深い最適化を扱う
  • 各最適化は適用条件、アセンブリコードの解釈、適用されない場合まで詳細に説明
    • 単なるコード比較ではなく、実際のコンパイラの動作を分析する形

扱う技術範囲

  • 低レベルのアーキテクチャ別トリックから高レベル最適化手法まで幅広く網羅
    • 主にx86-64を扱うが、64ビットおよび32ビットARM関連の内容も一部含む
  • コンパイラの内部動作とコード生成プロセスを学べる実践的な資料で構成

参加と視聴方法

プロジェクトの意義

  • 約1年間の準備を経て完成した大規模な個人プロジェクトで、コンパイラの高度さと効率性を探ることを目的
  • 開発者がコンパイラ最適化の実際の動作原理を理解し、コード作成時に活用できるよう支援する教育的試み
  • 執筆者は「コンパイラがどれほど驚くべきかを学ぶ楽しさ」を共有したいと考えている

Matt Godbolt紹介

  • シカゴ在住のC++開発者で、Hudson River Tradingで勤務
  • Two’s Complementポッドキャストの共同進行者
  • MastodonBlueskyで活動中
  • ブログコンテンツはCreative Commons BY-NC 3.0 Unportedライセンスで配布

1件のコメント

 
GN⁺ 2025-12-03
Hacker Newsのコメント
  • Mattのコンパイラ最適化を見たあと、彼と私が行ったインタビューもぜひ見てほしい
    私が確信するようになったのはこれだ。自分が快適に扱える抽象化レベルで作業しつつ、その下の階層も理解しておくべきだ
    たとえばCプログラマなら、Cランタイムがオペレーティングシステムとどう相互作用するかを知っておくべきだ。細部をすべて知る必要はないが、問題が起きたときにどこから見始めるべきか見当がつく程度には必要だ
    Mattが書いたACM Queueの記事も古い記事だが、こうした最適化の概念を理解するには非常に良い入門書だ

    • 「自分が作業している階層のすぐ下を理解しろ」という言葉を大学時代に教授から聞いた。それが自分のキャリアに大いに役立った
      たとえばJavaを扱うときにJVMを理解していたことで、医療ソフトウェアの性能をずっと上手く最適化できた。そして単にその下の階層を理解すること自体が面白くもある
    • ありがとう、Adam 😊
  • 彼が明らかなドメインエキスパートであるにもかかわらず、最初から複雑なx86命令セットに飛び込まず、基本的な部分から順を追って説明している点が印象的だ

  • Matt GodboltはCおよびC++コミュニティにとって本当の宝石のような存在だ
    Compiler Explorerと彼の貢献のおかげで、多くの開発者の世界がより良くなったと思う

    • 何だって?! Godboltって実在の人物だったの!?
  • Advent of Computer Science Advent Calendars, Day 2を見ている

    • ついにその段階に来たようだ
  • 私はSQLiteが使っているコード統合(amalgamation) 手法にとても興味がある
    SQLiteチームによれば、この方式だけでも5〜10%の性能向上があるという。Mattがセッション中にこのテーマを扱ってくれたらうれしい

    • これはかなり一般的なテーマで、実際にはコンパイラ最適化というより「unity build」と呼ばれるビルド方式だ
      参考: Unity buildのWikipedia
    • 最近ではunity buildよりLTO(Link Time Optimization) のほうがよく使われる
      それでもLTOは非インクリメンタルビルドでは遅くなることがあるので、一度きりのビルドでは今でもunity buildが有用だ
  • 25年間ソフトウェア開発をしてきたが、いまだに自分が最適なコンパイラフラグを使っているのか気になる

    • 私の経験では、フラグは少ないほど良い
      たいていの場合、-O2で十分だ。コンパイラが更新されるたびに内部最適化は改善されるので、開発者が細かく調整する必要はほとんどない
      それに、誤ったベンチマークに基づいてフラグを追加するのは危険だ。システムの状態によって1〜2%の性能差はよくあることだ
      コード構造が変わればキャッシュ効率が変わって性能が変わることもある。つまり、フラグのおかげではなくコード配置のおかげかもしれない
  • 残りの投稿も楽しみだ。今朝はSBCLに (+ base (* index scale))(+ base (ash index n)) のパターンを単一のLEA命令に最適化するよう教えてみた。Day 2で学んだことをすぐに応用してみたわけだ

  • Godboltのコンテンツはいくらあっても足りない

  • 整数定数による除算も扱ってほしい。Hacker’s Delight のその章は本当に素晴らしいが、一般の読者には少し難しく感じられる

  • コンパイラ好きのためのAdvent of Codeみたいだ
    毎日ひと口サイズの最適化レッスンで直感を積み上げていくこの形式がとても良い
    コンパイラが何を、なぜしているのかを理解すれば、どんな言語を使っていてもより良いプログラマになれる