問題タブ [pipelining]
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 - CISC プロセッサのパイプライン化が難しいのはなぜですか? どのような意味で、他の命令よりも「複雑な」命令があるのでしょうか?
Miles Murdoca と Vincent Heuring による「Computer Architecture and Organization」によると、
CISC 命令は、パイプライン化されたアーキテクチャにはあまり適していません。パイプライン処理が効果的に機能するためには、少なくとも相対的な命令の複雑さに関して、各命令が他の命令と類似している必要があります。
なぜこれが真実なのですか?命令の複雑さの意味。すべての命令が実行を開始するのに 1 クロック サイクルかかるわけではありませんか? 命令がメモリの読み取りまたは書き込みである場合、時間がかかりますが、RISCプロセッサもメモリの読み取りまたは書き込みを行いますか?
c++ - Visual Studio が逆参照する前にループ ポインターをインクリメントするのはなぜですか?
次の SIMD コードから Visual Studio 2012 のアセンブリ出力を確認しました。
ループ本体は次のとおりです。
ecx
次の行に格納するときに 16 を減算するためだけに、16ずつインクリメントするのはなぜですか?
computer-architecture - ストールと分岐遅延スロットについて
コンピューター アーキテクチャのコースを受講しています。これまでのところ、私を助けているノートとビデオがある別の大学からこのウェブサイトを見つけました: CS6810, Univ of Utah . 私はそのサイト、特にこのサイトに投稿されたいくつかの古い宿題に取り組んでいます。パイプラインと関連する概念、特にストールと分岐遅延スロットを理解しようとしています。
私は今、その古い宿題の最初の質問を見ていますが、これらの問題をどのように行うべきかわかりません.
質問は次のとおりです。
次のコード セグメントについて考えてみましょう。ここでは、分岐が 30% の確率で実行され、70% の確率で実行されません。
R1 = R2 + R3
R4 = R5 + R6
R7 = R8 + R9
R10 = 0 の場合、linex に分岐
R11 = R12 + R13
R14 = R11 + R15
R16 = R14 + R17
...
ラインクス: R18 = R19 + R20
R21 = R18 + R22
R23 = R18 + R21
...
命令が最初のステージでフェッチされ、分岐結果が 3 つのステージの後でわかる、10 ステージのインオーダー プロセッサを考えてみましょう。次のシナリオでプロセッサの CPI を見積もります (プロセッサ内のすべてのストールが分岐に関連しており、分岐が実行されたすべての命令の 15% を占めると仮定します)。
すべての分岐で、分岐の結果がわかるまでフェッチは停止します。
すべての分岐は不成立と予測され、分岐が成立した場合、誤ってフェッチされた命令は押しつぶされます。
プロセッサには 2 つの遅延スロットがあり、分岐に続く 2 つの命令は常にフェッチされて実行されます。
3.1. 遅延スロットを埋めるための指示が見つかりません。
3.2. 分岐の前に 2 つの命令を遅延スロットに移動できます。
3.3. ラベル「linex」の後に 2 つの命令を遅延スロットに移動できます。
3.4. (元のコードでは) 分岐の直後に 1 つ (注: 2 つではなく 1 つ!) の命令を遅延スロットに移動できます。
この質問を見始める方法さえわかりません。私はすべてのメモを読み、そのサイトのビデオを見て、H&P の本のセクションを読みましたが、この問題についてまだ混乱しています. 時間があれば、誰かがこの質問を解決するのを手伝ってくれれば幸いです。答えを概念化する方法を知りたいだけです。
computer-science - パイプライン分岐予測のパフォーマンス例
私はパイプラインの危険の例に取り組んでおり、次のドキュメントの質問 2 を見ています。
私は幾分助けになったこれを見つけました。
私が理解しているように、戦略は次のように機能します。
- すべてがわかるまでストール: MEM2 ステージに到達するまでストールします。私が理解しているように、これは最も単純な戦略であり、ストール サイクルはすべて => 5,5,5 で同じになります。
- 採用されていないと仮定する: 分岐が採用されていないと仮定します。この例では、分岐が行われると、IF1 ステージを過ぎてすべてを停止する必要があります => 7,0,7
- 想定: は大まかに #2 の逆になります。分岐が行われない場合、IF1 ステージを過ぎて失速する必要があります => 0,7,0
私の理解が正しいかどうかはわかりません。誰かが私の解決策を批判し、私の考えが正しいかどうかを教えてくれたり、どこが間違っているかを説明してくれたりしたら、大歓迎です.
EDIT1:質問に答える
1) 自分が正しかったことをいつ知ることができますか (分岐解決)?
EXステップで分岐解決がわかると思います。
2) 分岐をいつ受けたいか (正しいか間違っているか) はいつわかると思いますか?
AGステップでいつ分岐したいかわかると思います。
3) 住所はいつわかりますか?
AGステップの後に次のアドレスを知っていると思います。
EDIT2: 「すべてがわかるまで立ち止まってください。」分岐 (条件付きまたは無条件) が取られるかどうかにかかわらず、パイプラインは AG ステージ中にストールを開始し、EX ステージが完了するまでストールし続けることを理解しています。意味: すべての場合で 4 サイクル停止する必要があります。
次のようになります: I# = IF#、M# = MEM#、ST = ストール
EDIT3:「取られていないと仮定する」. 名前が示すように、すべての分岐 (条件付きまたは無条件のいずれか) が行われると想定していることは理解しています。ここで発生する唯一の失速は、分岐が行われる場合です。失速は以前と同じ場所で発生します。したがって、この場合、分岐 (条件付きまたは無条件) が発生した場合は 4 つのストールが発生し、そうでない場合はストールが発生しません。
次のようになります
EDIT4:「取られたと仮定する」。これは本質的に前の戦略の逆です。分岐が発生しない場合は 4 つのストールがありますが、分岐 (条件付きまたは無条件) が発生する場合は 1 つもありません。
次のようになります