[解決済み] GCCに、分岐予測を常にある方向に強制するコンパイラのヒントはありますか?
2022-09-15 09:23:14
質問
Intel アーキテクチャでは、私のコードで常に特定の方法で分岐予測を強制するコードを生成するよう GCC コンパイラーに指示する方法はありますか? Intel のハードウェアはこれをサポートしていますか? 他のコンパイラーやハードウェアについてはどうでしょうか?
私は、高速に実行したい場合を知っていて、最近そのブランチを取ったときでさえ他のブランチを取る必要があるときのスローダウンを気にしない C++ コードでこれを使用するでしょう。
for (;;) {
if (normal) { // How to tell compiler to always branch predict true value?
doSomethingNormal();
} else {
exceptionalCase();
}
}
Evdzhan Mustafa へのフォローアップの質問として、ヒントは、プロセッサが初めてその命令に遭遇したときのヒントを指定するだけで、その後のすべての分岐予測は正常に機能するのでしょうか。
どのように解決するのですか。
C++20では の可能性が高い属性と低い属性 は標準化されるべきで、すでにサポートされている はg++9で . ですから、議論されているように ここで と書くことができます。
if (a > b) {
/* code you expect to run often */
[[likely]] /* last statement here */
}
例えば、次のコードでは、else ブロックは
[[unlikely]]
の中にある
if
ブロック
int oftendone( int a, int b );
int rarelydone( int a, int b );
int finaltrafo( int );
int divides( int number, int prime ) {
int almostreturnvalue;
if ( ( number % prime ) == 0 ) {
auto k = rarelydone( number, prime );
auto l = rarelydone( number, k );
[[unlikely]] almostreturnvalue = rarelydone( k, l );
} else {
auto a = oftendone( number, prime );
almostreturnvalue = oftendone( a, a );
}
return finaltrafo( almostreturnvalue );
}
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】Javaで(a != 0 && b != 0)よりも(a*b != 0)の方が速いのはなぜか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] Linuxカーネルのprocess/unlikelyマクロはどのように動作し、どのような利点があるのでしょうか?