問題タブ [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.
c++ - 通常、コンパイラの最適化設定はどのように設定していますか?
通常、コンパイラーは最大速度または最小コードサイズを最適化するように設定していますか? または、個々の最適化設定を手動で構成しますか? なんで?
ほとんどの場合、人々はコンパイラの最適化設定をデフォルトの状態のままにしておく傾向があることに気付きました。これは、Visual C++ では最大速度を意味します。デフォルト設定は、全体的なパフォーマンスの最適化というよりも、L2 キャッシュ内に完全に収まる小さなプログラムである傾向があるベンチマークで見栄えを良くすることに関係があると常に感じていたので、通常は最小サイズに最適化するように設定します。
gcc - gcc でベクトル化するには?
v4 シリーズのコンパイラーは、AMD Athlon や Intel Pentium/Core チップなどの最新の CPU でSIMDgcc
プロセッサーを使用してループを自動的にベクトル化できます。これはどのように行われますか?
c++ - C++オブジェクトファイルが大きすぎます
私はC++プログラムに取り組んでおり、単一の1200行ファイル(かなり複雑なステートマシンを初期化する)からコンパイルされたオブジェクトコードは、ほぼ1メガバイトになります。何がファイルをこれほど大きくしているのでしょうか?オブジェクトファイル内のスペースを取るものを見つける方法はありますか?
c - コンパイラによって最適化されていない SCCS の "what" 文字列
展開された実行可能ファイルまたは共有ライブラリのバージョン番号を確認できるように、バイナリ オブジェクト内に what 文字列を埋め込もうとします。通常、標準の CVS Id 情報をこの文字列に埋め込みます。たとえば、以下を埋め込む場合があります。
Cコード内。
男から (1) 何:
what ユーティリティーは、SCCS get コマンド (sccs-get(1) を参照) が @(#) ID キーワードを置換するパターン @(#) の出現を各ファイル名で検索し、", >, NEWLINE、\、または NULL 文字。
この変数のインスタンスは 1 つだけであり、参照されることはありません。これはコンパイラによって最適化される可能性があると誰かが示唆しました。
私はこの手法を C と C++ の両方で、さまざまなコンパイラで長年使用してきましたが、最適化された文字列をまだ見ていません。
最適化されていない理由を知っている人はいますか?
c# - + を使用して単一の文字列値を割り当てる場合のパフォーマンス コストはどれくらいですか?
最初に文字列に値を割り当てるときに、読みやすさを向上させるために文字列を複数の行に分割すると、パフォーマンス コストがかかるのではないかとよく疑問に思います。文字列は不変であるため、毎回新しい文字列を作成する必要があることを知っています。また、今日の非常に高速なハードウェアのおかげで、パフォーマンス コストは実際には無関係です (悪魔のようなループに陥っている場合を除きます)。たとえば、次のようになります。
JVM または .Net のコンパイラおよびその他の最適化は、これをどのように処理しますか。単一の文字列を作成しますか? または、1 つの文字列を作成してから、値を連結した新しい文字列を作成し、次に値を再度連結した別の文字列を作成しますか?
これは私の好奇心のためです。
compiler-construction - ループ分裂はシングルコアで機能しますか?
シングル コア プロセッサ用にコンパイルしている場合、いつループ分割/分散を使用する意味がありますか?
compiler-optimization - 30 GOTO 10 は常に 10 になりますか?
ジョエルが言及した最新のポッドキャストの精神で、彼はいくつかの簡単な質問とおそらく興味深い答えを求めています...
今日のプログラミング環境では、言語ステートメントの実行順序に依存することはできません。本当?心配する必要がありますか?
30 GOTO 10 は常に 10 になりますか?*
*意図的に 20 を使用したわけではありません ;)
[編集] この質問の締めくくりに投票した 4 人に対して ...
「ランタイムコンパイラは、プロファイリング情報を使用して、コンパイル中のコードを最適化します。JVM は、より良いコードを生成するために、実行に固有の情報を使用することが許可されています。つまり、あるプログラムでメソッド M をコンパイルすると、別のプログラムで M をコンパイルする場合とは異なるコードが生成される可能性があります。別"
(Java concurrency in practice、2006 年、Goetz らより)
..「モノモーフィックコール変換」を見てください
[編集]
別の編集では、プロセッサはステートメントの実行順序を入れ替えることができます...
compiler-optimization - コンパイラはどのような状況でプログラム ステートメントの実行順序を変更できますか?
これが本当の質問でない場合は、お気軽に閉じてください ;)
c - C プログラミング: アセンブラーの観点から見た ++i と i=i+1 の違いは?
これはインタビューの質問でした。同じだと言いましたが、これは誤答と判断されました。アセンブラの観点から、想像できる違いはありますか? アセンブラーの出力を確認するために、デフォルトの gcc 最適化と -S を使用して 2 つの短い C プログラムをコンパイルしましたが、それらは同じです。
c++ - C / C ++コンパイラはどのように機能しますか?
10年以上のC/C ++コーディングの後、私は次のパターンに気づきました。非常に優れたプログラマーは、コンパイラーの内部について詳細な知識を持っている傾向があります。
私はかなり優秀なプログラマーであり、コンパイラーの「迷信」のアドホックなコレクションを持っているので、知識を再起動して基本から始めたいと思います。
誰かがオンラインリソースやお気に入りの本へのリンクをお勧めできますか?特に、C / C ++のコンパイル、最適化、GCC、LLVMに興味があります。