branch-prediction

    1

    1答えて

    のは、このような単純なifを想定してみましょうマルチスレッド: if (something) // do_something else // do_else このif-else文が異なるスレッドで並列に実行され、各スレッドが異なる結果をもたらすが、自身の人生を通して一定であると仮定します。たとえば、スレッド1では、条件は常にスレッド2ではtrue、スレッド2ではtrueと

    1

    1答えて

    質問は非常に簡単です - 関数に与えられた実際のパラメータをチェックするとパフォーマンスが低下しますか? エクスポートされたライブラリ関数は、通常、ユーザーコードによって渡された実際のパラメータをチェックする傾向がある: if (arg1 == NULL || arg2 == NULL) return -EINVAL; は、このチェックは、パフォーマンスの低下を招くのか?私はいくつか

    1

    1答えて

    ブランチなしで自動的にオーバーフローを処理するセーフバッファのタイプを作成しようとしています。バッファサイズは2の累乗であり、有効な正の(すなわち、ゼロを含まない)インデックスのみを有するものとする。また、インデックスに格納された要素が検索キーと等しい場合は、指定されたインデックスでの削除である、チェックされた削除も可能です。 私は基本的にこの Element *buffer[256]; in

    0

    1答えて

    この質問は、コードの最適化についてではなく、短絡論理演算子と通常論理演算子の性能差についての技術的な質問が、ハードウェアレベルでの実行方法。 基本的に論理ANDとORは1サイクルを要しますが、短絡評価は分岐を使用し、さまざまなサイクルを取ることができます。今私は、分岐予測がこの評価を効率化できることを知っていますが、私はその1サイクルより速い方法を見ていませんか? はい、右オペランドが高価なもので

    1

    2答えて

    これは純粋に概念的な質問です。一度も実行されていないブランチが発生した場合、OSのスイッチタスクはなぜ機能しないのですか?ダイナミックブランチ予測は過去に行われたブランチでのみ機能し、スタティックブランチ予測は特定のシナリオでのみ有効です。ブランチ上にデータがない場合は、OSのように見え、プロセッサはブランチを盲目的に推測するのではなく、別のタスクをパイプラインに投入し始めなければなりません。次に

    3

    2答えて

    意図的に特定の方法でコードを書いて、分岐予測器がほとんどの場合のオプションを選択できるようにしますか?たとえば、エラーはリソースがロードされたかどうかをチェックします。これが可能であれば、どのようにこれをあなたの利点に使うことができますか?あなたはGCCを使用している場合

    0

    1答えて

    私が読んだところに基づいて、コストは0サイクルであるようです。それは本当に0サイクルですか?コストが0サイクルの場合、これにはCPU命令キャッシュ内でのフラッシュの可能性だけでなく、ジャンプ命令自体が含まれていますか?私はどのCPUアーキテクチャーにも感謝しています。

    4

    2答えて

    私は通常の日にプログラミングしているとき、私はすべての支店が取られていない可能性が高いことを確認します。 int retval = do_somting(); if(!retval) { /* Less-than-likely event*/ } これは分岐の予測を最適化し、CPUの予測ビットを「取らない」ように設定します。しかし、予測子ビットはforループの後に "take"に強制されます

    0

    1答えて

    私はlikely()/ unlikely()マクロがどのように機能するかを理解しており、分岐予測も理解しています。残念ながら、私は高水準プログラミングの文脈で分岐予測を学んでいませんでした。 私が知りたいのは、可能性の高い/おそらくないマクロ内の評価がセグメンテーションフォールトとなる場合、分岐予測履歴や現在の結果/パイプラインにどのように影響するかです。 予測の検証が完了しなかった場合、成功か失

    5

    1答えて

    最適化と分岐予測の観点から、これらの2つのコードには違いがありますか? まず: void think_and_do(){ if(expression){ //Set_A of instructions } else{ //Set_B of instructions } } int main(){ think_and_d