問題タブ [peephole-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 命令の組み立て数を減らす
Linuxアセンブリファイルからの命令の数を(手動で)減らしたい。これは基本的に、抽象構文ツリーで事前定義された縮小を検索することによって行われます。
例えば:
意味がないため削除されます。
または:
となります:
固定数の命令を含む他の最適化を探しています。ダイナミックレンジの命令を検索したくありません。
より少ない指示で置き換えることができる他の同様のパターンを提案できますか?
後で編集:リチャード・ペニントンのおかげで、私が欲しいのはのぞき穴の最適化であることがわかりました。
だから私は質問を次のように言い換えます:Linuxアセンブリコードでのぞき穴最適化の提案。
java - javaのぞき穴最適化初心者コンパイラ
グループプロジェクトの一環として、簡略化された言語用のコンパイラを作成しています。オプション機能の1つとして、のぞき穴オプティマイザーを追加して、codegenの出力Intelアセンブリコードを調べて最適化すると思いました。
私たちのコンパイラはJavaで実行されており、これまでに学んだJavaを使用してこののぞき穴オプティマイザを作成するのは大変な作業になると思われます。パターンマッチング文字列はJavaの良いアプローチのように聞こえないので、これを可能にするために使用する必要があるある種のツールはありますか?
ありがとう
design-patterns - のぞき穴の最適化パターン
ローカル最適化コンパイラの手法について調べてきましたが、それらがどのように実装されているかわかりません。アイデアは、オプティマイザがコードの「ウィンドウ」を毎回見て、どういうわけかパターンを検出し、それらをより最適化されたバージョンに置き換えるというものです。
私の質問は、これらのパターンをどのように発見するのですか? (あなたのプラットフォームが、Schocken's Hack のような、組み立てられたコンピューターのアセンブリ コードを出力する VM であるとしましょう)。
人々は実際に手動で (制御フロー グラフや DAG などを使用して) コードを検査し、識別されたすべてのパターンを収集してオプティマイザにコーディングしますか? または、自動的な方法があります。
たとえば、最適化するコードをアナライザーにフィードすると、前述のパターンが吐き出されます。もしそうなら、どうやって書き始めることができますか?
c++ - コンパイラが式テンプレートでピープホール最適化を行うのを妨げているのは何ですか?
私は以下にリストされたコードを持っています:
ここでva1
、 とva2
は 2 つのvalarray<int>
オブジェクトで、はとk
のサイズです。私が期待しているのは、コンパイラが次のように行を最適化することです。va1
va2
printf
しかし代わりに、Intel コンパイラ (13.1) と CLang (3.4) の両方がそのような最適化を行いませんでした。たとえば、Intel コンパイラは次のアセンブリ コードを出力しました。
ここでr13
、 の値を格納しk
、r14
およびはそれぞれおよびr12
のメモリの先頭です。はイテレータ変数です。コードから、それが行うことは次のとおりです。va1
va2
r15
i
(-O3 を使用しても) 最適化されない理由
のぞき穴の最適化で?この場合、Gcc 4.8.2 は最適化を行いますが、処理できません-(va1[i]+va2[i])+(va1[i]-va2[i])
。
考えられる理由の 1 つは、前述のコードで式テンプレートが使用されていることです。問題は、なぜコンパイラは最適化を 1 段階手前で停止したのかということです。式テンプレートはどのようにして前進を妨げましたか?
注 ええと、答えは常に「コンパイラがその最適化を行うように設計されていないため」です。しかし、私がドラゴンブックから学んだ限りでは、コンパイラは、何も改善できなくなるまで最適化を繰り返し行う必要があります。
gcc - GCCのピープホールとピープホール2の違い
GCC で ARM ターゲットのマシン記述ファイルを調べています。そして、それを調べていると、それがサポートするのぞき穴の定義(define_peephole2)がpeephole2であり、のぞき穴ではないことがわかりました。
Peephole と Peephole2 の違いを教えてください。