問題タブ [speculative-execution]
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.
x86 - skylake CPU が分岐の予測を誤った場合、正確にはどうなりますか?
分岐の予測が誤った場合に、skylake CPU パイプラインのさまざまな段階で命令がどうなるか、正しい分岐先からの命令が実行を開始するまでの時間を詳細に理解しようとしています。
したがって、ここで 2 つのコード パスを赤 (予測されたが実際には実行されなかったもの) と緑 (実行されたが予測されなかったもの) としてラベル付けします。質問は次のとおりです。 1. 赤の命令が破棄され始める前に、分岐はパイプラインをどのくらい通過する必要がありますか (パイプラインのどの段階で破棄されますか)。2. (分岐によって到達したパイプライン ステージに関して) グリーン命令の実行を開始できるのはどれくらいの時間ですか?
私はアグナー・フォッグの文書と多数の講義ノートを見てきましたが、これらの点が明確ではありませんでした。
cpu - メモリの場所を仮想化する投機的実行を行う CPU はありますか?
疑似アセンブリで、高価な計算の後にレジスターを古典的に再利用することを考えてみましょう。
算術ユニットを完全に使用できるようにするために、実行ユニットは次のようにします。
並行して:
ここで、r2bis は仮想化された (または名前が変更された) r2 レジスタです。
ここで、レジスターの貧弱な CPU で作業し (または、多数あるが既に使用されている)、一時的なスタックの場所にデータを配置するとします。
アドレスがわかっているメモリ位置 ((sp+C) は既に計算できるため) が実行ユニットによって仮想化され、同じ 2 つの実行を並行して進めることができる場合はありますか?
コンパイラーは、それほど制約されていないスタック空間 (非常に制約されたレジスター空間とは異なります) で別の場所を見つけるタスクを課される可能性があるため、このケースは非常にばかげているように見えるかもしれません。しかし、仮想化されたメモリが短期間のデータをメモリに保存する必要がある条件分岐の投機的な実行を可能にする可能性があるため、他のケースはそれほど愚かではないかもしれません。これは、Java のようにオブジェクト フィールドをレジスタに入れる簡単な方法がない言語では特に重要です。「参照」(ポインタ) エスケープを除外して、new
動的割り当てを回避し、Java を有効にする必要があります。クラスのインスタンスを C++ クラスの自動インスタンス (スタック割り当てまたはレジスタ内) に変換します。(そして、C++ でさえthis
、単純なフラット クラスの一見単純な使用法では、実際のポインターを持たないという問題があります。)
apache-spark - Spark スペキュレーションの新しいタスクに制限はありますか?
投機 = を使用して Spark でジョブを実行するとしtrue
ます。
タスク (T1 としましょう) に長い時間がかかる場合、Spark は T1 を強制終了することなく、別のエグゼキュータでタスク T1、たとえば T2 のコピーを起動します。
さて、T2 にも正常に完了したすべてのタスクの中央値よりも多くの時間がかかる場合、Spark は別のタスク T3 を別のエグゼキューターで起動しますか?
はいの場合、この新しいタスクの生成に制限はありますか? いいえの場合、Spark は 1 つの並列ジョブに制限され、いずれかの完了を無期限に待機しますか?