森/RPR2009/chapter2.4/要約
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[森/RPR2009/chapter2.4]]
**Overcoming Data Hazards with Dynamic Scheduling [#x3439786]
-このセクションでは、ダイナミックスケジューリングについてで、これは、ハードウェアが実行の命令順を再配置することで、ストールを減らします。
-Advantage of Dynamic Scheduling
+コンパイル時に、依存性があるかどうかがわからなくてもおk
+キャッシュミスのような予測することができない遅延をプロセッサーが許容することを可能にする。
+1つのパイプラインによってコンパイルされるコードが、1つの異なったパイプラインにおいて、効果的に実行が可能である。
**Dynamic Scheduling: The Idea [#pa1ed119]
-簡単なパイプラインの制限は、順序づけられた命令によってつかわれます。
-命令はプログラムの要求によって発行される、そしてもし命令が、パイプラインでストールされているなら、そのあとの命令は実行し始めることができない。
DIV.D F0, F2, F4
ADD.D F10, F0, F8
SUB.D F12, F8, F14
-DIVのインストラクションは、実行時間が長いので、ストールが生じる。ADD命令はDIV命令が終わらないと実行されない。
-SUB命令もADD命令が実行されないので、実行することができない。
OoO =「順序を守らない実行」の意。
-Out-of-OrderはWAR、WAWハザードを引き起こす可能性がある。
DIV.D F0, F2, F4
ADD.D F6, F0, F8
SUB.D F8, F10, F14
MUL.D F6, F10, F8
-ADDとSUB命令の間には依存性はない。そして、ADD命令の前に、SUB命令を実行する。これは、WARハザードを生み出す。
-RAW--書き込み(Write)の後(After)にこれを読む(Read)という本来の実行順序が逆になると古い値を読んでしまう危険,
-WAW--書き込み(Write)の後(After)に,もういちどあらためて書き込み(Write)があるという実行順序が崩されると, 後続する処理で古い値を使ってしまうという危険,
-WAR--読み出し(Read)が済んでから書き込み(Write)をしないといけないのに, 書き込みが早すぎると間違った値を読んでしまうという危険
----
-imprecise exception・・・「あいまいな例外」起こるとき
--パイプラインがすべての命令の終了が、例外を引き起こす命令よりも遅いとき。
--パイプラインがいくつかの命令の終了が、例外を引き起こす命令よりも早いとき。
----
-OoO executionを可能にするために、ID(Instruction Decode)ステージを2つに分けなければならない。
+Issue・・・命令をデコードして、構造ハザードの確認をする。
+Read operands・・・データハザードが終わるのを待って、演算対象を読み込む。
----
-私たちは、命令が実行される最初と最後の2つのときを見分けなければならない、なぜなら、その間が、命令が実行されているから。
-パイプラインは、同時に複数の命令を実行することが可能である。このことがなければ、動的なスケジューリングは無駄である。
-複数の命令を同時に実行するためには、複数のfunctiion unitsが必要となる。
**Dynamic Scheduling Using Tomasulo's Approach [#b3edd885]
-OoOを可能にするための仕組み
-このスキームは、命令のための演算対象が利用可能な時、レジスタリネーミングの導入、RAW、WAW、WARハザードを最小化する方法をさがす。
-命令依存を調べる主要な目的は、演算対象が利用可能になったらすぐに、実行できることと、レジスタリネーミングが共通の特性。
-IBMの目標としては、特別なコンパイラや、ハイエンドなプロセッサを使うことなく、性能の高い浮動小数点の計算を行うこと。
-このアルゴリズムを説明するにあたって、floatinig-point unit と resister-memory unitに着眼する。
-WAR、WAWハザードをレジスタリネーミングによって回避する例を次に述べる。
DIV.D F0, F2, F4
ADD.D F6, F0, F8
S.D F6, 0(R1)
SUB.D F8, F10, F14
MUL.D F6, F10, F8
DIV.D F0, F2, F4
ADD.D S, F0, F8
S.D S, 0(R1)
SUB.D T, F10, F14
MUL.D F6, F10, T
-ADD命令は、DIV命令を待つ。先にSUB命令をして書き込むタイミングが早すぎるというWARが起きないように、レジスタリネーミングを行い、Sをつかう。
-ADD命令が、MUL命令より終了するのが遅い場合はWAWハザードが生じる。なぜなら、F6は、S.DによってReadされる。このためにTでレジスタリネーミングを使用する。
**The basic structure of a MIPS floating-point unit using Tomasulo's algorithm [#hdecdd0e]
-reservation station
--Tomasulo's scheme は、reservation stationによってレジスタリネーミングが提供される。
--reservation stationは発行する指示の待ちのオペランドをバッファリングする。
--reservation stationの基本的な考え方は、可能になればすぐ演算対象を持ってきて、バッファーに格納する。レジスタから演算対象を取ってくる必要をなくす。
-命令は、Instruction unit から Instruction queueに送られます。
-reservation stationは、オペランド(演算内容)と演算対象を含み、またこれはデータハザードを見つけて解決するためにつかわれる。
**浮動小数点のユニットについて [#gbe8d0cd]
-図2.9は、浮動小数のユニットとロード・ストアのユニットを含んでいる。
-各reservation stationは、命令をだされていて、機能回路での実効をまっているもの、命令に対する各演算対象の値、保持している。
-ロードバッファとストアバッファはデータかアドレスを持っている、そして、ほとんど
reservation stationと同じ動作をするので、必要なときのみ分けて考える。
-レジスタは、2本のバスによって機能回路とをつないでいる。ストアバッファには1本のバスでつないでいる。
-機能回路と、メモリの結果すべては、Common data busによって送られる。これはロードバッファ以外に送られる。
-すべてのreservation stationは、パイプラインコントロールで使用される、タグのフィールドを持っている。
**命令のステップ [#r631371a]
-Issue ・・・WAR、WAWハザードを削除する。
--次の命令を、正しいデータフローの保持を確保するFIFOの要求を保持しているqueueからとってくる。
--もし、reservation stationにマッチしているのがなければ、演算対象がこのときレジスタにあれば、命令を演算対象の値を使ってreservation stationに出す。
--もし、空でない場合は、構造ハザードがあり命令はストールされる、reservation stationか、バッファが自由になるまで
--もし、演算対象がレジスタに無いなら、演算対象が生成されるfunction unitのトラックは保持される。
--構造ハザードとは、同一の部品(ハードウェア資源)を要求するため、資源の競合が発生してしまうこと。
-Execute
--もし、1つ以上のオペランドが利用不可になっているなら、実行待ちになっている間、共通のデータがあるバスを観測する。
--演算対象が、利用可能になったとき、演算対象をどこか待っていたreservation stationに配置する。
--演算対象すべてが利用可能になると、演算はそれぞれのユニットで実行される。
--演算対象が利用可能になるまで、命令実行を遅らせることによって、RAWハザードを回避できる。
----
--独立した複数の機能回路が、同じクロックサイクルで異なる命令を実行し始めることができるが、もし、1つ以上の命令が1つの機能回路を使おうとしていたら、どの命令かを選ばなければならない。
----
--ベースレジスタが利用可能なとき、使用できるアドレスを実行し、使用できるレジスタをバッファに配置する。メモリユニットが利用可能ならすぐにロードは実行される。ストアは、メモリユニットに送られるまえに、格納される値を待つ。プログラムの指示によっロードとストアは維持される。これは、メモリのハザードを防ぐ。
----
--例外の処理を守るために、全ての分岐命令がプログラム中の命令を実行する前の位置に入るまで、命令が実行し始めないようにする。
--プロセッサは、分岐予測をつかう。
-Write result
--結果が利用可能になったとき、CDBに書き込み、そこからレジスタと reservation station に書き込む。
--ストアは格納される値とストアアドレスが利用可能になると、バッファされ、それからメモリユニットが自由になるとすぐに結果が書かれる。
**seven fields [#l7d77867]
-バッファかユニットが結果をだすことに注意すえるスキームでは、タグを覚えることは重要だ。
-命令をreservation stationに渡すとき、レジスタの名前は捨てられる。
-reservation stationはそれぞれ、7つのフィールドを持っている。
--Op
---ソースの演算対象で実行される演算
--Qj,Qk
---reservatoin stationは、ソースの演算対象に対応するものを生産する。0はソースの演算対象が、すでにVj,Vkに利用可能になっているか、必要ないかのどちらか
--Vj,Vk
---ソースの演算対象の値。各演算対象に、V分野の1つかQ分野だけが有効であることに注意する。ロードのために、Vkはオフセットを取る。
--A
---ロードかストアのためのメモリアドレスの計算のための情報をもつために使われる。はじめは、命令の隣のフィールドはここに格納される。、そのあちアドレス計算をしてここに使用できるアドレスをストアする。
--Busy
---reservation station とそれに付随すファンクションが、ふさがっていることを示す。
#comment
終了行:
[[森/RPR2009/chapter2.4]]
**Overcoming Data Hazards with Dynamic Scheduling [#x3439786]
-このセクションでは、ダイナミックスケジューリングについてで、これは、ハードウェアが実行の命令順を再配置することで、ストールを減らします。
-Advantage of Dynamic Scheduling
+コンパイル時に、依存性があるかどうかがわからなくてもおk
+キャッシュミスのような予測することができない遅延をプロセッサーが許容することを可能にする。
+1つのパイプラインによってコンパイルされるコードが、1つの異なったパイプラインにおいて、効果的に実行が可能である。
**Dynamic Scheduling: The Idea [#pa1ed119]
-簡単なパイプラインの制限は、順序づけられた命令によってつかわれます。
-命令はプログラムの要求によって発行される、そしてもし命令が、パイプラインでストールされているなら、そのあとの命令は実行し始めることができない。
DIV.D F0, F2, F4
ADD.D F10, F0, F8
SUB.D F12, F8, F14
-DIVのインストラクションは、実行時間が長いので、ストールが生じる。ADD命令はDIV命令が終わらないと実行されない。
-SUB命令もADD命令が実行されないので、実行することができない。
OoO =「順序を守らない実行」の意。
-Out-of-OrderはWAR、WAWハザードを引き起こす可能性がある。
DIV.D F0, F2, F4
ADD.D F6, F0, F8
SUB.D F8, F10, F14
MUL.D F6, F10, F8
-ADDとSUB命令の間には依存性はない。そして、ADD命令の前に、SUB命令を実行する。これは、WARハザードを生み出す。
-RAW--書き込み(Write)の後(After)にこれを読む(Read)という本来の実行順序が逆になると古い値を読んでしまう危険,
-WAW--書き込み(Write)の後(After)に,もういちどあらためて書き込み(Write)があるという実行順序が崩されると, 後続する処理で古い値を使ってしまうという危険,
-WAR--読み出し(Read)が済んでから書き込み(Write)をしないといけないのに, 書き込みが早すぎると間違った値を読んでしまうという危険
----
-imprecise exception・・・「あいまいな例外」起こるとき
--パイプラインがすべての命令の終了が、例外を引き起こす命令よりも遅いとき。
--パイプラインがいくつかの命令の終了が、例外を引き起こす命令よりも早いとき。
----
-OoO executionを可能にするために、ID(Instruction Decode)ステージを2つに分けなければならない。
+Issue・・・命令をデコードして、構造ハザードの確認をする。
+Read operands・・・データハザードが終わるのを待って、演算対象を読み込む。
----
-私たちは、命令が実行される最初と最後の2つのときを見分けなければならない、なぜなら、その間が、命令が実行されているから。
-パイプラインは、同時に複数の命令を実行することが可能である。このことがなければ、動的なスケジューリングは無駄である。
-複数の命令を同時に実行するためには、複数のfunctiion unitsが必要となる。
**Dynamic Scheduling Using Tomasulo's Approach [#b3edd885]
-OoOを可能にするための仕組み
-このスキームは、命令のための演算対象が利用可能な時、レジスタリネーミングの導入、RAW、WAW、WARハザードを最小化する方法をさがす。
-命令依存を調べる主要な目的は、演算対象が利用可能になったらすぐに、実行できることと、レジスタリネーミングが共通の特性。
-IBMの目標としては、特別なコンパイラや、ハイエンドなプロセッサを使うことなく、性能の高い浮動小数点の計算を行うこと。
-このアルゴリズムを説明するにあたって、floatinig-point unit と resister-memory unitに着眼する。
-WAR、WAWハザードをレジスタリネーミングによって回避する例を次に述べる。
DIV.D F0, F2, F4
ADD.D F6, F0, F8
S.D F6, 0(R1)
SUB.D F8, F10, F14
MUL.D F6, F10, F8
DIV.D F0, F2, F4
ADD.D S, F0, F8
S.D S, 0(R1)
SUB.D T, F10, F14
MUL.D F6, F10, T
-ADD命令は、DIV命令を待つ。先にSUB命令をして書き込むタイミングが早すぎるというWARが起きないように、レジスタリネーミングを行い、Sをつかう。
-ADD命令が、MUL命令より終了するのが遅い場合はWAWハザードが生じる。なぜなら、F6は、S.DによってReadされる。このためにTでレジスタリネーミングを使用する。
**The basic structure of a MIPS floating-point unit using Tomasulo's algorithm [#hdecdd0e]
-reservation station
--Tomasulo's scheme は、reservation stationによってレジスタリネーミングが提供される。
--reservation stationは発行する指示の待ちのオペランドをバッファリングする。
--reservation stationの基本的な考え方は、可能になればすぐ演算対象を持ってきて、バッファーに格納する。レジスタから演算対象を取ってくる必要をなくす。
-命令は、Instruction unit から Instruction queueに送られます。
-reservation stationは、オペランド(演算内容)と演算対象を含み、またこれはデータハザードを見つけて解決するためにつかわれる。
**浮動小数点のユニットについて [#gbe8d0cd]
-図2.9は、浮動小数のユニットとロード・ストアのユニットを含んでいる。
-各reservation stationは、命令をだされていて、機能回路での実効をまっているもの、命令に対する各演算対象の値、保持している。
-ロードバッファとストアバッファはデータかアドレスを持っている、そして、ほとんど
reservation stationと同じ動作をするので、必要なときのみ分けて考える。
-レジスタは、2本のバスによって機能回路とをつないでいる。ストアバッファには1本のバスでつないでいる。
-機能回路と、メモリの結果すべては、Common data busによって送られる。これはロードバッファ以外に送られる。
-すべてのreservation stationは、パイプラインコントロールで使用される、タグのフィールドを持っている。
**命令のステップ [#r631371a]
-Issue ・・・WAR、WAWハザードを削除する。
--次の命令を、正しいデータフローの保持を確保するFIFOの要求を保持しているqueueからとってくる。
--もし、reservation stationにマッチしているのがなければ、演算対象がこのときレジスタにあれば、命令を演算対象の値を使ってreservation stationに出す。
--もし、空でない場合は、構造ハザードがあり命令はストールされる、reservation stationか、バッファが自由になるまで
--もし、演算対象がレジスタに無いなら、演算対象が生成されるfunction unitのトラックは保持される。
--構造ハザードとは、同一の部品(ハードウェア資源)を要求するため、資源の競合が発生してしまうこと。
-Execute
--もし、1つ以上のオペランドが利用不可になっているなら、実行待ちになっている間、共通のデータがあるバスを観測する。
--演算対象が、利用可能になったとき、演算対象をどこか待っていたreservation stationに配置する。
--演算対象すべてが利用可能になると、演算はそれぞれのユニットで実行される。
--演算対象が利用可能になるまで、命令実行を遅らせることによって、RAWハザードを回避できる。
----
--独立した複数の機能回路が、同じクロックサイクルで異なる命令を実行し始めることができるが、もし、1つ以上の命令が1つの機能回路を使おうとしていたら、どの命令かを選ばなければならない。
----
--ベースレジスタが利用可能なとき、使用できるアドレスを実行し、使用できるレジスタをバッファに配置する。メモリユニットが利用可能ならすぐにロードは実行される。ストアは、メモリユニットに送られるまえに、格納される値を待つ。プログラムの指示によっロードとストアは維持される。これは、メモリのハザードを防ぐ。
----
--例外の処理を守るために、全ての分岐命令がプログラム中の命令を実行する前の位置に入るまで、命令が実行し始めないようにする。
--プロセッサは、分岐予測をつかう。
-Write result
--結果が利用可能になったとき、CDBに書き込み、そこからレジスタと reservation station に書き込む。
--ストアは格納される値とストアアドレスが利用可能になると、バッファされ、それからメモリユニットが自由になるとすぐに結果が書かれる。
**seven fields [#l7d77867]
-バッファかユニットが結果をだすことに注意すえるスキームでは、タグを覚えることは重要だ。
-命令をreservation stationに渡すとき、レジスタの名前は捨てられる。
-reservation stationはそれぞれ、7つのフィールドを持っている。
--Op
---ソースの演算対象で実行される演算
--Qj,Qk
---reservatoin stationは、ソースの演算対象に対応するものを生産する。0はソースの演算対象が、すでにVj,Vkに利用可能になっているか、必要ないかのどちらか
--Vj,Vk
---ソースの演算対象の値。各演算対象に、V分野の1つかQ分野だけが有効であることに注意する。ロードのために、Vkはオフセットを取る。
--A
---ロードかストアのためのメモリアドレスの計算のための情報をもつために使われる。はじめは、命令の隣のフィールドはここに格納される。、そのあちアドレス計算をしてここに使用できるアドレスをストアする。
--Busy
---reservation station とそれに付随すファンクションが、ふさがっていることを示す。
#comment
ページ名: