Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP3099290B2 - マルチスレッドプログラムを使用する情報処理装置 - Google Patents
[go: Go Back, main page]

JP3099290B2 - マルチスレッドプログラムを使用する情報処理装置 - Google Patents

マルチスレッドプログラムを使用する情報処理装置

Info

Publication number
JP3099290B2
JP3099290B2 JP09287662A JP28766297A JP3099290B2 JP 3099290 B2 JP3099290 B2 JP 3099290B2 JP 09287662 A JP09287662 A JP 09287662A JP 28766297 A JP28766297 A JP 28766297A JP 3099290 B2 JP3099290 B2 JP 3099290B2
Authority
JP
Japan
Prior art keywords
thread
data
instruction
information processing
processing apparatus
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP09287662A
Other languages
English (en)
Other versions
JPH11110215A (ja
Inventor
啓介 進藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to JP09287662A priority Critical patent/JP3099290B2/ja
Publication of JPH11110215A publication Critical patent/JPH11110215A/ja
Application granted granted Critical
Publication of JP3099290B2 publication Critical patent/JP3099290B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、デジタル回路を使用し
た情報処理装置に関し、特にマイクロプロセッサおよび
それを利用した情報処理システムに関する。
【0002】
【従来の技術】汎用マイクロプロセッサの性能を向上さ
せるためには、主に2つの方法がある。動作周波数の向
上、および並列化である。動作周波数の向上には、半導
体プロセス技術の改善と、パイプライン等の回路構成の
変更が考えられる。前者の進化は今後も続くものと考え
られるが、後者はメモリの速度等がネックになって向上
はほとんど見込めない。よって今後は、プロセス技術の
改善と並列化によって性能を向上させることになる。
【0003】ところが並列化には、さまざまな制限があ
る。プログラムの互換性を保ったまま並列化する手段
は、スーパスカラ方式として良く知られているが、スー
パスカラ方式は、命令の並列配分のための回路が本体の
演算装置より大規模になり、消費電力の点で優れている
とは言えない。少なくとも、消費電力の削減という観点
では、プログラムの互換性という制限がなければ避ける
べきアプローチといえる。そして、スーパースカラ方式
は、プログラムの局所的な並列抽出である。それは、プ
ログラムの中でデータ依存関係の一番多い部分をあえて
並列化する方式と言える。そのため、並列化を行うハー
ドウェアの増加に対して、それによる性能向上率は飽和
しつつある。
【0004】そこで、プログラムの互換性をあきらめて
並列化を進める方式の代表的なものが次に示す、従来例
1のVLIW方式と、従来例2の共有メモリマルチプロ
セッサ方式である。
【0005】<従来例1>図2を参照して、本発明の元
となった従来のVLIW型マイクロプロセッサの模式図
を示す。以下この例を従来例1とする。
【0006】VLIW型マイクロプロセッサは、命令ア
ドレス生成ユニット201、そして命令キャッシュ20
2、命令デコード203、データクロスバスイッチ20
4、分岐ユニット205、ロードストアユニット20
6、2つの演算器207、多ポートレジスタファイル2
08、データキャッシュ209、外部バスインターフェ
ース210で構成される。
【0007】VLIW型マイクロプロセッサは、命令キ
ャッシュ202から発行される命令が同時に分岐ユニッ
ト205、ロードストアユニット206、2つの演算機
207を制御する。そのため、命令キャッシュ202に
は複数の命令が1つのラインに混在して格納される。
【0008】そして、分岐ユニット205、ロードスト
アユニット206、2つの演算器207は全て1つのレ
ジスタファイル208を共有し、データクロスバスイッ
チ204によって配分される。分岐ユニット205、ロ
ードストアユニット207、2つの演算器207は同時
に動作できるため、すべての入力データ、出力データは
レジスタファイル208に接続される。
【0009】VLIW型マイクロプロセッサの特徴は、
演算機207やロードストアユニット206等を複数同
時に制御することを可能にしつつ、命令デコード203
の複雑化を抑制できることにある。ところが、さらに演
算機207を増加させると、演算器間の転送バスの数、
レジスタファイル208のポート数が極度に増大すると
いう問題が生じる。これが回路規模の増加やクロック速
度の低下をもたらすことになる。この欠点を解消するた
めにはレジスタファイル208やデータクロスバスイッ
チ204を分割するしかない。しかし、分割のために
は、同時に実行される命令列の中に、互いにデータ依存
関係のない独立した処理が共存していなければならな
い。VLIW型マイクロプロセッサでは、あらかじめ独
立した処理を、コンパイラあるいはプログラマが事前に
1つの命令ラインに混在させて命令キャッシュ202に
格納しておく必要がある。これは超並列における動作の
自由度を失わせる結果になる。要約すると、今後の並列
処理性能の向上には、通常の依存関係のある複数のプロ
グラムを、動的に組み合わせて動作できる構造が必要に
なる。
【0010】また、VLIW型マイクロプロセッサは、
特定アプリケーションに特化した回路を演算機と並列に
組み込まれることが多い。これは、メディアプロセッサ
と呼ばれるマルチメディア専用のマイクロプロセッサで
多くみられる方式である。メディアプロセッサの目的
は、専用回路の高速性と汎用マイクロプロセッサが持つ
自由度の双方を兼ね備えることある。しかし、今後の性
能向上のために、専用演算機を大量に搭載することにな
ると、それらの専用演算機とのデータのやりとりをする
前後の処理が問題となる。専用回路の組み合わせの自由
度と性能を維持するためには、専用回路間の仲立ちをす
る整数演算機207やロードストアユニット206を増
加させる必要がある。しかし、それには先に述べたVL
IW型に依存する並列化の限界がある。だが、これらを
利用せず、専用回路同士を直接接続すると、組み合わせ
の自由度がなくなり汎用性を失うことになる。今後のメ
ディアプロセッサには、専用回路間の接続を動的に変更
でき、かつ高いバンド幅のデータを処理できる手段が求
められている。
【0011】<従来例2>図3を参照して、本発明の元
となった従来のマイクロプロセッサを複数使用した構成
の模式図を示す。以下、この例を従来例2とする。
【0012】図3は、共有メモリ型マルチプロセッサと
呼ばれる構成である。データ共有のための機構を備えた
マイクロプロセッサ301を複数搭載したシステムであ
る。図では3つ搭載され、共有バス304に接続されて
いる。メモリバンク305、306は共に共有バス30
4に接続され、同時にアクセスすることはできない。ま
た、使用頻度の低い演算を共有するため、共有機能ユニ
ット307は共有バス304に接続される。I/Oペリ
フェラル308も共有バス304に接続される。
【0013】単体のマイクロプロセッサ301は、命令
キャッシュ311、命令発行ユニット312、整数演算
器313、浮動小数点演算器314、ロードストアユニ
ット315、データキャッシュ316、キャッシュコヒ
ーレンシ制御機構317を全て内蔵する。キャッシュコ
ヒーレンシ制御機構317は、共有バス304の内容を
常にスヌープし、自身のデータキャッシュ316が持つ
コピーの共有状態を制御する。
【0014】この共有メモリマルチプロセッサ方式は、
従来例1のVLIW方式と違い、マイクロプロセッサは
それぞれ全く独立した処理を自由な組み合わせで処理で
きる。そして、この共有メモリマルチプロセッサ方式
は、他の方式のマルチプロセッサに対して次のような長
所を持つ。単体のマイクロプロセッサの為に作成された
ソフトウェアがある程度使用できる、動的なプロセッサ
間通信のプログラムを作成しやすい、マイクロプロセッ
サごとのローカルキャッシュによって実際の通信のバン
ド幅を縮小できる、等である。
【0015】この共有メモリマルチプロセッサ方式の欠
点としては、性能を向上させるのに必要なハードウェア
が最も複雑になることが挙げられる。
【0016】まず、すべてのマイクロプロセッサ301
が命令キャッシュ311を持つことが挙げられる。ルー
プなどの中粒度の並列をマルチプロセッサで実行する場
合、同じプログラムのコピーをそれぞれの命令キャッシ
ュ311に持つことになる。そして、命令キャッシュリ
プレースのバンド幅もプロセッサの数だけ必要になる。
ループは同じ命令を再利用することであるため、命令メ
モリのマイクロプロセッサ301間の共有が望ましい。
【0017】次に、データキャッシュ316について述
べる。バスを共有するので、大規模なローカルキャッシ
ュ、およびキャッシュコヒーレンシ調停機構を搭載する
必要がある。スレッドはプロセッサ301〜303の間
で非決定的に配分され、データキャッシュコヒーレンシ
制御317、共有バス304を使用してデータを転送す
る必要がある。マイクロプロセッサ301の並列度を増
やすと、共有バスの転送能力の限界によって性能が制限
される。ところが、バスを分割してバンド幅を稼ぐよう
にすると、双方に対してキャッシュの制御を行うため、
ハードウェアの増加は甚大なものになる。メモリバンク
305を自然にマイクロプロセッサ301に直結できる
構造が望ましい。
【0018】そして、演算機の共有が難しいため、すべ
てのマイクロプロセッサが浮動小数点演算ユニット31
4を有する。ところが、浮動小数点演算ユニット314
の命令の発生頻度や稼働率は、特殊なアプリケーション
を除けば整数演算器313より低い。そのために、プロ
セッサの数だけ専用演算機を搭載するのは冗長と言え
る。しかし、機能ユニット307のように、共有バス3
04に接続すると、マイクロプロセッサ301との転送
バンド幅が不足することになる。そのため、専用演算器
の共有とマイクロプロセッサとの転送バンド幅の両立が
求められる。
【0019】
【発明が解決しようとする課題】プログラムの互換性を
保ったまま並列化を進める方式はスーパースカラ方式と
して知られるが、この方式は回路規模に対する性能比が
極端に低くなる。そこで、プログラムの互換性をあきら
めて性能を出す方式の代表的なものが次に示す、従来例
1のVLIW方式と、従来例2の共有メモリマルチプロ
セッサ方式である。
【0020】しかし、従来例1のVLIW方式は並列数
に上限があり、かつ並列プログラミングにおける汎用性
が低く、垂直性がない。そして、従来例2の共有メモリ
マルチプロセッサはは従来のマイクロプロセッサの回路
を全て内蔵するため、冗長な回路が多く、消費電力や回
路規模は最大になる。また、バスを共有するため、バス
のバンド幅に制限されて、並列度に対する性能が飽和す
ることが欠点といえる。
【0021】よって、並列度に上限がなく、プログラム
構造が従来のマイクロプロセッサに近く、かつ同じプロ
グラムで並列性能を生かすことができ、構造が単純で消
費電力の少ないマイクロプロセッサが求められている。
【0022】<自由度を維持しつつ演算能力の高い汎用
マイクロプロセッサの要求>専用に設計された回路は汎
用プロセッサと比較して常に高速である。しかし、それ
は単機能を実現するという前提に基づく。しかし、今後
要求されるアプリケーションは、多くの機能を実現する
ことが求められる。そのためには、専用回路を機能の数
だけ用意することになる。だが、複雑化の一途をたどる
アプリケーションの機能の全てをまかなうには、専用回
路を全て提供することは不可能である。そのため、それ
ほど性能を必要としない機能については、順次汎用マイ
クロプロセッサによって取って換わるようになった。専
用回路を使用する必要があるものにおいても、マイクロ
プロセッサが複数の専用回路の仲立ちをすることで自由
度を確保している。
【0023】専用回路を複数使用する機能は、専用回路
同士の接続の自由度とバンド幅を同時に確保する必要が
ある。しかし、バス転送速度や仲立ちをするマイクロプ
ロセッサの性能向上は飽和しつつある。よって、バスと
マイクロプロセッサの分割が必要になる。ところが、バ
スやマイクロプロセッサの分割は、従来例2に見られる
とおり、負荷分散、同期機構が非常に複雑になる。バス
やマイクロプロセッサを分割して局所的な性能を維持し
つつ、複数の専用回路をすべてのプロセッサで共有でき
るマイクロプロセッサが理想的である。
【0024】<消費電力に対して高性能なハードウェア
の要求>コストに対して最高性能のマイクロプロセッサ
は、単一プロセッサと互換性の制約が無ければ、消費電
力、チップコストに対して最高の性能を出すことができ
るプロセッサであると言える。単体のコストが低けれ
ば、そのプロセッサを大量に使用すれば最高性能のシス
テムを構築できる。
【0025】つまり、マイクロプロセッサを突き詰めれ
ば低消費電力になる。低消費電力のための手段はアーキ
テクチャレベル、回路レベル、プロセスレベルにそれぞ
れ存在する。その中でも、アーキテクチャレベルの手段
は、直接処理性能に関係ない回路や配線を極力無くすこ
とに尽きる。
【0026】既存のスーパースカラ型マイクロプロセッ
サは、既存のプログラムを単一のマイクロプロセッサで
動作させることを至上命題としているため、既存のプロ
グラムを内部の命令レベル並列マイクロプロセッサに翻
訳する回路が存在する。そして、近年はこの回路が巨大
化する一方である。これでは低消費電力と性能は両立で
きない。
【0027】マイクロプロセッサの本質は、演算器とメ
モリに尽きる。それ以外は基本的に冗長な回路である。
その冗長な回路を自由度を維持しつつ最小限にすること
が、アーキテクチャレベルの低消費電力につながる。
【0028】<要求されるソフトウェアの変化>並列プ
ログラムを記述する方法としては、古くはベクトルプロ
セッサ方式スーパーコンピュータに使用されたループの
コンパイラによるベクトル展開、最近ではコンパイラに
よるSIMD命令やVLIWへの展開などの技術があ
る。この方式は、ループのような特別な処理のみが並列
に動作するので、ループの前後の処理が性能の足かせに
なる。このことはAmdahlの法則として広く知られ
る。
【0029】しかし、現在は、並列処理を行うプログラ
ムの汎用性、処理の切り替えの高速化、処理の間の高速
通信を両立できる技術である、マルチスレッドと呼ばれ
る手法が主流になりつつある。このマルチスレッドは、
従来例2で示した共有メモリマルチプロセッサに最適な
ように作成されている。マルチスレッドはOSに登録し
ておけば、自動的に空いたマイクロプロセッサに負荷分
散される。マルチスレッドプログラムは、スレッド間の
同期は明示的に記述する必要があり、それ以外は独立し
て動作することを保証するため、ループの並列展開と比
較してAmdahlの法則の影響を減らすことができ
る。このマルチスレッドプログラミングモデルを使用す
れば、十分な汎用性と超並列への負荷分散を両立するこ
とができる。更に、マルチスレッドはSIMD命令など
との両立も可能である。
【0030】データと処理を対にするのは、オブジェク
ト指向と呼ばれる技術の一部であり、大規模化、分散化
される今後のアプリケーションを支える技術である。こ
のオブジェクト指向に適合するように、マイクロプロセ
ッサとメモリで構成されるプロセッサ単位を作成する。
そして、処理能力の必要なオブジェクトをそのプロセッ
サ単位の1つ、あるいは複数に割り当て、処理能力の必
要ないオブジェクトは、共有のプロセッサ単位に割り当
てる。この方式は、オブジェクト指向のソフトウェアに
とって一番自然な負荷分散の形態の1つと言える。
【0031】近年は、マイクロプロセッサの主な用途
は、科学技術計算からマルチメディアアプリケーション
に移行しつつある。このマルチメディアアプリケーショ
ンは、定型処理が多く、大量のデータ転送能力を要求す
る傾向がある。それでいて、大量の処理の間でデータ依
存関係が比較的少ないという特徴があり、データと処理
の分散化は容易と言える。そして、複数の処理が同時に
動作し、その組み合わせは非決定的である。よって、非
決定的な処理の組み合わせを効率的に行うためには、専
用回路の導入とともに、その仲立ちをする汎用マイクロ
プロセッサの性能向上が不可欠である。
【0032】そして、マルチメディアアプリケーション
は高速リアルタイム性能が求められる。現在のところ、
複雑なプライオリティーを使用したプロセススケジュー
リングを採用しているが、今後は、プロセスに対して複
数のマイクロプロセッサを一定量だけ静的に割り当て
て、マイクロプロセッサの割り当て数で負荷分散とする
ような単純な構造の方が望ましい。プライオリティーを
設定するのは、一定の演算資源の割り当てを必要とする
からである。
【0033】結論として、マルチスレッドプログラミン
グによる汎用性と、オブジェクト指向による明示的な負
荷分散を可能にするマイクロプロセッサが望ましいと考
えられる。
【0034】
【発明の実施の形態】次に、本発明について図面を参照
して説明する。
【0035】<実施例1>図1を参照する。本発明のマ
イクロプロセッサ1は、命令発行制御手段2を1つ以上
持つ。そして、プログラムカウンタ記憶手段3、命令格
納手段4、演算手段5、データ格納手段7を1セットに
して複数内蔵する。そして、演算手段5とデータ格納手
段7と、外部インターフェース手段8は、1つの動的信
号接続手段6に接続される。
【0036】命令発行制御手段2は、外部インターフェ
ース8からの要求、あるいは演算ユニット5の要求に応
じて動作する。命令発行制御手段2は、命令格納手段4
のプログラムカウンタを最初のプログラムカウンタ記憶
手段3に転送して演算処理を開始する。
【0037】プログラムカウンタ記憶手段3は、直列に
接続され、個々に命令格納手段4に接続される。演算ユ
ニットの演算の終了と同時に右隣のプログラムカウンタ
記憶手段2にプログラムカウンタを送信し、左隣のプロ
グラムカウンタ記憶手段3から、更新されたプログラム
カウンタを受信する。右端のプログラムカウンタ記憶手
段3は、命令発行制御2に接続され、一連の演算の終了
を通知する。
【0038】命令格納手段4は、全て演算手段5に接続
され、それぞれ演算手段5の機能を選択する命令コード
を伝達する。読み出される命令コードは、プログラムカ
ウンタ記憶手段3からの値によって選択される。
【0039】演算手段5は、命令格納手段4の命令を受
理して演算処理を行い、演算に使用する値を動的信号接
続手段6から読み出す。演算結果は、右に隣接する演算
手段5、あるいは動的信号接続手段6に伝達する。
【0040】動的信号接続手段6は、すべての演算手段
5と、データ格納手段7と、外部インターフェース手段
7同士で同時に通信を行うことができる。動的信号接続
手段6は、演算手段5からの要求に応じて、すべてのデ
ータ格納手段7と外部インターフェース手段7の中から
1つを選択して、データ値を演算手段5に転送する。ま
たは、逆に演算結果を1つのデータ格納手段7か外部イ
ンターフェース手段7を選択して転送する。
【0041】データ格納手段7は、同時刻には1つの読
み出し、あるいは1つの書き込みだけを処理できれば十
分である。すべての演算手段5は、同時に同じデータ格
納手段7、あるいは外部インターフェース手段7と通信
することがないように命令発行制御2によって調停でき
る。
【0042】外部インターフェース手段8は、演算手段
5の要求に応じてマイクロプロセッサ1の演算に必要な
データを、マイクロプロセッサ1の外部から読み出す。
あるいは、演算手段5の演算結果をマイクロプロセッサ
1の外部へ出力する。
【0043】<実施例2> <マイクロプロセッサ401の内部構造>図4を参照し
て本発明の第二の実施例のマイクロプロセッサ401に
ついて概説する。
【0044】4つの整数演算ユニット群405と、4つ
のスレッド制御ユニット403は、分岐クロスバスイッ
チ402によって接続される。4つのスレッド制御ユニ
ット403には、それぞれ命令メモリ404が接続され
る。命令メモリ404には、それぞれに整数演算ユニッ
ト群405が接続される。整数演算ユニット群405
は、4つの整数演算ユニットを内蔵する。よって、マイ
クロプロセッサ401は最大16の整数演算を同時実行
できる。
【0045】すべての整数演算ユニットは1つのローカ
ルキャッシュクロスバスイッチ406に接続される。1
Kバイトのローカルデータキャッシュ407は整数演算
ユニットの数と等しい数だけ実装され、全て1つのロー
カルメモリクロスバスイッチ406に接続される。ロー
カルメモリクロスバスイッチ406はグローバルアクセ
ス制御408と、共有浮動小数点演算ユニット409に
も接続される。グローバルアクセス制御408は、共有
浮動小数点演算ユニット409にも接続され、その制御
を行う。同様に分岐クロスバスイッチ402と、ローカ
ルメモリクロスバスイッチ406の制御も行う。
【0046】分岐ユニット402クロスバスイッチは、
4つの整数演算ユニット群405からのスレッド状態信
号419と、とアクセス制御ユニット408からのスレ
ッド再開要求信号430を受理して、適切なスレッド発
行ユニット403にスレッド状態信号411を伝達する
役割を果たす。同時に4つの分岐を処理可能である。左
端のスレッド制御ユニット403は、その右に配置され
た別のスレッド制御ユニット403からスレッド制御信
号413を受理し、プログラムカウンタ信号414を伝
達する。また、スレッド制御ユニット403は、右端の
スレッド制御ユニット403からスレッド制御信号41
3を伝達し、プログラムカウンタ信号414を受理す
る。右端のスレッド制御ユニット403は、プログラム
カウンタ信号413をグローバルアクセス制御ユニット
408に接続し、インクリメントされたプログラムカウ
ンタ信号412を受理する。
【0047】そして、命令メモリ404は、内蔵する命
令メモリの内容に基づいて命令デコード信号415を隣
接する整数演算ユニット群405に伝達する。同時に、
その右に配置された別の命令メモリ404にデコード信
号415の一部である命令デコード信号431を伝達す
る。通常のパイプラインでは次のパイプラインステージ
に命令デコード結果を送るが、本発明のプロセッサでは
次のパイプラインステージは常に右に隣接する演算ユニ
ットで実行するためである。右端の命令メモリ404
は、左端の命令メモリに命令デコード信号431を伝達
する。
【0048】整数演算ユニット群405は、4つの整数
演算ユニットと4つの分岐ユニットと1つの分岐調停ユ
ニットで構成される。整数演算ユニット群405は、隣
接した命令メモリ404から受け取った命令デコード信
号415を使用して機能を自在に変更できる。この点で
は一般的なマイクロプロセッサと同一である。そして、
演算の入力データとして、ローカルメモリクロスバスイ
ッチ406とのアドレス、データのやり取りを行う信号
417が4つと、グローバルメモリアクセスバス42
7、428が4本接続される。この4つという数は整数
演算ユニット群405が内蔵する整数演算ユニットの数
に等しい。さらに本発明のプロセッサでは、同時に左に
隣接する整数演算ユニット405からもデータをパイプ
ラインデータバス信号416を介して受理することにな
る。演算ユニット405が左端の場合は、右端の演算ユ
ニット405から受理する。ローカルメモリクロスバス
イッチへの接続は、データバスとアドレスバスと制御バ
スから構成される。データバスは32ビットだが、アド
レスバスは内部表記のため1Kバイト分の8ビットのみ
が使用されている。なお、グローバルメモリアクセスア
ドレスバス信号417は32ビット長である。
【0049】さらに、整数演算ユニット群405は、全
て分岐クロスバスイッチ402に向けてスレッド状態信
号419を伝送する。スレッド状態信号409はスレッ
ド状態信号419のうちのプログラムカウンタ信号の内
容によって4つのスレッド制御ユニット403のうちの
1つに分配される。
【0050】ローカルデータキャッシュ407は1Kバ
イトの容量を持つ、1ポートのキャッシュメモリであ
る。1つのマイクロプロセッサ401上に全部で16個
配置される。それらは全てローカルメモリクロスバスイ
ッチ406と接続される。ローカルメモリアドレスバス
421は26ビットの信号である。ローカルメモリデー
タバス422は32ビットの双方向信号である。ローカ
ルデータキャッシュ407を16個用意することによ
り、マイクロプロセッサ401が内蔵する整数演算ユニ
ット全てが同時にローカルデータキャッシュ407をア
クセスできることになる。
【0051】ローカルメモリクロスバスイッチ406
は、16本のローカルメモリアクセス信号418の内の
アドレス信号を受理して、任意のローカルメモリアドレ
スバス421にそのまま転送する。ローカルメモリアク
セス信号418のうちのデータバス信号は、ローカルメ
モリデータバス422に、それぞれクロスバスイッチ制
御信号426の内容に応じて接続される。ローカルメモ
リアクセス信号418のうちのデータバス信号と、ロー
カルメモリデータバス422の信号の方向は全て双方向
である。
【0052】グローバルアクセス制御ユニット408
は、整数演算ユニット群405からの分岐要求信号43
3、434、435、436を受理して、分岐クロスバ
スイッチ402を制御する。同時に、ローカルメモリク
ロスバスイッチ406を、制御信号426を使用して制
御する。また、グローバルアクセス制御ユニット408
にはグローバルメモリアクセスアドレス信号427とグ
ローバルメモリアクセスデータ信号428が接続され
る。命令キャッシュリプレース信号432による命令キ
ャッシュのリプレース、およびデータキャッシュリプレ
ース信号425によるデータキャッシュのリプレース行
う。マイクロプロセッサ401の外部へのアクセスであ
る場合は、外部アドレスバス452、外部制御バス45
1を使用してチップ外部メモリをアクセスする。外部デ
ータバス450は、外部書き込みのときは出力、外部読
み込みの時は入力となる。外部からのデータロードやキ
ャッシュのリプレースが終わった時点で、ロード待ちで
休眠しているスレッドを生起するために、分岐クロスバ
スイッチ制御信号430を通してスレッド制御ユニット
403にスレッド再開要求を行う。さらに、外部割りこ
み信号453を受理して、それをスレッド発行に変換し
てスレッド状態信号437を伝達し、スレッド制御ユニ
ット403に割り込み受理スレッドを生起させる。
【0053】共有浮動小数点演算ユニット409は、ロ
ーカルキャッシュクロスバスイッチ406にデータバス
424、アドレスバス423を通じて接続される。そし
て、共有浮動小数点ユニット409は、ローカルキャッ
シュクロスバスイッチ406を介して整数演算ユニット
群405からデータを受理し、整数演算ユニット群40
5に直接データを伝送する。共有浮動小数点演算ユニッ
ト409は、演算を要求した1つの整数演算ユニット群
405にとっては、ローカルクロスバスイッチ406に
よって、ローカルキャッシュメモリ407の代わりに接
続される形になる。
【0054】<整数演算ユニット群405>次に、図5
を参照して、整数演算ユニット群405の内部構造のブ
ロック図について概説する。
【0055】整数演算ユニット群405は、4つの整数
演算ユニット501と、4つの分岐ユニット502と、
分岐ユニット502の調停を行う分岐アービター503
から構成される。
【0056】整数演算ユニット401は、主に整数演算
機とテンポラリデータレジスタから構成される。前述の
命令メモリ404から、演算機の実行制御の為の命令デ
コード信号511を受理する。前段の整数演算ユニット
401からテンポラリデータレジスタを含むすべての内
部状態を受理して、1つの演算を行い。次の段の整数演
算ユニット401に演算結果を含むすべての状態を伝達
する。1クロックごとにすべての状態を右方向に伝達す
る点で他のプロセッサと異なっている。演算の結果発生
したメモリへのロードストア、分岐を実行するために、
分岐ユニット502に対して制御信号を送り、メモリか
ら読み込まれたデータを分岐ユニット502から受理す
る。
【0057】分岐ユニット502は、分岐命令の実行
と、ロードストアの実行を行う。ローカルメモリのロー
ドストアはすべての分岐ユニット502が同時に実行で
きる。しかし、分岐の実行は4つの分岐ユニット502
で共有され、1つだけが同時に実行できる。さらに、グ
ローバルメモリのロードストアは、マイクロプロセッサ
401全体で同時に1つとなっている。本発明のプロセ
ッサでは、スレッド切り替えだけでなく、分岐と不定レ
イテンシ時間のロード、これらが全てスレッドの退避と
コンテキストスイッチを行う必要がある。そのため、分
岐の度に分岐要求信号群によってスレッドに必要な状態
を分岐ユニット403に伝達する必要がある。本発明の
マイクロプロセッサではプログラムカウンタ、スタック
ポインタ、スレッドIDの3つの信号を最小限必要なス
レッドの状態として使用している。これらは分岐の実行
に応じて分岐要求信号群525を通して分岐アービター
503に伝達される。分岐ユニット状態信号群516
は、分岐に必要な内部状態である。
【0058】分岐ユニット502のローカルメモリロー
ドストアは、単にローカルキャッシュクロスバスイッチ
406に向かって無条件でローカルアドレス521と、
ローカルデータ523をストアすれば良い。ロードの場
合は1クロック遅れて右のローカルデータ523に読み
込まれる。スケジューリングはグローバルアクセス制御
ユニット408が、ローカルキャッシュクロスバスイッ
チ406を制御している。スレッドに対してデータキャ
ッシュメモリ407を1つ静的に割り当てるため、ロー
カルメモリクロスバスイッチ406の制御は基本的に静
的である。分岐ユニット502が割り当てられていない
データキャッシュメモリ407については、分岐ユニッ
ト502がスレッドの右への伝達と無関係にその場で保
持し、分岐ユニット502に対象となるデータキャッシ
ュメモリバンク407が割り当てられるのを待つ。割り
当てられていないデータキャッシュメモリバンク407
へのアクセスレイテンシは最小16クロック必要とす
る。その代わり、16のスレッドの同一バンクへのバン
ク外アクセスの調停も可能になる。
【0059】分岐アービター503は、4つの分岐ユニ
ット502からの分岐要求信号群525〜528を全て
受理して、1つを選択し、分岐要求信号419を分岐ク
ロスバスイッチ402に伝達する。選択されなかった分
岐要求信号群525〜528は、パイプラインストール
となり、次のクロック以降に発行される。分岐の頻度
が、基本的に命令の4分の1以下であることを想定した
インプリメントである。
【0060】<整数演算ユニット501>次に、図6を
参照する。整数演算ユニット501の内部構造のブロッ
ク図である。
【0061】601から619は全てエッジトリガフリ
ップフロップである。プログラムカウンタ601、スタ
ックポインタ602、スレッド情報603は、分岐、ス
レッドの新規発行の時に分岐ユニット403から伝達さ
れる信号である。デコード済み命令コードラッチ604
は、常に命令メモリ404から伝達される信号である。
【0062】プログラムカウンタ605は、26ビット
の信号であり、そのパイプラインステージのスレッドの
命令アドレスを示すものであり、分岐先の計算に使用さ
れる。条件実行命令制御ラッチ606は、整数演算ユニ
ット501の演算結果の書き戻しや分岐命令実行の中止
を実行するための制御信号である。フラグレジスタラッ
チ607は、フラグを更新しない場合のための状態保持
レジスタである。フラグレジスタ更新ラッチ608は、
第1オペランドバス627に接続されており、レジスタ
の値をフラグに直接代入するのに使用される。ALU演
算結果フラグラッチ609は、左に配置される1クロッ
ク前の整数演算ユニット501の演算結果のフラグを保
持する。一般的にフラグの算出はクリティカルパスにな
り易いので、フラグレジスタ607への代入は演算の次
のステージで行うことになる。ALU演算結果ラッチ6
10は、ALU630の演算結果を保持するラッチであ
る。バレルシフタ演算結果フラグラッチ611は、バレ
ルシフタ631で発生したフラグ変更を保持するラッチ
である。バレルシフタ演算結果ラッチ612は、バレル
シフタの演算結果を保持するラッチである。ストアデー
タラッチ613は、演算の次のクロックで実行されるス
トアまでストアデータを保持するラッチである。
【0063】レジスタライトバックラッチ614は、第
1汎用レジスタラッチ615〜第4汎用レジスタラッチ
618に結果を書き戻すタイミングを遅らせるために用
いられる。レジスタの書き戻しは、ローカルメモリから
の読み込みデータ書き込みと同じタイミングで行う必要
があるため、時間的に1クロック遅らせる必要がある。
【0064】第1汎用レジスタラッチ615から第4汎
用レジスタラッチ618は、演算に使用するオペランド
レジスタに使用する。スタックポインタラッチ619
は、演算結果の書き戻し、状態の一時退避などに使用す
るスタックポインタアドレスを保持する。
【0065】プログラムカウンタ更新セレクタ621
は、次のプログラムカウンタ601に伝達すべき値を前
のプログラムカウンタ605と、更新するプログラムカ
ウンタ601から選択する。分岐や不定レイテンシロー
ドの終了によるスレッドの再開時には更新するプログラ
ムカウンタ601を選択する。それ以外は前のプログラ
ムカウンタ605をそのまま使用する。一般的なマイク
ロプロセッサと異なり、プログラムカウンタ加算器は必
要ない。
【0066】プログラム定数生成回路622は、プログ
ラムカウンタ605の中に含まれない下位のPCを生成
する。16の整数演算機501に対して0から15まで
の数値が割り当てられて値を生成する。
【0067】フラグレジスタ更新セレクタ623は、デ
コードされた命令コード604に応じて、前のフラグレ
ジスタラッチ607、前段のフラグレジスタ更新レジス
タの608、前段のALU演算結果フラグラッチ60
9、前段のバレルシフタ演算結果ラッチ610の中から
次段のフラグレジスタラッチ607へ伝達する信号を選
択する。フラグレジスタへの代入命令では608、AL
U命令では609、シフト命令では611、それ以外で
は607を選択することになる。
【0068】条件実行命令制御回路624は、フラグレ
ジスタ608と、デコード済み命令コード604の内容
に応じて、分岐やデータのフォワーディングやライトバ
ックの制御を行う。演算を即座に停めるわけではない。
分岐の制御には、分岐ユニット502へ条件実行制御信
号646を伝達する。結果データ642の汎用レジスタ
ラッチ615〜619へのライトバック制御には、汎用
レジスタ更新レジスタ634〜638を制御して、条件
が成立した場合のみデータライトバックバス642の値
を代入ようにする。データフォワーディングに関して
は、オペランドセレクタ627〜629によるフォワー
ディングで、演算結果バス641やライトバックバス6
42のデータを代入するかどうかを選択する。実際の命
令にレジスタデータ依存関係があっても、条件が成立し
た場合のみフォワーディングを行うことになる。
【0069】定数生成回路626は、デコードされた命
令コード604の内容に応じて、演算に使用する定数を
生成し、第2オペランドセレクタ628に代入する。
【0070】第1オペランドセレクタ627は、第1オ
ペランドバス643と、結果伝送バス641と、データ
ライトバックバス642と、プログラムカウンタバス6
25から1つを選択してALU回路630、 バレルシ
フタ631、フラグレジスタ更新ラッチ608に代入す
る。
【0071】第2オペランドセレクタ628は、第2オ
ペランドバス644と、結果伝送バス641と、データ
ライトバックバス642と、定数生成回路626から1
つを選択してALU回路630、バレルシフタ631の
シフト数制御入力に代入する。
【0072】ストアデータセレクタ629は、第3オペ
ランドバス645と、結果伝送バス641と、データラ
イトバックバス642と、プログラムカウンタバス62
5と、フラグレジスタ更新セレクタ623の出力から選
択して、ストアアライナ632へ代入する。
【0073】ストアアライナ632は、バイト、16ビ
ットワード単位のストアを、ストアアドレスに応じて、
32ビットのデータバスに適切に配置するユニットであ
る。
【0074】スレッド間レジスタフォワードバス633
は、整数演算ユニット501の演算結果バス641の値
を、後続の別のスレッドがオペランドとして使用するた
めのバスである。これにより、マルチスレッド間の通信
を高速に行うことができる。
【0075】第1汎用レジスタ更新セレクタ634は、
第1汎用レジスタラッチ615とデータライトバックバ
ス642のどちらかを選択して次の段の第1汎用レジス
タラッチ615に代入する。第2汎用レジスタ更新セレ
クタ635から第4汎用レジスタ更新セレクタ637も
同様の動作を行う。
【0076】スタックポインタ更新セレクタ638は、
スタックポインタラッチ619とデータライトバックバ
ス642と、さらにスタックポインタ更新ラッチ602
の出力を選択して、次の段のスタックポインタレジスタ
638に代入する。
【0077】メモリストア用データバス640は、ロー
カルメモリ407、外部メモリに格納する32ビットデ
ータである。
【0078】演算結果バス641は、演算結果をローカ
ルメモリ407に書き戻すために用いられる。ローカル
メモリ407、外部メモリのアクセスの為のアドレスと
して使用される。
【0079】データライトバックバス642は、演算結
果、あるいはロードデータをを汎用レジスタ615〜6
19に書き戻すためのバスである。
【0080】第1オペランドバス643は、汎用レジス
タ616〜618およびスタックポインタ619を読み
出すのに用いられる。第2オペランドバス644と第3
オペランドバス645も同様である。
【0081】<分岐・ロードストアユニット502>次
に、図7を参照して、分岐ユニット502の内部構造を
概説する。
【0082】分岐ユニット502は、スレッド状態ラッ
チ701と、ロードデータラッチ702と、ロードデー
タ保持バッファ703、ローカルメモリライトアドレス
ラッチ704、ローカルメモリライトデータラッチ70
5、アドレスセレクタ706、アドレスバッファ70
7、ストアデータセレクタ708、ストアデータバッフ
ァ709、スレッド状態更新セレクタ710、分岐制御
ユニット711、ロードアライナ712、ローカルメモ
リアクセス保護検査713で構成される。
【0083】スレッド状態ラッチ701は、スレッドI
Dなど、分岐に必要なスレッド状態を保持している。ス
レッド状態信号647の値をスレッド状態更新セレクタ
710によって選択することで更新できる。
【0084】ロードデータラッチ702は、32ビット
のラッチで、データバスから読み込んだ値を次のクロッ
クまで保持するのに使用される。ロードデータ保持バッ
ファ703は、所有しないローカルメモリからのリード
データを保持しておくのに使用される。
【0085】ローカルメモリライトデータラッチ70
4、およびローカルメモリライトアドレスラッチ705
は、32ビットのラッチで、ローカルメモリへの書き込
みを遅らせるのに使用される。
【0086】アドレスセレクタ706は、ローカルデー
タキャッシュメモリ407、あるいはグローバルバス4
27に出力するアドレス値を、演算結果バス641と、
前クロックからのローカルメモリライトアドレスラッチ
705と、アドレスバッファ707の3つの中から選択
する。
【0087】アドレスバッファ707は、32ビットの
バッファで、バンク外へのローカルキャッシュメモリ4
07のアクセス、グローバルバス427への出力のアー
ビトレーションを待ち合わせるために、2つまでロード
ストアアドレスを蓄積できる。
【0088】ストアデータセレクタ708は、ローカル
メモリ407、あるいはグローバルバス427に出力す
るデータ値を、メモリストア用データバス640か、ロ
ーカルメモリライトデータラッチ704、あるいはデー
タバスバッファ709の3つの中から選択する。
【0089】データバスバッファ710は、32ビット
のバッファで、バンク外へのローカルメモリのアクセ
ス、グローバルバス427への出力のアービトレーショ
ンを待ち合わせるために、2つまでストアデータを蓄積
できる。
【0090】分岐制御ユニット711は、バンク外ロー
カルメモリアクセス、グローバルロードストア命令、分
岐命令の実行、および分岐アービター503との調停を
行う。分岐の場合は、更新するプログラムカウンタは演
算結果バス641から受理する。更新するスタックポイ
ンタは、メモリストア用データバス640から受理す
る。スレッドIDなどのその他のスレッド状態はスレッ
ド状態ラッチ701から受理する。これらをまとめて分
岐要求信号群525から分岐調停ユニット503に向け
て出力する。ここで、条件付き実行命令のため、分岐を
取り消す場合は、分岐取り消し信号646を受理して分
岐動作を停める。
【0091】ロードアライナ712は、バイト単位でデ
ータを読み出す場合に、データのシフト、32ビットへ
の符号の拡張等を行う。
【0092】ローカルメモリアクセス検査713は、ロ
ーカルメモリに発行されるアドレス信号が固有のローカ
ルメモリへのアクセスかどうか検査を行う。固有のロー
カルメモリへのライトアクセスの場合は、データラッチ
704、アドレスラッチ705を使用して次のクロック
でローカルメモリへの書き込みを行う。固有のローカル
メモリ以外の場合は、アドレスバッファ708、データ
バッファ710を使用して保持し、ローカルメモリ、あ
るいはグローバルメモリバス427に出力る。
【0093】分岐調停ユニット525から、分岐受理信
号714を受理できない場合は、分岐のアービトレーシ
ョンに失敗して分岐が実行できない場合である。その場
合は、すべての分岐情報を、データバス群515を使用
して右に隣接する演算ユニット501に伝達する。本来
のスレッドはパイプラインストールとなり、データの退
避を待つ。次のクロックで、右に隣接する分岐ユニット
502が再度同じ分岐を実行する。
【0094】<命令発行ユニット404>図8を参照し
て、命令発行ユニット404の内部構造について概説す
る。命令発行ユニット404は、分岐ユニット403か
ら与えられたプログラムカウンタを元に、整数演算機群
405に必要な命令コードを出力するユニットである。
【0095】命令発行ユニット404は、Xデコーダ8
01、128ビット幅のSRAMセル802、センスア
ンプおよびYセレクタ803、命令メモリアクセス制御
ユニット804、3つの命令コードセレクタ805、6
つの32ビット命令コードラッチ806、命令デコード
ユニット807で構成される。
【0096】プログラムカウンタ821の信号を元に、
SRAMセル802から命令コードを読み出す。SRA
Mセンスアンプ803からは同時に4つ分の命令コード
が読み出される。
【0097】128ビット幅のリプレース信号851
は、直接センスアンプ803に接続される。命令のリプ
レースは1クロックで実行される。
【0098】命令アドレスの最も若い命令コード830
は即座に命令デコードユニット807に送られる。しか
し、次の命令コード831は命令コードラッチ806に
格納されて1クロック遅れて発行される。最後の命令コ
ードは3クロック遅れて発行される。同時刻には、4つ
の独立したスレッドの命令コードが4つの命令デコード
ユニット807に送信される。
【0099】スレッド状態信号821は、分岐やスレッ
ド新規生成の時にのみ左端の整数演算ユニット501に
送られる。分岐は常に4命令単位で行う。分岐先アドレ
スが4の倍数の先頭でないときは、分岐先までの整数演
算ユニット501は使用できないため性能が低下する。
しかし、ソフトウェアで分岐先のアドレスを常に4の倍
数に配置すれば性能の低下はない。
【0100】演算ユニット制御信号835は、複数のス
レッドの命令コードが混在した信号である。演算ユニッ
ト制御信号835は、1つの整数演算ユニット501と
1つの分岐ユニット502で使用される制御信号の全て
が含まれる。そのクロックで使用される制御信号だけで
構成される。次以降のクロックで実行される制御信号は
デコード済み命令836によって次のクロックの命令デ
コードユニット807に渡されて、次のクロックで演算
ユニット制御信号837として出力される。
【0101】<スレッド発行ユニット403>図9を参
照して、スレッド発行ユニット403の内部構造につい
て概説する。スレッド発行ユニット403は、分岐命令
やスレッド発行命令の実行を行うユニットである。ま
た、動作していないスレッドや、外部のメモリアクセス
などで休止しているスレッド情報を格納するユニットで
もある。
【0102】スレッド発行ユニット403は、スレッド
発行アービトレーションユニット901、スタックポイ
ンタ連想メモリ902、スレッド状態メモリ903、ス
レッド開始準備フラグ904、命令キャッシュアドレス
タグメモリ905、4つのシフトレジスタ構成を取るロ
ーカルキャッシュバンク番号タグ906、命令キャッシ
ュアドレス比較器907、スレッド発行ユニット90
8、プログラムカウンタシフトレジスタ909で構成さ
れる。
【0103】まず、分岐クロスバスイッチ402の機能
について概説する。分岐ユニット502から発行された
スレッド状態信号419は、プログラムカウンタの下位
2ビットの内容に応じて4つのスレッド制御ユニット4
03の中から選択してスレッド状態信号411を伝送す
る。この伝送を行うのが分岐クロスバスイッチ402で
ある。同時に同じスレッド制御ユニット403への分岐
が発生した場合は、1つだけが伝送され、残りは整数演
算ユニット群405の中で次のクロック以降の分岐受理
を待つことになる。
【0104】スレッド発行アービトレーション901
は、分岐制御信号430の要求に応じて、グローバルロ
ード等を待つスレッドを再開させる制御を行うユニット
である。スレッド発行ユニット403のスレッドが連続
して発行できる場合に、隣接するスレッド発行ユニット
403の待ちスレッドがいつまでも発行できないことを
防ぐためのラウンドロビンスケジューラである。
【0105】分岐クロスバスイッチ402からスレッド
に必要な最小限の情報であるスレッド状態信号411が
伝送されると、スレッド状態信号411は基本的には到
着順にスレッド状態メモリ903に格納される。同時
に、同じアドレスのスタックポインタ連想メモリ902
にスタックポインタの上位4ビットが格納される。スレ
ッド生成や、分岐命令である場合は、スレッド開始準備
フラグ904は最初から1に設定される。ロード命令
や、共有浮動小数点演算ユニット904待ちのスレッド
の場合は、スレッド開始準備フラグ904は0に設定さ
れる。
【0106】ローカルキャッシュバンク番号906は、
4ビットレジスタ4段で構成されるシフトレジスタであ
る。先頭の値が、ローカルメモリバンク信号930を介
してスタックポインタ連想メモリ902に入力される。
ローカルメモリバンクが一致するスレッドの中で最初に
登録された1つが選択され、該当するスレッド状態メモ
リ903からスレッド状態信号936が出力される。さ
らに、スレッド開始準備フラグ904も参照され、スレ
ッド発行ユニット908に伝達される。
【0107】プログラムカウンタシフトレジスタ909
は、32ビットのレジスタ4段で構成されるシフトレジ
スタである。分岐やスレッド発行が無い場合は、先頭の
値が命令キャッシュのタグの比較に使用される。
【0108】次に、命令キャッシュ判定機能について説
明する。命令メモリ404は、スレッド発行メモリ40
3のアクセスの度に1度、つまり1つのスレッドから見
れば4命令に1回だけキャッシュのアクセスを行う。し
かし、4つのスレッドが同時に存在することにより、ス
レッドの発行如何に関わらず命令キャッシュのチェック
は毎クロック行うことになる。プログラムカウンタシフ
トレジスタ909の先頭か、あるいはスレッド状態メモ
リ903から、プログラムカウンタがスレッド状態信号
935に出力される。このプログラムカウンタの下位の
ビットを使用してプログラムカウンタインデックス信号
937とし、命令キャッシュタグメモリ905の参照を
行う。プログラムカウンタ429の上位アドレス20ビ
ットは、プログラムカウンタアドレスタグ938として
出力される。そして、命令キャッシュアドレスタグ93
9と20ビット比較器907で一致するかどうかを確認
する。一致しない場合はキャッシュミスとなる。この場
合、今後発行される命令は取り消され、実行されている
スレッドは強制的にその命令メモリ404の左端アドレ
スへの分岐となる。
【0109】最終的に、スレッドは、 1.スレッド発行アービトレーション901によりスレ
ッド発行の権限を取得 2.スタックポインタがローカルキャッシュバンク90
6の左端に一致する。 3.スレッド開始準備フラグ904が1である。 4.命令キャッシュアドレスが一致する。 これらの条件を全て満たしたときに初めてスレッドが発
行される。
【0110】命令キャッシュリプレース要求、ローカル
メモリリプレース要求が発生した場合は、とりあえずス
レッド状態信号414は発行されるが、命令は実行され
ず、分岐ユニット502がグローバルアクセス制御40
8に要求するだけである。
【0111】<グローバルアクセス制御ユニット408
>図10を参照して、グローバルアクセス制御ユニット
408の内部構造について概説する。ローカルメモリク
ロスバスイッチ406、分岐クロスバスイッチ402の
制御、およびそれぞれのスレッドの固有のローカルメモ
リ407以外のメモリアクセス調停、そしてマイクロプ
ロセッサ401の外のメモリアクセスの動作、命令、デ
ータメモリリプレース動作、割り込みの受理を行う。
【0112】グローバルアクセス制御ユニット408
は、分岐クロスバスイッチ制御1001、割り込みベク
タ生成ユニット1002、割り込み入力ユニット100
3、グローバルデータキャッシュタグメモリ1004、
グローバルデータキャッシュ比較器1005、グローバ
ルデータキャッシュメモリ1006、外部バスインター
フェースユニット1007、ローカルメモリクロスバス
イッチ制御1008、内部ロードストアインターフェー
ス1009、分岐受理ユニット1010、プログラムカ
ウンタインクリメンタ1011、命令キャッシュリプレ
ースバッファ1012、データキャッシュリプレースバ
ッファ1013で構成される。
【0113】分岐クロスバスイッチ制御1001は、分
岐受理ユニット1010からの要求を元に、分岐クロス
バスイッチ402を制御する。
【0114】割り込みベクタ生成ユニット1002は、
割り込み制御ユニット1003への割り込み入力453
に対して、特別なスレッドを生成する。このマイクロプ
ロセッサでは、割り込みは最高優先スレッド生成と等価
である。スレッドの情報は分岐クロスバスイッチ制御ユ
ニット1001によって分岐ユニットに伝達される。
【0115】グローバルアクセスキャッシュメモリ10
04と、グローバルアドレスタグメモリ1005は、1
28ビット幅のキャッシュメモリである。キャッシュの
リプレースおよびローカルメモリ以外のアクセスを高速
化する目的で使用される。内部ロードストアインターフ
ェース1009からの要求で、グローバルアドレス信号
1021の示す内容を参照する。そして、グローバルア
クセスタグメモリ1005の内容と、グローバルアドレ
ス信号1021の上位ビットが一致すれば、グローバル
データキャッシュメモリ1004とデータバス信号10
22のやり取りを行う。
【0116】外部バスインターフェースユニット100
7は、外部バス制御信号451と、外部アドレス信号4
52と、外部データバス信号453を出力し、外部から
のデータを外部データバス信号453から受理する。
【0117】メモリクロスバスイッチ制御1008は、
毎クロック毎に接続が変更されるローカルメモリクロス
バスイッチ406の制御を行う。ただし、接続の変更は
演算器群405とデータキャッシュメモリ407とのロ
ーテート動作のみであり、自由に接続を変更できるわけ
ではない。
【0118】ロードストアインターフェース1009
は、グローバルアクセスアドレスバス427と、グロー
バルメモリアクセスデータバス428と接続される。ま
ず、スレッドからのロードストア要求であるグローバル
アクセスを1つ受理する。そして、グローバルアドレス
バス1021に出力する。外部メモリへのストアアクセ
スなら、即座にストアデータをグローバルデータバス1
022にアラインして出力する。外部から読み込まれた
データは、データキャッシュリプレースでなければグロ
ーバルメモリアクセスデータバス428に書き戻す。
【0119】ロードストア分岐受理ユニット1010
は、4つの分岐ユニット502からの分岐要求信号43
3〜436を受理して、その要求に応じて分岐クロスバ
スイッチ1001に制御を要求する。
【0120】プログラムカウンタ制御ユニット1011
は、マイクロプロセッサ401の起動時にブート時のプ
ログラムカウンタを供給する。動作中は、スレッド制御
ユニット403からのプログラムカウンタ信号429を
入力して、インクリメントして次のプログラムカウンタ
信号412をスレッド制御ユニット403に出力する。
【0121】命令キャッシュリプレースバッファ101
2は、命令キャッシュのリプレースをタイミングをスレ
ッドの再開に合わせるための同期を行うためのラッチで
ある。
【0122】データキャッシュリプレースバッファ10
13は、4つのローカルデータキャッシュ407のリプ
レースを同時に行う。128ビット幅のリプレースデー
タを内部バス1022から受理し、4クロックに分けて
32ビットごとに1つのローカルデータキャッシュ40
7に転送する。 <データキャッシュメモリ407>図11を参照して、
データキャッシュ407の内部構造について概説する。
データキャッシュ407は、1つのポートのみを持つS
RAMであり、それに加えて他のスレッドからのアクセ
スを禁止するロック機構などを有している。
【0123】データキャッシュメモリは、1ポートのデ
ータキャッシュRAM1101、データタグRAM11
02、アドレスタグ比較器1103、そしてロック機構
制御機能1104で構成される。
【0124】バスロック機能は、特定のスレッド以外の
アクセスを禁止する機構である。バスロック状態になる
と、その他のスレッドからのアクセスは、制御回路11
04が判定して、アクセス違反通知信号1114を返
す。
【0125】<共有浮動小数点ユニット409>図12
を参照して、共有浮動小数点ユニット409の内部構造
について概説する。共有浮動小数点ユニットは同時に1
つのスレッドだけが使用できる。浮動小数点演算が終了
した時に休止しているスレッドの生起要求を行う。
【0126】共有浮動小数点ユニット409は、ローカ
ル浮動小数点レジスタ1201、浮動小数点データパス
1202、アドレスデコードユニット1203、命令デ
コード1204で構成される。
【0127】浮動小数点データバス1202は、データ
バス423から命令を受理するのと同時に、データバス
423からレジスタからのデータも受理してローカルレ
ジスタ1201に格納する。演算の終了とともに、グロ
ーバルアクセス制御ユニット408にスレッドの再開を
要求する。再開されたスレッドは、結果データをローカ
ルレジスタ1201から汎用レジスタに転送する。
【0128】<マイクロプロセッサ401のプログラム
モデル>マイクロプロセッサ401の命令セットは、ス
レッド生成の高速化、コンテキストスイッチの高速化、
従来のマイクロプロセッサより大きい分岐レイテンシの
隠蔽を目的として作成されている。それ以外は従来のフ
ォンノイマン型マイクロプロセッサの命令セットに可能
な限り近づけてある。フォワードできないレジスタ依存
関係の発生によりパイプラインを自動的に停める、パイ
プラインストールの機能は実施例2ではインプリメント
されていないが可能である。
【0129】<命令セット>図13を参照して、本発明
のマイクロプロセッサ401の基本的命令セットを示
す。
【0130】基本的には一般的なRISCマイクロプロ
セッサと同じく、汎用レジスタ間だけで演算を行い、明
示的なロードストア命令でメモリにアクセスする命令セ
ットを持つ。ただし、汎用レジスタは、基本的に分岐の
前後で保持されない。キャッシュミス等ではレジスタの
退避は自動的に行われる。
【0131】フラグレジスタは、整数演算の結果によっ
て変化する。すべての命令はコンディションフィールド
を持ち、フラグレジスタの内容によって実行を制御する
ことができる。たとえば、ゼロフラグが1の場合に動作
する、キャリーフラグが0の場合以外で動作するという
ように使用する。よって特別な条件分岐命令はない。既
存のパイプラインプロセッサよりも分岐レイテンシが大
きいために、分岐を使用するのを極力避ける必要がある
ためである。
【0132】演算命令は、整数演算に関するレジスタ間
の演算を行う。乗算、浮動小数点演算等は、演算ユニッ
トをスレッド間で共有するため、コプロセッサ命令とな
る。
【0133】分岐命令は、指定されたレジスタとイミデ
ィエイト値を加算したアドレスに分岐する。分岐の前後
では汎用レジスタは保持されないため、分岐前には必要
なレジスタをスタックに退避し、分岐後に必要なレジス
タをスタックから再度読み出す必要がある。条件実行は
分岐命令に対して当然適用できるため、専用の条件分岐
命令は存在しない。
【0134】スレッド管理命令は、スレッドの生成、終
了に使用される。FORK命令は現在のスレッドと別
に、汎用レジスタで指定したアドレス、スタックポイン
タ、スレッド情報のスレッドを新規に生成できる。CH
GTH命令は従来のスレッドを終了して指定したスレッ
ドを新規に生成する。EXIT命令は従来のスレッドを
終了する。
【0135】同期命令は、マルチスレッドに不可欠なア
トミックロードストアをサポートする。LLOCK命令
は、データを読み出すと同時に、アクセスしたローカル
メモリバンク407をロックする。他のスレッドがロッ
ク状態のメモリロードを行うと強制的にパイプラインス
トールとなりスレッドが休眠状態となる。STULK命
令はデータをストアすると同時にロック状態のメモリを
アンロックする。
【0136】システム割り込み命令は、レジスタの値が
示す値とスレッドIDの値が一致する休眠状態のスレッ
ドを再開させる。外部からの割り込みの挙動と全く同一
である。
【0137】コプロセッサ命令は、スレッド間で共有す
る演算ユニットを使用する命令である。コプロセッサ命
令は、整数演算ユニットの汎用レジスタを直接オペラン
ドとして転送して使用ことになる。同時に使用できるス
レッドは常に1つという制限がある。
【0138】<マルチスレッドプログラミングモデル>
図14を参照して、マルチスレッドプログラムがどのよ
うに実行されるかを示す。
【0139】本発明のマイクロプロセッサ401は、同
時に動作出来るスレッドは16個であるが、常に演算機
の数以上の数のスレッドを同時処理できる。実行待ち状
態のスレッド1401は、使用するスタックポインタが
示すローカルメモリバンクで分割される。スレッドは各
メモリバンクごとに格納され、実行状態スレッド140
2の空きを待つ。実行状態のスレッド1402は、1つ
のローカルメモリ407に対して1つだけのスレッドが
割り当てられる。ローカルメモリバンクの異なるスレッ
ドはスレッドが空いていても実行状態に送ることはでき
ない。
【0140】実行状態の全てのスレッドは、FORK命
令によって別のスレッドを生成することができる。生成
されたスレッドは待ち状態スレッド1401にスタック
ポインタのローカルメモリアドレスに応じた番号に格納
される。スレッドはEXIT命令で自分自身を停止する
ことも可能である。
【0141】本発明のマイクロプロセッサでは、分岐命
令はスレッドの切り替えと全く等価である。分岐命令は
スレッドは待ち状態スレッド1401に入れられ、別の
待ち状態のスレッドが1つ実行状態スレッド1402に
送られ、実行される。単体のスレッドのレイテンシに関
しては従来のマイクロプロセッサに対してかなり劣る
が、別のスレッドの動作によってレイテンシは隠蔽され
る。単体のスレッドの処理レイテンシよりも、全体の演
算ユニットの使用効率を最大にすることを優先させる。
【0142】命令メモリ1403は、4つの命令メモリ
404から構成される。すべてのスレッドは1つの命令
メモリ1403をアクセスできる。スレッドはループの
個別のイタレーションを発行することが多く、同じコー
ドを使用するため、命令メモリ1403の共有は有用で
ある。
【0143】また、スレッドの発行がローカルメモリの
バンクによって制限される構成にした理由は、16個に
も上るローカルメモリアクセスの調停を省略するためで
ある。16の入力に対してその都度アービトレーション
を行うと、メモリアクセスのレイテンシの低下は避けら
れない。
【0144】<レジスタセット>図15を参照して、マ
イクロプロセッサ401のレジスタセットについて説明
する。
【0145】R0は常に0が読み出され、書き込んだ値
が保持されないレジスタである。R1,R2、R3,R
4は汎用レジスタであり、自由に読み書きができる。
【0146】SPはスタックポインタであり、常にロー
カルメモリのアドレスを示し、1クロックでアクセスで
きる。コンテキストスイッチの時は、レジスタが自動的
に格納され、SPだけが退避される。また、スレッドの
時はSPのアドレスが示すメモリバンクをローカルメモ
リとする。
【0147】TIはスレッド状態を示す。TIDは現在
実行しているスレッドを番号で示すスレッドIDであ
り、すべてのスレッドに対して別にに与える必要があ
る。FLGは4ビットのフラグレジスタの実体である。
【0148】PCは現在の命令アドレスに対して相対的
な分岐を実行するために使用する読み出し専用レジスタ
である。
【0149】これらのレジスタの中で、スレッドの再開
に必要な情報はPC、SP、TIだけである。その他の
レジスタはコンテキストスイッチの際に全てローカルメ
モリのSPの示すアドレスに退避する。
【0150】<メモリマップと負荷分散>図16を参照
して、ローカルメモリの配置およびスレッドの負荷分散
方法を説明する。
【0151】本発明のマイクロプロセッサはマルチスレ
ッドを前提とする。そのため同時に存在するスレッドは
全て固有のスタックを所持することになる。スレッドへ
のローカルメモリバンクの割り当ては、スタックポイン
タの示すメモリバンクと同義である。
【0152】本発明のマイクロプロセッサはメモリは1
6個に分散させる。スレッドはローカルヒープメモリへ
のアクセスを極力使用するようにすれば最高性能を出せ
る。逆にいえば、本発明のマイクロプロセッサは、OS
による負荷分散を考慮したヒープメモリの配置を前提と
している。
【0153】メモリ空間は、全てローカルキャッシュメ
モリバンクに割り付けられる。1つのローカルメモリバ
ンクは1Mバイトの連続したメモリ空間をアクセス対象
とする。ローカルメモリのバンクは、アドレスバスの2
0から23ビット目によって一意に決定する。
【0154】16のパイプラインに適切にプログラムの
負荷分散を行うということは、プロセスに対して個別の
ローカルメモリバンクを割り当てるということと等価で
ある。頻度の低いプロセスは1つのローカルメモリバン
クを共用し、性能が必要であるか、あるいはリアルタイ
ムレイテンシの必要なプロセスは1つ以上のローカルメ
モリバンクを占有すれば良い。それだけでプライオリテ
ィー制御などのOSの制御を必要としない負荷分散が可
能になる。
【0155】スレッドに割り当てられたローカルキャッ
シュメモリへのアクセスは1クロックで終了する。しか
し、それ以外に割り当てられたローカルメモリキャッシ
ュへのアクセスは16クロック以上要する。キャッシュ
がミスした場合は更に外部へのアクセスになり、レイテ
ンシは不定である。しかし、ローカルキャッシュ以外の
アクセスレイテンシは、マルチスレッド機構によりある
ていど隠蔽可能である。
【0156】演算ユニットがアクセスできるメモリバン
クは、起動時に順に割り当てられている。分岐には、分
岐先のアドレスの演算ユニットが空いているだけではだ
めで、その時点でのメモリバンクがスタックポインタと
一致する必要がある。そのため、最悪の場合、分岐命令
発行から16クロック後にスレッドを再開するケースが
発生する。その場合は、同じメモリバンクを使用し、命
令アドレスの異なる別のスレッドを用意して先に実行で
きる方からスレッドを発行する。当然、単体のスレッド
のレイテンシは更に低下するが、全体の性能低下を防止
でき、単体のスレッドのレイテンシを隠蔽できる。
【0157】<マイクロプロセッサ401の内部動作>
次に、マイクロプロセッサ401の動作について概説す
る。
【0158】図17を参照して、基本的な命令の動作を
中心に説明する。マイクロプロセッサ401の命令ごと
の基本動作を示す為に、縦軸を時間軸にとってブロック
をそれぞれの動作順序に従って配置している。単体の命
令の実行は、初段のスレッド発行、汎用レジスタを除け
ば、従来のRISCパイプラインプロセッサに近い構成
である。標準的なRISCパイプラインについては、コ
ンピューターの構造と設計ハードウェアとソフトウェア
のインターフェース(著者 David A.Patt
erson/John L.Hennessy 出版社
日経BP社)の記述を参照のこと。
【0159】最初のThreadIssueステージで
は、スレッドの発行を行う。今後は略称としてTIステ
ージと呼ぶ。
【0160】このTIステージに限り、すべての命令に
対して必要であるわけではなく、分岐やスレッド生成の
直後、あるいは4命令おきに実行される。
【0161】命令読み出しは4クロック単位でまとめて
行われるため、命令キャッシュのTAGのチェックも4
命令置きになる。分岐やパイプラインストールの再開な
どで、命令実行プログラムカウンタが41でアラインさ
れていない場合は、その命令まで演算器が動作しないこ
とになるが、分岐は可能である。
【0162】命令キャッシュ、データキャッシュのリプ
レースは、そのメモリバンク407を使用する、リプレ
ースの必要のないスレッドが一切なくなるまで実行され
ない。
【0163】次のInstructionFetchス
テージでは、命令の読み出し、デコードを行う。略称と
してIFステージと呼ぶ。
【0164】1つのプログラムカウンタを受理し、4つ
の命令を一度に発行する。最初の1つの命令だけが即座
に命令デコード814に入力される。続く命令は1クロ
ック分ラッチ806で保存されて次のクロックでデコー
ドされる。3クロック後の命令は3クロック分のラッチ
806で維持することになる。命令デコード814は1
命令単位で命令デコードを行う。パイプラインEXステ
ージの制御信号は即座に発行され、後続のパイプライン
DFステージ,WBステージの右に隣接する命令デコー
ドに渡されて次以降のステージの制御を行う。逆に、左
に隣接する命令のDFステージ制御、WBステージ制御
信号と共に演算ユニット501に出力される。
【0165】通常のマイクロプロセッサでは、レジスタ
は、ラッチより比較的低速なレジスタファイルに格納さ
れる。そして、デコードとレジスタのアクセスを対にし
てインストラクションデコードステージ(略称IDステ
ージ)と呼ばれる1つのパイプラインステージを形成す
る。しかし、実施例2のマイクロプロセッサ401は、
レジスタ数が少なく、毎クロックごとに右にシフトする
構成を取るため、レジスタファイルを持たず、ラッチか
ら直接ドライブする。しかし、命令キャッシュ読み出
し、命令デコードの速度によっては独立したIDステー
ジが必要になる。
【0166】次のExecutionステージでは、演
算の実行を行う。略称としてEXステージと呼ぶ。
【0167】デコードされた命令内容に応じて、レジス
タや既に実行された命令のDFステージ、WBステージ
からのデータから、演算に使用するオペランドから選択
する。オペランド値は3つ用意され、整数演算ALU6
30、バレルシフタ631、ストアアライナ632など
に入力され、結果をラッチ609などにとりあえず格納
する。
【0168】また、命令キャッシュのアクセスを行った
場合、命令TAGのチェックを比較器909によって行
う。命令キャッシュにミスが生じた場合は、その命令の
後続のDF、WBのステージは無効になる。
【0169】次のDataFetchステージでは、デ
ータメモリのアクセスを行う。略称としてDFステージ
と呼ぶ。
【0170】ロードストア命令では、ALU630を使
用してアドレス計算を行う。算出したアドレスは即座に
クロスバスイッチ406を介してローカルキャッシュメ
モリ407に送られる。ロード命令の場合は即座にデー
タを読み出し、クロスバスイッチ406、ロードアライ
ナ710を介して元のプロセッサに送られる。
【0171】ストア命令の場合は、ローカルメモリアド
レス、キャッシュミスの判定が必要なため、DFステー
ジで即座に書き込むことはしない。DFステージで判断
できた後に次の命令のDFステージに相当するタイミン
グでデータを書き込む。この場合、次の命令のDFステ
ージのリードとかち合うことになるため、データキャッ
シュ407は、独立したリードライトを同時に処理でき
る構成が望ましい。
【0172】グローバルメモリへのアクセスかどうかは
ローカルメモリへのアクセスと並行してDFステージで
判断され、グローバルリードアクセスであった場合は分
岐ユニット709によってスレッド待機状態に移行す
る。
【0173】分岐命令の場合は、分岐先プログラムカウ
ンタはALU630で算出され、分岐ユニット709に
よってSPやTIレジスタと共にスレッド発行ユニット
403に送られる。
【0174】グローバルデータリードなどのパイプライ
ンストールの場合は、現在のプログラムカウンタがその
まま分岐ユニット709に送られ、分岐の処理が行われ
る。分岐命令が成立した場合は、内蔵シーケンサによ
り、後続のクロックのDFステージではその他の汎用レ
ジスタのスタックへの書き戻しが自動的に行われる。
【0175】最後のWriteBackステージでは、
レジスタへの書き戻しを行う。略称としてWBステージ
と呼ぶ。
【0176】従来のマイクロプロセッサでは比較的低速
なレジスタファイルのために設けられるステージであ
る。ローカルメモリへのアクセスはクリティカルパスに
なりやすいため、ローカルキャッシュメモリ407から
のロードデータがラッチ702が間に合わない場合は、
WBステージにもロードアライナ710などの処理が入
る。その場合、WBステージからEXステージのALU
へのデータフォワードが不可能になり、データロードレ
イテンシが低下する。
【0177】<パイプラインの全体図>図18を参照し
て、本発明のマイクロプロセッサ401におけるパイプ
ラインの共存について説明する。
【0178】本発明のマイクロプロセッサは、16のパ
イプラインマイクロプロセッサが互いに結合して内蔵さ
れている。よって、4+64=68のパイプラインステ
ージに匹敵する回路が1つのチップ上に同時に存在す
る。
【0179】通常のマルチプロセッサでは、複数のパイ
プラインステージは全く独立しており、1つのスレッド
は1つのプロセッサに静的に割付られる。本発明のマイ
クロプロセッサ401では、1つのスレッドは、これら
の68のパイプラインステージを全て使用することがで
きるが、同時刻に使用できるのは5つだけである。だ
が、1つのスレッドに着目すれば、1801のように通
常の5段パイプラインプロセッサの動作と同等の表記が
できる。ただし、同じ回路を連続して使用することはな
く、常に右に隣接するパイプラインステージを使用して
いる点が異なる。本発明のマイクロプロセッサは、Th
read2からThread8までの16のスレッドが
同時に動作できる。同時刻に同じパイプラインステージ
を使用することはない。たとえば、Thread2がI
F2を使用している時刻では、Thread14はIF
3を使用している。スレッド2がDF2を使用している
時刻ではThread14はDF3を使用している。
【0180】<分岐命令におけるパイプライン動作>図
19を参照して、分岐命令の動作について説明する。
【0181】分岐命令は、その前後でレジスタの保存が
行われない。そのため、明示的にレジスタの退避を行う
必要がある。分岐命令はDFステージで実行され、スレ
ッド1を待ち状態とする。空き状態となったバンクは、
次のTIステージで待ち状態のスレッド4が発行され
る。
【0182】待ち状態のスレッド1は、分岐先の命令ア
ドレスの下位4ビットのアドレスが一致する整数演算ユ
ニットが未使用であれば、分岐を受理してスレッド1を
再開する。スレッドを発行しても、パイプラインが命令
アドレスの下位2ビットも一致する演算ユニットまで到
達して初めて動作を開始する。
【0183】<パイプラインストールにおけるパイプラ
インの動作>図20を参照して、キャッシュミス時の動
作について説明する。
【0184】キャッシュミスなどの突発事項は、命令の
処理から隠蔽される必要があるため、レジスタの退避は
自動的に行う必要がある。EXステージで発覚した命令
キャッシュのミスは、その直後以降の命令のEXステー
ジをスタックポインタアドレス計算にまわす。4つのレ
ジスタ状態を退避した時点で別のスレッド4を開始でき
るようなら、スレッドを再開する。
【0185】スレッド1の再開は、4命令分前の命令か
ら行われ、4つのレジスタの再度格納が行われる。
【0186】<マイクロプロセッサの内部動作の詳細>
ここからは、これまで説明した命令の内部動作がどのよ
うに実現されているかを詳細に示す。
【0187】最初に、分岐、スレッド生成動作について
説明する。本発明のマイクロプロセッサでは、分岐とス
レッドの生成は、どちらもスレッド発行ユニット403
へのスレッド構造体の伝達を行う。分岐とスレッド生成
の違いは、前者は元のパイプラインを開放して別のスレ
ッドを動作させるが、後者は元のパイプラインをそのま
ま実行を続けることになる。
【0188】次に、パイプラインストールの動作につい
て説明する。本発明のマイクロプロセッサでは、パイプ
ラインストールは自動的なレジスタの退避を伴う自身ア
ドレスへの分岐となる。分岐は、キャッシュリプレース
や例外処理などの動作を終了させた後、最短で16クロ
ック後に実行される。例外事象でパイプラインを停める
場合は、常にパイプラインストールとなる。
【0189】次に、命令キャッシュミスについて説明す
る。命令キャッシュの判定は常にスレッド発行ユニット
403で行われる。命令キャッシュのリプレースが必要
な場合は、即座にパイプラインストールとなる。同時
に、命令キャッシュリプレースの要求をグローバルアク
セスユニット408とスレッド発行ユニット403に要
求する。命令キャッシュリプレースサイクルは、命令の
リプレースとスレッドの再開は同時に実行される。他の
スレッドの干渉を防ぐために128ビット幅の命令リプ
レースバス432を使用し、再開されたスレッドの読み
出しの最初の1クロックで行われる。
【0190】次に、ローカルキャッシュメモリ407へ
のメモリロードストアについて説明する。スレッドが固
有に所持する1つのローカルキャッシュメモリ407は
1クロックで無条件にアクセスができる。データストア
は、ローカルバンクの判定、キャッシュのタグの判定を
待たなければ書き込みができないため、次の命令のDF
ステージで書き込みを行うことになる。次の命令のDF
ステージがロードである場合は、データライトは次のク
ロックに持ち越される。しかし、キャッシュミスのばあ
いを除いて、ローカルキャッシュへのリードとライトの
組み合わせでパイプラインが止まることはない。
【0191】次に、ローカルメモリ以外へのメモリスト
ア動作について説明する。スレッドが所持していないロ
ーカルキャッシュメモリ407は、そのローカルメモリ
を所持するスレッドがメモリをアクセスしないタイミン
グを狙う必要がある。アドレスバッファ707、データ
バッファ709に保持され、アクセス対象のキャッシュ
バンクを所持する他のスレッドが到達した時点でローカ
ルアドレス信号521、ローカルデータバス信号524
に出力する。ただし、本来のスレッドがロードストアを
行う場合は1回目はそちらが優先である。16クロック
待ち、2回目は本来のスレッドをパイプラインストール
させてローカルキャッシュへの出力を行うことができ
る。本来のスレッドのロードストアは、アドレスラッチ
704、データラッチ705に格納され、命令と関係な
く次のクロックで実行される。
【0192】次に、データキャッシュミスについて説明
する。データキャッシュメモリバンクをSPのメモリバ
ンクとして所有するスレッドは、データキャッシュミス
が発生した時点で、パイプラインストールを発生させ、
レジスタの退避を行うことができる。スタックポインタ
のキャッシュミスの場合は、ラッチを保持し、スタック
領域のキャッシュのリプレースを待ってレジスタの退避
を行う。
【0193】データキャッシュメモリバンクをSPのメ
モリバンクとして所持しないスレッドは、データキャッ
シュミスが発生したら即座にグローバルメモリアクセス
に切り替え、外部から値を読み込む。キャッシュリプレ
ース動作は行わない。
【0194】スタックポインタのキャッシュミスは、リ
プレース中の別のスレッドの動作を禁止し、状態をパイ
プライン上でシフトして保持する。
【0195】次に、グローバルメモリアクセスについて
説明する。ローカルキャッシュ407のキャッシュミ
ス、キャッシュにアサインされていない外部のメモリへ
のアクセスで発生する。
【0196】グローバルメモリアクセスが発生した場
合、分岐制御711が分岐・ロードストアユニットにグ
ローバルアクセスバス427、428のアービトレーシ
ョンをリクエストする。バスが取得できるまではアドレ
スバッファ707、データバッファ708に格納され
る。
【0197】グローバルメモリは、一連のデータのリー
ドライト、キャッシュのリプレースが終了するまで他の
スレッドの入力を受け付けない。リードライト動作の終
了と同時に分岐クロスバ制御ユニット1001からスレ
ッド発行ユニット503に伝達される。
【0198】読み込まれた値はデータキャッシュリプレ
ースバス425に入力され、4クロック要してローカル
キャッシュに伝達される。同時に4つのデータキャッシ
ュリプレースを可能にする。
【0199】次に、外部メモリアクセスについて説明す
る。外部メモリアクセスは、グローバルメモリのデータ
キャッシュミスの時に発生する。アドレスバス1022
の内容はそのまま外部アドレスバス452に出力され
る。データは32ビットごとに順次データバス1023
からグローバルバス1022に読み込まれる。
【0200】最後に、割り込みについて説明する。本発
明のマイクロプロセッサ401では、高速コンテキスト
スイッチ機構の採用により、割り込み応答はスレッド生
成と等価としている。つまり、スレッド生成ユニット4
03に用意されているスレッド状態に対して、スレッド
を生起するだけで良い。割り込みユニット1005は、
割り込みベクタ生成ユニット1002に割り込みベクタ
番号を伝達する。割り込みベクタ生成ユニット1002
は、割り込みの種類に応じたプログラムカウンタ、スタ
ックポインタ、スレッド情報を生成し、スレッド制御ユ
ニット403に伝達する。
【0201】<マルチスレッドプログラミングの例>図
21を参照して、実際のスレッドの使用方法について説
明する。スレッドAは、スレッドBを生成して並列処理
を行い。双方の終了を確認して元のスレッドAを再開す
る。
【0202】スレッドAは、共有変数に2を格納し、ス
レッドBの状態を作成するためにOSから未使用のSP
およびTIの取得を行う。
【0203】双方のスレッドは、同じLabelCに分
岐し、共有変数Counterにアトミックにアクセス
する。2回目に到達した方のスレッドはCounter
を0にするため、その時点で続きのコードのLabel
Dを再開できる。そして、元のスレッドAのSP、TI
状態を受け継ぐ。同じ要領で並列動作させるスレッドは
いくらでも増加させることができる。
【0204】<負荷分散の方法>図22を参照して、負
荷分散につて説明する。
【0205】すべてのプロセス、スレッドはOSからス
タック、ヒープ領域を要求する。処理能力の必要なプロ
セスは、1つ、あるいは複数のメモリバンクに渡るスタ
ック、ヒープ領域をOSから独占して取得することがで
きる。
【0206】この図では、プロセスAは3つ分のプロセ
ッサを、プロセッサBは2つ分のプロセッサを所持し、
他のプロセスに妨害されることはほとんどない。このよ
うにして、リアルタイム処理能力の必要なプロセスは、
負荷分散の保証を得ることができる。
【0207】<実施例3>図23を参照して、本発明の
第3の実施例のマイクロプロセッサ2301の内部構造
について解説する。
【0208】マイクロプロセッサ2301は、実施例2
のマイクロプロセッサ401に加えて、乗算器や浮動小
数点演算器を整数パイプライン上に搭載し、マルチプロ
セッサ構造を導入している。マルチプロセッサには、メ
モリ共有機構だけでなく、スレッド管理をマルチプロセ
ッサ間で行うための機構を導入している。メモリはあえ
てマイクロプロセッサに直接接続させて分散し、メモリ
との通信バンド幅を確保している。
【0209】実施例3のマイクロプロセッサ2301と
実施例2のマイクロプロセッサ401との違いは、演算
ユニット群2305と、グローバルアクセス制御ユニッ
ト2308だけである。
【0210】<演算ユニット群2305>図24を参照
して、演算ユニット群2305の内部構造について詳し
く説明する。整数演算ユニット群405に加え、乗算、
および浮動小数点機能を内蔵する。
【0211】4つの演算ユニット501と同時に、2つ
の乗算・SIMDユニット2401と、1つの浮動小数
点演算ユニット2402を内蔵する。これらは浮動小数
点レジスタ2403を共用する。そして、オペランドデ
ータクロスバスイッチ2404が命令実行タイミングを
調節する。
【0212】浮動小数点レジスタ2403は、整数演算
ユニット内の汎用レジスタと同じシフトレジスタであ
り、4クロックで伝送される。
【0213】オペランドデータクロスバスイッチ240
4は、すべての整数演算ユニット501からの命令発行
を、浮動小数点演算ユニット2402の左端のオペラン
ド入力に接続する。そして、結果データを浮動小数点レ
ジスタ2403の4つのタイミング全てに対して転送す
る。
【0214】これらの乗算ユニット2401は命令とし
てインプリメントされ、コプロセッサではない。しか
も、分岐やグローバルデータロードのようにスレッドを
待ち状態にして同期を取る必要はない。よって、1つの
演算ユニット群2305の中で、4つのプロセッサが2
つの乗算機、1つの浮動小数点演算機を共有するのと同
じことになる。
【0215】この浮動小数点ユニット2402は、1つ
の演算ユニット群2305につき1つの浮動小数点命令
を実行できる。命令のアドレスは任意で良い。ただし、
4命令中に2命令以上の浮動小数点演算が現れた場合
は、パイプラインストールとなり、16クロック後に再
開される。乗算命令の場合は2命令までである。よっ
て、プログラムモデルでは浮動小数点ユニットの配置の
制限はない。単に制限を超えると実行速度が低下するだ
けである。
【0216】浮動小数点ユニット2402は、除算命令
などの可変レイテンシ命令にも対応できる。ただし、命
令を実行したスレッドは除算命令の終了まで待ち状態と
なる。グローバルメモリへのロード命令と同じ動作であ
る。
【0217】<グローバルアクセスユニット2308>
図25を参照して、グローバルアクセスユニット230
8の内部構造について説明する。実施例2のグローバル
アクセスユニット408との違いは、外部ローカルバス
と外部共有バスを分離したこと、外部共有バスからのス
レッド生成を可能にすることが挙げられる。よって、違
いは共有バスインターフェース2501と、ローカルバ
スインターフェース2502だけである。
【0218】外部共有バスインターフェース2501
は、外部のデバイスからデータを読み込むと同時に、外
部のマイクロプロセッサ2301から自身のローカルバ
スをアクセスさせる機能を持つ。
【0219】外部からのメモリアクセスの場合、ローカ
ルメモリアクセス制御ユニット2503は、内部アドレ
スバス1022、内部データバス1023のアービトレ
ーションを取得し、グローバルキャッシュメモリ100
8、ローカルバスインターフェース2502を制御す
る。
【0220】本発明のマイクロプロセッサ2301は、
マルチプロセッサ間のキャッシュのコヒーレンシ維持の
方法も多少異なる。ローカルメモリキャッシュ407同
士は同じアドレスのデータを所持することはありえない
ので調停の必要はない。しかし、グローバルキャッシュ
メモリは、チップ外部からのアクセスを高速化する目的
のため、他のプロセッサのローカルキャッシュメモリ4
07上に実体が存在しうる。この場合、グローバルキャ
ッシュ1007の間でキャッシュコヒーレンシ制御を行
う必要が発生する。
【0221】<マルチプロセッサシステム>図26を参
照して、本発明の第3の実施例のマイクロプロセッサ2
301を使用したシステムの例を挙げる。
【0222】メモリ2611は、ローカルバス2612
を通して、マイクロプロセッサ2301に直接接続され
る。共有バス2613は、マイクロプロセッサ2301
同士の通信に使用され、共有I/Oデバイス2614を
接続する。
【0223】ローカルI/Oデバイス2615は、グラ
フィックアクセラレータ等のメモリバンド幅を要求する
デバイスである。マイクロプロセッサ2301のローカ
ルバス2612に直接接続されて、マイクロプロセッサ
2301との通信バンド幅を確保している。
【0224】本発明のマイクロプロセッサのスレッド通
信機構のハードウェア化により、メモリを分散させるこ
とができる。自身のマイクロプロセッサが持たないメモ
リ領域へのアクセスは、実際にマイクロプロセッサ間で
転送要求を出す方法もある。しかし、直接データを転送
しなくても、そのメモリを持つマイクロプロセッサ23
01にデータ処理を行うスレッドを生成させることがで
きる。この場合、共有バス2613のバンド幅を最小に
できる。
【0225】<マルチプロセッサ版メモリマップ>図2
7を参照して、本発明のマイクロプロセッサ2301を
使用したマルチプロセッサシステムのメモリ空間につい
て説明する。
【0226】各マイクロプロセッサ2301のメモリ空
間は、システムのメモリ空間2702に静的に割付られ
る。従来例2のマイクロプロセッサ301と異なり、共
有バスに出力したトランザクションの受理先のマイクロ
プロセッサはアドレスに対して一意に決定する。
【0227】通信帯域幅が必要なオブジェクト2711
と、オブジェクト2712は、同一のマイクロプロセッ
サ2703に配置される。オブジェクト2713はオブ
ジェクト2711との通信帯域幅を必要としないため、
マイクロプロセッサ2704に配置できる。このよう
に、メモリの割付によってオブジェクト間の通信バンド
幅を最適化できる。
【0228】<マルチプロセッサ共有バストランザクシ
ョン>図28を参照して、マルチプロセッサ間のバスト
ランザクションの内容を示す。
【0229】通常のマイクロプロセッサが持つシングル
データアクセス、バーストデータアクセスに加え、共有
メモリに必要なロック付きシングルアクセス、そしてマ
イクロプロセッサ間スレッド生成要求コマンドが存在す
る。逆に、従来例2のマルチプロセッサに存在するキャ
ッシュコヒーレンシ制御コマンドは必要ない。
【0230】<ループアンローリングの効果>図29を
参照して、ループアンローリングの効果について説明す
る。
【0231】本発明のマイクロプロセッサ401は、命
令の下位4ビットに対応した演算ユニットで常に実行さ
れる。ということは、利用率の高い命令の下位4ビット
が偏っていては、使用されない演算ユニットが存在する
ことになる。この問題は、一般的な高速化テクニックで
あるループアンローリングによって解消できる。
【0232】2901は、1つのスレッドのプログラム
である。2902は16の演算機を示す。2901のコ
ードは、6命令のみを使用しており、最初の6つの演算
機だけを使用することになる。つまり、残りのパイプラ
イン2904はそっくり他のスレッドに渡すことにな
る。ところが、それをうめるだけの他のスレッドの要求
がない場合は性能を発揮できないことになる。
【0233】そのため、演算機を全て使用するように3
つのスレッドを1つにまとめ、1つのスレッドを14命
令に拡張する。2911がインライン化された1つのス
レッドのプログラムである。これによって、演算機29
12は14個使用されることになる。
【0234】また、一般的な長いスレッドについても、
16の倍数の長さの命令長に調節すれば、最も性能が発
揮できる。
【0235】
【発明の効果】本発明のマイクロプロセッサの効果を、
クロック当たりの論理性能、周波数性能、プログラミン
グモデル、チップ面積、低消費電力の項目に分けて説明
する。
【0236】<クロック当たりの論理性能>
【0237】本発明のマイクロプロセッサは、演算性能
において以下の長所を持つ。 1.マルチスレッド動作による並列処理が可能である。 2.マルチスレッドによって外部メモリへのアクセスレ
イテンシの隠蔽が可能である。 3.スレッドの命令およびデータの共有が容易に実現で
き、小規模イタレーション型の並列にも有効である。
【0238】本発明のマイクロプロセッサは、単体のス
レッドの速度では分岐のレイテンシが巨大であるため従
来のパイプラインマイクロプロセッサより劣る。しか
し、それはマルチスレッドと並列処理によって補って余
りある。
【0239】以下、汎用アプリケーションにおける性能
の定量的な予測を示す。Computer Archi
techture: A Quantitive Ap
proach Second Edition(著者
John H.Hennessy AND David
A.Patterson 出版社 MorganKa
ufmann Pubishers,Inc.)に記載
されている、統計データを使用する。以下この文献を参
考文献1とする。
【0240】単体のスレッドからみれば、本発明のマイ
クロプロセッサは、以下の条件のマイクロプロセッサと
ほぼ等価である。 ・汎用レジスタ5 ロードストアレジスタモデル ・16Kバイトダイレクトマップ命令キャッシュ ・1Kバイトダイレクトマップデータキャッシュ ・分岐レイテンシが不定 簡単のため、単体のスレッドはローカルメモリバンクの
みを使用するとする。
【0241】本発明のマイクロプロセッサは、十分なス
レッドが共有されるという前提であれば、全体の性能
は、ロードストア、分岐、キャッシュミスに起因するコ
ンテキストスイッチのオーバーヘッドを差し引いたもの
になる。レジスタ依存関係によるインタロックはコンパ
イラのスケジューリングで除去されているものとする。
参考文献1のp105、p384の統計データによる
と、 ・ロードストア命令の発生頻度:全命令中35% ・分岐命令の発生頻度:全命令中20% ・ロードストアのうちデータキャッシュのミスの確率:
24.61% ・16Kバイト命令キャッシュのキャッシュミスの確
率:0.64%
【0242】以下は、コンテキストスイッチに要するク
ロック数の予測値である。コンテキストスイッチ先のス
レッドの命令アドレスは均等に配分されているものと仮
定する。そして、データキャッシュリプレースのペナル
ティーは別のスレッドの動作で隠蔽できるものと仮定す
る。 ・分岐命令:平均7.5クロック、20%の頻度で発生 ・パイプラインストール:平均9.5クロック、9.2
5%の頻度で発生
【0243】以上の条件で、1つのパイプラインのIP
C性能(クロック単位の命令実行数)は約0.3とな
る。本発明のマイクロプロセッサ全体では、16のパイ
プラインがほとんど互いに干渉しないので、、この数値
を16倍した4.8弱が全体のIPC性能になる。
【0244】このように、本発明のマイクロプロセッサ
では、分岐命令のペナルティーが非常に大きく性能の妨
げとなる。ループアンローリングの手法で分岐を削減す
れば、更に大きく性能を向上させることができる。
【0245】以下、ループアンローリングによって分岐
命令の頻度を64命令に1回に削減したと仮定した場合
の性能を予測する。この場合、IPCは約0.5とな
る。全体のIPCは8近くに向上する。
【0246】さらに、演算ユニットを増加した場合も、
データキャッシュのリプレースの転送能力を増強すれ
ば、単体のパイプラインの性能に干渉することはほとん
どない。よって、投入したハードウェア資源に対する性
能の線形増加を実現できる。
【0247】<周波数性能>本発明のマイクロプロセッ
サは、演算器を大量に集積しているが、命令単位のパイ
プラインの構造は通常のマイクロプロセッサとほぼ同等
である。並列数の増加によるセレクタ入力やレジスタポ
ートの増大はない。
【0248】VLIW型マイクロプロセッサは、演算器
の増加に対して、互いの結果データ、オペランド、レジ
スタファイル間の転送が複雑化して速度を抑制する。そ
れに対し本発明のマイクロプロセッサでは、演算ユニッ
ト間のデータ送信を単一方向に制限することにより、演
算器間のオペランドの転送も単純な回路で実現でき、回
路段数が削減できる。
【0249】また、演算ユニットが隣接していることに
より、演算器間の配線が最短距離である。演算器とロー
カルデータキャッシュ間の転送が唯一の長距離配線とな
る。
【0250】以上の効果により、従来のパイプライン方
式、VLIW方式等のマイクロプロセッサと同等、ある
いはそれ以上の周波数性能を出すことができる。特に、
並列性能の向上と、周波数性能の両立が容易な点で優れ
ている。
【0251】<プログラミングモデル>本発明のマイク
ロプロセッサは、命令セットの用法は一般的なRISC
マイクロプロセッサとほとんど同じであり、さらに一般
的なマルチスレッドの概念でプログラムを作成できる。
【0252】本発明の既存のマイクロプロセッサに対す
るプログラミングモデルにおける長所は、主に、並列度
向上に伴う垂直性、マルチスレッドサポート、単純な負
荷分散、マルチプロセッサ垂直性である。それぞれにつ
いて詳細に説明する。
【0253】まず、並列度向上に伴う垂直性について述
べる。従来例1のVLIWマイクロプロセッサでは、同
時に実行する処理をその都度コンパイラなどが適切に配
置する必要があるが、本発明のマイクロプロセッサは、
プログラムを改変することなく全く独立した処理を同時
に大量に実行できる。更に、演算器405の数を更に増
加した場合も、最初に作成したマルチスレッドプログラ
ムをそのまま使用して性能を向上することができる。
【0254】次に、マルチスレッドサポートについて述
べる。既存のマイクロプロセッサでのマルチスレッドプ
ログラムの同期には、スピンロックによるスレッド同期
待ちか、明示的なOSのスケジューラの呼び出しのどち
らかが必要になる。本発明のマイクロプロセッサではそ
のどちらも必要なく、スレッド生成、消滅命令や自動コ
ンテキストスイッチ機構により、OSを介在しない高速
なコンテキストスイッチを可能にしている。これによ
り、記述が自然で、かつ高速なスレッド間同期を実現で
きる。
【0255】次に、負荷分散について述べる。オブジェ
クトのスタックやヒープメモリ配置がそのまま負荷分散
となる機構である。そのため、複雑なプロセス間プライ
オリティー制御などのOS機能を使用する必要がなく、
マイクロプロセッサの演算資源をスレッドに対して一定
に分配できる。
【0256】最後に、マルチプロセッサ負荷分散につい
て述べる。本発明のマイクロプロセッサを複数使用する
場合は、単一の本発明のマイクロプロセッサ上で開発し
たマルチスレッドプログラムがそのまま使用できる。O
Sのヒープメモリ割り当て機構だけがマルチプロセッサ
の情報を管理して負荷分散すれば良い。
【0257】<チップ面積>本発明のマイクロプロセッ
サのチップ面積縮小の効果を示すため、Compute
r Architechture Pipelined
And Parallel Processor D
esign(著者 Michael J.Flynn)
のp96の記載に基づいたモデルで示す。
【0258】本発明の第2の実施例において、各ユニッ
トの面積予測値を以下の通りとする。単位Aは1ミクロ
ンプロセスにおける1mm平方に相当する。 ・整数演算ユニット405 7A×16 ・データキャッシュ407 4A×16 ・命令メモリ404 13.4A×4 ・スレッド発行ユニット402 約4A×4 ・グローバルデータキャッシュ8K 26.6A ・共有浮動小数点ユニット409 37.8A この条件において、整数演算性能は最大16並列とな
る。
【0259】メモリに必要な制御回路を30%と仮定
し、配線に伴うオーバーヘッドを、ロジック部で50
%、メモリ部で15%とする。この場合、ロジック部は
248.7A、メモリ部は216Aになり、最終的なプ
ロセッサ領域は464.7Aとなる。
【0260】実際の半導体のダイに実装するオーバーヘ
ッドを20%としてチップ面積は557Aとなり、0.
25ミクロンにおけるチップ面積は34mm角となる。
【0261】本発明の第3の実施例の条件を示す。以下
のユニットが第2の実施例に付加される。演算性能は、
整数演算性能が8ビット単位で16並列となり、浮動小
数点が4並列となる。 ・16ビットSIMD整数乗算器2401 20A×8 ・倍精度浮動小数点加算乗算器2402 37.8A×4
【0262】同じ前提条件において、ロジック部は65
8Aとなり、最終的なプロセッサ領域は878Aとな
る。チップ面積は1050Aで、0.25ミクロンにお
けるチップ面積は65mm角となる。
【0263】既存のマイクロプロセッサと比較のため
に、米Intel社のMMXPentiumマイクロプ
ロセッサを引用する。このマイクロプロセッサの0.2
5μm版のチップサイズが95mm角である。このマイ
クロプロセッサの整数並列度は最大で2、浮動小数点が
1、バイト単位のSIMD命令を使用しても最大16で
ある。
【0264】さらに、本発明のマイクロプロセッサは、
演算機などの並列数の自然な拡張が可能である。それは
ハードウェアの構成と、ソフトウェアの互換性の双方の
理由である。
【0265】まず、演算ユニットのn倍の増加に対し
て、データキャッシュメモリはO(n)、そして命令メ
モリの増加はO(n)以下である。
【0266】そして、演算ユニット間のバス配線の増加
をO(n)に押さえることができる。既存のスーパース
カラ方式、VLIW方式はすべての演算器の間の自由な
転送を保証するため、O(n×n)であるのと対照的で
ある。
【0267】本発明のマイクロプロセッサで線形増加以
上の回路規模増加になるのは、分岐クロスバスイッチ4
02とデータクロスバスイッチ406である。そのまま
ではO(n×n)のオーダーの増加になることは避けら
れない。だが、データクロスバスイッチ406について
は、転送先のメモリバンクの配置順序が固定であるた
め、ローカルメモリアクセスレイテンシの低下を容認す
るならバレルシフタと同じ方式を採用できる。この場
合、回路増加のオーダーはO(n×logn)にでき
る。
【0268】<低消費電力>低消費電力のための技術は
大量に存在するが、アーキテクチャレベルの低消費電力
化の手段は、性能に対する回路や配線を最小限にするこ
とで実現できる。本発明のマイクロプロセッサは、性能
に対する回路および配線を最小限にできる。具体的に
は、従来のマイクロプロセッサと比較して以下の長所が
ある。
【0269】スーパースカラプロセッサと比較して、複
雑な結果の転送を必要とする命令レベル並列を行わない
ことにより、データの転送の自由度を最小限にしたこと
による、回路や配線の削減を可能にした。
【0270】マルチプロセッサでありながら、演算の結
果の伝送の距離が最小限であることが言える。クリティ
カルになる長距離のバス配線はローカルメモリキャッシ
ュへの信号のみである。よって、チップ全体の配線容量
を最小限にできる。
【0271】演算器間で命令キャッシュを共有すること
による命令メモリ容量、リプレース頻度の削減が可能で
ある。命令メモリは定型処理を行う上で同じコピーを持
つ可能性が多いので、命令キャッシュの共有により命令
メモリの容量を削減できる。同じ理由により命令キャッ
シュのリプレース頻度を下げることができる。
【0272】演算器間でデータメモリを共有することに
よるデータメモリの省略も挙げられる。通常のマルチプ
ロセッサでは、データの共有を行う場合でも、それぞれ
がデータキャッシュを所有する必要があるが、本発明の
マイクロプロセッサではデータは全て1つのデータキャ
ッシュに格納され、複数のデータキャッシュが同じ内容
を格納することはない。
【0273】これらの効果により、性能に対する消費電
力を最小限にできる。
【0274】<犠牲にしたもの>本発明のマイクロプロ
セッサは、ほとんどの面で従来のマイクロプロセッサを
凌駕する性能を持つが、同時に従来のマイクロプロセッ
サにはなかった短所もいくつか存在する。
【0275】まず、互換性がないことが挙げられる。マ
ルチスレッドプログラムを前提としているため、当然で
ある。しかし、オブジェクト指向への最適化とマルチス
レッド機能を除けば、プログラミングモデルは従来から
あるRISC命令に近く、ソフトウェアの移植は容易で
ある。
【0276】次に、単体のスレッドの性能は従来のマイ
クロプロセッサより低いことが挙げられる。理由は、分
岐レイテンシが巨大であること、バンク外のメモリアク
セスのレイテンシも比較的大きい為である。しかし、ど
ちらのレイテンシ時間でも別のスレッドが動作できるた
め、全体性能としてはある程度隠蔽可能である。
【0277】次に、データアクセスのレイテンシが大き
いことが挙げられる。オブジェクト指向プログラミング
モデルなどで、データアクセスの範囲、配置を常にロー
カルメモリに配置する努力が必要になる。しかし、オブ
ジェクト指向プログラミングモデルは現在も広く使用さ
れるソフトウェア作成手法であり、それに適合する形で
明示的に指定して性能を向上できるのは有用である。
【0278】最後に、従来のスーパースカラ方式等と比
較して演算器の使用効率が低いことが挙げられる。本発
明のマイクロプロセッサは、メモリバンクと命令のアド
レス配置が一致するまでスレッドが再開できないため、
適切なスレッドが開始できずに全く演算器が動作できな
い状況が発生する。しかし、分岐とメモリバンク外のメ
モリアクセスを行わなければその問題は発生しない。よ
って、性能を出すべきアプリケーションでは、ループア
ンローリングなどの手段でチューニングを行えば良い。
全体の並列度を圧倒的に高くできるため、チューニング
による性能向上も大きい。
【0279】<さらに性能を向上させるために>汎用レ
ジスタの増加はローカルメモリへのバンド幅の削減に貢
献する。しかし、コンテキストスイッチの退避状態の増
加をもたらすため、トレードオフで決定する必要があ
る。レジスタの退避を行わず、レジスタウィンドウによ
って切り替えるなどの手段も考えられるが、当然規模の
増大をもたらす。
【0280】データキャッシュのリプレースのバンド幅
向上の効果は大きい。現在のところ、データキャッシュ
のリプレースには、1つの32ビットグローバルデータ
バスを使用しているため、リプレースのペナルティーが
大きいことは自明である。リプレース用に128ビット
バスなどを採用する、複数のデータキャッシュを並列に
リプレースを行う、などの処置が望ましい。
【0281】分岐予測機構はコンテキストスイッチの間
のパイプラインの空きの削減に役立つ。しかし、レイテ
ンシ隠蔽機能を持つ本発明のマイクロプロセッサでは、
分岐予測機構の効力はそれほど絶対的ではない。トラン
ジスタを演算機の並列数の増大に使用するか、分岐予測
機構を強化するかどうかは、要求性能に対するトレード
オフで決定することになる。
【0282】<従来方式との比較のまとめ>最後に、本
発明のマイクロプロセッサと、従来のマイクロプロセッ
サとの比較結果をまとめる。
【0283】スーパースカラ方式に対して低消費電力、
並列性の限界がないという長所がある。逆に、互換性が
ないという短所がある。
【0284】従来例1のVLIW方式に対して、並列性
の限界がない、演算機の増加に対して、あるいはマルチ
プロセッサ構成でも全て同じプログラムで性能を出すこ
とができる。という長所がある。短所としては、スレッ
ド発行機構が複雑であるということが言える。
【0285】従来例2の共有メモリマルチプロセッサに
対して、性能に対する回路規模が小さい、メモリの分割
による性能の向上が容易であるという長所がある。逆に
短所としては、既存のマルチプロセッサ対応OSが使用
できないことが言える。
【図面の簡単な説明】
図1 本発明の第1の実施例の図 図2 従来例1のVLIWプロセッサの図 図3 従来例2のマルチプロセッサシステムの図 図4 本発明の第2の実施例の図 図5 図4の整数演算ユニット群に関する図 図6 図5の1つの整数演算ユニットの詳細な構成図 図7 図5の1つの分岐ユニットの詳細な構成図 図8 図4の命令発行機構の構成図 図9 図4のスレッド発行ユニットの構成図 図10 図4のグローバルアクセスユニットの構成図 図11 図4のデータキャッシュメモリの構成図 図12 図4の共有浮動小数点ユニットの構成図 図13 命令セット表 図14 スレッド生成の図 図15 レジスタセット表 図16 メモリ構成図 図17 単体の命令のパイプライン実行の図 図18 チップ全体のパイプライン動作の概念図 図19 通常分岐におけるスレッド切り替え動作の図 図20 パイプラインストールの動作の図 図21 スレッドを使用したプログラム例 図22 負荷分散の方法 図23 第3の実施例の全体図 図24 図23の演算ユニット群の詳細な図 図25 図23のグローバルアクセスユニットの図 図26 第3の実施例のマイクロプロセッサを使用した
システム構成例 図27 マルチプロセッサメモリ配置図 図28 共有バスのバストランザクション図 図29 ループインライン展開の効用の図
【符号の説明】
1 マイクロプロセッサ 2 命令発行制御 3 プログラムカウンタ記憶手段 4 命令格納手段 5 演算手段 6 動的信号接続手段 7 データ格納手段 8 外部インターフェース 201 命令アドレス生成 202 命令キャッシュ 203 命令デコード 204 データクロスバスイッチ 205 分岐ユニット 206 ロードストアユニット 207 演算ユニット 208 レジスタファイル 209 データキャッシュ 210 外部バスインターフェース 301 マイクロプロセッサ 302 マイクロプロセッサ 303 マイクロプロセッサ 304 共有バスクロスバスイッチ 305 データメモリ 306 データメモリ 307 専用演算ユニット 308 I/Oデバイス 311 命令キャッシュ 312 命令発行制御 313 整数演算機 314 浮動小数点演算機 315 ロードストアユニット 316 データキャッシュ 317 キャッシュコヒーレンシ制御ユニット 401 マイクロプロセッサ 402 分岐クロスバスイッチ 403 スレッド制御ユニット 404 命令メモリ 405 整数演算ユニット群 406 ローカルキャッシュアクセスクロスバスイッチ 407 ローカルキャッシュバンク 408 グローバルアクセス制御 409 共有特殊演算ユニット 411 スレッド状態信号 412 プログラムカウンタ信号 413 スレッド制御ユニット間制御信号 414 スレッド状態信号 415 命令コード信号 416 整数演算ユニット間パイプラインデータバス 417 グローバルメモリアクセスアドレスバス 418 グローバルメモリアクセスデータバス 419 スレッド状態信号 421 ローカルキャッシュアドレスバス 422 ローカルキャッシュデータバス 423 共有演算機アドレスバス 424 共有演算機データバス 425 データキャッシュリプレースバス 426 ローカルキャッシュクロスバスイッチ406制
御信号 427 グローバルアクセスアドレスバス 428 グローバルアクセスデータバス 429 プログラムカウンタ信号 430 分岐クロスバスイッチ402制御信号 431 命令コード信号 432 命令リプレースデータバス 433、434、435、436 グローバルアクセス
要求信号 437 スレッド状態信号 450 プロセッサ外部データバス 451 プロセッサ外部制御バス 452 プロセッサ外部アドレスバス 453 プロセッサ外部割り込み要求信号 501 整数演算ユニット 502 分岐ユニット 503 分岐アービター 511、512、513、514 命令デコード信号 515 データバス群 516 分岐ユニット状態信号群 521 ローカルメモリアクセスアドレスバス 522 グローバルメモリアクセスアドレスバス 523 ローカルメモリアクセスデータバス 524 グローバルメモリアクセスデータバス 525、526、527、528 分岐要求信号群 601 プログラムカウンタラッチ 602 スタックポインタラッチ 603 スレッドIDラッチ 604 デコード済み命令コードラッチ 605 プログラムカウンタラッチ 606 条件実行命令制御信号ラッチ 607 フラグレジスタラッチ 608 フラグレジスタ更新ラッチ 609 ALU演算結果フラグラッチ 610 ALU演算結果ラッチ 611 バレルシフタ演算結果フラグラッチ 612 バレルシフタ演算結果ラッチ 613 ストアデータラッチ 614 レジスタライトバックデータ保持ラッチ 615 第1汎用レジスタラッチ 616 第2汎用レジスタラッチ 617 第3汎用レジスタラッチ 618 第4汎用レジスタラッチ 619 スタックポインタラッチ 621 プログラムカウンタ更新セレクタ 622 プログラムカウンタ定数生成回路 623 フラグレジスタ更新セレクタ 624 条件実行命令制御回路 625 プログラムカウンタバス 626 定数生成回路 627 第1オペランドセレクタ 628 第2オペランドセレクタ 629 ストアデータセレクタ 630 ALU回路 631 バレルシフタ 632 ストアアライン回路 633 スレッド間レジスタフォワードバス 634 第1汎用レジスタ更新セレクタ 635 第2汎用レジスタ更新セレクタ 636 第3汎用レジスタ更新セレクタ 637 第4汎用レジスタ更新セレクタ 638 スタックポインタ更新セレクタ 639 スタックポインタ信号 640 メモリストア用データバス 641 演算結果バス 642 データライトバックバス 643 第1オペランドバス 644 第2オペランドバス 645 第3オペランドバス 646 条件実行制御信号 647 スレッド状態信号 701 スレッド状態ラッチ 702 ロードデータラッチ 703 ロードデータ保持バッファ 704 ローカルメモリライトデータラッチ 705 ローカルメモリライトアドレスラッチ 706 アドレスセレクタ 707 アドレスバッファ 708 ストアデータセレクタ 709 ストアデータバッファ 711 スレッド状態更新セレクタ 711 分岐制御ユニット 712 ロードアライナ 713 ローカルメモリアクセス検査 714 分岐受理信号 801 Xデコーダ 802 RAMセル 803 センスアンプおよびライトバッファ 804 命令メモリアクセス制御 805 命令セレクタ 806 命令コードラッチ 807 命令デコードユニット 821 スレッド状態信号 822 プログラムカウンタ 830、831、832、833 命令コード 834 デコード済み命令 835 演算ユニット制御信号 836 デコード済み命令 837 演算ユニット制御信号 838 デコード済み命令 839 演算ユニット制御信号 840 デコード済み命令 841 演算ユニット制御信号 842 デコード済み命令 851 命令リプレースバス 901 スレッド発行アービトレーション 902 スタックポインタ連想メモリ 903 スレッド状態メモリ 904 スレッド開始準備フラグ 905 命令キャッシュアドレスタグ 906 ローカルキャッシュバンク番号 907 命令キャッシュアドレス比較器 908 スレッド発行ユニット 909 プログラムカウンタシフトレジスタ 921 スレッド発行アービトレーション要求 922 スレッド発行アービトレーション要求 923、924 ローカルキャッシュバンク信号 925、926 プログラムカウンタ信号 931、932、933 スレッド状態メモリワードラ
イン信号 934 ローカルキャッシュバンク信号 935 スレッド開始準備フラグ信号 936 スレッド状態信号 937 プログラムカウンタインデックス 938 プログラムカウンタアドレスタグ 939 命令キャッシュアドレスタグ 1001 分岐クロスバスイッチ402制御 1002 割り込みベクタ生成ユニット 1003 割り込み入力ユニット 1004 グローバルアドレスタグメモリ 1005 グローバルアドレスタグ比較器 1006 グローバルデータキャッシュメモリ 1007 外部バスインターフェースユニット 1008 ローカルメモリクロスバスイッチ406制御 1009 内部ロードストアインターフェース 1010 ロードストア分岐受理ユニット 1011 プログラムカウンタインクリメンタ 1012 命令キャッシュリプレースバッファ 1013 データキャッシュリプレースバッファ 1021 アドレスバス 1022 データバス 1101 データキャッシュRAM 1102 データキャッシュタグRAM 1103 アドレスタグ比較器 1104 保護機構チェック 1111 アドレスバス 1112 データバス 1113 リードライト制御信号 1114 アクセス違反通知信号 1201 浮動小数点レジスタ 1202 浮動小数点データパス 1203 アドレスデコードユニット 1204 命令デコードユニット 1401 待ち状態のスレッド 1402 実行中のスレッド 1403 命令メモリ 1801、1802、1803 スレッド 2301 マイクロプロセッサ 2305 演算ユニット群 2308 グローバルアクセス制御ユニット 2350 グローバルアドレス・データバス 2351 グローバル制御バス 2352 割り込み信号 2353 ローカル制御バス 2354 ローカルアドレスバス 2355 ローカルデータバス 2401 整数乗算ユニット 2402 浮動小数点演算ユニット 2403 浮動小数点レジスタユニット 2404 結果出力バス 2501 共有バスインターフェース 2502 ローカルバスインターフェース 2611 ローカルメモリ 2612 ローカルバス 2613 共有バス 2614 共有I/Oデバイス 2615 ローカルI/Oデバイス 2616 ローカルI/Oデバイス 2701 OS 2702 メモリ空間 2703、2704、2705 マイクロプロセッサロ
ーカルメモリ空間 2711、2712、2713 オブジェクト 2901 1スレッド分のプログラム 2902 整数演算機アレイ 2903 使用状態の整数演算機 2904 休止状態の整数演算機 2911 インライン化スレッドのプログラム 2911 整数演算機アレイ 2913 使用状態の整数演算機
フロントページの続き (56)参考文献 特開 平8−179946(JP,A) 特開 平7−281896(JP,A) 特開 平8−235128(JP,A) 特開 平8−249195(JP,A) 特開 平10−124313(JP,A) 特開 平10−78880(JP,A) 特開 平10−124316(JP,A) 特開 平10−207720(JP,A) http://www.kspn.c o.jp/pmt/ (58)調査した分野(Int.Cl.7,DB名) G06F 9/38

Claims (17)

    (57)【特許請求の範囲】
  1. 【請求項1】プログラムカウンタ値を蓄積するプログラ
    ムカウンタラッチと、プログラムカウンタ値の入力に対
    して命令を出力する命令メモリと、命令の内容に応じて
    演算を行う演算ユニット、演算結果等を臨時に格納して
    次の演算に使用するためのレジスタ、これらから構成さ
    れる演算処理要素を複数持ち、演算処理要素のプログラ
    ムカウンタ値と演算結果を、隣接する演算処理要素のプ
    ログラムカウンタラッチおよび演算ユニットに伝達する
    ことを特徴とし、更に演算処理要素に別の演算処理要素
    をくりかえし直列に接続することを特徴とし、更にスレ
    ッドと呼ばれる連続した命令を、各演算処理要素の命令
    メモリに1つづつ演算処理要素の接続順に格納すること
    を特徴とする情報処理装置。
  2. 【請求項2】請求項1に記載された情報処理装置におい
    て、複数のデータメモリバンクを持ち、すべての演算手
    段がそれぞれ別のデータメモリバンクを動的に選択し
    て、同時に使用することを特徴とする情報処理装置。
  3. 【請求項3】請求項2に記載された情報処理装置におい
    て、プログラムカウンタ値を複数蓄積するプログラムカ
    ウンタバッファを有し、空いたプログラムカウンタラッ
    チに対して自動的に新規のプログラムカウンタ値を割り
    当てることにより、演算処理要素にスレッドを動的に割
    り当てることを特徴とするスレッド発行制御手段を持つ
    情報処理装置。
  4. 【請求項4】請求項3に記載された情報処理装置におい
    て、直列に接続された最後尾の演算処理要素の出力を、
    最前列の演算処理要素の演算手段の入力として接続し、
    同時に最後尾の演算処理要素内のプログラムカウンタラ
    ッチから出力されるカウンタ値を更新し、最前の演算処
    理要素のプログラムカウンタラッチに伝達することを特
    徴とする情報処理装置。
  5. 【請求項5】請求項3に記載された情報処理装置におい
    て、演算処理要素の列に対して、スレッド実行の起点の
    位置を動作中に自由に変更できることを特長とする情報
    処理装置。
  6. 【請求項6】請求項3に記載された情報処理装置におい
    て、スレッド発行制御手段を複数有し、演算手段の出力
    値を使用して、スレッド発行制御手段と、演算処理要素
    の列におけるスレッド起点を選択することを特徴とする
    情報処理装置。
  7. 【請求項7】請求項2に記載された情報処理装置におい
    て、各スレッドに対してデータメモリバンクを1つづつ
    割り当て、隣接する演算処理要素に対して、スレッドの
    状態の伝送とともに、データメモリバンクの割り当て状
    態を同時に伝送することを特徴とする情報処理装置。
  8. 【請求項8】請求項7に記載された情報処理装置におい
    て、複数のデータメモリバンクを、演算手段からのデー
    タアドレス値によって一意に選択できることを特徴と
    し、さらに、すべての演算処理要素がその時点で接続さ
    れたデータメモリバンクを示すデータアドレス値を有
    し、演算処理要素のデータメモリとの伝送ごとに、前記
    データアドレス値と、伝送を要求するデータアドレス値
    との一致を判断する手段を持つことを特徴とする情報処
    理装置。
  9. 【請求項9】請求項3に記載された情報処理装置におい
    て、演算処理要素の非決定的な例外事象に対して、その
    演算処理要素からすべての演算結果をスタックポインタ
    値の示すデータメモリに自動的に伝送して、プログラム
    カウンタ値とスタックポインタ値をスレッド発行制御手
    段に蓄積することを特徴とし、さらに、スレッド発行制
    御手段は演算処理要素に対して別のスレッドのプログラ
    ムカウンタ値を伝送することを特徴とする。さらに、例
    外事象の終了と同時に、スレッド発行制御手段は蓄積さ
    れたプログラムカウンタ値とスタックポインタ値を演算
    処理要素に伝達し、スタックポインタ値が示すデータメ
    モリから退避していた演算結果を演算処理要素に伝達
    し、演算処理要素の動作を再開することを特徴とする情
    報処理装置。
  10. 【請求項10】請求項8に記載された情報処理装置にお
    いて、請求項9に記載された特徴を有し、さらに演算処
    理要素に1対1に接続されたデータメモリバンク以外と
    の情報入出力が必要な場合に、例外事象を発生させて演
    算処理要素の状態の退避を行い、データメモリバンク以
    外からの情報入出力を行い、入出力の終了と同時に、退
    避していた状態と入力された情報を演算処理要素に伝達
    し、演算処理要素の動作を再開することを特徴とする情
    報処理装置。
  11. 【請求項11】請求項10に記載された情報処理装置に
    おいて、演算処理要素に1対1に接続されたデータメモ
    リバンク以外との情報入出力が必要な場合、演算処理要
    素内部に演算手段と独立してデータメモリバンクと通信
    を行う伝送情報蓄積手段を有することを特徴とする情報
    処理装置。
  12. 【請求項12】請求項2に記載された情報処理装置にお
    いて、情報処理装置の外部のデータメモリの内容の一部
    を、情報処理装置の内部の前記データメモリバンクに一
    時蓄積して演算手段との通信を行い、一時蓄積されてい
    ない場合にのみ自動的に外部の記憶手段と内容を入れ替
    えることを特徴とし、また、外部のメモリからまとめて
    送られたデータを蓄積して、データメモリバンクに部分
    ごとに伝達する手段を有し、複数のデータメモリバンク
    が内容の入れ替え動作を同時に実行することを特徴とす
    る情報処理装置。
  13. 【請求項13】請求項8に記載された情報処理装置にお
    いて、スレッド発行制御手段がスレッドの割り当てられ
    ていない演算処理要素にプログラムカウンタ値とスタッ
    クポインタ値を伝送する際に、スタックポインタ値と演
    算処理要素の持つデータメモリバンクを示す値とを比較
    し、一致する場合に伝送することを特徴とする情報処理
    装置。
  14. 【請求項14】請求項3に記載された情報処理装置にお
    いて、直列に接続された演算処理要素の列と独立した特
    別な演算手段を有し、すべての演算処理要素と特別な演
    算手段を接続し、演算処理要素は特別な演算手段の演算
    の要求と共にスレッド発行制御手段に状態の一部を伝送
    して、特別演算手段は、演算の終了後に演算処理要素に
    演算結果を伝送し、同時にスレッド発行手段から退避し
    ていた状態を演算処理要素に伝送して、演算処理要素の
    動作を再開することを特徴とする情報処理装置。
  15. 【請求項15】請求項1に記載された情報処理装置にお
    いて、直列に接続された演算処理要素のうち、2つ以上
    の演算処理要素に対し、1つの特別な演算手段を接続
    し、さらに接続されたすべての演算処理要素から特別な
    演算手段を使用できることを特徴とする情報処理装置。
  16. 【請求項16】請求項1で記載された情報処理装置にお
    いて、別の情報処理装置が接続するメモリとの通信を行
    うための情報処理装置間通信手段を有することを特徴と
    する情報処理装置。
  17. 【請求項17】請求項16で記載された情報処理装置を
    複数用いたシステムにおいて、情報処理装置はそれぞれ
    個別のメモリを有し、1つのメモリアドレス値で、複数
    の情報処理装置が接続するすべてのメモリを一意に選択
    して通信することを特徴とする情報処理装置。
JP09287662A 1997-10-03 1997-10-03 マルチスレッドプログラムを使用する情報処理装置 Expired - Fee Related JP3099290B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP09287662A JP3099290B2 (ja) 1997-10-03 1997-10-03 マルチスレッドプログラムを使用する情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP09287662A JP3099290B2 (ja) 1997-10-03 1997-10-03 マルチスレッドプログラムを使用する情報処理装置

Publications (2)

Publication Number Publication Date
JPH11110215A JPH11110215A (ja) 1999-04-23
JP3099290B2 true JP3099290B2 (ja) 2000-10-16

Family

ID=17720113

Family Applications (1)

Application Number Title Priority Date Filing Date
JP09287662A Expired - Fee Related JP3099290B2 (ja) 1997-10-03 1997-10-03 マルチスレッドプログラムを使用する情報処理装置

Country Status (1)

Country Link
JP (1) JP3099290B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002333978A (ja) * 2001-05-08 2002-11-22 Nec Corp Vliw型プロセッサ
JP4956891B2 (ja) 2004-07-26 2012-06-20 富士通株式会社 演算処理装置,情報処理装置および演算処理装置の制御方法
GB2417105B (en) * 2004-08-13 2008-04-09 Clearspeed Technology Plc Processor memory system
US7765250B2 (en) 2004-11-15 2010-07-27 Renesas Technology Corp. Data processor with internal memory structure for processing stream data
JP2007004338A (ja) * 2005-06-22 2007-01-11 Renesas Technology Corp データ処理装置
JP4601413B2 (ja) * 2004-12-21 2010-12-22 株式会社日立メディコ 超音波診断装置
US8984256B2 (en) * 2006-02-03 2015-03-17 Russell Fish Thread optimized multiprocessor architecture
US7594078B2 (en) * 2006-02-09 2009-09-22 International Business Machines Corporation D-cache miss prediction and scheduling
JP2009238132A (ja) * 2008-03-28 2009-10-15 Nec Corp データ処理装置
JP5463799B2 (ja) * 2009-08-28 2014-04-09 株式会社リコー Simd型マイクロプロセッサ
JP5967646B2 (ja) * 2012-07-09 2016-08-10 株式会社エルアミーナ レジスタレスアーキテクチャによるキャッシュレスマルチプロセッサ
CN114860319B (zh) * 2022-05-12 2025-08-29 中国科学院计算技术研究所 一种用于simd计算指令的交互型运算装置及执行方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
http://www.kspn.co.jp/pmt/

Also Published As

Publication number Publication date
JPH11110215A (ja) 1999-04-23

Similar Documents

Publication Publication Date Title
US11204769B2 (en) Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9934072B2 (en) Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9990200B2 (en) Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US11829187B2 (en) Microprocessor with time counter for statically dispatching instructions
US11954491B2 (en) Multi-threading microprocessor with a time counter for statically dispatching instructions
US7895587B2 (en) Single-chip multiprocessor with clock cycle-precise program scheduling of parallel execution
JP2001236221A (ja) マルチスレッドを利用するパイプライン並列プロセッサ
US11829762B2 (en) Time-resource matrix for a microprocessor with time counter for statically dispatching instructions
JP3099290B2 (ja) マルチスレッドプログラムを使用する情報処理装置
US12147812B2 (en) Out-of-order execution of loop instructions in a microprocessor
US20230350680A1 (en) Microprocessor with baseline and extended register sets
US12541369B2 (en) Executing phantom loops in a microprocessor
US20250265224A1 (en) Dynamic reconfiguration of a unified core processor to a multi-core processor
CN120508530A (zh) 统一核心处理器到多核心处理器的动态重构
CN120508531A (zh) 多核心处理器向统一核心的动态重构
Kang et al. VLSI implementation of multiprocessor system

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees