仕事で役立つ人気ビジネスアプリおすすめ!
[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
コンピュータアーキテクチャの話 (61) 4ビットプロセサのアーキテクチャ設計
本シリーズのコラムとして、当初は、Hoff氏の思考を辿ってなぜこのようなアーキテクチャになったのかを考察しようと考えていたのであるが、論理的にメリット、デメリットの比較でこう作るべきというアプローチで4004のアーキテクチャを組み立てていくことは出来そうも無い。そこで、4004のアーキテクチャ設計を追体験するのはなく、4004と同程度のトランジスタ数で、かつ、16ピンパッケージに収容できる4ビットプロセサの命令アーキテクチャを新たに設計してみようと思う。これは中々おもしろい課題であり、このような場を提供いただいたMYCOMジャーナルに敬意を表して、これから設計するアーキテクチャをMJアーキテクチャと呼ぶことにする。
1アドレス命令
Sytem/360のような大規模な計算機は32ビットの命令語が基本であり、2つのオペランドを持つ、2アドレスのRR命令やRX命令を作るだけの命令語長があるが、基本命令語長が16ビットの1130や、12ビットのPDP-8では命令語長が短いので演算はアキュムレータとメモリ間で行う1アドレス命令である。
命令語長を長くとると1命令で出来ることが多くなり、高性能を実現しやすいが、一方、実現に必要なハードウェア量は増加する。そこで、小規模なプロセサ向けのMJアーキテクチャでは、比較的短い命令語を使うのが妥当である。PDP-8のように12ビット命令という手もあるが、4ビットバス経由で命令を読もうとすると、読み込みだけで3サイクルが必要となるので、4004に比べて命令の読み込みサイクルが1サイクル余計に必要となり、1命令の実行時間が増えてしまう。各命令が強力になることで一定の処理を行うのに必要となる命令数が減少する効果が期待できるが、4ビットプロセサが使われるような用途では、各命令の実行が遅くなる損失の方が大きいと思われるので、MJアーキテクチャにおいても8ビットの命令語長を採用する。
基本の命令語長を8ビットとすると、オペランドを指定するために使用できるビット数は極めて制限されるので、命令の形式としては、アキュムレータとメモリ間の演算という1アドレス命令のアーキテクチャとする。
レジスタ
次に実行すべき命令を指すPC(プログラムカウンタ)とACC(アキュムレータ)は必須のレジスタであるが、4004では、その他に、サブルーチンコールを行う場合の戻りアドレスを記憶する3段のスタックと、16個の4ビットレジスタからなるインデックスレジスタを持っている。そして、このインデックスレジスタは、ペアにして8ビットでアドレスを指定する場合に使ったり、4ビットのデータを保持するデータレジスタ的に使用したりしている。
しかし、36ビットの資源を使っているスタックをサブルーチンコールだけに使うのは利用効率が低く、また、12ビットのアドレスを指定するインデックスレジスタが8ビット長というのも中途半端であるので、MJアーキテクチャでは、両者を一体化して12ビット長のインデックスレジスタ(IXレジスタ)を4本設けることにしよう。
こうすると、4004ではスタックに12×3=36ビット、インデックスレジスタは4×16=64ビットで合計100ビットであるが、MJアーキでは12×4=48ビットとレジスタに必要なハードウェアを52ビット削減しており、他の部分で多少ハードウェアが増えても、4004と同規模以下に納めることが出来る。
MJアーキテクチャにおいて、ソフトウェアから見えるのは以下のレジスタである。
ここでCYは4004にも存在したアキュムレータの演算結果のキャリーを保持する1ビットのレジスタである。そして、IXCYレジスタは、MJアーキテクチャで新設されたレジスタであり、IXレジスタのインクレメントにより発生したキャリーを保持する1ビットのレジスタである。
MJアーキテクチャでは、IXレジスタは4004のスタックを兼ねる必要があるので、サブルーチンコール命令は戻りアドレスをIXレジスタの最初のエントリであるIX0に書き込み、リターン命令はIX0の内容のアドレスへジャンプする仕様とする。ここまでは、スタックのトップがIX0と名前を変えただけであるが、IXレジスタの内容をメモリに書き出し、メモリから読み出すことが可能な命令を設け、サブルーチンの中でIX0の内容をメモリに退避、復元してやれば、メモリ容量の許す限り任意の深さのサブルーチンコールのネスティング(多重呼び出し)が可能となる。こうすることにより3重の呼び出ししか出来ないという4004の制約を解消することができる。
また、IXレジスタを4004のインデックスレジスタのようにRAMをアクセスする場合のアドレス指定に使える命令を設ける。メモリに格納した16桁の2進化10進数をアクセスする場合のように、順次メモリアドレスを増加してアクセスする使い方が多いが、IXレジスタをPCと一体化すれば、12ビットインクレメンタを共用して、殆ど追加ハードウェアを必要とせずにアドレスの+1が可能となり都合が良い。
コンピュータアーキテクチャの話 (72) 演算器の設計
これらの信号を用いて16ビットアダーを構成したのが下の図である。この図では、74S181は、動作を分かり易くするため、4ビットごとのP,G信号を生成する部分とSumを計算する部分を別のボックスとして書いているが、実際の74S181ではこれらのペアが1チップに集積されている。また、74S182はCn+8キャリー、Cn+16キャリーを生成する部分をそれぞれ別のボックスに分割して書いているが、これら4個のボックス全部が1チップに入っている。
SN74S181を4個とSN74S182を用いた16ビットアダー回路。クリティカルパスを赤線で示す。
この構成で特徴的なことは、Sum回路からのキャリーは使われず、74S182のCn+4~Cn+12信号が、次のSum回路に入力されている点である。74S181のデータシートによるとA、B入力からCn+4信号までの遅延時間は12.5ns、C-inからCn+4信号までの遅延は7nsであるので、Sum回路だけを4個使って、下位のCn+4を次のSum回路のC-inに接続し、最上位のSum回路のCn+4をC-outとすると、最大遅延は7×3+12.5=33.5nsとなる。
一方、P、G信号を用いる場合のクリティカルパス(遅延時間が最大のパス)は、図に赤線で示したパスである。この場合は、74S181のA、B入力からP、G信号までの遅延は8ns、C-inからSumまでの遅延は7ns、そして、74S182のP、G信号からCn+x信号までの遅延は4.5nsであるので、全体の遅延は19.5nsとなる。つまり、P、G回路と74S182を使うことにより、約40%遅延時間が短くなっている。なお、ここで使用した数値はデータシートのTyp(Typicalの略で、平均的な部品の、平均的な使用条件での遅延時間を示す)であり、Max(遅めの部品を高温、低電圧で動かす場合の遅延時間)は1.5倍程度の値になっている。
では、74S182はどうやってCn+4~Cn+16を計算するのであろうか? ここで威力を発揮するのがP信号である。Cn+12を例にとると、Cn+12が"1"となるのは、次の4つケースである。
A,B11-8の加算でキャリーが出る(A,B11-8のG信号が"1")の場合A,B7-4の加算でキャリーが出て、それがA,B11-8の加算器を伝搬してキャリーが発生する(A,B11-8のP信号が"1"であり、A,B7-4のG信号が"1")の場合A,B3-0の加算でキャリーが出て、それがA,B7-4とA,B11-8の加算器を伝搬してキャリーが発生する(A,B11-8、AB7-4のP信号がともに"1"であり、A,B3-0のG信号が"1")の場合キャリー入力され、それがA,B3-0、A,B7-4とA,B11-8の加算器を伝搬してキャリーが発生する(A,B11-8、A,B7-4、A,B3-0のP信号がともに"1"であり、C-in入力が"1")の場合
つまり、Cn+12=G2+G1・P2+G0・P2・P1+Cin・P2・P1・P0 で生成される。なお、この式のP2、G2はA,B11-8、P1、G1はA,B7-4、P0、G0はA,B3-0の74S181のP、G信号を示す。
このように、P、G信号を用いてキャリーを高速に計算するやり方をキャリールックアヘッド(Carry Lookahead)方式と呼ぶ。
スーパーコンは米国と互角か? (1) 本当に日本は米国より優れた技術があるのか
2007年1月5日付けの日本経済新聞の「イノベーション 日本の底力」と題するコラムの第一回として「スーパーコン 米国と互角」という見出しの文章が掲載された。筆者の独断で要約すると、1) 日本は毎秒10ペタ回の演算性能をもつ世界最速のスーパーコンを開発中である。2) 日本の強みは地球シミュレータでノウハウを積み重ねた「ベクトル型」のプロセサ技術。3) ベクトル型は科学技術計算に専用化した構造で、気象予測など大量データを処理する計算はベクトルが得意。4) 国際的な性能評価の指標で比べると28項目中17項目でベクトル型が勝る。5) 米国はスカラ型に注力しておりベクトル型は弱い。6) CPUとメモリ間も光伝送が必須だが、ここでも日本は一日の長がある。従って、スーパーコンは米国と互角以上の戦いを繰り広げると結論付けている。また、米国も開発を行っており、米国国防総省は昨年11月、スーパーコン開発でIBMやクレイと契約し、速度の目標は低いが技術基盤のすそ野を広げる狙いがあるとみられる、と書いている。
この文章を読むと、スパコン(日経はスーパーコンと書いているが、筆者はスパコンを使い慣れているので、以後、スパコンを使用する)の開発に関して日本は米国より優れた技術があり互角以上に戦いを進めているという印象であるが、本当にそうであろうか?
本当に日本は米国より優れた技術があるのか
日経には日米のスーパーコン開発計画という表が掲載されているが、米国はエネルギー省のASC計画の18億ドル、国防総省のHPCS計画の5億ドル以上を始めとして、次世代スパコンの開発のために、2010年までに25億ドルあまり(約3000億円)をつぎ込む計画である。これに対して日本の次世代スパコンは1154億円の予算であり、3分の1の予算規模でしかない。
また、米国の開発の速度の目標は低いと書いているが、この表のASC計画の演算性能は1~10ペタとなっているし、最近では、国防総省のHPCS計画のターゲットは実アプリケーションでの実効性能で数ペタと言っており、ピーク性能では10ペタ級になる可能性が高いと思われる。いずれにしても、米国も威信を掛けて開発しており、「目標は低いが技術基盤のすそ野を広げる狙い」などという開発計画が承認されるとは考え難い。
次の図はTop500のシステムをプロセサのアーキテクチャ別に分類して、そのシェアの年次推移をプロットしたもので、左がシステム数、右がGFlops性能シェアである。
Top500に掲載されたプロセサアーキテクチャ別のシェアの年次推移。赤い部分がスカラ、その上の黄色の部分がベクトルである。(出典:Top500)
この図に見られるように、左端の1993年にはシステム数、性能ともに半分以上がベクトル型であったが、2000年にかけて急速にシェアが減少している。なお、2002年の性能シェアの急増は、日本の地球シミュレータがダントツのトップで加わったことが主因である。しかし、その後もシステム数、性能ともにシェアは減少を続け、直近の2006年11月発表では、Top500にランクインされたベクトルシステムは7システムでシェアは1.4%、性能合計は約85TFlopsでシェアは2.4%である。
この傾向からみると、ベクトル型は明らかに消え行く過去のアーキテクチャで、そこに技術の蓄積があるから強みと言えるのであろうか? 技術蓄積があるからと言って、このように急速にシュリンクするアーキテクチャに追加投資することが日本のスパコン開発に有益であるのかどうかは、はなはだ疑問である。
小惑星探査機「はやぶさ」が帰還開始へ、観測データもWEBで無償公開
宇宙航空研究開発機構(JAXA)は24日、小惑星探査機「はやぶさ」に関する記者会見を開催し、現状について報告した。依然として厳しい状況が続くが、25日より、いよいよ地球帰還に向けた運用を開始するという。また同日、JAXAは「はやぶさ」が取得した科学データの全てをWEB上に公開した。
会見に出席したJAXAの川口淳一郎教授(プロジェクトマネージャ)、國中均教授(宇宙輸送工学研究系)、吉川真助教授(宇宙情報・エネルギー工学研究系、以上左から)
小惑星探査機「はやぶさ」は、2003年5月の打上げ後、2005年9月に目的地である小惑星「イトカワ」に到着。科学観測を行ったほか、サンプル採取のためのタッチダウンも実施した。サンプル採取そのものは失敗した可能性が高いが、科学的・技術的に大きな成果を得ており、その業績は海外からも高く評価されている。
しかし、その途上で度重なるアクシデントに見舞われており、まず2005年7月と10月には、相次いで姿勢制御に用いるリアクションホイールが故障。残ったZ軸ホイールと化学エンジンによる姿勢制御に切り替えていたが、タッチダウン後に今度はこの化学エンジンから燃料が漏洩。ガス噴出によって姿勢を喪失し、一時は地上との交信が途絶する事態とまでなった。
これを受け、JAXAは当初2007年6月としていた帰還予定を断念。3年後の2010年6月を新たな目標として、帰還に向けた準備を続けていた。
これらの内容については、今月4日に宇宙開発委員会に報告されていたが、その後、20日になってイオンエンジンの1台(Bスラスタ)に中和電圧が上昇するトラブルが発生したという。このBスラスタはすでに作動時間が9,600時間に達しており、性能の低下も見られることから、JAXAは当面、安定しているDスラスタのみを使って、帰還運転を行うことを決定した。
当面はDスラスタのみで地球に向かうが、最後までDのみで行くと決定したわけではないようだ。Bの使用や、場合によってはA/Cを使うことも考えるという
左が問題のBスラスタ。性能の低下(緑)や電圧の上昇(赤)が見られた。電圧上昇はエンジンの寿命を短くするという
AとCのスラスタは安定しないため、すでに使用していなかったが、Bも使えないとなると、残りはDスラスタのみとなる。しかも正常に動作するリアクションホイールは残り1基だけで、化学エンジンはもう使えない。プロジェクトマネージャである川口淳一郎教授(月・惑星探査推進ディレクタ)は、「赤信号が灯っている」と予断を許さない状況にあるとの認識を示しつつも、「しかし帰還できないと決まったわけではない」と補足。
川口プロマネによると、地球への帰還にはあと「8,000時間から10,000時間程度、イオンエンジンの運転が必要になる」という。1台だけの運転でも2010年6月の帰還は可能で、燃料も十分あることから、これ以上壊れさえしなければ、何とかたどり着ける計算だ。
しかし、ここで問題となるのはイオンエンジンの寿命。設計上は14,000時間とされており、Dスラスタはあと3,000時間程度で超えてしまうレベルだ。もっとも、寿命については「地上では20,000時間の実証もしている。この時は途中で試験をやめたので、実際はもっと動くかもしれない」(國中均教授・宇宙輸送工学研究系)という。よりクリティカルなのは残り1基しかないリアクションホイールのほうだが、スピン安定にしてホイールを停止させるなど、なるべく温存する方法が考えられているそうだ。
またJAXAは同日、「はやぶさ」が取得した全科学データを、WEBサイトにて公開した。これには、可視分光撮像カメラ(AMICA)の画像約1,600枚、近赤外分光器(NIRS)のスペクトルデータ約12万本、レーザー高度計(LIDAR)のデータ約170万点、蛍光X線スペクトロメータ(XRS)のデータ約15,000本が含まれており、誰でも無償でダウンロードが可能。そのほか、SPICE(位置・姿勢のデータ)やイトカワの3D形状モデルなども用意されている。
WEBページは、国内外の研究者向けということで、英語サイトになっている。スウィングバイ時に撮影した地球の画像や、イトカワ接近時の地表の画像なども見ることができる
コンピュータアーキテクチャの話 (64) 4ビットプロセサのアーキテクチャ設計
一方、RAMに格納されたデータをメモリアドレスとして使用するためには、メモリからアキュムレータにロードされた値を4ビット単位でIXレジスタに格納する命令が必要である。また、この逆にIXレジスタの値を4ビットづつアキュムレータに転送する命令があると、IXレジスタを4004のインデックスレジスタと同様に使用することが出来て便利である。ということで、MJアーキテクチャに次の命令を追加する。
LDIX命令
IXレジスタの内容をアキュムレータにロードする。IXレジスタの数が4個であるのでIX指定は2ビットで済み、IXhigh(hml=2)、IXmid(hml=1)、IXlow(hml=0)の指定を含めて4ビットで選択可能である。
ADIX命令
キャリー込みで、IXレジスタの内容をアキュムレータに加算する。hmlでIXhigh、IXmid、IXlowを指定する。
STIX命令
アキュムレータの内容をIXレジスタに格納する。hmlでIXhigh、IXmid、IXlowを指定する。
以上の8種の命令と、アキュムレータやキャリーの操作を行うACC命令群があれば、最低限のメモリアクセスと加減算が可能である。
また、次々とメモリアドレスを増減させて連続したメモリをアクセスしたり、ループのカウントを行ったりするために、INC命令を設ける。
INC命令
指定したIXレジスタの内容を+1する。
4004では4ビットのインデックスレジスタのインクレメントしか出来ないので、最大16回のループしか作れないが、MJアーキテクチャでは一つのINC命令で、12ビット、4096回までのループが作れる。例えば10回のループの場合は、FIM命令でDに-10(11110110)を指定し、符号拡張でIXレジスタに格納することにより、12ビットで表現された -10がIXレジスタに格納される。そして、ループの終わりのINC命令で+1し、後述のJCN命令でIXCYレジスタに入ったキャリーを判定すれば良い。
しかし、ループを作るためには元に戻るためのジャンプ命令が必要である。ということで、MJアーキテクチャに分岐命令、条件分岐命令、サブルーチンコールとリターンのためのジャンプ命令を次のように定義する。
JUN命令
無条件ジャンプ命令。分岐先の命令ROMの12ビットアドレスを指定する。
JCN命令
条件ジャンプ命令。条件Condが成立した場合、Amid、Alowで指定したアドレスへジャンプする。Highアドレスは4004と同様、PChighが使用される。
分岐条件にはIXレジスタのINC命令でキャリーが立ったことを示すIXCY==1を加え、以下のように定義する。
Cond (C2-C4、C1==0)以下の条件が成立した場合にジャンプ
000: CY==1
001: IXCY==1
010: ACC==0
011: GT (ACC!=0, CY==0)
100: LT (ACC!=0, CY==1)
101: TEST==1
C1==1: 条件が不成立の場合に、ジャンプ
000~101の条件はC1==0の場合と同じ JMS命令
サブルーチンコール命令。次の命令のアドレスをIX0に格納し、Ahigh、Amid、Alowで指定される12ビットのROMアドレスに分岐する。
JIN命令
IXレジスタに格納されたアドレスにジャンプする。IX0レジスタを指定すれば、サブルーチンからのリターンにも使える。
但し、命令語には2ビットしか余裕が無いので、4004のようにアキュムレータに格納する4ビットのリターン値の指定は出来ない。そこで、NS="1"の場合は、既にアキュムレータに存在する値を戻り値として、何もセットしないことにする。一般的には、サブルーチンで計算した結果をリターン値とする場合が多いので、4004のようにBBL命令で指定した固定値を格納するより、この仕様の方が使いやすいと考えられる。また、単純な間接アドレス指定の分岐として使用する場合は、この指定を使えばアキュムレータの値を保存してジャンプできる。一方、NS="0"の場合は、上位3ビットはゼロとして1ビットの Retフィールドの値をアキュムレータに格納して戻る。これも良く使われる形であるが、正常復帰は0、異常復帰は1という使い方が可能である。