タグ付けされた質問 「branch-prediction」

26
ソートされた配列を処理する方が、ソートされていない配列を処理するよりも速いのはなぜですか?
OverаэтотвопросестьответынаStack Overflowнарусском:Почемуотсортированныймассивобрабатов、еессененеренененеререненееетсябыстре 以下は、非常に奇妙な動作を示すC ++コードの一部です。奇妙な理由で、データを奇妙にソートすると、コードがほぼ6倍速くなります。 #include <algorithm> #include <ctime> #include <iostream> int main() { // Generate data const unsigned arraySize = 32768; int data[arraySize]; for (unsigned c = 0; c < arraySize; ++c) data[c] = std::rand() % 256; // !!! With this, the next loop runs faster. std::sort(data, data + arraySize); …

5
Javaで(a * b!= 0)が(a!= 0 && b!= 0)より速いのはなぜですか?
私はJavaでいくつかのコードを書いています。ある時点で、プログラムのフローは、2つのint変数「a」と「b」が非ゼロであるかどうかによって決定されます(注:aとbが負になることはありません。整数オーバーフローの範囲内には決してありません)。 私はそれを評価することができます if (a != 0 && b != 0) { /* Some code */ } または代わりに if (a*b != 0) { /* Some code */ } 私はそのコードが実行ごとに数百万回実行されることを期待しているので、どちらがより高速になるのか疑問に思いました。ランダムに生成された巨大な配列でそれらを比較することによって実験を行い、配列のスパース性(データの割合= 0)が結果にどのように影響するかを知りたくもありました。 long time; final int len = 50000000; int arbitrary = 0; int[][] nums = new int[2][len]; for (double fraction = 0 …

10
if ... else ifステートメントを確率で順序付けするとどのような影響がありますか?
具体的には、一連のif... else ifステートメントがあり、各ステートメントがに評価される相対確率をあらかじめ何らかの方法で知っtrueている場合、それらを確率の順に並べ替えると、実行時間にどのくらいの差が生じますか?たとえば、私はこれを好むべきですか: if (highly_likely) //do something else if (somewhat_likely) //do something else if (unlikely) //do something これに?: if (unlikely) //do something else if (somewhat_likely) //do something else if (highly_likely) //do something ソートされたバージョンの方が速いことは明らかですが、読みやすさや副作用の存在のために、それらを最適でない順序で並べることができます。また、実際にコードを実行するまで、CPUが分岐予測をどの程度うまく処理できるかを判断することも困難です。 それで、これを実験している間に、特定のケースについて自分の質問に答えることになりましたが、他の意見/洞察も聞きたいです。 重要:この質問はif、プログラムの動作に他の影響を与えることなく、ステートメントを任意に並べ替えることができることを前提としています。私の回答では、3つの条件テストは相互に排他的であり、副作用はありません。確かに、望ましい動作を実現するためにステートメントを特定の順序で評価する必要がある場合、効率性の問題は疑わしいものです。

8
GCCが分岐予測を常に特定の方法で実行するように強制するコンパイラヒントはありますか?
Intelアーキテクチャの場合、GCCコンパイラに、コード内の特定の方法で常に分岐予測を強制するコードを生成するように指示する方法はありますか?Intelハードウェアはこれをサポートしていますか?他のコンパイラやハードウェアはどうですか? 私はこれをC ++コードで使用します。高速で実行したい場合がわかっており、他の分岐が最近必要になった場合でも、他の分岐を取得する必要があるときにスローダウンを気にしません。 for (;;) { if (normal) { // How to tell compiler to always branch predict true value? doSomethingNormal(); } else { exceptionalCase(); } } Evdzhan Mustafaの質問に続くように、ヒントは、プロセッサが命令に初めて遭遇したときにヒントを指定するだけでよく、その後のすべての分岐予測は正常に機能しますか?

16
「IF」は高価ですか?
私の人生では、教師がその日に正確に言ったことを思い出すことはできません。 モジュールは「データ構造とアルゴリズム」であり、彼は次のように何かを私たちに話しました: if文は最も高価な[何か]です。[something]は[something]を登録します。 はい、私は恐ろしい記憶を持っています、そして本当に本当に申し訳ありませんが、私は何時間もグーグルで働いていて、何も起きていません。何か案は?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.