吉田/徒然/輪講メモ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[吉田/徒然]]
むしろメモでしかない。
~
----
''4.6 - メモリ一貫性モデル:導入編''
-キャッシュ一貫性制御により複数のプロセッサが一貫性を持ってメモリを参照できる。
-だが、どのようにして一貫性を出しているのか。
--プロセッサAが更新した値をプロセッサBがいつの時点で参照できればいいのか。
-ここでの問題は他プロセッサのライトを知るには、それをリードしてみるしか無いことである。
-メモリ一貫性の問題は単純なようで複雑。
--(P243コードで説明。タイミング問題)
-シーケンシャルコンシステンシ(連続一貫性)
--各プロセッサ内において順序よくメモリアクセスが行われる。
--ライトバッファが空になったらリード、というようにメモリ操作完了まで他のメモリ操作を遅延させることで実現する。
--大規模マルチPや相互接続遅延の大きなマルチPでは性能を発揮しきれない。
-問い
--にゃー
-答え
--にゃにゃー
-性能向上のために、2つの方法が考えられた。
--1、シーケンシャルコンシステンシに遅延隠蔽技術を使用(chap4.7で)
--2、高速なハードウェアによる制約を緩和したメモリコンシステンシ。
-2の方法では、プログラマからのマルチプロセッサの見え方に影響がある。
-ので、まずはプログラマが何を求めているかを考える。
プログラマの視点
-シーケンシャルコンシステンシモデル:性能面では劣るが解りやすい。
-解りやすく高性能なプログラミングモデルの開発が課題。
-効率的実現可能なプログラミングモデルとは、プログラムが同期化されている(データレースフリー)と仮定できるものである。
--同期による順序付け無しの場合にプロセッサの相対速度の差で実行結果が変わってしまう状態をデータレース状態という。
-複数プロセッサで同一変数を扱う場合、ロック・アンロックでリードライト操作を挟む。
--ライト前のアンロックとリード前のロックにより、全てのライトは他プロセッサのリードと分離される。
-ほとんどのプログラムは同期している事が求められる。
--同期がなければ、プログラムの実行順序は実行速度が決定することになり結果が不定になるため。
-同期機構を自作してもいいがバグ問題もあるし、アーキテクチャ上のサポートもなく、また次世代機では動かない可能性もある。
-最後に、標準的な同期プリミティブにより、ハードが条件緩和コンシステンシモデルを実装したとしてもシーケンシャルコンシステンシモデルと同様の同期操作が保証される。
リラックスコンシステンシモデルの基礎
-リラックスコンシステンシとは、順序付けのために同期操作を使うが、リードライトの非順序実行を許可するものである。
-シーケンシャルコンシステンシモデルにおいては、R→W、R→R、W→R、W→Wの全てでオーダリングを守る必要があった。
-リラックスコンシステンシモデルには、上記4つのどれを緩和するかで様々なタイプがある。
--W→R緩和:Total Store Ordering(TSO)またはプロセッサコンシステンシ。
---ライト・オーダリングを保持するのでシーケンシャルコンシステンシで動くものはコレでも動く。
--W→W緩和:Partial Store Ordering(PSO)
---???
--R→WとR→R緩和:ウィークオーダリング、PowerPCコンシステンシモデル、リリースコンシステンシなど。
---順序制限や同期操作のオーダリングによって様々に。
-性能向上の可能性と条件定義による複雑化の両天秤。
--リラックスモデルに関する諸々の考察については、AdveとGharachorlooの纏めたチュートリアルを参照すると幸せになれます。
コンシステンシモデルについてのまとめ
-現在のマルチPはプロセッサコンシステンシモデルやリリースコンシステンシモデルなどのリラックスコンシステンシモデルをサポートしている。
-同期機構はマルチP特化でエラーが起こりやすいものなので、プログラマには標準同期ライブラリを使って同期プログラムを書き、ウィークコンシステンシモデル(プログラマから見えない→暗黙同期?)を用いて高性能を実現してもらいたい。
-次節で詳しく述べるが、リラックスコンシステンシの性能上の利点の多くはシーケンシャルコンシステンシやプロセッサコンシステンシを用いて得ることができる。
-リラックスコンシステンシモデルに関するキーポイントは、主にコンパイラによって実現する共有変数へのメモリアクセスの最適化である。コレについても次節で。
-
~
----
''4.5 - 同期の基礎''
-同期マシンは一般にハード提供の同期命令に依存するユーザレベルのソフトウェアルーチンで構築される。
-小規模なマルチプロセッサや衝突の少ない場合には、割り込みできない命令やある値へのリードライトの実行が不可分な命令列がハード機構の中の鍵となる。
-ソフトウェア同期マシンはコレを用いて構築される。
-ここではロック・アンロック同期機構について見ていく。
-ロック・アンロック機構は単純な排他制御のほかにより複雑な同期機構の実現にも用いられる。
-大規模マルチPや衝突過多な状況では衝突がねずみ算になったりするため同期がボトルネックになるかもしれない。
--この項での同期式を大多数プロセッサに拡張する方法についてはApendixHで。
ハードウェア根幹機構
-マルチPに同期機構を実装する鍵はメモリアドレスから値を読むと同時に書き換え可能なハード機構である。
-この機構は多くの場合ロックやバリア的な機能も持っていて、ユーザレベルで容易に同期操作が行える。
-基本同期操作構築法。
-同期操作構築の一般的な操作としてメモリとレジスタの値を相互交換する「同時交換(?)」がある。
-せつめいっ
-値0or1でロックのオンオフを定める単純なロック機構を構築することを考える。
-レジスタ内の値1をロックに対応するメモリアドレスの値(おそらく0値)と入れ替えることでロックをオンにするとする。
-この命令の返値は通常0であり、もし他のプロセッサが既にアクセス権を得ていたら1が返る。
--このためには、権利を得てアクセスしたプロセッサ以外がメモリ内の値(0値)を読むことの無いように(つまりロックセットすることのない様に)0値の読み出しと同時に1値のセットが必要になる。
-値のゲットセットがスワップ命令として同時に行われるところがミソ。
-仮に複数のスワップ命令が同時に呼ばれてもライト機構のシリアライズで順序付けられるので無問題。
-他の同期基礎機構も読み書きをセットにした命令を軸にしている。
-昔よく使われていた操作としてTest&Setがあった。これは値のテスト後、パスしたらその値をセットするもの。
-他にはFetch&Incrementがある。これはメモリアドレスの中の値を返すと同時にインクリメントして書き戻すもの。
-0値によって同期変数を要求するプロセスが無いことを示すことでスワップ命令と同様の使い方が出来る。
-Fetch&Increment的な操作の別の利用法を次に述べる。
-そもそもメモリ操作を同時に行うよう実装するのは難しい。リードライトを割り込み無しの1命令で行う必要があるし、ハード的にはその間他の操作ができない上にデッドロック回避の必要もあるので一貫的制御(?)の実装は困難。
-2命令を間に他命令が入らないようにする機構を付けて1セットとして実行されるようにする方法もある。
-これは例えばLoad Linked(Load Locked)とConditional Storeからなる特殊なロードストア命令対で、Conditional StoreはLoad Linked後に値が変更されたかを判断する機能を持つ。
--是で1、非で0を返す。
-(P239とP240.1のコードで適当に説明を)
一貫性制御機構を使ったロックの実装
-上記などの一体化操作が使えることにより、マルチPの一貫性制御機構を用いてスピンロックを実現できる。
--スピンロック:ロックが得られるまで、つまり自分がアクセス権を得られるまでループなどで何度でもアクセス権獲得を試行するロック機構。
--ロックが短時間で得られると期待できる場合やロックを得るプロセスのレイテンシを抑えたいときなどに用いられる。ループ待ちのコストと実益を天秤にかけるべし。
-キャッシュの一貫性制御が要らない場合、最も簡単な実装方法はロック変数をメモリに配置することである。
-(P240.2のコードで適当に説明を)
-マルチPにキャッシュの一貫性制御機構が付いている場合はロック値のキャッシュが可能。
-この利点は、一つはスピン処理をローカルキャッシュを対象として行えること(毎回メインメモリまで行かなくていい)、もう一つは最後にロックアクセスしたプロセッサが近いうちに再度ロックを得ようとする場合が多い(局所性がある)ことである。
-後者の場合、ロック値はプロセッサのキャッシュに残っている可能性が高いのでコスト削減になる。
-スピンロックのキャッシュ一貫性制御機構利用法。
-図4.23:3プロセッサでのキャッシュ一貫性制御動作バス動作。
-(P241とP242のコードで適当に説明)
-スピンロック方式は単純で判りやすいが、ロックの解放時に一斉に発生する通信トラフィックのせいで多くのプロセッサを扱うのは至難。
-(解決法その他をApandixHに)
~
----
''2.12 - 総括''
-複数命令同時発行構造の実に興味深い点は、その性能向上が基本的なユニプロセッサプログラミングモデルの影響を受けないこと。
-ILPの恩恵を、受けること自体は簡単なのだけれど、設計上の問題はそのプラクティスの煩雑さ。
-単純なレベル1解析においてさえ想定するパフォーマンスを達成するのは困難でしょう。
-過去10年ほどは、目新しい技術を取り入れることよりも、クロックレートを上げたり、均一な性能を出すことに主眼があった。
-過去5年間に発表された動的スケジューリング・マルチイシュー型のプロセッサはすべて同じ基本アーキテクチャと発令レートを持っていたの。この基礎技術は1995年の技術発表当時と変わらない。
--Pen4, IBM Power5, Athlon, Opteron. どれも3-4m命令/clock
-でも、クロックレートは10-20倍、キャッシュサイズは4-8倍、リネームレジスタ数は2-4倍になり、ロードストアユニット数も2倍以上になっている。トータルなパフォーマンスは初期の8-16倍になっているのさ。
-クロックレート増加とCPI減少のトレードオフの決定は困難であり、この書の'95年版では以下のように述べている。
--(略
-3.8GHzPen4の有用性を引き出すときのネックは主に私達のプロセッサ設計の理解度にある。
-しかしながら次章で触れるが、高クロックレートプロセッサの初期の成功は何故だったのかと言う疑問も出てくる。(ILPの有用性、ILPの効果的運用、電力配分による命令転送速度の向上があった。それか?[3-4i/c])(((?
-更に、OpteronとPen4の比較にてディープパイプラインでの高クロックレートによるアドバンテージはパイプラインストールにより相殺される事が分かった。
--この辺りの解析は次章で。
-'95から'05まででより明白になったがマルチイシュー型プロセッサの性能安定率は命令発効率の増大に比例して下がっている、
-クロックレートとCPIのトレードオフは様々な要素が絡むので一概には決めきれない。
-我々が次に目指すべきは明白で、Pen4の高クロックなヤツはもうね、破棄。
-IBMもAMDもIntelもみんなデュアルコアな感じに移行してきている。
-次章では、何故この20年追求してきたILPによる高速化をここに来て止めるのかを説明する。
-
~
----
''2.11 - 注意点と落とし穴''
注意点
-二つあり、一つは単純なルールの誤認。一つはベンチマーク選択の重要性。
--「プロセッサはCPIが低いほど早いモンなんだろ?」とか、~
「プロセッサはクロックレートが高いほどイイんだろ?」とか。
-まぁ、CPIは低いに越したことはないんですがね。洗練されたマルチ命令パイプラインはノーマルのよりクロックレートは普通低いし。
-ILP不可アプリやハードウェアリソース的に並列処理効率が上げられないときにはクロックレートが高い方が勝つですよ。
-でもILP可なら出来るだけILPった方がいいですの。
-IBM Power5 プロセッサは高いINT,FP処理効率を持つ。
--プロセッサコアを2つ持ち、それぞれ毎クロックFP2命令、ロードストア2命令を含む4命令を実行可能。
--2005年における最大クロックレートは1.9GHz
--比較として、Pen4はマルチスレッディング仕様のシングルコア(マルチスレッディングについては次章で)~
毎クロック3命令の深々パイプラインで、2005年における最大クロックレートは3.8GHz
-つまり、Power5は命令数とCPIがPen4の半分以下ならPen4より早くなる。
-図2.34:Pen4とPower5の各種ベンチにおける 命令数xCPI を示す。
--FPプログラムではPen4に倍差をつけることもあるほどにPower5が有利だが、INTプログラムではPower5はPen4のクロックレートによるアドバンテージに及ばない。
--Pen4と比較すると、Power5の命令数xCPIでのアドバンテージはFPで3.1倍なのに対しINTではわずか1.5倍となっている。
-これは2005年におけるPen4の最大クロックレートがPower5のガチ2倍(?)だからで、結果としてSPECfp2000ではPower5がPen4に1.5倍差を付け、SPECint2000ではPen4がPower5に1.3倍差を付けることになった。
落とし穴
-Sometimes bigger and dumber is better.(訳せないないですの
-次代パイプラインはCPI改善に主眼をおいて開発されている。
-21264は洗練された 29k bits 分岐予測を使用(以前のバージョンの21164では 2bits x 2k entries = 4k bits 分岐予測)(p88, Ch2.3 参照)
-SPEC95ベンチにおいて、21264の持つ洗練された分岐予測はシンプルな 2-bit 分岐予測と比べて1つを除いてすべて上回っていた。
--割合的にはSPECint95において1000命令中、21264の予測ミスが11.4命令(1.14%)だったのに対し21164は16.5命令(1.65%)だった。
-少々驚くべきことに、シンプルな 2-bit 構造(21164)の性能がトランザクション処理において21264に勝ったのだ。(21164の17/1000ミスに対し21264は19/1000だった)
-7分の1の分岐予測ビット量で、どうやってそんな性能を出したのか。
-答えは処理の構造にある。
-トランザクション処理のコード量は、SPEC95ベンチのどれより桁違いにデカく、山ほど分岐命令が出てくる。
-21164の局地分岐予測ビット量が2kなのに対して21264のビット量が1kだったことで僅かに上回った訳だ。
-加えて覚えておきたいのは、異なるアプリは異なる挙動をするということ。
-プロセッサはある特定の挙動のプログラムに狙いを絞ったマイクロアーキを持つ方向に洗練されて来ているので、想定しないアプリではさらに突飛な挙動をするかもしれない。
~
----
RPR資料。2章は「命令レベルでの並列化とその効果について」~
-2.1-2.9~
・1.命令レベル並列化ってのは何がしたいのか。~
・2.並列化の基本コンパイルテクについて。~
・3.分岐予測コストを減らそう。~
・4.動的スケジューリングによるデータハザード突破。~
・5.動的スケジューリングの例。~
・6.ハード側による予測。~
・7.複数命令発行と静的スケ使用時のILPの効果。~
・8.複数命令発行&動スケ&分岐予測使用時のILPの効果。~
・9.命令転送、予測の上級テク。~
''2.10 - ここまでのまとめ:Pen4について''
-性能評価に SPEC CPU benchmarks を使用。~
-同機はマルチスレッディングもサポートするがこれについては後述。~
-Pen4: Netburstという「積極的なミス検知マイクロアーキ」を使用。~
--高クロックレートと命令複数同時発行を組み合わせることによる高命令スループットを目的としたディープパイプライン(長ぇ
--似たようなのはPen3にもあった()
-命令実行追跡キャッシュ(ETC): これまでのIA-32のキャッシュに対抗するものとして実装。IA-32をデコードしたものに相当するuop(micro-operation)をトレース(?~
--追跡キャッシュ(TC): 命令キャッシュの一種。分岐を挟む命令シ−クエンスを保持。通常キャッシュよりも局所的に効果。~
-TCによりパイプラインをFULLにすることによりTCにヒットする限りIA-32命令の再読が不要。~
--例外はTCのL2キャッシュからのデコードミス時のみ(TCへの再読込。
-毎クロック3命令、6uopsが生成される。~
--1命令(IA-32)で3つ以上のuopsが必要なときは microcode ROM から生成する(にゅ?
-ETCはuopの分岐予測用の固有の分岐バッファを持つ。ETCが高ヒットするということは命令のフェッチ、デコードがほぼ不要だということ。~
--例として SPEC CPUINT2000 ベンチでのミスヒット率は0.15%以下。~
-ETCからの命令フェッチ後uops実行。追加にバッファをとるよりレジスタリネームを使う。~
-毎クロック3つのuopsをキューに保持し、送り出す(きゅむ~
--送出には4ポートあり、トータルで毎クロック6個のuopsを流し込める。~
-ロードストアには専用ポートが使われ、他ポートが基本ALU処理を担当する。4つ目をFPやINT型演算用に使う。~
-Pen4が動的スケジューリングを採用して以来、単純な静的パイプラインは使われていない。~
-代わりにパイプラインステージの動的配置により可変クロックサイクルになった。~
--Pen3では、命令が時間のかかる実行ステージにマルチクロックサイクルを求める中、命令のフェッチから終了までの最短クロックは11だった。~
-動的パイプラインでは命令はオペランドを待ってより長くなっていい(Pen4はCISC採用)~
-初期のPen4は、高クロックレートのためにPen3のパイプラインを細分割した、今よりも深パイプラインだった。~
-Pen4の出現は1990年、パイプラインあたりの最短クロックは増加して21、クロックレートは1.5GHz。~
-2004年にはインテルは3.2GHzのPen4を発表。これによりパイプラインは更に伸び、クロックサイクルは31に。(PLステージ追加により転送スピードは上がりクロックレートが初めのPen4の倍以上に)~
-で、PLステージ増やしてクロックレートに拘った結果、大量のキャッシュミス&分岐予測ミスが付いてきましたよ、と。~
-2レベルのキャッシュがDRAMアクセスの頻度を最小に。~
-分岐予測は2段階の分岐予測バッファにより過去の分岐履歴を用いて行う。~
-最新のPen4の分岐予測バッファのサイズは増加していて、更に分岐バッファがミスったら静的予測を使う。~
=Pen4の機能解析=
-分岐予測により高パフォーマンスを。
-パフォはメモリシステムにもガチ依存。
-だが動的スケジューリングと大量ロードストアがキャッシュミスのレイテンシを隠している。
-クロックレート3.2GHzはL2キャッシュミスの復帰時間をキュー埋めのストールにあてることで出している。
-分岐予測、キャッシュミスは重要なとこだからこの辺を重点的に。
-ここでは SPEC INT2000, FP benchmarks + パフォモニタ用Pen4を使用。
-使用プロセッサは Pen4 640 (クロック3.2GHz, システムバス800MHz, DDR2 DRAM 667MHz)
-図2.28:1000命令中の全予測ミスにおける分岐予測ミスの割合を示す。
--パイプライン・パフォーマンスの観点から、何が分岐予測ミスの要因なのか。
--一般に、FPベンチとINTベンチを比べると後者の方が分岐命令の割合が多い。
--当然?予測的中率も前者が上。FPに比べ、INTは8倍ミスってあらせられる。
---(何?整数型って駄目な子なワケ?)
-分岐予測プロセッサにとって予測精度は命。
--予測ミスは復帰時間と誤動作分のエナジーが無駄に。
-図2.29:予測ミスったuopsの割合。
-推測ミス率と予測ミス率が見た目ほぼ等しいことに気付く。・・・?
--speculation:推測、prediction:予測、・・・え、違いは?
--推察用のソースを持っているか否か、か?
-キャッシュミスのパフォに与える影響。
--SPEC benchmarks ではほとんど空気。
-L1L2のミスのほうが重大。
--図2.30:10個のベンチ各々のL1L2のミスレート。
--L1ミスはL2ミスの14倍とか。ミスペナはL2のほうがちょっと大きい。
--u-archがデカいミス時間を隠せるのはL2がL1ほどパフォに影響しないから(?
---特に mcf と swim。
-実際問題予測ミスやキャッシュミスがどうパフォに影響するか。
-実際問題予測ミスやキャッシュミスがどうパフォに影響するか。
-図2.31:10個のSPEC CPU2000ベンチにおける実質CPI。
--使用ベンチ:gzip, vpr, gcc, mcf, crafty, wupwise, swim, mgrid, applu, mesa
--mcf:他4個のINTベンチの4倍超CPI、最悪推測率、L1L2のミスレートも死亡説。これではキャッシュミス隠蔽は無理。
--vpr:INTベンチ5個中3個の1.6倍のCPI(mcf除く)、INTベンチ中最悪予測率、L2ミスINTベンチ中ではmcfに次いで多い。
--swim:FPベンチ中最低パフォ、他FPベンチの2倍↑CPI、mcfに次ぐL1L2ミスレート。良いところはスバラシイ推測率。でもコレじゃミスレートはカバーできない。特にL2ミス。
--L1L2ミスレートがそこそこなmgrid, gzipとかはそれなりのパフォーマンス。
-Pen4とAMD Opteron を比べてみよう。 in SPEC benchmarks.
--両方、動スケ、推測式パイプラインで毎クロック3命令を処理。
--両方2レベルキャッシュ(L1L2)構造だがPen4はL1のトレースキャッシュを使っている上に最近のPen4はL2のサイズがより大きくなってる。
--トランジスタ数、チップ面積、消費電力がほぼ同じ。2005年における各プロセッサの最適クロックレートはPen4が7-10%高かった。
-1番の違いは高クロックレートにデザインされた深パイプライン(in NetBurstアーキ)
-コンパイラはどちらも似たようなコードを吐くのでCPI比較が興味深い。
-パイプラインの違いと同様にメモリヒエラルキの違いも測定に影響。
--メモリシステムパフォの違いについては5章で。
-図2.32:2プロセッサのCPI比較。
--平均してOpteronがPen4よりCPIが1.27高い。
--無論、より深いパイプラインのPen4はOpteronよりCPIが大きかろうとは思う。
--深々パイプライン化されたNetBurst設計の最重要課題は、高クロックレートに拘るか、CPI増大を改善するかである。
-2005時点の最高クロックレートで2つをテストしたよ。in SPEC CPU2000(Opt 2.8GHz, Pen4 3.8GHz)
-高クロックレートになったはいいが、キャッシュミス増により実質のCPIは増加した。
-図2.33:同ベンチセットの性能比較。
--結果はOpteronの僅差勝ち。
--Pen4の敗因はCPI増大により生じる膨大なパイプラインストールをツブし切れなかったこと。
-よって、設計者が当初考えていたほど深パイプラインによる高クロックレートと複数命令同時発行による高スループットの両立は出来ていない。
-コレについては次章で。
~
----
''2.8 - 複数命令発行&動スケ&分岐予測使用時のILPの効果''
-これまで動スケ、マルチイシュー、投機動作を個別に見てきたが、ここではそれらを併せてイイ感じに見ていこうと思う。
-楽に行くために毎クロック2命令のプロセッサを考えるが最近の3命令以上のものと比べてもどこもおかしくはない。
-Tomasuloアルゴリズムを拡張して、毎クロック動作する個別のINT,FPユニットを持つスパスカパイプラインを仮定する。
-プログラムの意味を誤認するので、リザベーションステーションへのout-of-order命令発行はやらない。
-動スケの利点を最大限生かすために、INT,FPユニットに処理を割り振るスケジューリングハードウェアを用いた毎クロック任意の2命令を流せるパイプラインを考える。
-INT,FP演算の相互作用が重要なので、Tomasuloを投機実行に加えてINT,FPの処理ユニットおよびレジスタに対応するよう拡張する。
-動スケなプロセッサでマルチイシューする方法は2つ有るが、共にリザステの割り当てとパイプライン制御テーブルの更新がキモであることをもとにしている。
-方法一つ目は、1ステップを半クロックで処理するもので、これにより毎クロック2ステップ処理できる。
-方法2つ目は、命令間の依存関係に関係なく2命令を同時実行できるロジックを構築すること。
-最近の毎クロック4命令以上実行可なスーパースカラプロセッサは大抵が両方採用している(命令発行ロジックをパイプライン化&命令幅を広げている)
-投機的動スケと多重命令発行を組み合わせるにはパイプラインのバックエンドでもう一工夫必要になる。
--1クロックに複数の命令を完了しコミット(保存的な意味か)する必要がある。
-この試みはコンセプトは多重命令発行に似て簡単だが、実装は命令発行とレジスタリネーミングと同様にチャレンジブルである。
-投機動スケと多重命令発行の組み合わせかたを例を用いて次に示す、
例題だお
-INT配列の各要素をインクリメントするループを考える。
-2命令同時発行で、投機実行の有る無しで2つのプロセッサを考える。
LOOP: LD R2, 0(R1)
DADDIU R2, R2, #1
SD R2, 0(R1)
DADDIU R1, R1, #8
BNE R2, R3, LOOP
-実アドレス計算、ALU演算、分岐判定用の個別のINT処理ユニットが有るとする。
-初めの3ループの実行過程を表にまとめなさい。
-毎クロック任意の2命令がコミット可とする。
~
解答な
-図2.20と図2.21に投機処理を使わない場合と使う場合のプロセッサのパフォを示す。
-3番目の分岐が投機有りで13クロック目、投機無しで19クロック目に実行される。
-投機無しだと命令の発行速度にコミットが追いつかなくなるために、投機無しプロセッサはさらなるイタレーションでストールしてしまう事になった。
-投機無しプロセッサのパフォはロード命令のアドレス計算を分岐決定前に出来るようにすれば向上できる。
-が、投機メモリアクセスが無ければ性能向上は1ループにつき1クロックにしかならないのは確定的に明らか。
~
-この例は、データの依存がある分岐時における投機処理の有用性を明確に示している。
-しかしながら、このアドバンテージは正確な分岐予測に依存している。
-誤った投機処理は性能低下を招く事が多い。
-
~
----
''2.7 - 複数命令発行と静的スケ使用時のILPの効果''
(ぶっちゃけVLIWについて)
-前節ではデータ・制御ストールを無くすことで理想CPI(1)を得ようとしてきた。
-パフォUPのためさらにCPIを減らしたいが、毎クロック1命令処理なプロセッサではそれは不可である。
-ここでは1クロックに複数命令を発行するマルチイシュー型プロセッサを数節にわたって見ていく。
-マルチイシュー型プロセッサは次の3種なカンジで。
--静的スケジューリングなスーパースカラ・プロセッサ
--VLIWなプロセッサ(VLIW: Very Long Instruction Word)
--静的スケジューリングなスーパースカラ・プロセッサ
-この2種のスーパースカラプロセッサは毎サイクル複数の命令を発行する。発行数は可変。命令の実行順序が異なる(静的:in-order、動的:out-of-order)
-VLIWは依存関係にない複数の命令を一つの命令としてまとめて同時に実行する。同時実行される命令の数は常に一定に保たれ、規定の数に達しない場合は「何もしない」命令で埋められる。
-VLIWプロセッサは本来コンパイラにより静的にスケジューリングされる。
-IntelとHPがIA-64アーキを作った際、そのアーキスタイルを「EPIC」と名付けた(EPIC: Explicitly Parallel Instruction Computer. 訳:明示的に並列な命令のコンピュータなのは確定的に明らか)
--AppendixGに説明ががが。
-コンパイラにスケジューリングさせているため、、静スケなスパスカプロセッサ(イミフ)は毎クロックの命令数差のみでVLIWのコンセプトに近い。
-命令同時発行数増加でアドバンテージが減るので、静スケスパスカは基本、命令発行幅を2程度とする。
-この命令発行幅を超える時は、ほとんどの設計者はVLIWか動スケを選択する。
-静スケの説明のために、ハードと要求コンパイラの類似性からここではVLIWを見ていく。
-図2.18: マルチイシューの基本方法とその差異。その方法を用いるプロセッサの動作を示す。
VLIWの基本動作
-VLIWは複数の独立した演算ユニットを持つ。
-VLIWはそれで複数命令を(個々に)処理するのではなく、纏めて1つのデカい命令としたり、順序を変えない一定制約の命令列のパッケージにしたものを処理する。
-この2方法に基本的な違いは無いので、複数処理を1命令とするVLIWの基本命令と変わらないと考えられる。
-VLIWのアドバンテージは命令発行レートが増加するほど増えるので、より発行幅が大きいプロセッサに焦点を当てた。
-実際、シンプルな2命令発行プロセッサのスパスカオーバーヘッドは最小になる。
-4命令発行のスパスカならオーバーヘッドは制御できるはず。
--オーバーヘッド増大が高帯発行プロセッサの最大の壁なのは確定的に明らか。
-分岐用有りのINT処理1つ、FP処理2つ、メモリ処理2つの5処理を含む命令を持つVLIWプロセッサを考えよう。
-この命令は各処理ごとに5つの領域を持ち、それぞれの処理ユニットにセットされる。各ユニットごとにビット幅は16-24bitsとして併せて80-120bitsの命令長となる。
-比較として、Intel Itanium 1&2は6処理を1命令パケットとしている。
-処理ユニットを使い切るために、コードシークエンスを十分に並列化し処理スロットを埋めることが必要。
-この並列性はループアンローリングやデカい単一のループコードのスケジューリングから発見する。
-ループアンローリング時に分岐無しの直線コードが出来たならローカルスケジューリングテクが使える。これは1個の基本ブロック上で処理するもの。
-分岐入り並列化の場合、よりフクザツなグローバルスケジューリングを使う。
-グローバルスケジューリングは複雑な構造のみならず最適化のトレードオフもややこしい(分岐をまたいだコード移動がコスト大的な意味で
-トレーススケジューリング(AppendixG)はグローバルスケジューリングをVLIW用に発展させたもので、
-まずはループコードをループアンローリングや静的な分岐予測を使用して、シーケンシャルな一直線に実行されるコードに変換し、ローカルスケジューリングでもってVLIW用命令を作成する。
ここで例題
--ここに毎クロック5処理(分岐用有りのINT処理1つ、FP処理2つ、メモリ処理2つ)を纏めた1命令をこなすVLIWプロセッサがあるとする。
--このプロセッサを用いてp75のループコードを必要なだけ展開してストールを無くしなさい。
--分岐遅延は無視出来るものとする。
--コード
for(i=1000; 1>0; i=i-1) x[i] = x[i] + s;
-解答
--図2.19にループアンローリング後のコードを示す。
--ループコードは展開によりループ本体の複製が7つ出来、ストールがゼロになり、1ループが9サイクルになった。
--9サイクルで5つ(毎サイクル1.29)の値を出しており、2.2節で2命令発行スパスカがやったループ展開の2倍近い速さである。
~
-オリジナルなVLIWモデルには技術的、輸送流通(?)的な問題がありVLIWの効率を引き出し切れていなかった。
--テク問題:コード増大と制限の強いオペレーションでの並列限界。
-VLIWにおけるコードサイズ増加の原因は2つある。
-ループアンローリングは基本的にコードが増加する。
--単純展開なら1000回ループとして1000回ループ内処理を書き出すことに。ヤバコード。
-命令をフルに埋めきれないときは使われないユニットが出るが、それ用のNOPなビット列が無駄。ぐもにー。無駄。
-ソフトウェアスケジューリング(AppendixG)は、ソフト的なパイプライン化でループアンローリングの効能を得る。コード量は実際のLURほどは増加しない。
-コード増大に対抗して、アタマイイエンコードがよく使われる。同属の命令ビットを共有したり主記憶無いでは圧縮しておいて使用時に展開するなどである(AppendixG)
-初期のカタいVLIWプロセッサはハード側にハザード検出機構を持っていなかった。
-全ユニットが並列に同期実行される必要があり、1つがストールすると他のユニットもストール扱いとして全体が停止。
-最近のプロセッサはより依存性を無くした上でハードチェックとコンパイラがハザードを除去してくれるために機能ユニットを非同期に実行できる。へぇ。
-VLIWはハードとソフトの連携で実現してるのでユニット数やレイテンシの異なるハードでは同じバイナリコードは動かない。
-つまり上位・下位互換が難しい。
-EPICは主にIA-64アーキに使われているVLIWの発展型で、改良点はソフト投機のための拡張、バイナリ互換を保ったハード依存限界の突破などがある。
-マルチイシュー型プロセッサが主に取り組んだのはより多くのILP化(?
-FPプログラムでのシンプルループのアンローリングによる並列性を得る場合、元のループはベクタープロセッサ(AppendixF)で実行するのが効率的かも。
--ベクタープロセッサ:ベクトル演算をひとつの命令で高速に処理するプロセッサ。浮動小数点演算をパイプラインで並列処理し、大規模な数値計算を高速かつ大量に行うことができる。
-マルチイシュー型プロセッサがFPプログラムにおいてベクタープロセッサより優れているかは不明。一般にコストが同じなら、ベクタープロセッサが同等以上に速い。
-マルチのベクタに対する潜在的アドバンテージは断片的なコードから並列性を抽出する能力と全データ形式を簡単にキャッシュできること。
-これらの理由から、多重命令発行は命令レベル並列性のための主要技術になったことは確定的に明らか。
-ベクタはこいつらの添え物。
~
----
''1.3 - コンピューター・アーキテクチャの定義''
-コンピュータ設計者が直面しているタスクは以下の混ざり合った複雑なもの。
--新しい設計にどんな仕様が必要であるかの決定。
--設計において、コスト、パワー、有用性を保ちつつ最大の性能を得ること。
-このタスクには次のような多くの課題がある
--命令セットの設計
--専門の組織(?
--論理設計および''実現''
-この実現には以下も含むかもしれない。
--集積回路設計
--パッケージ(規格と訳すのだろうか
--パワー(前で言ってるじゃないか
--回路の冷却
-デザインを最適化するのには非常に広範囲の技能を必要とする
--コンパイラ
--OS
--論理設計
--パッケージ
=命令セットアーキテクチャ=
-この本では命令セットを可視的に示すのに、インストラクション・セット・アーキテクチャ(ISA)を使用している
-ISAはソフトウェアとハードウェアの中間として機能する
-ここでは、ISAの7つのdimension(どう訳そうか)を説明するために、例としてMIPSと80×86を使用する
++ISAのクラス(分類か
---今日、ほとんどのISAが汎用レジスタ構造として分類される(汎用レジスタ構造>オペランドはレジスタか記憶域のどちらか)
---80x86が汎用レジスタと浮動小数点用レジスタを各16個ずつ持っているのに対し、
---MIPSはそれぞれ32個ずつ持っている(図1.4に汎用レジスタの用途を示す)
---ISAのポピュラーなクラスとしてregister-memory方式とload-store方式がある
---register-memory方式は多くの命令でメモリアクセスが可能で、80x86などが採用している
---load-store方式ではメモリにアクセスできるのはロード・ストア命令のみで、MIPSなどが採用している
---最近のものはほぼ全てload-store方式である
++メモリ・アドレッシング
---80×86やMIPSを含むほぼ全てのデスクトップ、サーバー・コンピュータは、メモリオペランドにアクセスするのにバイト単位アドレシングを使用する
---MIPSのような幾つかのアーキテクチャはオブジェクトが連続していることが必要です(? 後で再訳
---サイズsバイト、アドレスAのオブジェクトへのアクセスが「A mod s = 0」の時に配置される(? 再訳
---80×86はオブジェクトの整列を必要としないが、一般的にオペランドが並んでいるほうがアクセスはより速い
++アドレッシング・モード
---アドレッシング・モードはレジスタと一定のオペランドを指定することに加えて、メモリオブジェクトのアドレスを指定する
---MIPSのアドレッシング・モードは、レジスタと即値、そしてメモリアドレス算出のためレジスタに加算される即値オフセットであるディスプレース(定数値)がある(? はて、)
---80x86hはアドレッシング・モードを3個+定数値使用の3個(計6個)をサポートしている~
・1、レジスタ未使用、つまりアドレス値直接入力か(絶対アドレス方式)~
・2、レジスタ2個使用(ベースレジスタ値とインデックスレジスタ値と定数値を加算。?再訳。相対アドレス方式?)~
・3、レジスタ2個のうちの1つにオペランドのデータサイズを掛けたものと定数値を全て加算(インデックス付きアドレス・レジスタ間接モードとかあった)~
---残りの3つは定数値を使わないもので、レジスタ間接、インデックスレジスタ、レジスタ間接・インデックス付き、となる
++オペランドのタイプと大きさ(素直にサイズか
---ほとんどのISAの様に、MIPSや80×86は次のオペランドサイズをサポートする~
(MIPSや80×86を含むほとんどのISAがサポートしているオペランドサイズ)~
・8bit(ASCII文字)、~
・16bit(Unicode文字かハーフワード)、~
・32-bit(INT型整数かワード)、~
・64-bit(ダブルワードかLONG型整数)、~
---上に加えて以下のIEEE754浮動小数点型をサポートする~
・32bit(単精度)、~
・64bit(倍精度)、~
---80x86は80bitの浮動小数点型(拡張倍精度)もサポートする
++オペレーション(演算、か?
---オペレーションの一般的なカテゴリは、データ転送、論理演算、制御(次で述べる)、そして浮動小数点を扱うものである(微妙
---MIPSは単純でパイプライン化しやすい酩酊セット構造であり、2006年におけるRISCアーキテクチャの代表である
---80x86はより高価で大きなオペレーション・セットを持っている(別に命令セットでいいか?
++移行制御用命令
---80x86やMIPSを含むほぼ全てのISAが、条件分岐、無条件ジャンプ、関数コール及びリターンをサポートしている
---80x86、MIPSの両方がPC相対アドレス指定方式を用いている~
これは、分岐先アドレスをPCとアドレス・フィールドの和によって指定するものである~
---80x86とMIPSでは幾つか小さい違いがある~
・MIPSの条件分岐命令(BE,BNE,など)はレジスタの内容によって分岐判定する、~
・80×86の条件分岐(JE,JNE,など)では算術/論理演算の副作用としてセットされる条件コードビットによって判定する~
さらに、~
・MIPSの関数コール(JAL)時は戻りアドレス値をレジスタに格納する~
・80x86の関数コール(CALLF)時は戻りアドレス値をメモリのスタックに格納する~
++命令のエンコーディング
---エンコーディングには基本的に固定長と可変長の2種類がある
---MIPSの全ての命令はデコード簡略のため32bitに統一してある(固定長)
---80x86のエンコーディングは1bitから18bitの可変長
---可変長命令は固定長命令に比べてより少ないコード量で済む(スキマ無く詰められる)~
(だからx86用にコンパイルしたコードは同じものをMIPS用にコンパイルしたものより小さい)
---前述の方法により命令がどのようにして2進数表記されるのかには注意が必要
---レジスタ数とアドレッシング・モードの数はどちらも命令長に密接に関わる~
・レジスタ領域とアドレッシング・モード領域が1命令内に何度も現れることが出来るため(? 再訳
-命令セット間の違いが小さく、汎用化されている現在、ISAデザインを超えるコンピュータ設計への挑戦が特に盛んである~
(異なる応用分野がある == 汎用化 ? 是 : 非)~
(ISAデザインを超える、では無く、ISAデザインにおける、ではないか)~
-(この版ではISAの例としてMIPS64のサブセットを用いる)
=コンピュータ・アーキテクチャの基礎=~
(目標と機能要求を満たすよう構成とハードウェアを設計する)
-コンピュータの設計には、2つの要素がある: 構成とハードウェア
-「構成」にはコンピュータ設計のハイレベルな面を含む
--メモリ・システム
--メモリの相互接続
--内部プロセッサやCPUの設計
---CPU(中央演算処理装置):算術、論理、分岐演算およびデータ転送を実装
-AMD Opteron64 と Intel Pentium4
--同じ命令セットながら非常に異なった構成を持つ
--両方ともx86命令セットを使用
--パイプラインとキャッシュの実装方式が非常に異なる
-ハードウェアは、コンピューターの詳細(核心?)に関わる
-大体の場合コンピュータの系統(?)は同じ命令セットを持ち似通った構成をしているが、ハードウェアの詳細な実装時には異なる
--例としてPentium4とModeile Pentium4はほぼ同じだがクロックレートやメモリシステムが異なる~
(Modeile Pentium4は低性能のマシンで力を発揮する)(?~
-(この本では「アーキテクチャ」とは、コンピュータ設計の3つの面:命令セットアーキテクチャ、構成、およびハードウェアを全て含むものとする)
-コンピュータ設計者は要求される機能はもちろん、価格、パワー、性能、および有用性を満たすよう設計する必要がある
-設計者はその時々で要求機能が何で、主タスクが何かを選択しなければならない
-要求される機能は市場の需要により特化する
-コンピュータの使用目的によってアプリケーション・ソフトは確定した要求性能を揺るがせる(?
-ソフトウェアの大半がある命令セット構造を元にするなら設計者は新しいコンピュータが既存の命令セットを実装するはずだと判断するかもしれない
-特定用途のアプリケーション市場の存在は設計者に(それを)必要要件に組み入れさせるかも知れない(詳細は後に)(? 微妙
-設計者は技術とコンピュータ使用の双方で将来的コストとアーキテクチャの限界に影響する重要な動向を知っている必要がある(??
-
~
----
#comment
終了行:
[[吉田/徒然]]
むしろメモでしかない。
~
----
''4.6 - メモリ一貫性モデル:導入編''
-キャッシュ一貫性制御により複数のプロセッサが一貫性を持ってメモリを参照できる。
-だが、どのようにして一貫性を出しているのか。
--プロセッサAが更新した値をプロセッサBがいつの時点で参照できればいいのか。
-ここでの問題は他プロセッサのライトを知るには、それをリードしてみるしか無いことである。
-メモリ一貫性の問題は単純なようで複雑。
--(P243コードで説明。タイミング問題)
-シーケンシャルコンシステンシ(連続一貫性)
--各プロセッサ内において順序よくメモリアクセスが行われる。
--ライトバッファが空になったらリード、というようにメモリ操作完了まで他のメモリ操作を遅延させることで実現する。
--大規模マルチPや相互接続遅延の大きなマルチPでは性能を発揮しきれない。
-問い
--にゃー
-答え
--にゃにゃー
-性能向上のために、2つの方法が考えられた。
--1、シーケンシャルコンシステンシに遅延隠蔽技術を使用(chap4.7で)
--2、高速なハードウェアによる制約を緩和したメモリコンシステンシ。
-2の方法では、プログラマからのマルチプロセッサの見え方に影響がある。
-ので、まずはプログラマが何を求めているかを考える。
プログラマの視点
-シーケンシャルコンシステンシモデル:性能面では劣るが解りやすい。
-解りやすく高性能なプログラミングモデルの開発が課題。
-効率的実現可能なプログラミングモデルとは、プログラムが同期化されている(データレースフリー)と仮定できるものである。
--同期による順序付け無しの場合にプロセッサの相対速度の差で実行結果が変わってしまう状態をデータレース状態という。
-複数プロセッサで同一変数を扱う場合、ロック・アンロックでリードライト操作を挟む。
--ライト前のアンロックとリード前のロックにより、全てのライトは他プロセッサのリードと分離される。
-ほとんどのプログラムは同期している事が求められる。
--同期がなければ、プログラムの実行順序は実行速度が決定することになり結果が不定になるため。
-同期機構を自作してもいいがバグ問題もあるし、アーキテクチャ上のサポートもなく、また次世代機では動かない可能性もある。
-最後に、標準的な同期プリミティブにより、ハードが条件緩和コンシステンシモデルを実装したとしてもシーケンシャルコンシステンシモデルと同様の同期操作が保証される。
リラックスコンシステンシモデルの基礎
-リラックスコンシステンシとは、順序付けのために同期操作を使うが、リードライトの非順序実行を許可するものである。
-シーケンシャルコンシステンシモデルにおいては、R→W、R→R、W→R、W→Wの全てでオーダリングを守る必要があった。
-リラックスコンシステンシモデルには、上記4つのどれを緩和するかで様々なタイプがある。
--W→R緩和:Total Store Ordering(TSO)またはプロセッサコンシステンシ。
---ライト・オーダリングを保持するのでシーケンシャルコンシステンシで動くものはコレでも動く。
--W→W緩和:Partial Store Ordering(PSO)
---???
--R→WとR→R緩和:ウィークオーダリング、PowerPCコンシステンシモデル、リリースコンシステンシなど。
---順序制限や同期操作のオーダリングによって様々に。
-性能向上の可能性と条件定義による複雑化の両天秤。
--リラックスモデルに関する諸々の考察については、AdveとGharachorlooの纏めたチュートリアルを参照すると幸せになれます。
コンシステンシモデルについてのまとめ
-現在のマルチPはプロセッサコンシステンシモデルやリリースコンシステンシモデルなどのリラックスコンシステンシモデルをサポートしている。
-同期機構はマルチP特化でエラーが起こりやすいものなので、プログラマには標準同期ライブラリを使って同期プログラムを書き、ウィークコンシステンシモデル(プログラマから見えない→暗黙同期?)を用いて高性能を実現してもらいたい。
-次節で詳しく述べるが、リラックスコンシステンシの性能上の利点の多くはシーケンシャルコンシステンシやプロセッサコンシステンシを用いて得ることができる。
-リラックスコンシステンシモデルに関するキーポイントは、主にコンパイラによって実現する共有変数へのメモリアクセスの最適化である。コレについても次節で。
-
~
----
''4.5 - 同期の基礎''
-同期マシンは一般にハード提供の同期命令に依存するユーザレベルのソフトウェアルーチンで構築される。
-小規模なマルチプロセッサや衝突の少ない場合には、割り込みできない命令やある値へのリードライトの実行が不可分な命令列がハード機構の中の鍵となる。
-ソフトウェア同期マシンはコレを用いて構築される。
-ここではロック・アンロック同期機構について見ていく。
-ロック・アンロック機構は単純な排他制御のほかにより複雑な同期機構の実現にも用いられる。
-大規模マルチPや衝突過多な状況では衝突がねずみ算になったりするため同期がボトルネックになるかもしれない。
--この項での同期式を大多数プロセッサに拡張する方法についてはApendixHで。
ハードウェア根幹機構
-マルチPに同期機構を実装する鍵はメモリアドレスから値を読むと同時に書き換え可能なハード機構である。
-この機構は多くの場合ロックやバリア的な機能も持っていて、ユーザレベルで容易に同期操作が行える。
-基本同期操作構築法。
-同期操作構築の一般的な操作としてメモリとレジスタの値を相互交換する「同時交換(?)」がある。
-せつめいっ
-値0or1でロックのオンオフを定める単純なロック機構を構築することを考える。
-レジスタ内の値1をロックに対応するメモリアドレスの値(おそらく0値)と入れ替えることでロックをオンにするとする。
-この命令の返値は通常0であり、もし他のプロセッサが既にアクセス権を得ていたら1が返る。
--このためには、権利を得てアクセスしたプロセッサ以外がメモリ内の値(0値)を読むことの無いように(つまりロックセットすることのない様に)0値の読み出しと同時に1値のセットが必要になる。
-値のゲットセットがスワップ命令として同時に行われるところがミソ。
-仮に複数のスワップ命令が同時に呼ばれてもライト機構のシリアライズで順序付けられるので無問題。
-他の同期基礎機構も読み書きをセットにした命令を軸にしている。
-昔よく使われていた操作としてTest&Setがあった。これは値のテスト後、パスしたらその値をセットするもの。
-他にはFetch&Incrementがある。これはメモリアドレスの中の値を返すと同時にインクリメントして書き戻すもの。
-0値によって同期変数を要求するプロセスが無いことを示すことでスワップ命令と同様の使い方が出来る。
-Fetch&Increment的な操作の別の利用法を次に述べる。
-そもそもメモリ操作を同時に行うよう実装するのは難しい。リードライトを割り込み無しの1命令で行う必要があるし、ハード的にはその間他の操作ができない上にデッドロック回避の必要もあるので一貫的制御(?)の実装は困難。
-2命令を間に他命令が入らないようにする機構を付けて1セットとして実行されるようにする方法もある。
-これは例えばLoad Linked(Load Locked)とConditional Storeからなる特殊なロードストア命令対で、Conditional StoreはLoad Linked後に値が変更されたかを判断する機能を持つ。
--是で1、非で0を返す。
-(P239とP240.1のコードで適当に説明を)
一貫性制御機構を使ったロックの実装
-上記などの一体化操作が使えることにより、マルチPの一貫性制御機構を用いてスピンロックを実現できる。
--スピンロック:ロックが得られるまで、つまり自分がアクセス権を得られるまでループなどで何度でもアクセス権獲得を試行するロック機構。
--ロックが短時間で得られると期待できる場合やロックを得るプロセスのレイテンシを抑えたいときなどに用いられる。ループ待ちのコストと実益を天秤にかけるべし。
-キャッシュの一貫性制御が要らない場合、最も簡単な実装方法はロック変数をメモリに配置することである。
-(P240.2のコードで適当に説明を)
-マルチPにキャッシュの一貫性制御機構が付いている場合はロック値のキャッシュが可能。
-この利点は、一つはスピン処理をローカルキャッシュを対象として行えること(毎回メインメモリまで行かなくていい)、もう一つは最後にロックアクセスしたプロセッサが近いうちに再度ロックを得ようとする場合が多い(局所性がある)ことである。
-後者の場合、ロック値はプロセッサのキャッシュに残っている可能性が高いのでコスト削減になる。
-スピンロックのキャッシュ一貫性制御機構利用法。
-図4.23:3プロセッサでのキャッシュ一貫性制御動作バス動作。
-(P241とP242のコードで適当に説明)
-スピンロック方式は単純で判りやすいが、ロックの解放時に一斉に発生する通信トラフィックのせいで多くのプロセッサを扱うのは至難。
-(解決法その他をApandixHに)
~
----
''2.12 - 総括''
-複数命令同時発行構造の実に興味深い点は、その性能向上が基本的なユニプロセッサプログラミングモデルの影響を受けないこと。
-ILPの恩恵を、受けること自体は簡単なのだけれど、設計上の問題はそのプラクティスの煩雑さ。
-単純なレベル1解析においてさえ想定するパフォーマンスを達成するのは困難でしょう。
-過去10年ほどは、目新しい技術を取り入れることよりも、クロックレートを上げたり、均一な性能を出すことに主眼があった。
-過去5年間に発表された動的スケジューリング・マルチイシュー型のプロセッサはすべて同じ基本アーキテクチャと発令レートを持っていたの。この基礎技術は1995年の技術発表当時と変わらない。
--Pen4, IBM Power5, Athlon, Opteron. どれも3-4m命令/clock
-でも、クロックレートは10-20倍、キャッシュサイズは4-8倍、リネームレジスタ数は2-4倍になり、ロードストアユニット数も2倍以上になっている。トータルなパフォーマンスは初期の8-16倍になっているのさ。
-クロックレート増加とCPI減少のトレードオフの決定は困難であり、この書の'95年版では以下のように述べている。
--(略
-3.8GHzPen4の有用性を引き出すときのネックは主に私達のプロセッサ設計の理解度にある。
-しかしながら次章で触れるが、高クロックレートプロセッサの初期の成功は何故だったのかと言う疑問も出てくる。(ILPの有用性、ILPの効果的運用、電力配分による命令転送速度の向上があった。それか?[3-4i/c])(((?
-更に、OpteronとPen4の比較にてディープパイプラインでの高クロックレートによるアドバンテージはパイプラインストールにより相殺される事が分かった。
--この辺りの解析は次章で。
-'95から'05まででより明白になったがマルチイシュー型プロセッサの性能安定率は命令発効率の増大に比例して下がっている、
-クロックレートとCPIのトレードオフは様々な要素が絡むので一概には決めきれない。
-我々が次に目指すべきは明白で、Pen4の高クロックなヤツはもうね、破棄。
-IBMもAMDもIntelもみんなデュアルコアな感じに移行してきている。
-次章では、何故この20年追求してきたILPによる高速化をここに来て止めるのかを説明する。
-
~
----
''2.11 - 注意点と落とし穴''
注意点
-二つあり、一つは単純なルールの誤認。一つはベンチマーク選択の重要性。
--「プロセッサはCPIが低いほど早いモンなんだろ?」とか、~
「プロセッサはクロックレートが高いほどイイんだろ?」とか。
-まぁ、CPIは低いに越したことはないんですがね。洗練されたマルチ命令パイプラインはノーマルのよりクロックレートは普通低いし。
-ILP不可アプリやハードウェアリソース的に並列処理効率が上げられないときにはクロックレートが高い方が勝つですよ。
-でもILP可なら出来るだけILPった方がいいですの。
-IBM Power5 プロセッサは高いINT,FP処理効率を持つ。
--プロセッサコアを2つ持ち、それぞれ毎クロックFP2命令、ロードストア2命令を含む4命令を実行可能。
--2005年における最大クロックレートは1.9GHz
--比較として、Pen4はマルチスレッディング仕様のシングルコア(マルチスレッディングについては次章で)~
毎クロック3命令の深々パイプラインで、2005年における最大クロックレートは3.8GHz
-つまり、Power5は命令数とCPIがPen4の半分以下ならPen4より早くなる。
-図2.34:Pen4とPower5の各種ベンチにおける 命令数xCPI を示す。
--FPプログラムではPen4に倍差をつけることもあるほどにPower5が有利だが、INTプログラムではPower5はPen4のクロックレートによるアドバンテージに及ばない。
--Pen4と比較すると、Power5の命令数xCPIでのアドバンテージはFPで3.1倍なのに対しINTではわずか1.5倍となっている。
-これは2005年におけるPen4の最大クロックレートがPower5のガチ2倍(?)だからで、結果としてSPECfp2000ではPower5がPen4に1.5倍差を付け、SPECint2000ではPen4がPower5に1.3倍差を付けることになった。
落とし穴
-Sometimes bigger and dumber is better.(訳せないないですの
-次代パイプラインはCPI改善に主眼をおいて開発されている。
-21264は洗練された 29k bits 分岐予測を使用(以前のバージョンの21164では 2bits x 2k entries = 4k bits 分岐予測)(p88, Ch2.3 参照)
-SPEC95ベンチにおいて、21264の持つ洗練された分岐予測はシンプルな 2-bit 分岐予測と比べて1つを除いてすべて上回っていた。
--割合的にはSPECint95において1000命令中、21264の予測ミスが11.4命令(1.14%)だったのに対し21164は16.5命令(1.65%)だった。
-少々驚くべきことに、シンプルな 2-bit 構造(21164)の性能がトランザクション処理において21264に勝ったのだ。(21164の17/1000ミスに対し21264は19/1000だった)
-7分の1の分岐予測ビット量で、どうやってそんな性能を出したのか。
-答えは処理の構造にある。
-トランザクション処理のコード量は、SPEC95ベンチのどれより桁違いにデカく、山ほど分岐命令が出てくる。
-21164の局地分岐予測ビット量が2kなのに対して21264のビット量が1kだったことで僅かに上回った訳だ。
-加えて覚えておきたいのは、異なるアプリは異なる挙動をするということ。
-プロセッサはある特定の挙動のプログラムに狙いを絞ったマイクロアーキを持つ方向に洗練されて来ているので、想定しないアプリではさらに突飛な挙動をするかもしれない。
~
----
RPR資料。2章は「命令レベルでの並列化とその効果について」~
-2.1-2.9~
・1.命令レベル並列化ってのは何がしたいのか。~
・2.並列化の基本コンパイルテクについて。~
・3.分岐予測コストを減らそう。~
・4.動的スケジューリングによるデータハザード突破。~
・5.動的スケジューリングの例。~
・6.ハード側による予測。~
・7.複数命令発行と静的スケ使用時のILPの効果。~
・8.複数命令発行&動スケ&分岐予測使用時のILPの効果。~
・9.命令転送、予測の上級テク。~
''2.10 - ここまでのまとめ:Pen4について''
-性能評価に SPEC CPU benchmarks を使用。~
-同機はマルチスレッディングもサポートするがこれについては後述。~
-Pen4: Netburstという「積極的なミス検知マイクロアーキ」を使用。~
--高クロックレートと命令複数同時発行を組み合わせることによる高命令スループットを目的としたディープパイプライン(長ぇ
--似たようなのはPen3にもあった()
-命令実行追跡キャッシュ(ETC): これまでのIA-32のキャッシュに対抗するものとして実装。IA-32をデコードしたものに相当するuop(micro-operation)をトレース(?~
--追跡キャッシュ(TC): 命令キャッシュの一種。分岐を挟む命令シ−クエンスを保持。通常キャッシュよりも局所的に効果。~
-TCによりパイプラインをFULLにすることによりTCにヒットする限りIA-32命令の再読が不要。~
--例外はTCのL2キャッシュからのデコードミス時のみ(TCへの再読込。
-毎クロック3命令、6uopsが生成される。~
--1命令(IA-32)で3つ以上のuopsが必要なときは microcode ROM から生成する(にゅ?
-ETCはuopの分岐予測用の固有の分岐バッファを持つ。ETCが高ヒットするということは命令のフェッチ、デコードがほぼ不要だということ。~
--例として SPEC CPUINT2000 ベンチでのミスヒット率は0.15%以下。~
-ETCからの命令フェッチ後uops実行。追加にバッファをとるよりレジスタリネームを使う。~
-毎クロック3つのuopsをキューに保持し、送り出す(きゅむ~
--送出には4ポートあり、トータルで毎クロック6個のuopsを流し込める。~
-ロードストアには専用ポートが使われ、他ポートが基本ALU処理を担当する。4つ目をFPやINT型演算用に使う。~
-Pen4が動的スケジューリングを採用して以来、単純な静的パイプラインは使われていない。~
-代わりにパイプラインステージの動的配置により可変クロックサイクルになった。~
--Pen3では、命令が時間のかかる実行ステージにマルチクロックサイクルを求める中、命令のフェッチから終了までの最短クロックは11だった。~
-動的パイプラインでは命令はオペランドを待ってより長くなっていい(Pen4はCISC採用)~
-初期のPen4は、高クロックレートのためにPen3のパイプラインを細分割した、今よりも深パイプラインだった。~
-Pen4の出現は1990年、パイプラインあたりの最短クロックは増加して21、クロックレートは1.5GHz。~
-2004年にはインテルは3.2GHzのPen4を発表。これによりパイプラインは更に伸び、クロックサイクルは31に。(PLステージ追加により転送スピードは上がりクロックレートが初めのPen4の倍以上に)~
-で、PLステージ増やしてクロックレートに拘った結果、大量のキャッシュミス&分岐予測ミスが付いてきましたよ、と。~
-2レベルのキャッシュがDRAMアクセスの頻度を最小に。~
-分岐予測は2段階の分岐予測バッファにより過去の分岐履歴を用いて行う。~
-最新のPen4の分岐予測バッファのサイズは増加していて、更に分岐バッファがミスったら静的予測を使う。~
=Pen4の機能解析=
-分岐予測により高パフォーマンスを。
-パフォはメモリシステムにもガチ依存。
-だが動的スケジューリングと大量ロードストアがキャッシュミスのレイテンシを隠している。
-クロックレート3.2GHzはL2キャッシュミスの復帰時間をキュー埋めのストールにあてることで出している。
-分岐予測、キャッシュミスは重要なとこだからこの辺を重点的に。
-ここでは SPEC INT2000, FP benchmarks + パフォモニタ用Pen4を使用。
-使用プロセッサは Pen4 640 (クロック3.2GHz, システムバス800MHz, DDR2 DRAM 667MHz)
-図2.28:1000命令中の全予測ミスにおける分岐予測ミスの割合を示す。
--パイプライン・パフォーマンスの観点から、何が分岐予測ミスの要因なのか。
--一般に、FPベンチとINTベンチを比べると後者の方が分岐命令の割合が多い。
--当然?予測的中率も前者が上。FPに比べ、INTは8倍ミスってあらせられる。
---(何?整数型って駄目な子なワケ?)
-分岐予測プロセッサにとって予測精度は命。
--予測ミスは復帰時間と誤動作分のエナジーが無駄に。
-図2.29:予測ミスったuopsの割合。
-推測ミス率と予測ミス率が見た目ほぼ等しいことに気付く。・・・?
--speculation:推測、prediction:予測、・・・え、違いは?
--推察用のソースを持っているか否か、か?
-キャッシュミスのパフォに与える影響。
--SPEC benchmarks ではほとんど空気。
-L1L2のミスのほうが重大。
--図2.30:10個のベンチ各々のL1L2のミスレート。
--L1ミスはL2ミスの14倍とか。ミスペナはL2のほうがちょっと大きい。
--u-archがデカいミス時間を隠せるのはL2がL1ほどパフォに影響しないから(?
---特に mcf と swim。
-実際問題予測ミスやキャッシュミスがどうパフォに影響するか。
-実際問題予測ミスやキャッシュミスがどうパフォに影響するか。
-図2.31:10個のSPEC CPU2000ベンチにおける実質CPI。
--使用ベンチ:gzip, vpr, gcc, mcf, crafty, wupwise, swim, mgrid, applu, mesa
--mcf:他4個のINTベンチの4倍超CPI、最悪推測率、L1L2のミスレートも死亡説。これではキャッシュミス隠蔽は無理。
--vpr:INTベンチ5個中3個の1.6倍のCPI(mcf除く)、INTベンチ中最悪予測率、L2ミスINTベンチ中ではmcfに次いで多い。
--swim:FPベンチ中最低パフォ、他FPベンチの2倍↑CPI、mcfに次ぐL1L2ミスレート。良いところはスバラシイ推測率。でもコレじゃミスレートはカバーできない。特にL2ミス。
--L1L2ミスレートがそこそこなmgrid, gzipとかはそれなりのパフォーマンス。
-Pen4とAMD Opteron を比べてみよう。 in SPEC benchmarks.
--両方、動スケ、推測式パイプラインで毎クロック3命令を処理。
--両方2レベルキャッシュ(L1L2)構造だがPen4はL1のトレースキャッシュを使っている上に最近のPen4はL2のサイズがより大きくなってる。
--トランジスタ数、チップ面積、消費電力がほぼ同じ。2005年における各プロセッサの最適クロックレートはPen4が7-10%高かった。
-1番の違いは高クロックレートにデザインされた深パイプライン(in NetBurstアーキ)
-コンパイラはどちらも似たようなコードを吐くのでCPI比較が興味深い。
-パイプラインの違いと同様にメモリヒエラルキの違いも測定に影響。
--メモリシステムパフォの違いについては5章で。
-図2.32:2プロセッサのCPI比較。
--平均してOpteronがPen4よりCPIが1.27高い。
--無論、より深いパイプラインのPen4はOpteronよりCPIが大きかろうとは思う。
--深々パイプライン化されたNetBurst設計の最重要課題は、高クロックレートに拘るか、CPI増大を改善するかである。
-2005時点の最高クロックレートで2つをテストしたよ。in SPEC CPU2000(Opt 2.8GHz, Pen4 3.8GHz)
-高クロックレートになったはいいが、キャッシュミス増により実質のCPIは増加した。
-図2.33:同ベンチセットの性能比較。
--結果はOpteronの僅差勝ち。
--Pen4の敗因はCPI増大により生じる膨大なパイプラインストールをツブし切れなかったこと。
-よって、設計者が当初考えていたほど深パイプラインによる高クロックレートと複数命令同時発行による高スループットの両立は出来ていない。
-コレについては次章で。
~
----
''2.8 - 複数命令発行&動スケ&分岐予測使用時のILPの効果''
-これまで動スケ、マルチイシュー、投機動作を個別に見てきたが、ここではそれらを併せてイイ感じに見ていこうと思う。
-楽に行くために毎クロック2命令のプロセッサを考えるが最近の3命令以上のものと比べてもどこもおかしくはない。
-Tomasuloアルゴリズムを拡張して、毎クロック動作する個別のINT,FPユニットを持つスパスカパイプラインを仮定する。
-プログラムの意味を誤認するので、リザベーションステーションへのout-of-order命令発行はやらない。
-動スケの利点を最大限生かすために、INT,FPユニットに処理を割り振るスケジューリングハードウェアを用いた毎クロック任意の2命令を流せるパイプラインを考える。
-INT,FP演算の相互作用が重要なので、Tomasuloを投機実行に加えてINT,FPの処理ユニットおよびレジスタに対応するよう拡張する。
-動スケなプロセッサでマルチイシューする方法は2つ有るが、共にリザステの割り当てとパイプライン制御テーブルの更新がキモであることをもとにしている。
-方法一つ目は、1ステップを半クロックで処理するもので、これにより毎クロック2ステップ処理できる。
-方法2つ目は、命令間の依存関係に関係なく2命令を同時実行できるロジックを構築すること。
-最近の毎クロック4命令以上実行可なスーパースカラプロセッサは大抵が両方採用している(命令発行ロジックをパイプライン化&命令幅を広げている)
-投機的動スケと多重命令発行を組み合わせるにはパイプラインのバックエンドでもう一工夫必要になる。
--1クロックに複数の命令を完了しコミット(保存的な意味か)する必要がある。
-この試みはコンセプトは多重命令発行に似て簡単だが、実装は命令発行とレジスタリネーミングと同様にチャレンジブルである。
-投機動スケと多重命令発行の組み合わせかたを例を用いて次に示す、
例題だお
-INT配列の各要素をインクリメントするループを考える。
-2命令同時発行で、投機実行の有る無しで2つのプロセッサを考える。
LOOP: LD R2, 0(R1)
DADDIU R2, R2, #1
SD R2, 0(R1)
DADDIU R1, R1, #8
BNE R2, R3, LOOP
-実アドレス計算、ALU演算、分岐判定用の個別のINT処理ユニットが有るとする。
-初めの3ループの実行過程を表にまとめなさい。
-毎クロック任意の2命令がコミット可とする。
~
解答な
-図2.20と図2.21に投機処理を使わない場合と使う場合のプロセッサのパフォを示す。
-3番目の分岐が投機有りで13クロック目、投機無しで19クロック目に実行される。
-投機無しだと命令の発行速度にコミットが追いつかなくなるために、投機無しプロセッサはさらなるイタレーションでストールしてしまう事になった。
-投機無しプロセッサのパフォはロード命令のアドレス計算を分岐決定前に出来るようにすれば向上できる。
-が、投機メモリアクセスが無ければ性能向上は1ループにつき1クロックにしかならないのは確定的に明らか。
~
-この例は、データの依存がある分岐時における投機処理の有用性を明確に示している。
-しかしながら、このアドバンテージは正確な分岐予測に依存している。
-誤った投機処理は性能低下を招く事が多い。
-
~
----
''2.7 - 複数命令発行と静的スケ使用時のILPの効果''
(ぶっちゃけVLIWについて)
-前節ではデータ・制御ストールを無くすことで理想CPI(1)を得ようとしてきた。
-パフォUPのためさらにCPIを減らしたいが、毎クロック1命令処理なプロセッサではそれは不可である。
-ここでは1クロックに複数命令を発行するマルチイシュー型プロセッサを数節にわたって見ていく。
-マルチイシュー型プロセッサは次の3種なカンジで。
--静的スケジューリングなスーパースカラ・プロセッサ
--VLIWなプロセッサ(VLIW: Very Long Instruction Word)
--静的スケジューリングなスーパースカラ・プロセッサ
-この2種のスーパースカラプロセッサは毎サイクル複数の命令を発行する。発行数は可変。命令の実行順序が異なる(静的:in-order、動的:out-of-order)
-VLIWは依存関係にない複数の命令を一つの命令としてまとめて同時に実行する。同時実行される命令の数は常に一定に保たれ、規定の数に達しない場合は「何もしない」命令で埋められる。
-VLIWプロセッサは本来コンパイラにより静的にスケジューリングされる。
-IntelとHPがIA-64アーキを作った際、そのアーキスタイルを「EPIC」と名付けた(EPIC: Explicitly Parallel Instruction Computer. 訳:明示的に並列な命令のコンピュータなのは確定的に明らか)
--AppendixGに説明ががが。
-コンパイラにスケジューリングさせているため、、静スケなスパスカプロセッサ(イミフ)は毎クロックの命令数差のみでVLIWのコンセプトに近い。
-命令同時発行数増加でアドバンテージが減るので、静スケスパスカは基本、命令発行幅を2程度とする。
-この命令発行幅を超える時は、ほとんどの設計者はVLIWか動スケを選択する。
-静スケの説明のために、ハードと要求コンパイラの類似性からここではVLIWを見ていく。
-図2.18: マルチイシューの基本方法とその差異。その方法を用いるプロセッサの動作を示す。
VLIWの基本動作
-VLIWは複数の独立した演算ユニットを持つ。
-VLIWはそれで複数命令を(個々に)処理するのではなく、纏めて1つのデカい命令としたり、順序を変えない一定制約の命令列のパッケージにしたものを処理する。
-この2方法に基本的な違いは無いので、複数処理を1命令とするVLIWの基本命令と変わらないと考えられる。
-VLIWのアドバンテージは命令発行レートが増加するほど増えるので、より発行幅が大きいプロセッサに焦点を当てた。
-実際、シンプルな2命令発行プロセッサのスパスカオーバーヘッドは最小になる。
-4命令発行のスパスカならオーバーヘッドは制御できるはず。
--オーバーヘッド増大が高帯発行プロセッサの最大の壁なのは確定的に明らか。
-分岐用有りのINT処理1つ、FP処理2つ、メモリ処理2つの5処理を含む命令を持つVLIWプロセッサを考えよう。
-この命令は各処理ごとに5つの領域を持ち、それぞれの処理ユニットにセットされる。各ユニットごとにビット幅は16-24bitsとして併せて80-120bitsの命令長となる。
-比較として、Intel Itanium 1&2は6処理を1命令パケットとしている。
-処理ユニットを使い切るために、コードシークエンスを十分に並列化し処理スロットを埋めることが必要。
-この並列性はループアンローリングやデカい単一のループコードのスケジューリングから発見する。
-ループアンローリング時に分岐無しの直線コードが出来たならローカルスケジューリングテクが使える。これは1個の基本ブロック上で処理するもの。
-分岐入り並列化の場合、よりフクザツなグローバルスケジューリングを使う。
-グローバルスケジューリングは複雑な構造のみならず最適化のトレードオフもややこしい(分岐をまたいだコード移動がコスト大的な意味で
-トレーススケジューリング(AppendixG)はグローバルスケジューリングをVLIW用に発展させたもので、
-まずはループコードをループアンローリングや静的な分岐予測を使用して、シーケンシャルな一直線に実行されるコードに変換し、ローカルスケジューリングでもってVLIW用命令を作成する。
ここで例題
--ここに毎クロック5処理(分岐用有りのINT処理1つ、FP処理2つ、メモリ処理2つ)を纏めた1命令をこなすVLIWプロセッサがあるとする。
--このプロセッサを用いてp75のループコードを必要なだけ展開してストールを無くしなさい。
--分岐遅延は無視出来るものとする。
--コード
for(i=1000; 1>0; i=i-1) x[i] = x[i] + s;
-解答
--図2.19にループアンローリング後のコードを示す。
--ループコードは展開によりループ本体の複製が7つ出来、ストールがゼロになり、1ループが9サイクルになった。
--9サイクルで5つ(毎サイクル1.29)の値を出しており、2.2節で2命令発行スパスカがやったループ展開の2倍近い速さである。
~
-オリジナルなVLIWモデルには技術的、輸送流通(?)的な問題がありVLIWの効率を引き出し切れていなかった。
--テク問題:コード増大と制限の強いオペレーションでの並列限界。
-VLIWにおけるコードサイズ増加の原因は2つある。
-ループアンローリングは基本的にコードが増加する。
--単純展開なら1000回ループとして1000回ループ内処理を書き出すことに。ヤバコード。
-命令をフルに埋めきれないときは使われないユニットが出るが、それ用のNOPなビット列が無駄。ぐもにー。無駄。
-ソフトウェアスケジューリング(AppendixG)は、ソフト的なパイプライン化でループアンローリングの効能を得る。コード量は実際のLURほどは増加しない。
-コード増大に対抗して、アタマイイエンコードがよく使われる。同属の命令ビットを共有したり主記憶無いでは圧縮しておいて使用時に展開するなどである(AppendixG)
-初期のカタいVLIWプロセッサはハード側にハザード検出機構を持っていなかった。
-全ユニットが並列に同期実行される必要があり、1つがストールすると他のユニットもストール扱いとして全体が停止。
-最近のプロセッサはより依存性を無くした上でハードチェックとコンパイラがハザードを除去してくれるために機能ユニットを非同期に実行できる。へぇ。
-VLIWはハードとソフトの連携で実現してるのでユニット数やレイテンシの異なるハードでは同じバイナリコードは動かない。
-つまり上位・下位互換が難しい。
-EPICは主にIA-64アーキに使われているVLIWの発展型で、改良点はソフト投機のための拡張、バイナリ互換を保ったハード依存限界の突破などがある。
-マルチイシュー型プロセッサが主に取り組んだのはより多くのILP化(?
-FPプログラムでのシンプルループのアンローリングによる並列性を得る場合、元のループはベクタープロセッサ(AppendixF)で実行するのが効率的かも。
--ベクタープロセッサ:ベクトル演算をひとつの命令で高速に処理するプロセッサ。浮動小数点演算をパイプラインで並列処理し、大規模な数値計算を高速かつ大量に行うことができる。
-マルチイシュー型プロセッサがFPプログラムにおいてベクタープロセッサより優れているかは不明。一般にコストが同じなら、ベクタープロセッサが同等以上に速い。
-マルチのベクタに対する潜在的アドバンテージは断片的なコードから並列性を抽出する能力と全データ形式を簡単にキャッシュできること。
-これらの理由から、多重命令発行は命令レベル並列性のための主要技術になったことは確定的に明らか。
-ベクタはこいつらの添え物。
~
----
''1.3 - コンピューター・アーキテクチャの定義''
-コンピュータ設計者が直面しているタスクは以下の混ざり合った複雑なもの。
--新しい設計にどんな仕様が必要であるかの決定。
--設計において、コスト、パワー、有用性を保ちつつ最大の性能を得ること。
-このタスクには次のような多くの課題がある
--命令セットの設計
--専門の組織(?
--論理設計および''実現''
-この実現には以下も含むかもしれない。
--集積回路設計
--パッケージ(規格と訳すのだろうか
--パワー(前で言ってるじゃないか
--回路の冷却
-デザインを最適化するのには非常に広範囲の技能を必要とする
--コンパイラ
--OS
--論理設計
--パッケージ
=命令セットアーキテクチャ=
-この本では命令セットを可視的に示すのに、インストラクション・セット・アーキテクチャ(ISA)を使用している
-ISAはソフトウェアとハードウェアの中間として機能する
-ここでは、ISAの7つのdimension(どう訳そうか)を説明するために、例としてMIPSと80×86を使用する
++ISAのクラス(分類か
---今日、ほとんどのISAが汎用レジスタ構造として分類される(汎用レジスタ構造>オペランドはレジスタか記憶域のどちらか)
---80x86が汎用レジスタと浮動小数点用レジスタを各16個ずつ持っているのに対し、
---MIPSはそれぞれ32個ずつ持っている(図1.4に汎用レジスタの用途を示す)
---ISAのポピュラーなクラスとしてregister-memory方式とload-store方式がある
---register-memory方式は多くの命令でメモリアクセスが可能で、80x86などが採用している
---load-store方式ではメモリにアクセスできるのはロード・ストア命令のみで、MIPSなどが採用している
---最近のものはほぼ全てload-store方式である
++メモリ・アドレッシング
---80×86やMIPSを含むほぼ全てのデスクトップ、サーバー・コンピュータは、メモリオペランドにアクセスするのにバイト単位アドレシングを使用する
---MIPSのような幾つかのアーキテクチャはオブジェクトが連続していることが必要です(? 後で再訳
---サイズsバイト、アドレスAのオブジェクトへのアクセスが「A mod s = 0」の時に配置される(? 再訳
---80×86はオブジェクトの整列を必要としないが、一般的にオペランドが並んでいるほうがアクセスはより速い
++アドレッシング・モード
---アドレッシング・モードはレジスタと一定のオペランドを指定することに加えて、メモリオブジェクトのアドレスを指定する
---MIPSのアドレッシング・モードは、レジスタと即値、そしてメモリアドレス算出のためレジスタに加算される即値オフセットであるディスプレース(定数値)がある(? はて、)
---80x86hはアドレッシング・モードを3個+定数値使用の3個(計6個)をサポートしている~
・1、レジスタ未使用、つまりアドレス値直接入力か(絶対アドレス方式)~
・2、レジスタ2個使用(ベースレジスタ値とインデックスレジスタ値と定数値を加算。?再訳。相対アドレス方式?)~
・3、レジスタ2個のうちの1つにオペランドのデータサイズを掛けたものと定数値を全て加算(インデックス付きアドレス・レジスタ間接モードとかあった)~
---残りの3つは定数値を使わないもので、レジスタ間接、インデックスレジスタ、レジスタ間接・インデックス付き、となる
++オペランドのタイプと大きさ(素直にサイズか
---ほとんどのISAの様に、MIPSや80×86は次のオペランドサイズをサポートする~
(MIPSや80×86を含むほとんどのISAがサポートしているオペランドサイズ)~
・8bit(ASCII文字)、~
・16bit(Unicode文字かハーフワード)、~
・32-bit(INT型整数かワード)、~
・64-bit(ダブルワードかLONG型整数)、~
---上に加えて以下のIEEE754浮動小数点型をサポートする~
・32bit(単精度)、~
・64bit(倍精度)、~
---80x86は80bitの浮動小数点型(拡張倍精度)もサポートする
++オペレーション(演算、か?
---オペレーションの一般的なカテゴリは、データ転送、論理演算、制御(次で述べる)、そして浮動小数点を扱うものである(微妙
---MIPSは単純でパイプライン化しやすい酩酊セット構造であり、2006年におけるRISCアーキテクチャの代表である
---80x86はより高価で大きなオペレーション・セットを持っている(別に命令セットでいいか?
++移行制御用命令
---80x86やMIPSを含むほぼ全てのISAが、条件分岐、無条件ジャンプ、関数コール及びリターンをサポートしている
---80x86、MIPSの両方がPC相対アドレス指定方式を用いている~
これは、分岐先アドレスをPCとアドレス・フィールドの和によって指定するものである~
---80x86とMIPSでは幾つか小さい違いがある~
・MIPSの条件分岐命令(BE,BNE,など)はレジスタの内容によって分岐判定する、~
・80×86の条件分岐(JE,JNE,など)では算術/論理演算の副作用としてセットされる条件コードビットによって判定する~
さらに、~
・MIPSの関数コール(JAL)時は戻りアドレス値をレジスタに格納する~
・80x86の関数コール(CALLF)時は戻りアドレス値をメモリのスタックに格納する~
++命令のエンコーディング
---エンコーディングには基本的に固定長と可変長の2種類がある
---MIPSの全ての命令はデコード簡略のため32bitに統一してある(固定長)
---80x86のエンコーディングは1bitから18bitの可変長
---可変長命令は固定長命令に比べてより少ないコード量で済む(スキマ無く詰められる)~
(だからx86用にコンパイルしたコードは同じものをMIPS用にコンパイルしたものより小さい)
---前述の方法により命令がどのようにして2進数表記されるのかには注意が必要
---レジスタ数とアドレッシング・モードの数はどちらも命令長に密接に関わる~
・レジスタ領域とアドレッシング・モード領域が1命令内に何度も現れることが出来るため(? 再訳
-命令セット間の違いが小さく、汎用化されている現在、ISAデザインを超えるコンピュータ設計への挑戦が特に盛んである~
(異なる応用分野がある == 汎用化 ? 是 : 非)~
(ISAデザインを超える、では無く、ISAデザインにおける、ではないか)~
-(この版ではISAの例としてMIPS64のサブセットを用いる)
=コンピュータ・アーキテクチャの基礎=~
(目標と機能要求を満たすよう構成とハードウェアを設計する)
-コンピュータの設計には、2つの要素がある: 構成とハードウェア
-「構成」にはコンピュータ設計のハイレベルな面を含む
--メモリ・システム
--メモリの相互接続
--内部プロセッサやCPUの設計
---CPU(中央演算処理装置):算術、論理、分岐演算およびデータ転送を実装
-AMD Opteron64 と Intel Pentium4
--同じ命令セットながら非常に異なった構成を持つ
--両方ともx86命令セットを使用
--パイプラインとキャッシュの実装方式が非常に異なる
-ハードウェアは、コンピューターの詳細(核心?)に関わる
-大体の場合コンピュータの系統(?)は同じ命令セットを持ち似通った構成をしているが、ハードウェアの詳細な実装時には異なる
--例としてPentium4とModeile Pentium4はほぼ同じだがクロックレートやメモリシステムが異なる~
(Modeile Pentium4は低性能のマシンで力を発揮する)(?~
-(この本では「アーキテクチャ」とは、コンピュータ設計の3つの面:命令セットアーキテクチャ、構成、およびハードウェアを全て含むものとする)
-コンピュータ設計者は要求される機能はもちろん、価格、パワー、性能、および有用性を満たすよう設計する必要がある
-設計者はその時々で要求機能が何で、主タスクが何かを選択しなければならない
-要求される機能は市場の需要により特化する
-コンピュータの使用目的によってアプリケーション・ソフトは確定した要求性能を揺るがせる(?
-ソフトウェアの大半がある命令セット構造を元にするなら設計者は新しいコンピュータが既存の命令セットを実装するはずだと判断するかもしれない
-特定用途のアプリケーション市場の存在は設計者に(それを)必要要件に組み入れさせるかも知れない(詳細は後に)(? 微妙
-設計者は技術とコンピュータ使用の双方で将来的コストとアーキテクチャの限界に影響する重要な動向を知っている必要がある(??
-
~
----
#comment
ページ名: