問題タブ [compiler-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.

0 投票する
3 に答える
397 参照

c# - 匿名型のコンパイラ最適化

OK OK、これはハックだと知っていますが、これは小さなデータ操作プロジェクトのためのもので、遊んでみたかったのです。;-)

私は常に、コンパイラーがC#プログラムで使用されるすべての匿名型を調べ、プロパティが同じである場合、バックグラウンドで1つのクラスのみを作成するという印象を受けました。

それで、私が持っているいくつかの型付きデータセットから匿名型を作成したいとしましょう:

smallData2.Except(smallData1);のような楽しいことができるようになりました。など、そしてそれはすべて動作します。

さて、匿名タイプのより大きなペアがある場合はどうなりますか?

今、bigData2.Except(bigData1);を実行すると コンパイラは文句を言います:

なんで?プロパティが多すぎるので、コンパイラは最適化する価値がないと判断しますか?

ありがとう!

0 投票する
1 に答える
283 参照

c++ - double 型を ceil に渡すと、GCC の最適化レベルごとに異なる値になります

以下では、result1 および result2 変数の値は、GCC 4.2.1 および GCC 3.2.0 で -g または -O を使用してコードをコンパイルするかどうかに応じて、異なる値を報告しています (さらに最近の GCC バージョンは試していません)。 :

-g を使用してコンパイルした場合のみ、結果 1 および結果 2 == 5 になりますが、代わりに -OI でコンパイルすると、結果 1 == 6 および結果 2 == 5 が得られます。

これは、コンパイラによる最適化の仕方の違いか、IEEE 浮動小数点表現の内部的な違いのように思えますが、この違いが正確にどのように発生するのか興味があります。可能であれば、アセンブラを見ないようにしたいと思っています。

上記は C++ でコンパイルされていますが、printfs を使用して ANSI-C コードに変換された場合も同じことが当てはまると思います。

上記の不一致は 32 ビット Linux で発生しますが、64 ビット Linux では発生しません。

ありがとうございます

0 投票する
4 に答える
3224 参照

java - 繰り返されるメソッド呼び出しに対するJavaコンパイラの最適化?

Java コンパイラ (JDK1.6.0_21 に付属するデフォルトの javac) はコードを最適化して、同じメソッドが同じ引数で何度も呼び出されるのを防ぎますか? このコードを書いた場合:

メソッドfoo(bar)は 1 回だけ実行されますか? もしそうなら、この最適化を防ぐ方法はありますか? (1 つは反復アルゴリズム、もう 1 つは比較アルゴリズムの 2 つのアルゴリズムの実行時間を比較しようとしています。代表的なサンプルを取得するために、それらを何度も呼び出したいと考えています)

どんな洞察も大歓迎です。私はこの問題を狂気に陥れました (しばらくの間、私のコンピューターは非常に高速だったので、code too large43671 行でエラーが発生するまでメソッド呼び出しを追加し続けました)。

0 投票する
3 に答える
401 参照

c++ - 同じ if ステートメントを持つ C++ インライン メソッド

私は OpenGL テクスチャのハンドラーを書いており、安全性とパフォーマンスについて考えています。マークされた if ステートメントを削除する最適化レベルはどれですか?

0 投票する
4 に答える
523 参照

c - a = -2147483648 - a; コンパイラの最適化

ソフトウェアをリバース エンジニアリングする方法と、コンパイラの最適化前のコードがどのように見えるかを理解するためのすべてのトリックを学ぼうとしています。

私はこのようなものを数回見つけました:

私はもともとそれがabs()アンダーフローだと思っていたので、正の値が得られます。しかし、aは負であるため (if を参照)、これは次と同等です。

これは非常に小さな負の数であり、絶対値ではありませんa。私は何が欠けていますか?

0 投票する
2 に答える
844 参照

performance - 間接関数呼び出しをインライン化できるコンパイラはどれですか?

