スーパー最適化とは、 コンパイラが ループのない命令シーケンスに対して最適なシーケンスを自動的に見つけるプロセスです。実際のコンパイラは一般的に真に最適な コードを生成できず、ほとんどの標準コンパイラ最適化は コードを部分的にしか改善しませんが、スーパーオプティマイザの目標は最適なシーケンス、つまり標準形式 を見つけることです。スーパーオプティマイザは、見逃された最適化の機会を強調表示することで、従来のオプティマイザを改善し、人間が追加のルールを作成できるようにします。
歴史 スーパー最適化という用語は、1987年の論文「Superoptimizer: A Look at the Smallest Program」で アレクシア・マサリン によって造語されました。[ 1 ] 「プログラム最適化」という名称は、最適化を目指すのではなく、改善を目指す分野に与えられてきました。この誤った名称のため、マサリンは自身のシステムをスーパーオプティマイザーと呼ぶことを余儀なくされました。実際には、これは最適なプログラムを見つけるためのオプティマイザーです。[ 2 ]
1992年にGNUスーパーオプティマイザ(GSO)がGNUコンパイラコレクション (GCC)に統合するために開発されました。[ 3 ] [ 4 ] その後の研究でこれらのアイデアがさらに発展し、拡張されました。
公開されているスーパーオプティマイザ いくつかのスーパーオプティマイザが無料でダウンロード可能です。
x86ファミリーの命令セットの場合: ARMの場合: Unbounded Superoptimizer [ 5 ] はLLVM IRをARMv7-Aアセンブリに変換する。 組み込みシステム向け: JVMの場合: LLVM IRの場合: WebAssembly用 slumps [ 20 ] はsouper に基づく WASM プログラムの超最適化を提供します。
参考文献 ↑ Massalin, Henry (1987). "Superoptimizer: A look at the smallest program" (PDF) . ACM SIGARCH Computer Architecture News . 15 (5): 122– 126. doi : 10.1145/36177.36194 . 2023-05-01 に取得.命令セットが与えられると、スーパーオプティマイザは関数を計算する最短のプログラムを見つけます。驚くべきプログラムが生成されており、その多くは複雑なビット操作を行っており、関数を定義したソースプログラムとはほとんど似ていません。スーパーオプティマイザの重要なアイデアは、有用なサイズのプログラムに対して網羅的な探索を実用的にする確率的テストです。 ↑ Joshi, Rajeev; Nelson, Greg; Randall, Keith (2002). "Denali: 目標指向型スーパーオプティマイザ" . ACM SIGPLAN Notices . 37 (5): 304– 314. doi : 10.1145/543552.512566 . 1 2 Granlund, Torbjörn; Kenner, Richard (1992). "スーパーオプティマイザとGNU Cコンパイラを使用した分岐の削除". ACM SIGPLAN 1992 プログラミング言語設計と実装に関する会議 - PLDI '92 の議事録 . CiteSeerX 10.1.1.58.3509 . doi : 10.1145/143095.14314 (2025-09-07 無効). ISBN 978-0-89791475-8 . S2CID 8825539 . {{cite book}}: CS1メンテナンス: DOIは2025年9月現在非アクティブです(リンク)1 2 "Index of /gnu/superopt" . GNU Operating System . Free Software Foundation, Inc. 1995-06-14 . 2023-05-01 に取得. 1 2 Jangda, Abhinav; Yorsh, Greta (2017-10-25). Unbounded superoptimization . Onward!'17、2017年10月25日~27日、カナダ、バンクーバー。pp. 78–88 . doi : 10.1145/3133850.3133856 . ↑ Joshi, Rajeev; Nelson, Greg; Randall, Keith (2001-07-30). "Denali: 目標指向型スーパーオプティマイザ" . Compaq Systems Research Center. HP Labs . Hewlett-Packard Co. 2023-05-01 に取得 。 ↑ "TOAST – KRRwiki" 。コンピュータサイエンス学科、数学基礎グループ。 知識表現と推論 (KRR) グループ 。 バース大学 。2007年8月7日。 2012年11月28日の オリジナルからアーカイブ。 2016年9月3日 取得 。 ↑ Brain, Martin; Crick, Tom; De Vos, Marina; Fitch, John (2006-08-17). "TOAST: Applying Answer Set Programming to Superoptimisation". In Etalle, Sandro; Truszczyński, Mirosław (eds.). Logic Programming . Lecture Notes in Computer Science. Vol. 4079. Springer-Verlag . pp. 270–284 . doi : 10.1007/11799573_21 . ISBN 978-3-540-36636-2 。↑ Crick, Tom (2009). Superoptimisation: Provably Optimal Code Generation using Answer Set Programming (PhD thesis). University of Bath . 2024-11-15 に取得。 ↑ Bansal, Sorav; Aiken, Alex (2006). "Automatic Generation of Peephole Superoptimizers" (PDF) . 2023年5月1日 取得 。 ↑ 「GNU Superoptimizer」 。 ↑ StanfordPL. "STOKE" . GitHub . ↑ Bansal, Sorav; Aiken, Alex (2008). "Binary Translation Using Peephole Superoptimizers" (PDF) . 2023年5月1日 取得 。 ↑ Serpell, Daniel (2003). "SuperOptimizer for Microchip's PIC microcontrollers" . Google Sites . 2016年10月11日のオリジナルから アーカイブ済み. 2016年9月6日 取得 . ↑ Serpell, Daniel (2003-06-21). "PIC Microcontroller SuperOptimizer" . Freecode . Slashdot Media. 2016-09-17 のオリジナルから アーカイブ済み。2016-09-06 に 取得 。 ↑ 「Embecosmによる実現可能性調査 」 ↑ 超最適化 – Embecosmソースコード ↑ Hume, Tom (2012-08-21). "最適なJavaプログラムを網羅的に検索するClojureプログラム" . GitHub . 2018-06-10のオリジナルから アーカイブ済み。2016-09-06 に 取得 。 ↑ Sasnauskas, Raimondas; Chen, Yang; Collingbourne, Peter; Ketema, Jeroen; Lup, Gratian; Taneja, Jubi; Regehr, John (2017). "Souper: A Synthesizing Superoptimizer". arXiv : 1711.04422 [ cs.PL ]. GitHubのソースコード↑ Cabrera Arteaga, Javier; Donde, Shrinish; Gu, Jian; Floros, Orestis; Satabin, Lucas; Baudry, Benoit; Monperrus, Martin (2020-03-23). WebAssembly バイトコードの超最適化 。 MoreVMs: 最新の言語ランタイム、エコシステム、および VMに関するワーク ショップ 。pp. 36–40。arXiv : 2002.10213 。 doi : 10.1145/3397537.3397567 。 GitHubのソースコード