問題タブ [micro-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.
java - Javaでの所要時間
条件付きループを個別に実行するのに必要な時間を知りたいです。「if else」、「while」、「for」、または「foreach」ループを使用するオプションがあった場合、どのループがより速く実行されるかのように.私は違いが非常に小さいことを知っており、ほとんどの人はそうではないと言うでしょう.問題ですが、何千ものデータにアクセスするプログラムがあれば、この点が明らかになります。
Javaで最初に変数を宣言するかどうか、使用する直前に変数を宣言するかどうかを知りたいのですが、違いはありますか。所要時間の合計は短縮されますか? はいの場合、実際に使用されているのはどれですか(変数が最初に宣言されているもの、または使用されている b4 と宣言されている場所)?
c# - Switch ステートメントの大文字と小文字の順序によってパフォーマンスが変わる可能性がありますか?
以下のようなswitchステートメントがあるとしましょう
Alphabet
ここで、 e を持つ頻度が最も高く、次にそれぞれ a、c、f が続くことがわかっているとします。そのため、ステートメントの順序を再構築case
して、次のようにしました。
2 番目のswitch
ステートメントは最初のステートメントよりも高速switch
ですか? はいの場合、私のプログラムでこのswitch
ステートメントを何度も呼び出す必要がある場合、それは大幅な改善になりますか? または、そうでない場合、周波数の知識を使用してパフォーマンスを向上させるにはどうすればよいですか?
performance - オリジナルの 8086 でレジスタを 1 または (-1) に設定する最も効率的な方法
私は今、組み立てコースを受講しています。私たちの家の課題をチェックする人は、非常に衒学的な昔ながらの最適化フリークです。たとえば、次のような場合は 10% を控除します。
それ以外の:
たとえ一度しか使っていなくても。
私はアセンブリ プログラミングの完全な初心者ではありませんが、最適化の専門家でもありません。そのため、何かについてあなたの助けが必要です (非常にばかげた質問かもしれませんが、とにかく尋ねます): レジスタ値を 1 に設定する必要がある場合または(-1)を使用する方が良いですか:
または次のようなことをします:
私は本当に良い成績が必要なので、できるだけ最適化しようとしています。(時間とコードサイズの両方を最適化する必要があります)
c++ - C++ でインライン アセンブリを行う方法 (Visual Studio 2010)
私は、200 行のコア モジュールによって 70% の時間が使用される、パフォーマンスが重要な、数を処理する C++ プロジェクトを書いています。
インライン アセンブリを使用してコアを最適化したいのですが、まったく初めてです。ただし、GCC や NASM で使用されるものなど、いくつかの x86 アセンブリ言語は知っています。
私が知っているすべて:
アセンブラ命令を配置し_asm{}
たい場所に配置する必要があります。
問題:
- どこから始めればよいかわかりません。インライン アセンブリが開始された時点で、どのレジスタに何が入っていますか?
c++ - クラスメンバーにアクセスするときのパフォーマンス
私はパフォーマンスが重要なものを書いており、使用すると違いが生じるかどうかを知りたいと思っていました:
また
- これは基本的に同様のコードになりますか? クラス メンバーへのアクセスに余分なオーバーヘッドはありますか?
これは C++ の専門家には明らかであるため、現時点では非現実的なベンチマークを作成しようとはしません。
c - n++ が n=n+1 よりも高速に実行されるのはなぜですか?
C 言語では、なぜ はn++
よりも速く実行されるのn=n+1
ですか?
私たちのインストラクターは、今日のクラスでその質問をしました. (これは宿題ではありません)
c++ - C++2つのアレイをすばやく追加する
与えられた配列:
すべての値が0〜100の範囲である場合、C ++でこれらの2つの配列を追加して、キャンバスの各セルがそれ自体にアドオンの対応するセル値を加えたものに等しくなるようにする最も速い方法は何ですか?
IE、私は次のようなことを達成したいと思います:
したがって、canvas [0] [0]=3およびaddon[0][0] = 2の場合、canvas [0] [0] = 5
私はナップザックタイプの問題をブルートフォースする非常に単純なプログラムを書いているので、ここではスピードが不可欠であり、何千万もの組み合わせがあります。
そして、ちょっとした追加の質問として(助けてくれればありがとう!)、canvasの値のいずれかが100を超えているかどうかをチェックする最も速い方法は何でしょうか? ループが遅い!
php - PHP での大きなインポートの最適化
私は単純なインポーターを持っています。かなり大きな csv の各行を通過し、データベースにインポートします。
私の質問は、別のメソッドを呼び出して各オブジェクトを挿入する必要があるか (DO を生成し、マッパーに挿入するように指示する)、またはインポート メソッドで挿入プロセスをハードコードしてコードを複製する必要があるかどうかです。
エレガントなことは 2 番目のメソッドを呼び出すことだとわかっていますが、関数呼び出しはコストがかかるということを頭の中で聞き続けています。
どう思いますか?
java - Java:配列操作のマイクロ最適化
単純なフィードフォワードニューラルネットワークのJavaポートを作成しようとしています。
これには明らかに多くの数値計算が含まれるため、中央ループを可能な限り最適化しようとしています。float
結果は、データ型の制限内で正しいはずです。
私の現在のコードは次のようになります(エラー処理と初期化が削除されました):
-serverオプションを指定してJVMを実行していますが、現在のところ、私のコードは同様のCコードよりも25%から50%遅くなっています。この状況を改善するために何ができますか?
ありがとうございました、
マーティン・ウィボエ
編集#1:膨大な量の回答を見た後、私はおそらく私たちのシナリオの数字を明確にする必要があります。通常の実行中に、メソッドはさまざまな入力で約50.000回呼び出されます。典型的なネットワークは、numberLayers = 3層で、それぞれ190、2、1ニューロンです。したがって、最も内側のループには約2*191+3=385
反復があります(レイヤー0および1に追加されたバイアスニューロンをカウントする場合)
編集#1:このスレッドでさまざまな提案を実装した後、私たちの実装は実質的にCバージョンと同じくらい高速です(約2%以内)。すべての助けをありがとう!for
すべての提案は役に立ちましたが、正しい答えとしてマークできるのは1つだけなので、配列の最適化を提案することと、ループヘッダーを事前に計算する唯一のことの両方について、@Durandalに渡します。
c++ - if を使用しないテストと比較して、if ステートメントはどの程度効率的ですか? (C++)
2 つの数値のうち小さい方を取得するプログラムが必要ですが、「x が y より小さい場合」という標準を使用するかどうか疑問に思っています。
これより多かれ少なかれ効率的です:
(または、int delta = a - b
一番上に置き、インスタンスをそれで置き換えるバリエーションa - b
)。
私は、これらのうちどれがより効率的であるか (または、違いが小さすぎて関連性がない場合)、および if-else ステートメントと一般的な選択肢の効率性を考えています。