LLVM 用の LDC D コンパイラは、ターゲットが静的に認識されていることを証明できる場合、状況によっては間接関数呼び出しをインライン化できます。これが発生する可能性がある場所のおもちゃの例 (D) を次に示します。

この場合、myDelegate()呼び出しは名目上は間接呼び出しですが、対象は人間の読者と LLVM/LDC のフロー分析にとって明らかであるため、インライン化されます。

最新のコンパイラで静的に認識可能なターゲットへの間接関数呼び出しをインライン化する機能は、どの程度普及していますか? これを実行できる事前コンパイラは LLVM だけですか? JITコンパイラではより一般的ですか?

0 投票する
2 に答える
896 参照

perl - O=Deparse はどのように機能し、Perl には定数配列があり、折りたたまれていますか?

Perl の最適化のすべてを示しているのだろうか、-MO=Deparseなぜこれが Perl 5.10 で折りたたまれていないのだろうか?

IRC の何人かはO=Deparse、それがすべてを示しているわけではないかもしれないと考えていましたが、一定の折り畳みを示していることは確かです。

定数サブを明示的に記述しても同じ結果になります。予測可能ではありますが、 のドキュメントでは定数配列ではなく定数リストconstant.pmを作成していることも興味深い点です。これはスカラー定数のように折りたたまれていないだけでなく、呼び出しごとに新しい配列を作成するオーバーヘッドが必要になると思います。

私が到達できる唯一の結論は-MO=Deparse、すべての折り畳みを示すことであり、定数配列はPerlで最適化されていないだけですか? そうですか?技術的な理由はありますか?

0 投票する
2 に答える
120 参照

x86-64 - 現在、X86 アセンブリを生成するコンパイラの状態はどうなっていますか?

リアルタイム パフォーマンスを扱う人々と話すときはいつでも、生成された X86 アセンブリ命令はそれほど効率的ではないと指摘する傾向があります。

VMX のような機能が実現しつつある中で、商用の C++ コンパイラがこれらの命令セットを利用する可能性はどれくらいあるのでしょうか? コンパイラ ベンダーは、特別な凝ったアセンブリを公開したり、コンパイラを最新の状態に保つことに重点を置いたりしていないように感じます。

さらに言えば、そもそも何が適切な X86 アセンブリを構成するのでしょうか?

0 投票する
2 に答える
908 参照

c++ - VS2008 C++ リリース モードはデバッグ モードより遅い

ネイティブで STL を使用して、ネイティブとマネージドの Visual C++ を混在させて作業しています。奇妙な問題があります。すべての最適化を設定してリリース モードでソフトウェアをコンパイルすると、デバッグ モードよりもソフトウェアの実行速度が一貫して遅くなるようです。ここで何が問題なのですか?

これらは私のデバッグコマンドラインオプションです:

/Od /D "WIN32" /D "_D​​EBUG" /D "_UNICODE" /D "UNICODE" /FD /EHa /MDd /Fo"Debug\" /Fd"Debug\vc90.pdb" /W3 /nologo /c / Zi /clr /TP /errorReport:prompt /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System .Data.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows .Forms.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.XML.dll"

これらは私のリリース コマンド ライン オプションです。

/Oi /Ot /Oy /GT /GL /D "WIN32" /D "_SECURE_SCL=0" /D "_HAS_ITERATOR_DEBUGGING=0" /D "VC_EXTRALEAN" /D "_UNICODE" /D "UNICODE" /FD /EHa /MD /Fd"Release\vc90.pdb" /W3 /nologo /c /clr /TP /errorReport:prompt /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll " /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll" / FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll" /FU "c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.XML.dll"

0 投票する
2 に答える
1093 参照

c# - CLRコンパイラの最適化の例

.Netのパフォーマンスと最適化について数か月でプレゼンテーションを行っています。不要な最適化のサンプルをいくつか提供したいと思いました。これは、とにかくコンパイラーによって実行されます。

コンパイラが実際にコードの前後でどのような最適化を実行できるかについての説明はどこにありますか?