JP2002268878A - スレッド間優先度可変プロセッサ - Google Patents

スレッド間優先度可変プロセッサ

Info

Publication number
JP2002268878A
JP2002268878A JP2001062792A JP2001062792A JP2002268878A JP 2002268878 A JP2002268878 A JP 2002268878A JP 2001062792 A JP2001062792 A JP 2001062792A JP 2001062792 A JP2001062792 A JP 2001062792A JP 2002268878 A JP2002268878 A JP 2002268878A
Authority
JP
Japan
Prior art keywords
instruction
thread
data
register
time
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.)
Granted
Application number
JP2001062792A
Other languages
English (en)
Other versions
JP3796124B2 (ja
Inventor
Fumio Arakawa
文男 荒川
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2001062792A priority Critical patent/JP3796124B2/ja
Priority to US10/022,533 priority patent/US6978460B2/en
Publication of JP2002268878A publication Critical patent/JP2002268878A/ja
Application granted granted Critical
Publication of JP3796124B2 publication Critical patent/JP3796124B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Abstract

(57)【要約】 【課題】本発明が解決しようとする課題は、大規模なハ
ードウェア追加や根本的なアーキテクチャ変更を行わず
に、少ないハードウェアの追加で単一プロセッサで複数
スレッドを実行するマルチスレッドプロセッサを改良す
ることにより、数十命令規模の並列度抽出を可能にし、
性能を向上させることである。 【解決手段】マルチスレッドプロセッサに、スレッド間
優先度の時分割変更機能を追加し、スレッド間のデータ
の流れを限定して流れる順に実行順序を規定することに
より、データ依存関係のある複数スレッドを同時又は時
分割実行し、大規模なアウトオブオーダ実行並の性能を
達成した。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はマイクロプロセッサ
等のデータ処理装置にかかり、マルチスレッドプロセッ
サのスレッド管理をするための有効な手段を提供する。
該マルチスレッドプロセッサは、オペレーティングシス
テム等のソフトウェアの介在なしに、複数のスレッドを
時分割または同時に実行することが可能なプロセッサで
ある。該スレッドは、少なくとも固有のプログラムカウ
ンタを有する命令フローであり、複数スレッド間でのレ
ジスタファイルの共有が可能なスレッドとする。
【0002】
【従来の技術】逐次処理フローを逐次処理より実行並列
度を上げて高速に実行する方法には様々な方法がある。
(1)依存関係のない複数処理を一つの命令にまとめて
同時実行するSIMD(Single Instruction Multiple Data)
命令やVLIW(Very Long Instruction Word)命令、(2)
依存関係のない複数命令を同時に実行するスーパスカラ
方式、(3)命令単位で、逐次処理フローの順序と異な
る順序で実行して、データ依存関係やリソース競合によ
る実行並列度低下やストールを削減するアウトオブオー
ダ実行方式、(4)自然な逐次処理フローの順序を実行
並列度が最も上がるようにあらかじめ並べ替えたプログ
ラムを実行するソフトウェアパイプラインニング、
(5)逐次処理フローを複数命令から成る複数命令列に
分割して、この複数命令列をマルチプロセッサまたはマ
ルチスレッドプロセッサで実行する方式等である。
(1)(2)は並列処理のための基本方式、(3)
(4)は局所的な並列度をより多く抽出するための方
式、(5)は大局的な並列度を抽出するための方式であ
る。「MICROPROCESSOR REPORT,vol.13,no.13, Oct.6, 1
999, pp.1,6-10」記載のIntel社のMercedは上記(1)
のVLIW方式を実装し、(4)のソフトウェアパイプライ
ンニング方式のために整数128本、浮動小数点128本の計
256本の64ビットレジスタを実装している。レジスタ本
数が多いため数十命令規模の並列度抽出が可能である。
「MICROPROCESSOR REPORT,vol.13,no.16, Dec.6, 1999,
pp.1,6-11」記載のCompaq社のAlpha 21464は、上記
(2)のスーパスカラ方式、(3)のアウトオブオーダ
方式、及び(5)のマルチスレッド方式を実装してい
る。大容量の命令バッファ及びリオーダバッファによる
アウトオブオーダ実行で数十命令規模の並列度を抽出
し、マルチスレッド方式によって更に大局的な並列度を
抽出し、スーパスカラ方式で並列実行している。したが
って、全般的な並列度抽出が可能であると考えられる。
但し、複数スレッド間の依存関係解析を行わないので、
依存関係のある複数スレッドの同時実行はできない。
「MICROPROCESSOR REPORT,vol.14,no.3, March, 2000,
pp.14-15」記載のNEC社のMerlotは(5)のマルチプロ
セッサの例である。Merlotは密結合オンチップ4並列プ
ロセッサで複数スレッドの同時実行を行っている。依存
関係のある複数スレッドの同時実行も可能である。依存
関係解析を容易にするために、新スレッドは最新の既存
スレッドのみが生成し、逐次実行した場合の順序は新ス
レッドが最後であるという制約を付けている。「特開平
8-249183 推論並列命令スレッドの実行」記載のCPU(中
央演算処理装置)は(5)のマルチスレッドプロセッサ
の例である。メインスレッドと将来スレッドを同時実行
するマルチスレッドプロセッサである。メインスレッド
は逐次実行のためのスレッド、将来スレッドは逐次実行
した場合に将来実行するプログラムを投機的に実行する
ためのスレッドである。将来スレッドの使用するレジス
タまたはメモリ上のデータは将来スレッド開始時のデー
タであり、逐次実行した場合の将来スレッド開始時点ま
でに更新される可能性がある。更新されれば将来スレッ
ドの使用したデータは正しくないので将来スレッドの結
果を破棄し、更新されなければ残す。更新の有無は、逐
次実行した場合に将来スレッド開始時点に至るまでのプ
ログラムフローを条件分岐の方向によってチェックし、
更新命令を実行するフローかどうかで判断する。このた
め、複数スレッド間の依存関係解析が不要であるという
特徴を持つ。
【0003】
【発明が解決しようとする課題】例えば、図1のプログ
ラムは8個のデータを加算するプログラムである。本プ
ログラムを実行するプロセッサは図2のようなリピート
制御命令を持っているものとする。これらの命令でリピ
ート実行前にリピート構造を構成すると、リピートカウ
ンタ更新命令、リピートカウンタチェック命令、及び条
件分岐命令等のリピート制御命令をリピート中に実行す
る必要がないものとする。このようなリピート制御命令
はデジタルシグナルプロセッサ(DSP)では一般的であ
り、汎用プロセッサにも容易に適用可能である。本プロ
グラムを図3に示すパイプライン構成のロードレイテン
シ4の2並列スーパスカラプロセッサで実行する場合を
考える。図中、Iは命令フェッチ、D0、D1は命令デコー
ド、Eは加算、ストア等の実行、L0-L3はロードステージ
である。パイプライン動作は図4のようになる。図中、
命令#7はレジスタr0のアドレスからデータをレジスタr2
にロードし、レジスタr0を次のアドレスに更新する命令
である。命令デコードステージD0でデコードされ、4サ
イクルのロードステージL0-L3でロードが実行されてL3
ステージの最後でロードデータが使用可能となる。同時
にL0ステージでアドレス更新が実行されてL0ステージの
最後で更新アドレスが使用可能となる。一方、命令#8は
レジスタr2とレジスタr3を加算し、結果をレジスタr3に
格納する命令である。命令デコードステージD1でデコー
ドされ、実行ステージEで加算が実行されてEステージの
最後で結果が使用可能となる。命令#8は命令#7のロード
結果を使用するため、命令#7のL3ステージの次サイクル
でEステージを実行する。そして、ロードレイテンシが
隠蔽できないためにN個のデータの加算に4N+2サイクル
かかる。ロードレイテンシをLとするとLN+2サイクルで
ある。更に、外部メモリアクセスを想定してロードレイ
テンシを例えば30と設定すると、N個のデータの加算に3
0N+2サイクルかかってしまう。次に上記プロセッサに上
記Alpha 21464のようなアウトオブオーダ実行機能を付
加すると、ロードレイテンシ4ならば図5のように動作
しN+5サイクル、30ならばN+31サイクル、LならばN+L+1
サイクルで完了する。しかしながら、ロードレイテンシ
30に対応するには60命令レベルの並べ替えが必要であ
る。図1のプログラムでNを30以上に設定したとする
と、60命令の内、30のADD命令を命令バッファに保持し
ながら、30のロード命令を実行していく。そして、ADD
命令実行後に本来の実行順序で実行結果を書き戻す。こ
のため、Alpha 21464のような大容量の命令バッファ及
びリオーダバッファが必要となり、プロセッサのコスト
パフォーマンスが低下する。次に、図1のプログラムを
上記Mercedのようなソフトウェアパイプラインニング方
式で高速化すると、ロードレイテンシ4ならばプログラ
ムは図6のようになる。そして、パイプラインは図7の
ようになり、上記アウトオブオーダ実行同様N+5サイク
ルで完了する。この時、図1のプログラムに比べて3本
のレジスタを余分に使用する。そして、ロードレイテン
シ30に対応するには29本の余分なレジスタを用いたプロ
グラムに変更しなければならない。実行サイクルはN+31
である。このようにソフトウェアパイプラインニング方
式では多数のレジスタとレイテンシに合せた最適化が必
要である。一般には、プログラムが仮定したロードレイ
テンシをX、実際のロードレイテンシをLとすると実行サ
イクル数はMAX(1,L-X+1)N+MAX(L,X)+1サイクルとなる。
MAX(式1,式2)という関数は、最大値選択関数であり、式
1及び式2の大きい方を選択する。過小なレイテンシを仮
定すると第1項が増えてしまい、過大なレイテンシを仮
定すると第2項が増えてしまう上にレジスタを浪費す
る。外部メモリアクセスレイテンシは動作周波数を変え
ただけでも変化するのでソフトウェアの汎用性は低い。
また、通常の32ビット命令のプロセッサはレジスタが32
本なのでレジスタ本数が不足する。以上のように上記Al
pha 21464及びMercedの方式は数十命令レベルの並列度
抽出による高速化は可能であるが、コストパフォーマン
スが低かったり、通常の32ビット命令では対応できなか
ったりするため、高価なプロセッサでなければ採用でき
ない。一方、上記Merlot用に図1のプログラムを変更す
ると図8のようになる。パイプラインは図9のようにな
り、新スレッド発行がネックとなって、N個のデータの
加算に2N+7サイクルかかる。一つのプロセッサに着目す
ると4スレッド毎に1スレッドの処理を担当し、1スレ
ッドの処理に7サイクルかかる。ロードレイテンシがL
ならばL+3サイクルかかる。一方、新スレッド発行は
2サイクルピッチなので、2×4=8サイクル毎に同一
プロセッサに新スレッドを発行できる。同一プロセッサ
で実行されるスレッドは逐次実行されるため、処理時間
L+3と発行ピッチ8の大きい方に実行時間が律速され、N
個のデータの加算にMAX(L+3,8)N/4+7サイクルかかる。
ロードレイテンシが30ならば33N/4+7サイクルかかる。2
並列スーパスカラプロセッサを4個搭載している割には
性能が低い。最後に上記特開平8-249183のマルチスレッ
ドプロセッサ方式用に図1のプログラムを変更すると図1
0のようになる。将来スレッド発行/終了に命令が必要
なため実際の処理の2命令と合せて1個のデータに対し
て4命令必要である。また、将来スレッド発行後に将来
スレッドとして実行されたコードに必ずメインスレッド
が到達しなければならない。到達時に将来スレッドの実
行結果を採用するか破棄するか決定するからである。次
のリピート処理のために将来スレッドを発行したらリピ
ートを抜けてしまって、メインスレッドが次のリピート
処理をしなかったという事態は避けなければならない。
したがって、リピートの先頭でリピートの最後にある将
来スレッドを発行する場合が最も早い将来スレッド発行
である。この結果、将来スレッド発行ネックとなり、2
並列スーパスカラプロセッサ方式では図11のようにN個
のデータの加算に3N+5サイクルかかる。この時、図11の
#10のADDとその3命令後の#9のFORKが同時に実行されて
いる。そして、ロードレイテンシが30になると、これら
#10と#9の実行は図11より26サイクル後になる。この結
果、サイクル数はロードレイテンシで決まり29N+5サイ
クルである。一般にはMAX(3N+5,(L-1)N+L+1)サイクルで
ある。上記Alpha 21464、Merced及びMerlot方式に比べ
てハード量は少ないが性能も低い。以上を纏めると図12
のようになる。#1はデータ数N、ロードレイテンシLの場
合に一般化した場合、#2はロードレイテンシが4と比較
的短い場合、#3はロードレイテンシが30と比較的長い場
合、#4〜#7は具体的なデータ数、ロードレイテンシの場
合である。特に、ロードレイテンシが長い場合に、既存
のマルチスレッドプロセッサでは並列性抽出が困難であ
ることが分かる。本発明が解決しようとする課題は、Al
pha 21464のような大規模なハードウェア追加やMerced
のような根本的なアーキテクチャ変更を行わずに、少な
いハードウェアの追加でAlpha 21464やMerced並みの数
十命令規模の並列度抽出を可能にし、性能を向上させる
ことである。特に、単一プロセッサで複数スレッドを実
行するマルチスレッドプロセッサを改良することによ
り、数十命令規模の並列度抽出を可能にすることであ
る。
【0004】
【課題を解決するための手段】従来のマルチスレッドプ
ロセッサは複数スレッドに逐次実行順序を付与すること
により、新スレッド発行及び依存関係解析を単純化して
いる。しかしながら、この方式では図1のような単純な
プログラムであっても、並列性抽出が困難である。本発
明ではこれらの制約を効果的に解消することにより、数
十命令規模の並列度抽出を可能にする。従来のマルチス
レッドプロセッサが新スレッドに固定の逐次実行順序を
付与するのに対し、本発明ではスレッド実行中の逐次実
行順序変更を可能にする。これによって、本発明では従
来方式とは異なるスレッド分割が可能である。図13はス
レッド分割の違いの模式図である。図中の各命令の番号
は逐次実行順序である。番号の小さいもの程早く、#00,
#01,#10, #11,・・・,#71の順序となる。従来方式において
は、逐次処理を単純に時分割してスレッドを割り当てて
いる。このため、先行実行したい処理数のスレッドを生
成しなければならない。図13では8個のスレッドに分割
し、新スレッド発行命令FORKで発行している。図示して
いないがスレッド終了命令も必要となる。そして、スレ
ッド生成数に制限があれば、それが先行処理数を制限す
る。本発明では先行処理と他の処理にスレッドを割り当
て、これら2つの処理を逐次実行順序の時分割変更を行
いながら実行する。2つのスレッドで多数の先行処理が
可能である。図13のSYNCが逐次実行順序変更点である。
例えば、TH0の命令#00と#10の間及びTH1の命令#01と#11
の間に逐次実行順序変更点SYNCがあるので、逐次実行順
序変更点SYNCより前の命令#00及び#01は、TH0の命令#10
以降及びTH1の命令#11以降より逐次実行順序が早い。以
下同様にして逐次実行順序が与えられる。逐次実行順序
変更点SYNCは命令によって指定することができる。ま
た、図2のリピート制御命令によってリピート構造を定
義した場合は、リピート終了PCからリピート開始PCに戻
る時点を逐次実行順序変更点SYNCとすれば特別な命令は
不要である。図14はロードレイテンシ8の場合の従来方
式のスレッド実行状態である。本発明との比較を容易に
するためにFORK命令を毎サイクル発行できるものとす
る。最高の性能を得るためには8スレッドが同時に存在
しなければならない。レイテンシが30ならば30スレッド
必要である。図15はロードレイテンシ8の場合の本発明
のスレッド実行状態である。2スレッドのみで最高の性
能を得られる。レイテンシが30になっても2スレッドで
済む。また、逐次実行順序変更は命令に付与する内部状
態を変更するだけなので、新スレッド発行命令FORKより
容易であり、簡単なハードで毎サイクル実行できる。依
存関係にはフロー依存、逆依存、出力依存の3種類があ
る。同一のレジスタやメモリアドレスに対するアクセス
に関して、フロー依存は「読み出しは先行する全書込み
の終了後に行う」、逆依存は「書込みは先行する全読み
出しの終了後に行う」、出力依存は「書込みは先行する
全書込みの終了後に行う」という依存関係である。これ
らの規則を守れば命令の実行順序を入れ替えても、入れ
替えない場合と同一の結果が得られる。上記依存関係の
うち、逆依存および出力依存は、異なるデータの格納場
所を時分割で同一のレジスタやメモリアドレス上に確保
するために起こる依存関係である。このため、一時的な
データ格納場所を確保して、格納場所を分離することに
よって回避すれば、逆依存および出力依存があっても逐
次実行順序の遅いスレッドの実行開始は可能である。本
発明も従来のマルチスレッドプロセッサでもこの方式を
取っている。一方、フロー依存の規則は守らなければな
らない。従来のマルチスレッドプロセッサでは、命令実
行時にフロー依存の有無が判明しない場合は実行結果を
一時的なデータ格納場所に残し、フロー依存がないこと
が判明したら正規の格納場所に格納し、フロー依存があ
ることが判明したら処理をキャンセルして再実行して正
しい結果を得る。しかし、この方式では正常動作はする
が、高速動作は保証されない。本発明では、キャンセル
再実行という可能性をなくすことにより確実に高速動作
させる。マルチスレッドプロセッサがフロー依存解析に
失敗する理由は、データ定義命令デコード前にデータ使
用命令をデコードして実行してしまう場合があるからで
ある。本発明では、定義命令が必ず先にデコードされる
ように制約を加える。尚、アウトオブオーダ実行方式で
は、実行はアウトオブオーダであるがデコードはインオ
ーダであるため、この問題は生じない。その代わり実行
数以上の多数の命令をデコードして実行できる命令を選
択し実行部に供給しなければならない。図13のような本
発明のスレッド分割方式では一方のスレッドがデータを
定義し、他方がデータを使用する。そこで、データ定義
スレッドとデータ使用スレッドを定義し、データ定義ス
レッドがデータ使用スレッドのデータを使用することを
禁止する。即ちデータの流れをデータ定義スレッドから
データ使用スレッドへの一方通行とする。そして、デー
タ定義スレッドはデータ使用スレッドを追い越して良い
が、データ使用スレッドはデータ定義スレッドを追い越
してはならないと定義する。こうすると、データ定義ス
レッドはデータ使用スレッドに対するフロー依存解析が
不要なので追い越しても誤動作せず、データ使用スレッ
ドはデータ定義スレッドを追い越さないのでフロー依存
解析を誤ることはない。本発明用に図1のプログラムを
変更すると図16のようになる。命令#1,#3,及び#7によっ
て命令#9のリピート構造を、命令#11-#13によって命令#
15のリピート構造を定義している。そして、リピートタ
イプのスレッド生成命令THRDG/Rによって第2スレッドを
起動することにより、リピート終了PCからリピート開始
PCに戻る時点を逐次実行順序変更点SYNCとして2つのス
レッドのリピート構造を構成することができる。スレッ
ド生成命令THRDG/Rを発行したスレッドがデータ定義ス
レッド、スレッド生成命令THRDG/Rによって生成された
スレッドがデータ使用スレッドである。本発明を適用し
たプロセッサを図17のようなロードレイテンシ4のパイ
プライン構成と仮定する。命令アドレスステージA0及び
A1はパイプラインとして明示しないのが慣例であり、従
来例の説明では省略していたが、本発明の動作を説明す
るために明示する。この時、パイプライン動作は図18の
ようになり、実行サイクル数はN+5である。そして、レ
イテンシを30にするとN+31、LとするとN+L+1となる。す
なわち、大規模なアウトオブオーダ実行やソフトウェア
パイプラインニングを行った場合と同等な性能である。
尚、図18のパイプライン動作は、具体的な実施例を用い
て詳細に後述する。
【0005】
【発明の実施の形態】図19は本発明を適用した2スレッ
ドプロセッサの例である。命令供給部IF0、IF1、命令ア
ドレスマルチプレクサMIA、命令マルチプレクサMX0、MX
1、命令デコーダDEC0、DEC1、レジスタスコアボードR
S、レジスタモジュールRM、命令実行部EX0、EX1、メモ
リ制御部MCから成る。以下に各部の動作を示す。尚、本
発明の重要モジュールである命令供給部IF0、IF1、命令
マルチプレクサMX0、MX1、レジスタスコアボードRS、及
びレジスタモジュールRMについては、詳細動作を後述す
る。また、本実施例においては説明を容易にするために
命令供給部IF0がデータ定義スレッド、命令供給部IF1が
データ使用スレッド用に固定されているものとする。こ
の固定をはずすことは本発明の属する技術分野の通常の
技術者ならば可能である。また、命令マルチプレクサMX
0、命令デコーダDEC0、及び命令実行部EX0をパイプ0、M
X1、DEC1、及びEX1をパイプ1とする。命令供給部IF0又
はIF1は命令アドレスマルチプレクサMIAにそれぞれ命令
アドレスIA0、IA1を出力する。命令アドレスマルチプレ
クサMIAは命令アドレスIA0及びIA1の一方を命令アドレ
スIAとして選択してメモリ制御部MCへ出力する。メモリ
制御部MCは命令アドレスIAから命令をフェッチし、命令
ILとして命令供給部IF0又はIF1に出力する。命令供給部
IF0とIF1は同時に命令フェッチすることはできないが、
1度にフェッチする命令数を2命令以上にすれば命令フ
ェッチがボトルネックとなることはまれである。命令供
給部IF0はフェッチした命令のうち、先頭2命令をI00及
びI01としてそれぞれ命令マルチプレクサMX0及びMX1に
供給する。同様に命令供給部IF1はフェッチした命令の
うち、先頭2命令をI10及びI11としてそれぞれ命令マル
チプレクサMX1及びMX0に供給する。また、命令供給部IF
1はスレッドが2本走っている場合のみ動作する。スレッ
ドが1本から2本になる場合には、命令供給部IF0から命
令供給部IF1及びレジスタスコアボードRSへのスレッド
生成GT0をアサートし、命令供給部IF1が起動する。スレ
ッドが1本に戻る場合は命令供給部IF1がスレッド終了ET
H1をアサートし、停止する。命令マルチプレクサMX0
は、命令I00及びI11から命令を選択し、命令コードMI0
を命令デコーダDEC0へ、レジスタ情報MR0をレジスタス
コアボードRSへ出力する。同様に、命令マルチプレクサ
MX1は、命令I10及びI01から命令を選択し、命令コードM
I1を命令デコーダDEC1へ、レジスタ情報MR1をレジスタ
スコアボードRSへ出力する。命令デコーダDEC0は、命令
コードMI0をデコードし、命令実行部EX0へ制御情報C0
を、レジスタスコアボードRSへレジスタ情報有効VR0を
出力する。レジスタ情報有効VR0はRA0及びRB0の読出
し、RA0及びRB0への書込みのそれぞれについて有効を表
すVA0,VB0,V0,及びLV0から成る。同様に、命令デコーダ
DEC1は、命令コードMI1をデコードし、命令実行部EX1へ
制御情報C1を、レジスタスコアボードRSへレジスタ情報
有効VR1を出力する。レジスタ情報有効VR1はRA1及びRB1
の読出し、RA1及びRB1への書込みのそれぞれについて有
効を表すVA1,VB1,V1,及びLV1から成る。レジスタスコア
ボードRSはレジスタ情報MR0及びMR1、レジスタ情報有効
VR0及びVR1、並びに、スレッド生成GTH0及びスレッド終
了ETH1から、レジスタモジュール制御信号CR、並びに、
命令マルチプレクサ制御信号CMを生成し、それぞれレジ
スタモジュールRM、並びに命令マルチプレクサMX0及びM
X1へ出力する。レジスタモジュールRMは、レジスタモジ
ュール制御信号CRに従って、命令実行部EX0への入力デ
ータDRA0及びDRB0、並びに、EX1への入力データDRA1及
びDRB1を生成し、それぞれ命令実行部EX0並びにEX1へ出
力する。また、命令実行部EX0及びEX1からの演算結果DE
0及びDE1、並びに、メモリ制御部MCからのロードデータ
DL3を格納する。命令実行部EX0は、制御情報C0に従って
入力データDRA0及びDRB0を処理し、実行結果DE0をメモ
リ制御部MC及びレジスタモジュールRMに、実行結果DM0
をメモリ制御部MCに出力する。同様に、命令実行部E1
は、制御情報C1に従って入力データDRA1及びDRB1を処理
し、実行結果DE1をメモリ制御部MC及びレジスタモジュ
ールRMに、実行結果DM1をメモリ制御部MCに出力する。
メモリ制御部MCは、命令実行部EX0又はEX1で処理された
命令がメモリアクセス命令であった場合に実行結果DE0
又はDE1を使用してメモリアクセスを行う。この時、ア
ドレスAを出力し、データDをロードまたはストアする。
更に、メモリアクセスがロードであった場合は、ロード
データDL3をレジスタモジュールRMに出力する。図17の
パイプラインに対応させると、命令供給部IF0及びIF1の
命令アドレス系動作が命令アドレスステージA0及びB1
に、命令供給部IF0及びIF1の命令供給系動作、並びに、
命令マルチプレクサMX0及びMX1の動作が命令フェッチス
テージI0及びI1に、命令デコーダDEC0及びDEC1の動作が
命令デコードステージD0及びD1に、命令実行部EX0及びE
X1の動作が命令実行ステージE0及びE1に、メモリ制御部
MCの動作がロードステージL1、L2、及び、L3に対応す
る。レジスタスコアボードRSは命令デコード、実行、ロ
ードの各ステージの情報を保持し更新している。レジス
タモジュールRMは命令デコードステージD0及びD1での読
出しデータ供給と、命令実行ステージE0及びE1、並び
に、ロードステージL3の後のデータ書き戻し時に動作す
る。図20は図19のプロセッサの命令供給部IFj (j=0,1)
の例である。通常動作時は、+4インクリメンタによって
プログラムカウンタPCjから次プログラムカウンタPCj+4
を生成し、マルチプレクサMXj及びMRjによって命令アド
レスIAjとして選択して出力し、プログラムカウンタPCj
にも格納する。この処理を繰り返すことにより、命令ア
ドレスIAjを4づつインクリメントしていき、連続アドレ
スの命令のフェッチを要求する。命令アドレスIAjから
フェッチされた命令ILは命令キューIQjn(nはエントリ
番号)に格納する。命令を格納する時は常にプログラム
カウンタPCjnにPCjを、後述するリピート回数RCjを格納
し、有効ビットIVjnをアサートする。分岐命令デコーダ
BDECjは命令キューIQjnから分岐系命令(分岐,THRDG,TH
RDE,LDRS, LDRE,LDRC等)を取り出してデコードし、オ
フセットOFSj及びスレッド生成信号GTH0又はスレッド終
了ETH1を出力する。そして、加算器ADjにおいてプログ
ラムカウンタPCjnとオフセットOFSjを加算する。命令が
分岐命令又はスレッド生成命令THRDGの場合は、命令ア
ドレスマルチプレクサMXj及びMRjは加算器ADj出力を分
岐先アドレスとして選択し、命令アドレスIAjへ出力
し、プログラムカウンタPCjにも格納する。そして、命
令アドレスIAjからフェッチされた命令ILを分岐命令な
らば命令キューIQjnに、スレッド生成命令THRDGならばI
F1の命令キューIQ1nに格納する。命令供給部IF0は命令
がスレッド生成命令THRDGの場合は更にスレッド生成GTH
0をアサートし、命令供給部IF1を起動する。命令供給部
IF1は命令がスレッド終了命令ETHRDの場合にスレッド終
了ETH1をアサートして、停止する。命令が図2のLDRS命
令の場合は加算器ADj出力をリピート開始アドレスRSjに
格納する。命令が図2のLDRE命令の場合は加算器ADj出力
をリピート終了アドレスREjに格納する。命令が図2のLD
RC命令の場合は、オフセットOFSjをリピート回数として
リピート回数マルチプレクサMCjで選択し、リピート回
数RCjに格納する。リピート回数は1回以上とし、0回を
指定しても1回実行してから抜けるものとする。同時
に、リピート命令数用比較器CRjによって、リピート開
始アドレスRSjとリピート終了アドレスREjを比較し、一
致した場合は1命令リピートであるから、その1命令を命
令キューIQjnに保持し続けて、命令フェッチを抑止す
る。リピート機構不使用時はリピート回数RCjを0にして
おく。この時、回数比較器CCjにはリピート回数RCjの最
下位ビット以外が入力されて0と比較される。比較結果
は一致なので、リピート終了検出用比較器CEj出力がAND
ゲートによってマスクされ、命令アドレスマルチプレク
サMRjは、リピート終了検出用比較器CEjへの入力PCj及
びREjの値に依らずに命令アドレスマルチプレクサMXj出
力を選択し、リピート処理は行われない。リピート開始
アドレスRSj及びリピート終了アドレスREjにアドレスを
格納し、リピート回数RCjに2以上の値を格納するとリピ
ート機構が動作する。リピート終了検出用比較器CEjに
おいて常時プログラムカウンタPCjとリピート終了アド
レスREjが比較され、一致信号がANDゲートに出力され
る。プログラムカウンタPCjとリピート終了アドレスREj
が一致すると一致信号が1となる。この時、リピート回
数RCjが2以上であれば、リピート終了検出用比較器CEj
出力が0となるので、ANDゲート出力が1となり、命令ア
ドレスマルチプレクサMRjは、リピート開始アドレスRSj
を選択し、命令アドレスIAjとして出力する。この結
果、命令フェッチはリピート開始アドレスに戻る。上記
動作と同時に、リピート回数RCjがデクリメントされ、
その結果がリピート回数マルチプレクサMCjで選択さ
れ、リピート回数RCjの入力となる。リピート回数RCjは
プログラムカウンタPCjとリピート終了アドレスREjが一
致し、かつリピート回数RCjが0でなければ更新する。命
令キューIQjnではキュー内の各命令に対応するリピート
回数RCjをスレッド同期番号IDjnとして付与する。リピ
ート回数RCjが1になったら、回数比較器CCj出力が1とな
ってリピート処理が行われなくなり、リピート回数RCj
が0に更新されて終了する。1命令リピートの場合は、命
令を命令キューIQjnに保持し続け、スレッド同期番号ID
jnのみ更新する。そして、リピート終了時に通常の命令
キューIQnj動作に戻る。尚、スレッド同期番号IDjnはリ
ピート回数RCjの下位数ビットにすることも可能であ
る。この場合、データ定義スレッドが先行し過ぎるとリ
ピート回数RC0とRC1とが異なるにもかかわらずスレッド
同期番号ID0nとID1m(mはエントリ番号)が一致する可
能性がある。ような場合はデータ定義スレッドの命令フ
ェッチを抑止する。即ち、スレッド同期番号ID0nとID1m
が一致し、かつ、リピート回数RC0とRC1とが異なる場
合、IF0は命令フェッチしない。図21は図19のプロセッ
サの命令マルチプレクサMj(j = 0,1)の例である。命
令Ix(x = j0,k1,j)はオペコードOPx、レジスタフィー
ルドRAx、RBx、スレッド同期番号IDx、及び命令有効IVx
から成る。命令マルチプレクサMjは2つの命令Ij0及びI
k1({j,k} = {0,1},{1,0})から命令Ij0が実行可能なら
ば命令Ij0を、そうでなければ命令Ik1を命令Ijとして選
択する。そして、選択したスレッドをスレッド番号THj
として出力する。即ち、命令Ij0を選択すればTHj = j、
命令Ik1を選択すればTHj = kとする。命令Ijのうち、オ
ペコードOPj及び命令有効IVjは命令コードMIjとして命
令デコーダDECjへ、レジスタフィールドRAj、RBj、スレ
ッド同期番号IDj、及びスレッド番号THjはレジスタ情報
MRjとしてレジスタスコアボードRSへ出力する。実行可
能性は先行実行されている命令とのデータ依存関係によ
って判断する。図17のようにロードレイテンシ4のパイ
プライン構成では、先行3命令とのフロー依存によって
実行不能になる可能性がある。図21のTHj生成論理がこ
のフロー依存判定と命令の有効性判定を行っている。本
論理は後述するレジスタスコアボードRSと同様な論理で
ある。レジスタスコアボードRSからスコアボード情報CM
を受け取って判定を行う。まず、命令コードOPj0がレジ
スタフィールドRAj0及びRBj0をレジスタ読出しに使用す
るかをチェックし、読出し有効MVAj及びMVBjを生成す
る。readRA及びreadRBはこのための関数であり、命令の
コード割付が規則的ならば命令コードOPj0の一部をチェ
ックするだけで高速に判定可能である。また、式を統一
するために、書き戻し可能Ry (y = L,L0,L1) のうち、
本来は存在しないRLを、RL=0と定義する。この時、フロ
ー依存検出MFjyは図21のようになる。フロー依存は、同
一スレッド、同一スレッド同期番号、又はレジスタファ
イルへの書き戻し可能な場合に、有効な読出しと書込み
のレジスタ番号が一致したら発生する。そして、フロー
依存が発生せず命令が有効であれば、選択有効MVjをア
サートし、該MVjに基づいてIj及びTHjを選択する。更
に、THj生成論理はデータ使用スレッドがデータ定義ス
レッドを追い越さないことを保証する。これは、スレッ
ド同期番号IDj0とIDk1とが一致した場合にTHj=0とする
ことにより実現する。即ち、スレッド同期番号が一致し
た場合はデータ定義スレッドを選択する。尚、データ依
存関係判定には時間がかかるため、メモリ制御部MCから
のフェッチ命令を命令キューIQjnにラッチせずに命令マ
ルチプレクサMjに直接供給した場合は、データ依存関係
判定は行わず、実行可能であると予測して供給する。通
常、直接供給する場合は分岐先の先頭命令であり実行で
きる可能性が高い。上記選択方式により、命令I00及びI
10の実行可能性に応じて図22のように命令が選択され
る。#1の場合、命令I00及びI10が選択され双方とも実行
可能である。#2の場合、命令I10が実行不能なので命令I
11も実行不能である。一方、選択された命令I00及びI01
のうち、I00は実行可能でありI01の実行可能性は不明で
ある。即ち、実行可能な命令又は実行可能性のある命令
が選択され、実行不能な命令は選択されない。#3の場合
も同様である。#4の場合、命令I00及びI10が実行不能な
ので、4命令全てが実行不能でありどの命令を選択して
も実行しない。図23はレジスタスコアボードRSの例であ
る。従来プロセッサ同様、パイプラインステージに対応
するレジスタファイルへの書込み情報を保持して新規読
出し情報と比較し、レジスタに関するフロー依存、逆依
存、出力依存の3種類の依存関係を検出する。また、逆
依存又は出力依存によって一時的に抑止されているレジ
スタファイルへの書込み情報を保持して新規読出し情報
と比較し、上記3種類の依存関係を検出する。また、逆
依存又は出力依存による書込みの可否を判定して書込み
指示を出す。詳細は下記の通りである。スコアボード先
頭セルSBL0は、マルチプレクサMLがレジスタ情報MR0又
はMR1から選択したロードデータ書込み情報RLをロード
ステージL0の制御情報として保持し、該保持データとレ
ジスタ情報MR0及びMR1とからバイパス制御情報BPL0y (y
= RA0,RB0,RA1, RB1) 及び次ステージ制御情報NL0を
生成して出力する。同様に、スコアボード先頭セルSBE0
及びSBE1は、それぞれレジスタ情報MR0及びMR1を演算ス
テージE0及びE1の制御情報として保持し、該保持データ
とレジスタ情報MR0及びMR1とからバイパス制御情報BPE0
y及びBPE1y、並びに次ステージ制御情報NE0及びNE1を生
成して出力する。また、スコアボード非先頭セルSBL1,S
BL2,及びSBL3は、それぞれ次ステージ制御情報NL0,NL1,
及びNL2をロードステージL1,L2,及びL3の制御情報とし
て保持し、該保持データとレジスタ情報MR0及びMR1とか
らバイパス制御情報BPL1y,BPL2y,及びBPL3y、並びに次
ステージ制御情報NL1,NL2,及びNL3を生成して出力す
る。更に、スコアボード非先頭セルSBTB0,SBTB1,及びSB
TB2は、それぞれスコアボード制御部CTLによって選択さ
れた一時バッファ制御情報NM0,NM1,及びNM2を一時バッ
ファ制御情報として保持し、該保持データとレジスタ情
報MR0及びMR1とからバイパス制御情報BPTB0y,BPTB1y,及
びBPTB2y、並びに次サイクル制御情報NTB0,NTB1,及びNT
B2を生成して出力する。また、スコアボード制御部CTL
はフロー依存及び一時バッファフルによるストール検
出、レジスタファイルRF及び一時バッファTBへの書込み
制御を行う。また、スコアボードセルSBL0,SBL1,及びSB
L2への入力信号を、スコアボード情報CM = {RL,THL,ID
L,VL,NL0,NL1} として命令マルチプレクサMX0及びMX1へ
出力する。以下、マルチプレクサML、スコアボード先頭
セルSBL0,SBE0,及びSBE1、スコアボード非先頭セルSBL
1,SBL2,SBL3,SBTB0,SBTB1,及びSBTB2、並びに、スコア
ボード制御部CTLの詳細を図24から図27によって説明す
る。図24はマルチプレクサMLの例である。レジスタ情報
MR0又はMR1からロード命令の書込み情報を選択する。双
方ともロード命令の場合は先行命令の情報を選択する。
双方ともロード命令でない場合はどちらを選択しても良
い。したがって、先行命令がロード命令ならばそのレジ
スタ情報を、ロード命令でなければもう一方のレジスタ
情報を選択する。前述のようにレジスタ情報MRj(j =
0,1)はレジスタフィールドRAj、RBj、スレッド同期番
号IDj、及びスレッド番号THjから成る。後述のようにス
レッド番号TH0が0ならば命令I0が、1ならば命令I1が先
行命令である。図24のレジスタ情報MR0の選択条件式の
第1項は、TH0==0かつ書込み信号LV0アサートなので、命
令I0が先行命令かつロード命令である。一方、第2項はT
H0==1かつ書込み信号LV1ネゲートなので、命令I1が先行
命令かつ非ロード命令である。どちらを選択したかを示
すロードパイプSBLをスコアボード制御部CTLに出力す
る。マルチプレクサMLの説明時に説明したようにスレッ
ド番号TH0が0ならば命令I0が、1ならば命令I1が先行命
令である。また、ストール時には命令が実行されないの
で書込み有効VLをストールSTL0又はSTL1で無効化する。
スレッド番号TH0が0ならば、命令マルチプレクサMX0の
選択命令組合せは図22の#1又は#2である。#1ならば命令
I0は命令供給部IF0から供給されたデータ定義スレッド
の命令I00であり、命令I1は命令供給部IF1から供給され
たデータ使用スレッドの命令I10である。したがって、
命令I00を命令I10より先に実行すれば、本発明のデータ
定義スレッドとデータ使用スレッドとの実行順序ルール
に違反しない。#2ならば命令I0とI1は命令I00とI01であ
り、逐次実行順序はI0の方が先である。一方、スレッド
番号TH0が1ならば、命令マルチプレクサMX0の選択命令
組合せは図22の#3又は#4である。#3ならば命令I0とI1は
命令I11とI10であり、逐次実行順序はI1の方が先であ
る。#4は命令I0とI1の双方とも実行不能である。以上よ
り、スレッド番号TH0が0ならば命令I0が、1ならば命令I
1が先行命令である。図25はスコアボード先頭セルSBx
(x = L0,E0,E1)の例である。入力Rs,THt,IDt,及びVt&
~u({s,t,u} = {L,L,1},{A0,0,STL0},{A1,1,STL1})をx
ステージ書込み情報である書込みレジスタ番号Wx、書込
みスレッド番号THx、書込みスレッド同期番号IDx、及び
書込み有効Vxとして保持し、これらと、レジスタ情報MR
0及びMR1、レジスタ書込み信号V0及びL0、並びに、V1及
びL1とから、バイパス制御情報BPxy (y = RA0,RB0,RA1,
RB1) 及び次ステージ書込み制御情報Nx = {Wx,THx,IDx,
BNx,Vx} を生成して出力する。入力Vtをuでマスクする
のはストール時には命令が実行されないので書込み情報
を無効化するためである。図25の論理部SBxLの第1式が
バイパス制御情報BPxyの定義式である。バイパス制御情
報BPxyは、xステージの書込みが有効であり、かつ、書
込みレジスタ番号Wxとレジスタ読出し番号yとが一致
し、かつ、書込みと読出しが同一スレッド番号又は同一
スレッド同期番号である場合にアサートする。同一スレ
ッド番号の場合はスレッド内のバイパス制御であり従来
のプロセッサにおいても一般的に行われている。一方、
同一スレッド同期番号の場合は、データ定義スレッドか
らデータ使用スレッドへのバイパス制御である。逆方向
のデータ使用スレッドからデータ定義スレッドへのバイ
パス制御が発生しないのは、データ使用スレッドがデー
タ定義スレッドを追い越さないように、命令マルチプレ
クサMjが構成されているからである。次ステージ書込み
制御情報Nxのうち、書込みレジスタ番号Wx、書込みスレ
ッド番号THx、書込みスレッド同期番号IDx、及び書込み
有効Vxは保持した情報をそのまま出力する。書き戻しBN
xは逆依存及び出力依存が解消されレジスタファイルへ
の書き戻しが可能であることを示す。本実施例ではデー
タ使用スレッドのスレッド同期番号が書込み制御情報の
スレッド同期番号と一致したらアサートし、書き戻すま
でアサートし続ける。図25の論理部SBxLの第2式が書き
戻しBNxの定義式である。図26はスコアボード非先頭セ
ルSBx(x = L1,L2,L3,TB0,TB1,TB2)の例である。入力
信号Wt,THt,IDt,BNt及びVt(t = L0,L1,L2,M0,M1,M2)
をxステージ書込み情報である書込みレジスタ番号Wx、
書込みスレッド番号THx、書込みスレッド同期番号IDx、
書き戻しBx、及び書込み有効Vxとして保持し、これら
と、レジスタ情報MR0及びMR1、レジスタ書込み信号V0及
びL0、並びに、V1及びL1とから、バイパス制御情報BPxy
(y = RA0,RB0,RA1, RB1) 及び次ステージ書込み制御情
報Nx = {Wx,THx,IDx,BNx,Vx} を生成して出力する。図2
6の論理部SBxLの第1式がバイパス制御情報BPxyの定義式
である。バイパス制御情報BPxyは、xステージの書込み
が有効であり、かつ、書込みレジスタ番号Wxとレジスタ
読出し番号yとが一致し、かつ、書込みと読出しが同一
スレッド番号、同一スレッド同期番号、又は書き戻しア
サート中である場合にアサートする。図25との違いは書
き戻しBxアサート中という条件が加わっていることであ
る。この条件によって、書き戻しの完了していないデー
タをレジスタ値の代わりにバイパスして供給する。図26
の論理部SBxLの第2式が書き戻しBNxの定義式である。図
25との違いは書き戻しBxアサート中という条件が加わっ
ていることである。この条件によって、書き戻しBxは一
度アサートされると書き戻されるまでアサートされ続け
る。図27は図23のスコアボード制御論理CTLの例であ
る。フロー依存によるストールは以下のように検出す
る。ロードレイテンシが4であることにより、書込み制
御情報NLz (z = 0,1,2)に対応するデータはまだ有効で
はない。したがって、バイパス制御BPzy (y = A0,A1,B
0,B1)がアサートされると有効でないデータのバイパス
が必要であり、実現不可能である。このため、これらの
信号がアサートされた場合はデータが有効になるまでバ
イパスデータを使用する命令の実行開始を待たせる必要
がある。このためにバイパス制御BPzyを集めたストール
STL0及びSTL1を出力する。この際、レジスタ情報有効VR
0及びVR1のうち読出し有効VA0,VB0,VA1及びVB1でバイパ
ス制御BPzyをマスクする。更に、先行命令がストールす
ると逐次実行順序維持のために後行命令もストールす
る。マルチプレクサMLの説明時に説明したようにスレッ
ド番号TH0が0ならば命令I0が、1ならば命令I1が先行命
令である。また、先行、後行双方の命令がデータロード
命令の場合、後攻命令をストールする。マルチプレクサ
MLで選ばれなかったパイプ、即ちロードパイプSBLの指
さないパイプかつデータロード用書込みレジスタRB0又
はRB1への書込み有効LV0又はLV1がアサートされた場合
はストールする。以上より、ストール信号STL0及びSTL1
は図27の第1式から第4式によって定義される。単独スレ
ッドSTHはスレッド生成GTH0からスレッド終了ETH1の間
ネゲートされる。したがって、生成式は図27の第5式の
ようになる。書込みデータはパイプラインステージE0,E
1,又はL3終了時に有効となる。これに対応するレジスタ
スコアボードRSの書込み情報はNE0,NE1,又はNL3であ
る。また、一時バッファに保持されているデータも有効
である。有効なデータは逆依存又は出力依存が解消し次
第、レジスタファイルRFに書き戻す。スレッド番号THx
(x= E0,E1,L3,TB0,TB1,TB2) が1の場合はデータ使用ス
レッドなので、逆依存又は出力依存は発生せず、有効な
データは常に書込んでよい。一方、スレッド番号THxが0
の場合は、逆依存又は出力依存が解消して書き戻しBxが
アサートされたら書き戻す。更に、単独スレッドSTHア
サート中は逆依存又は出力依存は発生しない。以上よ
り、書込み指示Sxは図27の第6式のようになる。有効な
データが逆依存又は出力依存によって書込み不能な場合
は、一時バッファ制御Cxをアサートし、一時バッファTB
への書込みを行う。一時バッファ制御Cxは図27の第7式
のようになる。一時バッファTBは3エントリであるた
め、6本の一時バッファ制御Cxのうち4本以上アサートさ
れた場合は一時バッファTBへの書込みが不可能である。
この場合は一時バッファ起因のストール信号STLTBをア
サートし、パイプラインの進行を止める。3本以下の場
合は書込みが可能である。一時バッファTBへの書込みは
データ定義スレッドからのみ行われるので、書込まれる
データには逐次実行順序がある。この順序が常に、早い
方からTB2,TB1,TB0となり、かつ、一時バッファTBの1エ
ントリを使用する場合はTB0を、2エントリ使用する場合
はTB0,TB1を使用するように、一時バッファTBへの書込
みデータを選択する。この方針によってデータ選択M0,M
1,M2を生成すると図27の表のようになる。尚、パイプラ
インステージE0,E1,又はL3からの書込みデータを含めた
逐次実行順序は早い方からTB2,TB1,TB0,L3,E0,E1であ
る。そして、データ選択M0,M1,M2によって次ステージ書
込み制御情報Nt (t = M0,M1,M2) をNxから選択する。図
27の最後の3式が選択式である。図28は図19のプロセッ
サのレジスタモジュールRMの例である。レジスタファイ
ルRF、一時バッファTB、及び読出しデータマルチプレク
サMy (y = A0,A1,B0,B1)から成る。レジスタ制御信号CR
及び出力データDE0,DE1,及びDL3を入力とし、読出しデ
ータDRy (y = A0,A1,B0,B1)を出力とする。レジスタ制
御信号CRはレジスタ読出し番号Ry、バイパス制御BPxy
(x = E0,E1,L3,TB0,TB1,TB2)、レジスタ書込み番号Wx、
レジスタ書込み制御信号Sx、一時バッファ書込みデータ
選択Mz (z = 0,1,2)、及びスレッド番号TH0から成る。
レジスタファイルRFは16エントリ、4読出し、6書込みで
ある。書込み制御信号SxがアサートされるとデータDxを
レジスタファイルRFのWx番に書込む。また、レジスタフ
ァイルRFのRy番をレジスタ読出しデータRDyとして読出
す。一時バッファTBはバイパス制御BPTBzy、データ選択
Mz、並びに出力データDE0,DE1,及びDL3を入力とし、一
時バッファ保持データDTBz及び一時バッファ読出しデー
タTByを出力する。また、書込みデータ選択Mzに従って
保持データDTBzを更新する。詳細は図29を用いて説明す
る。一時バッファ保持データDTBzは常に出力している。
書込みデータDNTBzの選択論理は一時バッファマルチプ
レクサTBMの最初の3式である。選択信号Mzに従って選択
する。読出しデータTByの選択論理は一時バッファマル
チプレクサTBMの最後の式である。バイパス制御BPTBzy
に従って選択する。尚、複数のバイパス制御BPzyがアサ
ートされた場合、最も新しいデータを選択する。即ち、
逐次実行順序の最も遅いものを選択する。読出しデータ
マルチプレクサMyはバイパス制御BPxy、スレッド番号TH
0、レジスタ読出しデータRDy、一時バッファ読出しデー
タTBy、並びに、出力データDE0,DE1,及びDL3を入力と
し、読出しデータDRy (y = A0,A1,B0,B1)を出力する。
詳細は図30を用いて説明する。複数のバイパス制御BPxy
がアサートされた場合最も新しいデータを選択する。出
力データDE0とDE1はスレッド番号TH0が0ならばDE1が新
しく、1ならばDE0が新しい。この結果、選択論理は図30
の左側の囲いの中の論理となる。この時、一時バッファ
バイパス制御BPTByは図30の右側の囲いの中の論理のよ
うに3個のバイパス制御BPTBzyの論理和となる。さて、
本実施例によって実際に図16のプログラムを実行すると
以下のような動作となる。まず、時刻t0では、命令#1及
び#2の命令アドレスステージA0を行う。命令供給部IF0
が命令#1のアドレスを命令アドレスIA0に載せ、メモリ
制御部MCにフェッチ要求を出す。同時に命令アドレスIA
0をプログラムカウンタPC0にラッチする。そして、命令
アドレスマルチプレクサMIAがIAとしてIA0を選択し、メ
モリ制御部MCへ出力する。次サイクル時刻t1では、命令
#3及び#4の命令アドレスステージA0を行う。プログラム
カウンタPC0に4を加えて命令アドレスIA0に載せマルチ
プレクサMIA経由でメモリ制御部MCへ出力し、フェッチ
要求を出す。同時に命令アドレスIA0をプログラムカウ
ンタPC0にラッチする。更に、命令#1及び#2の命令フェ
ッチステージI0を行う。メモリ供給部MCは命令#1のアド
レスから2命令、即ち命令#1及び#2をフェッチし、フェ
ッチ命令ILとして命令供給部IF0へ出力する。命令供給
部IF0はこれを命令キューIQ0nに格納すると同時に命令I
00及びI01として命令マルチプレクサMX0及びMX1に供給
する。この時、リピートカウンタRC0はリピート機構不
使用時の0であるからスレッド同期番号ID00及びID01と
して0を付与する。命令マルチプレクサMX0及びMX1はそ
れぞれ命令I00及びI01を選択して、命令コードMI0及びM
I1、並びに、レジスタ情報MR0及びMR1を生成し、命令デ
コーダDEC0及びDEC1、並びに、レジスタスコアボードRS
へ出力する。即ち、命令#1及び#2はそれぞれパイプ0及
びパイプ1に供給される。尚、命令#1は分岐系命令であ
るが、命令フェッチ直後に供給する場合は分岐系命令デ
コーダBDEC0の解析前に供給するため、命令デコーダDEC
0に供給し、命令デコーダDEC0で処理をノーオペレーシ
ョン(NOP)化する。時刻t2では、命令#5、#6及び#9の
命令アドレスステージA0を行う。まず、命令供給部IF0
のプログラムカウンタPC0に4を加えて更新し、命令#5及
び#6のフェッチ要求を出す。また、命令#9はリピート開
始かつ終了命令であるため、命令#1、#3、及び#5によっ
てリピートセットアップを行う。分岐系命令デコーダBD
EC0が命令#1のLDRE命令をデコードし、プログラムカウ
ンタPC0と命令#9へのオフセットOFS0を加算して命令#9
のアドレスを生成し、リピート終了アドレスRE0に格納
する。また、時刻t1と同様に命令#3及び#4の命令フェッ
チステージI0を行う。更に、命令#1及び#2の命令デコー
ドステージD0及びD1動作として以下を行う。命令デコー
ダDEC0は命令#1が分岐系命令であるため処理をNOP化す
る。命令デコーダDEC1は命令#2をデコードして、制御情
報C1を出力し、レジスタ情報有効VR1を出力する。命令#
2は定数x_addrをr0に格納する命令である。通常、アド
レスは32ビットあるが、ここではx_addr及び後述するy_
addrは命令内の即値で表現できる小さなアドレスである
ものとする。そこで、即値x_addrを制御情報C1に載せて
命令実行部EX1に供給する。また、RA1をr0への書込み制
御に使用するのでレジスタ情報有効VR1のうちV1をアサ
ートする。レジスタスコアボードRSでは、スコアボード
セルSBE1に命令#2の書込み情報を格納する。時刻t3で
は、命令#7、#8及び#9の命令アドレスステージA0動作と
して以下を行う。まず、時刻t2同様、命令#7及び#8のフ
ェッチ要求を出す。分岐系命令デコーダBDEC0では命令#
3のLDRS命令をデコードし、プログラムカウンタPC0と命
令#9へのオフセットOFS0を加算して命令#9のアドレスを
生成し、リピート開始アドレスRS0に格納する。同時
に、リピート開始アドレスRS0とリピート終了アドレスR
E0をリピートアドレス比較器CR0で比較し、どちらも命
令#9を指していて一致し、1命令リピートであるので、
この一致情報を記憶する。また、時刻t1と同様に命令#5
及び#6の命令フェッチステージI0を行う。更に、命令#3
及び#4の命令デコードステージD0及びD1動作として以下
を行う。命令デコーダDEC0は命令#3が分岐系命令である
ため処理をNOP化する。命令デコーダDEC1は命令#4が定
数y_addrをr1に格納する命令なので、即値y_addrを制御
情報C1に載せて命令実行部EX1に供給する。また、RA1を
r1への書込み制御に使用するのでレジスタ情報有効VR1
のうちV1をアサートする。また、命令#2の命令実行ステ
ージE1を行う。命令実行部EX1は制御情報C1に従って命
令#2を実行する。即ち、即値x_addrを実行結果DE1に出
力する。レジスタスコアボードRSは、スコアボードセル
SBE1から命令#2の書込み情報を出力し、制御部CTLにお
いて単独スレッドSTHかつ書込み有効VE1であるから、レ
ジスタ書込み信号SE1をアサートする。この結果、レジ
スタモジュールRMのレジスタファイルRFに実行結果DE1
である即値x_addrが書込みレジスタ番号WE1によって指
定されるr0に書込まれる。また、スコアボードセルSBE1
に命令#4の書込み情報を格納する。時刻t4では、命令#1
1及び#12の命令アドレスステージA0及びA1動作として以
下を行う。命令供給部IF0の分岐系命令デコーダBDEC0で
は命令#5のTHRDG/R命令をデコードし、PC0に命令#11へ
のオフセットOFS0を加えて新スレッドの先頭アドレス、
即ち、命令#11のアドレスを生成して命令アドレスIA0に
載せ、メモリ制御部MCに命令フェッチ要求を出す。ま
た、時刻t1と同様に命令#7及び#8命令フェッチステージ
I0を行う。また、命令デコードステージD0及びD1動作と
して以下を行う。命令デコーダDEC0は命令#5が分岐系命
令であるため処理をNOP化する。命令デコーダDEC1は命
令#6をデコードして、命令#2同様、即値0を制御情報C1
に載せて命令実行部EX1に供給し、レジスタ情報有効VR1
のうちV1をアサートする。また、時刻t3の命令#2と同様
に命令#4の命令実行ステージE1を行う。レジスタスコア
ボードRS及びレジスタモジュールRMでは、時刻t3の命令
#2及び#4同様、命令#4及び#6の処理を行う。時刻t5で
は、命令#9及び#10の命令アドレスステージA0動作とし
て以下を行う。まず、時刻t2同様、命令#9及び#10のフ
ェッチ要求を出す。命令供給部IF0の分岐系命令デコー
ダBDEC0では命令#7のLDRC命令をデコードし、OFS0にリ
ピート回数8を載せ、リピート回数RC0に格納する。これ
でリピートセットアップ完了である。また、命令#11及
び#12の命令フェッチステージI1を行う。メモリ制御部M
Cは命令#11及び#12をフェッチし、命令供給部IF1はこれ
にスレッド同期番号ID1nとして0を付加して命令キューI
Q1nに保持すると共に、命令I10及びI11として命令マル
チプレクサMX1及びMX0に供給する。しかし、命令マルチ
プレクサMX1及びMX0は命令供給部IF0側のデータ定義ス
レッドと命令供給部IF1側のデータ使用スレッドのスレ
ッド同期番号がどちらも0で一致しているため、図21の
選択論理によりデータ定義スレッドである命令供給部IF
0側を選択する。この時、命令キューIQ0nは空なので、
命令デコーダDEC0及びDEC1には無効な命令が供給され
る。また、命令#7及び#8の命令デコードステージD0及び
D1動作として以下を行う。命令デコーダDEC0は命令#7が
分岐系命令であるため処理をNOP化する。命令デコーダD
EC1は命令#8をデコードしNOP制御を出力する。更に、時
刻t3の命令#2と同様に命令#6の命令実行ステージE1を行
う。レジスタスコアボードRS及びレジスタモジュールRM
では、時刻t3の#4同様、命令#6の処理を行う。時刻t6で
は、命令#9の命令アドレスステージA0を行う。命令供給
部IF0において、プログラムカウンタPC0とリピート終了
アドレスRE0が一致し比較器CE0の出力が1となり、リピ
ート回数RC0は8なので比較器CC0出力は0となり、AND出
力が1となるので、マルチプレクサMR0がリピート開始ア
ドレスRS0を選択し、これを命令フェッチアドレスIA0と
して出力してプログラムカウンタPC0に格納する。ま
た、リピート回数RC0をデクリメントして7とし、マルチ
プレクサMC0で選択してリピート回数RC0に格納する。更
に、1命令リピートなので命令キューIQ0nに命令#9以降
の保持を指示する。また、命令#13、#14及び#15の命令
アドレスステージA1を行う。命令供給部IF1のプログラ
ムカウンタPC1に4を加えて更新し、命令#13及び#14のフ
ェッチ要求を出す。分岐系命令デコーダBDEC1では命令#
11のLDRE命令をデコードし、命令#5と同様に命令#15の
アドレスをリピート終了アドレスRE1に格納する。ま
た、時刻t1と同様に命令#9及び#10の命令フェッチステ
ージI0を行う。この時、スレッド同期番号ID0として0を
付加する。尚、リピート動作の初回はリピート終了アド
レスRE0に達した時に判明するので、スレッド同期番号
は8ではなくリピート範囲到達前と同じ0とする。また、
命令保持指示が出ているので供給後も命令キューIQ0nに
命令#9及び#10を保持する。尚、命令#11及び#12が命令
キューIQ1nに保持されていて、分岐系命令デコーダBDEC
1が命令#11及び#12を解析して、共に分岐系命令である
ことを判断する時間があり、他に命令がないので、命令
キューIQ1nには命令デコーダに供給する命令がなく、命
令フェッチステージI1で処理される命令はない。時刻t7
では、命令#9及び#15の命令アドレスステージA0及びA1
を行う。命令供給部IF0は前サイクルと同様にリピート
動作しリピート回数RC0を6にする。命令供給部IF1の分
岐系命令デコーダBDEC1では命令#12のLDRS命令をデコー
ドし、命令#3と同様に命令#15のアドレスをリピート開
始アドレスRS1に格納し、1命令リピート制御のためのア
ドレス一致情報を記憶する。また、命令#9、#13及び#14
の命令フェッチステージI0及びI1を行う。命令供給部IF
0は命令キューIQ0nに保持している命令#9にスレッド同
期番号ID00として7を付けて、命令I00として命令マルチ
プレクサMX0に供給する。尚、本動作は上記デクリメン
トと同時にデクリメント前の値を使用して行われる。こ
のため付加される値は7である。リピート動作により命
令#9の次命令は命令#10ではないので、命令I01として供
給する命令はなく、命令I01の命令有効IV01はネゲート
する。メモリ制御部MCは命令#13及び#14をフェッチし、
命令供給部IF1はこれにスレッド同期番号ID1nとして0を
付加して命令キューIQ1nに格納すると同時に、命令I10
及びI11として命令マルチプレクサMX1及びMX0に供給す
る。この時、命令I00として供給される命令#9はレジス
タ読出しを伴うが、先行するデータロード命令がないた
め、スコアボード情報CMの書込み有効VL, VL0,及びVL1
は全てネゲートされており、フロー依存は発生しない。
また、命令#13はフェッチ直後であるため実行可能性判
定をしない。この結果、命令マルチプレクサMX1及びMX0
は命令I00及びI10、即ち命令#9及び#13を選択し命令デ
コーダDEC0及びDEC1に供給する。また、命令#9の命令デ
コードステージD0を行う。命令デコーダDEC0は命令#9が
レジスタr0の指すアドレスからデータロードしてレジス
タr2に格納し、レジスタr0をインクリメントする命令な
ので、その制御情報C0を出力する。また、RA0をr0の読
出し及び書込み制御に、RB0をr2への書込み制御に使用
するのでレジスタ情報有効VR1のうちVA0、V0、及びLV0
をアサートする。レジスタスコアボードRSは、レジスタ
読出し番号RA0及び、バイパス制御BPxy (x= E0,E1, L
0,L1,L2,L3,TB0,TB1,TB2, y = A0,B0,A1,B1) を出力す
る。図18のパイプライン動作の下に各時刻における各ス
コアボードセルの書込み及び読出しのレジスタ番号及び
スレッド同期番号を付加した。ハッチングをかけた部分
がスレッド1(データ使用スレッド)、他がスレッド0
(データ定義スレッド)の情報である。時刻t7では有効
な書込み情報がないのでバイパス制御BPxyは全てネゲー
トされる。また、スコアボードセルSBE0及びSBL0に命令
#9のr0及びr2への書込み情報を格納する。スコアボード
セルSBL0入力の選択は、図24のような論理であり、スレ
ッド番号TH0==0かつレジスタ情報有効LV0がアサートな
ので、パイプ0側の命令#9の情報が選択される。時刻t8
では、命令#9、#15及び#16の命令アドレスステージA0及
びA1を行う。命令供給部IF0は前サイクルと同様にリピ
ート動作しリピート回数RC0を5にする。命令供給部IF1
のプログラムカウンタPC1に4を加えて更新し、命令#15
及び#16のフェッチ要求を出す。分岐系命令デコーダBDE
C1では命令#13のLDRC命令をデコードし、命令#7と同様
にリピート回数RC1に8を格納する。また、命令#9及び#1
4の命令フェッチステージI0及びI1を行う。命令供給部I
F0は時刻t7同様、命令#9にスレッド同期番号ID00として
6を付けて、命令I00として命令マルチプレクサMX0に供
給する。この時、命令#9はレジスタr0の読出しを伴いフ
ロー依存発生の可能性がある。しかし、スコアボード情
報CMの書込み有効VLがアサートされている先行データロ
ードはr2に対するものなので、レジスタ番号不一致によ
りフロー依存は発生しない。また、命令供給部IF1は命
令キューIQ1nに保持している命令#14を命令I00として命
令マルチプレクサMX0に供給する。この結果、命令マル
チプレクサMX0及びMX1は命令I00及びI10、即ち命令#9及
び#14を選択し命令デコーダDEC0及びDEC1に供給する。
また、時刻t7と同様に命令#9の命令デコードステージD0
を行う。また、命令#13のデコードステージD1を行う。
命令デコーダDEC1は命令#13が分岐系命令であるため処
理をNOP化する。更に、命令#9の命令実行ステージE0を
行う。命令実行部EX0は制御情報C0に従って、読出しデ
ータDRA0をロードアドレスとして実行結果DM0に載せて
メモリ制御部MCに出力する。また、読出しデータDRA0を
インクリメントし実行結果DE0としてレジスタモジュー
ルRMに出力する。レジスタスコアボードRSでは、図18の
ように時刻t8ではセルSBE0及びSBL0にそれぞれレジスタ
r0及びr2への書込みがスレッド同期番号0で記憶されて
いる。また、レジスタ読出し番号RA0にr0がスレッド同
期番号7で出力されている。セルSBE0と読出し番号RA0が
r0で一致し、スレッド同期番号は0と7で異なるもののス
レッド番号THE0とTH0が共に0で一致するので、バイパス
制御のうちBPE0A0がアサートされる。また、スコアボー
ドセルSBE0及びSBL0ではスレッド番号THE0及びTHL0が1
であるため図25の論理により書き戻しBNE0及びBNL0がネ
ゲートされる。この書き戻しBNL0を付加して生成された
次ステージ書込み制御情報NL0はスコアボードセルSBL1
に格納される。また、制御論理CTLにおいて、単独スレ
ッドSTHはネゲートされており、スレッド番号THE0が0で
上記書き戻しBNE0のネゲートされているので、図27の第
6及び第7式により書込み指示SE0はネゲートされ、一時
バッファ制御CE0はアサートされる。他のSx (x = TB0,T
B1,TB2,L3,E0,E1) 及びCxは書込み有効Vxがネゲートさ
れているので全てネゲートされる。この結果、図27の表
により、データ選択M0,M1及びM2はそれぞれE0,TB0及びT
B1となる。そして、次ステージ書込み制御情報NM0,NM1
及びNM2はそれぞれNE0,NTB0及びNTB1となり、これらが
一時バッファ制御情報SBTB0,SBTB1及びSBTB2に格納され
る。更に、セルSBE0及びSBL0には時刻t7と同様に命令#9
の書込み情報を格納する。レジスタモジュールRMでは、
データ選択M0,M1及びM2に従って、一時バッファDTB0, D
TB1及びDTB2に実行結果DE0, 一時バッファデータDTB0及
びDTB1が書込まれる。また、バイパス制御BPE0A0がアサ
ートされたので、バイパスマルチプレクサMA0におい
て、図30の論理により実行結果DE0が読出しデータDRA0
として選択される。時刻t9では、命令#9及び#15の命令
アドレスステージA0及びA1を行う。命令供給部IF0は前
サイクルと同様にリピート動作しリピート回数RC0を4に
する。命令供給部IF1ではプログラムカウンタPC1とリピ
ート終了アドレスRE1が命令#15のアドレスで一致し、命
令#9同様リピート動作を開始し、リピート回数RC0を7に
する。また、命令#9、#15及び#16の命令フェッチステー
ジI0及びI1を行う。命令供給部IF0は時刻t7同様、命令#
9にスレッド同期番号ID00として5を付けて、命令I00と
して命令マルチプレクサMX0に供給する。この時、命令#
9はレジスタr0の読出しを伴うが、書込み有効VL及びVL0
がアサートされている先行データロードはr2に対するも
のなので、レジスタ番号不一致によりフロー依存は発生
しない。メモリ制御部MCは命令#15及び#16をフェッチ
し、命令供給部IF1はこれを命令キューIQ1nに格納する
と同時に、命令I10及びI11として命令マルチプレクサMX
1及びMX0に供給する。命令I10及びI11はフェッチ直後な
ので命令マルチプレクサMX1は実行可能性判定を行わな
い。この結果、命令マルチプレクサMX1及びMX0は命令I0
0及びI10、即ち命令#9及び#15を選択し命令デコーダDEC
0及びDEC1に供給する。更に、時刻t7と同様に命令でコ
ーダDEC0は命令#9の命令デコードステージD0を行う。ま
た、命令デコーダDEC1は命令#14の命令デコードステー
ジD1を行う。命令#14はNOPなので制御情報C1はNOP処理
となる。更に、時刻t8同様命令#9の命令実行ステージE0
を行う。また、メモリ制御部MCで命令#9のデータロード
ステージL1を行う。レジスタスコアボードRSは、時刻t9
では図18のようになっている。そして、時刻t8同様バイ
パス制御BPE0A0がアサートされる。また、セルSBTB0と
読出し番号RA0がr0で一致し、スレッド番号THTB0とTH0
が共に0で一致するのでバイパス制御BPTB0A0がアサート
される。また、時刻t8同様書き戻しBNE0及びBNL0がネゲ
ートされ、セルSBL1が更新され、書込み指示SE0がネゲ
ートされ、一時バッファ制御CE0がアサートされる。更
に、セルSBL1及びSBTB0ではスレッド番号THL1及びTHTB0
が1であるため図26の論理により書き戻しBNL1及びBNTB0
は引き続きネゲートされる。この書き戻しBNL1を付加し
て生成された次ステージ書込み制御情報NL1はスコアボ
ードセルSBL2に格納される。そして、図27の第6及び第7
式により書込み指示STB0はネゲートされ、一時バッファ
制御CTB0はアサートされる。この結果、図27の表によ
り、時刻t8同様データ選択M0,M1及びM2はそれぞれE0,TB
1及びTB2となり、これに従って一時バッファ制御情報SB
TB0,SBTB1及びSBTB2が更新される。更に、セルSBE0及び
SBL0には時刻t7と同様に命令#9の書込み情報を格納す
る。レジスタモジュールRMでも、時刻t8同様データ選択
M0,M1及びM2に従って、一時バッファDTB0,DTB1及びDTB2
が更新される。また、バイパス制御BPE0A0及びBPTB0A0
がアサートされたので、バイパスマルチプレクサMA0に
おいて、図30の論理により実行結果DE0が読出しデータD
RA0として選択される。この時、バイパス制御BPTB0A0に
よって一時バッファTBでは一時バッファ読出しデータTB
A0として一時バッファデータDTB0が読出され、バイパス
マルチプレクサMA0においてもBPTBA0がアサートされ
る。しかし、バイパス制御BPE0A0もアサートされている
ので、図30の論理により新しい実行結果DE0が選択され
る。時刻t10では、命令#9及び#15の命令アドレスステー
ジA0及びA1を行う。命令供給部IF0は前サイクルと同様
にリピート動作しリピート回数RC0を4にする。命令供給
部IF1は前サイクルと同様にリピート動作するが、後述
するレジスタスコアボードRSがストールSTL1をアサート
するのでリピート回数RC0を7のままとする。また、命令
#9、#15及び#17の命令フェッチステージI0及びI1を行
う。命令供給部IF0は時刻t7同様、命令#9にスレッド同
期番号ID00として4を付けて、命令I00として命令マルチ
プレクサMX0に供給する。この時、命令#9はレジスタr0
の読出しを伴うが、書込み有効VL,VL0及びVL1がアサー
トされている先行データロードはr2に対するものなの
で、レジスタ番号不一致によりフロー依存は発生しな
い。メモリ制御部MCは命令#17及びその次の命令をフェ
ッチし、命令供給部IF1はこれを命令キューIQ1nに格納
する。また命令#15を命令I10として命令マルチプレクサ
MX1に供給する。この時、命令I10即ち命令#15はレジス
タr2及びr3の読出しを伴うが、書込み有効VL,VL0及びVL
1がアサートされているr2に対する先行データロードが
スレッド同期番号7,6及び5なのでフロー依存は発生しな
い。リピート動作により命令#15の次命令は命令#16では
ないので、命令I11として供給する命令はなく、命令I11
の命令有効IV11はネゲートする。この結果、命令マルチ
プレクサMX1及びMX0は命令I00及びI10、即ち命令#9及び
#15を選択し命令デコーダDEC0及びDEC1に供給する。更
に、時刻t7と同様に命令でコーダDEC0は命令#9の命令デ
コードステージD0を行う。また、命令#15の命令デコー
ドステージD1を行う。命令#15はレジスタr2及びr3を加
算してr3に格納する命令なので、その制御情報C1を出力
する。また、RA0をr3の読出し及び書込み制御に、RB0を
r2の読出し制御に使用するのでレジスタ情報有効VR1の
うちVA0、VB0、及びV0をアサートする。また、時刻t8同
様命令#9の命令実行ステージE0を行う。更に、メモリ制
御部MCで命令#9のデータロードステージL1,L2及びL3を
行う。レジスタスコアボードRSは、時刻t10では図18の
ようになっている。そして、時刻t9同様バイパス制御BP
E0A0及びBPTB0A0がアサートされる。また、セルSBTB1と
読出し番号RA0がr0で一致し、スレッド番号THTB1とTH0
が共に0で一致するのでバイパス制御BPTB1A0がアサート
される。更に、セルSBL2と命令#15の読出し番号RB1がr2
で一致し、スレッド同期番号IDL2とID1が共に0で一致す
るのでバイパス制御BPL2B1がアサートされる。すると、
スコアボード制御部CTLにおいてストールSTL1がアサー
トされ、命令#15の実行が抑止され、スコアボードセルS
BE1へ書込まれる書込み有効がネゲートされる。また、
時刻t9同様、書き戻しBNE0,BNL0,BNL1及びBNTB0がネゲ
ートされ、セルSBL1及びSBL2が更新され、書込み指示SE
0及びSTB0がネゲートされ、一時バッファ制御CE0及びCT
B0がアサートされる。更に、セルSBL2及びSBTB1ではス
レッド番号TH1が1かつスレッド同期番号IDL2及びIDTB1
とID1とが共に0で一致するため図26の論理により書き戻
しBNL2及びBNTB1がアサートされる。この書き戻しBNL2
を付加して生成された次ステージ書込み制御情報NL2は
スコアボードセルSBL3に格納される。そして、図27の第
6及び第7式により書込み指示STB1はアサートされ、一時
バッファ制御CTB1はネゲートされる。この結果、図27の
表により、時刻t8同様データ選択M0,M1及びM2はそれぞ
れE0,TB1及びTB2となり、これに従って一時バッファ制
御情報SBTB0,SBTB1及びSBTB2が更新される。更に、セル
SBE0及びSBL0には時刻t7と同様に命令#9の書込み情報を
格納する。レジスタモジュールRMでも、時刻t8同様デー
タ選択M0,M1及びM2に従って、一時バッファDTB0,DTB1及
びDTB2が更新される。そして、書込み指示STB1によりレ
ジスタファイルRFのレジスタr0に一時バッファデータDT
B1が書き戻される。また、バイパス制御BPE0A0,BPTB0A0
及びBPTB1A0がアサートされたので、バイパスマルチプ
レクサMA0において、図30の論理により実行結果DE0が読
出しデータDRA0として選択される。この時、バイパス制
御BPTB0A0及びBPTB1A0によって一時バッファTBでは一時
バッファ読出しデータTBA0として一時バッファデータDT
B0が読出され、バイパスマルチプレクサMA0においてもB
PTBA0がアサートされる。しかし、バイパス制御BPE0A0
もアサートされているので、図30の論理により最も新し
い実行結果DE0が選択される。時刻t11では、命令#9及び
#15の命令アドレスステージA0及びA1を行う。命令供給
部IF0は前サイクルと同様にリピート動作しリピート回
数RC0を4にする。命令供給部IF1は時刻t9と同様にリピ
ート動作しリピート回数RC0を6とする。また、命令#9及
び#15の命令フェッチステージI0及びI1を行う。命令供
給部IF0は時刻t7同様、命令#9にスレッド同期番号ID00
として4を付けて、命令I00として命令マルチプレクサMX
0に供給する。この時、命令#9には時刻t10同様フロー依
存は発生しない。命令供給部IF1は命令#15にスレッド同
期番号ID01として7を付けて、命令I10として命令マルチ
プレクサMX1に供給する。この時、命令#15には時刻t10
フロー依存は発生しない。この結果、命令マルチプレク
サMX1及びMX0は命令I00及びI10、即ち命令#9及び#15を
選択し命令デコーダDEC0及びDEC1に供給する。更に、時
刻t7と同様に命令でコーダDEC0は命令#9の命令デコード
ステージD0を行う。また、命令#15の命令デコードステ
ージD1を行う。命令#15は前サイクルでストールSTL1に
より実行されなかったので命令でコーダDEC1は入力命令
を更新せず、命令#15のデコード結果を再度出力する。
また、時刻t8同様命令#9の命令実行ステージE0を行う。
更に、メモリ制御部MCで命令#9のデータロードステージ
L1,L2及びL3を行う。レジスタスコアボードRSは、時刻t
11では図18のようになっている。尚、前サイクルで命令
#15がストールSTL1アサートによって実行されなかった
ため、レジスタ情報MR1は更新しない。そして、時刻t9
同様バイパス制御BPE0A0, BPTB0A0及びBPTB0A1がアサー
トされる。また、セルSBTB2と読出し番号RA0がr0で一致
し、スレッド番号THTB2とTH0が共に0で一致するのでバ
イパス制御BPTB2A0がアサートされる。更に、セルSBL3
と読出し番号RB1がr2で一致し、スレッド同期番号IDL3
とID1が共に0で一致するのでバイパス制御BPL3B1がアサ
ートされる。また、時刻t9同様書き戻しBNE0,BNL0,BNL1
及びBNTB0がネゲートされ、セルSBE0,SBL0,SBL1及びSBL
2が更新され、書込み指示SE0及びSTB0 がネゲートさ
れ、一時バッファ制御CE0及びCTB0がアサートされる。
更に、セルSBL2及びSBTB1ではスレッド番号THL2及びTHT
B1が1であるため図26の論理により書き戻しBNL2及びBNT
B1は引き続きネゲートされる。また、セルSBL3及びSBTB
2ではスレッド同期番号IDL3及びIDTB2とID0とが0で一致
するため図26の論理により書き戻しBNL3及びBNTB2がア
サートされる。そして、図27の第6及び第7式により書込
み指示SL3及びSTB1はアサートされ、一時バッファ制御C
L3及びCTB2はネゲートされる。この結果、図27の表によ
り、時刻t8同様データ選択M0,M1及びM2はそれぞれE0,TB
1及びTB2となり、これに従って一時バッファ制御情報SB
TB0,SBTB1及びSBTB2が更新される。レジスタモジュール
RMでも、時刻t8同様データ選択M0,M1及びM2に従って、
一時バッファDTB0,DTB1及びDTB2が更新される。そし
て、書込み指示SL3及びSTB2によりレジスタファイルRF
のレジスタr2及びr0にロードデータDL3及び一時バッフ
ァデータDTB2が書き戻される。また、バイパス制御BPE0
A0,BPTB0A0,BPTB1A0及びBPTB2A0がアサートされたの
で、バイパスマルチプレクサMA0において、図30の論理
により実行結果DE0が読出しデータDRA0として選択され
る。この時、バイパス制御BPTB0A0,BPTB1A0及びBPTB2A0
によって一時バッファTBでは一時バッファ読出しデータ
TBA0として一時バッファデータDTB0が読出され、バイパ
スマルチプレクサMA0においてもBPTBA0がアサートされ
る。しかし、バイパス制御BPE0A0もアサートされている
ので、図30の論理により最も新しい実行結果DE0が選択
される。更に、バイパス制御BPL3B1がアサートされたの
で、バイパスマルチプレクサMB1において、図30の論理
によりロードデータDL3が読出しデータDRB1として選択
される。また、読出しデータDRA1はレジスタファイルRF
のレジスタr3から読出される。時刻t12では、時刻t11と
同様に、命令#9及び#15の命令アドレスステージA0及びA
1、並びに、命令フェッチステージI0及びI1を行う。更
に、時刻t10と同様に、命令#9及び#15の命令デコードス
テージD0及びD1、命令#9の命令実行ステージE0、並び
に、命令#9のデータロードステージL1,L2及びL3を行
う。そして、命令#15の実行ステージE1を行う。命令実
行部EX1において、読出しデータDRA1とDRB1を加算し、
実行結果DE1に出力する。レジスタスコアボードRSは、
時刻t12では図18のようになっている。時刻t11とスレッ
ド同期番号が1ずつ減った以外はほぼ同一であるが、セ
ルSBE1のレジスタr3への書込み情報が増えている。そし
て、セルSBE1と読出し番号RB0がr3で一致し、スレッド
番号THE1とTH1が共に0で一致するのでバイパス制御BPE1
A1がアサートされる。スコアボードの各セルは時刻t11
と同様に更新される。レジスタモジュールRMでも、時刻
t11と同様一時バッファTB及びレジスタファイルRFのレ
ジスタr2及びr0が更新され、読出しデータDRA0及びDRB1
が選択される。また、バイパス制御BPE1A1がアサートさ
れたので、バイパスマルチプレクサMA1において、図30
の論理により実行結果DE1が読出しデータDRA1として選
択される。時刻t13では、命令#9及び#15の命令アドレス
ステージA0及びA1を行う。命令供給部IF0は前サイクル
と同様にリピート動作するが、リピート回数RC0が1なの
で、回数比較器CC0出力が1となり、ANDゲートが0とな
り、命令アドレスマルチプレクサMR0が命令#9のアドレ
ス+4即ち命令#10の次の命令を指し、命令バッファの命
令#9以降の命令の保持を解除する。リピート回数RC0を
デクリメントして0とする。尚、命令#10の次命令以降の
動作の説明は時刻t14以降では省略する。命令供給部IF1
は時刻t9と同様にリピート動作しリピート回数RC0を4と
する。時刻t12と同様に、命令#9及び#15の命令フェッチ
ステージI0及びI1、命令デコードステージD0及びD1、命
令実行ステージE0及びE1、並びに、命令#9のデータロー
ドステージL1,L2及びL3を行う。レジスタスコアボードR
Sは、時刻t13では図18のようになっている。時刻t12と
スレッド同期番号が1ずつ減った以外は同一である。そ
して、時刻t12と同様に、スコアボードの各セルが更新
され、レジスタモジュールRMの一時バッファTB及びレジ
スタファイルRFが更新され、読出しデータDRA0、DRA1及
びDRB1が選択される。時刻t14では、時刻t13と同様に、
命令#15の命令アドレスステージA1、命令フェッチステ
ージI1、命令#9及び命令#15の命令デコードステージD0
及びD1、命令実行ステージE0及びE1、並びに、命令#9の
データロードステージL1,L2及びL3を行う。また、リピ
ート動作が解除されたので、命令#10を分岐系命令デコ
ーダBDEC0でデコードし、SYNCE命令処理を行う。SYNCE
命令はデータ使用スレッドの終了を待つ命令である。デ
ータ使用スレッド即ちスレッド1はリピート終了時にス
レッド同期番号ID1が0に戻るので、スレッド同期番号ID
0が0のままだと、データ使用スレッドは、データ定義ス
レッドを追い越さないというルールにより、止まってし
まう。そこで、SYNCE命令デコードからデータ使用スレ
ッド終了まではこのルールを無視するように命令マルチ
プレクサMX0及びMX1を制御する。この制御は命令#16か
ら活用されるので図18では命令#16の命令アドレスステ
ージA1として記載している。レジスタスコアボードRS
は、時刻t14では図18のようになっている。時刻t13とス
レッド同期番号が1ずつ減った以外は同一である。そし
て、時刻t13と同様に、スコアボードの各セルが更新さ
れ、レジスタモジュールRMの一時バッファTB及びレジス
タファイルRFが更新され、読出しデータDRA0、DRB1及び
DRA1が選択される。時刻t15では、時刻t14と同様に、命
令#15の命令アドレスステージA1、命令フェッチステー
ジI1、命令デコードステージD1、命令#9及び命令#15の
命令実行ステージE0及びE1、並びに、命令#9のデータロ
ードステージL1,L2及びL3を行う。レジスタスコアボー
ドRSは、時刻t15では図18のようになっている。時刻t14
とはスレッド同期番号が1ずつ減り、RA0でのr0の読出し
がなくなった以外は同一である。そして、時刻t14と同
様に、スコアボードの各セルが更新される。但し、スコ
アボードセルSBE0及びSBL0には新たな書込み情報は保持
されず、これらのセルは無効化される。また、レジスタ
モジュールRMの一時バッファTB及びレジスタファイルRF
が更新され、読出しデータDRA1及びDRB1が選択される。
時刻t16では、時刻t15と同様に、命令#15の命令アドレ
スステージA1、命令フェッチステージI1、命令デコード
ステージD1、命令実行ステージE1、並びに、命令#9のデ
ータロードステージL1,L2及びL3を行う。命令アドレス
ステージA1では命令供給部IF1が前サイクルと同様にリ
ピート動作するが、リピート回数RC1が1なので、回数比
較器CC1出力が1となり、ANDゲートが0となり、命令ア
ドレスマルチプレクサMR1が命令#15のアドレス+4即ち命
令#17を指し、命令バッファの命令#15以降の命令の保持
を解除する。リピート回数RC0をデクリメントして0とす
る。レジスタスコアボードRSは、時刻t16では図18のよ
うになっている。時刻t15とはスレッド同期番号が1ずつ
減り、セルSBE0及びSBL0が無効になった以外は同一であ
る。そして、時刻t15と同様に、スコアボードの各セル
が更新される。但し、スコアボードセルSBL1及びSBTB0
には新たな書込み情報は保持されず、これらのセルは無
効化される。また、レジスタモジュールRMの一時バッフ
ァTB及びレジスタファイルRFが更新され、読出しデータ
DRA1及びDRB1が選択される。但し、レジスタr2への書込
みは行われない。時刻t17では、時刻t16と同様に、命令
#15の命令フェッチステージI1、命令デコードステージD
1、命令実行ステージE1、並びに、命令#9のデータロー
ドステージL2及びL3を行う。レジスタスコアボードRS
は、時刻t17では図18のようになっている。時刻t16とは
スレッド同期番号が1ずつ減り、セルSBL1及びSBTB0が無
効になった以外は同一である。そして、時刻t16と同様
に、スコアボードの各セルが更新される。但し、スコア
ボードセルSBL2及びSBTB1には新たな書込み情報は保持
されず、これらのセルは無効化される。また、レジスタ
モジュールRMの一時バッファTB及びレジスタファイルRF
が更新され、読出しデータDRA1及びDRB1が選択される。
時刻t18では、命令#16の命令フェッチステージI1を行
う。命令供給部IF1は命令キューIQ1nの命令#16を命令I1
0として命令マルチプレクサMX1経由で命令デコーダDEC1
に供給する。この時スレッド同期番号がデータ定義スレ
ッドと同じ0となっているが、SYNCE命令によってデータ
定義スレッド側はデータ使用スレッドの終了を待ってお
り、同一スレッド同期番号の命令の発行が可能になって
いる。また、時刻t17と同様に、命令#15の命令デコード
ステージD1、命令実行ステージE1、並びに、命令#9のデ
ータロードステージL3を行う。レジスタスコアボードRS
は、時刻t18では図18のようになっている。時刻t17とは
スレッド同期番号が1ずつ減り、セルSBL2及びSBTB1が無
効になった以外は同一である。そして、時刻t17と同様
に、スコアボードの各セルが更新される。但し、スコア
ボードセルSBL3及びSBTB2には新たな書込み情報は保持
されず、これらのセルは無効化される。また、レジスタ
モジュールRMの一時バッファTB及びレジスタファイルRF
が更新され、読出しデータDRA1及びDRB1が選択される。
時刻t19では、命令#16の命令デコードステージD1を行
う。命令#16はレジスタr1の指すアドレスにレジスタr3
の内容をストアする命令である。命令デコーダDEC1はこ
のための制御情報C1を出力する。また、レジスタ有効VR
1のうち、VA1及びVB1をアサートする。また、時刻t17と
同様に、命令#15の命令実行ステージE1を行う。また、
命令供給部IF1の分岐系命令デコーダBDEC1が命令#17のT
HRDEをデコードし、命令供給部IF1を停止させ、スレッ
ド終了ETH1をアサートする。レジスタスコアボードRS
は、時刻t19では図18のようになっている。時刻t18とは
スレッド同期番号が1ずつ減り、セルSBL3及びSBTB2が無
効になり、レジスタ読出し番号RA1及びRB1が異なる以外
は同一である。そして、時刻t18と同様に、スコアボー
ドの各セルが更新される。但し、スコアボードセルSBE1
には新たな書込み情報は保持されず、セルは無効化され
る。また、レジスタモジュールRMのレジスタファイルRF
が更新される。但し、更新されるレジスタはr3のみであ
る。また、読出しデータDRA1がレジスタファイルRFのr1
から読み出される。更に、セルSBE1と読出し番号RB1の
レジスタ番号がr3で一致し、スレッド番号THE1とTH1が
一致するので、バイパス制御BPE1B1がアサートされ、読
出しデータマルチプレクサMB1において実行結果DE1がDR
B1として選択されて出力される。時刻t20では、命令#16
の命令実行ステージE1を行う。制御情報C1に従って読出
しデータDRA1をストアアドレスとして実行結果DE1に出
力し、読出しデータDRB1をデータとして実行結果DM1に
出力する。レジスタスコアボードRSは、時刻t19では図1
8のようになっている。時刻t18とはスレッド同期番号が
1ずつ減り、セルSBL3及びSBTB2が無効になり、レジスタ
読出し番号RA1及びRB1が異なる以外は同一である。そし
て、時刻t18と同様に、スコアボードの各セルが更新さ
れる。但し、スコアボードセルSBE1には新たな書込み情
報は保持されず、セルは無効化される。また、レジスタ
モジュールRMのレジスタファイルRFが更新される。但
し、更新されるレジスタはr3のみである。また、読出し
データDRA1がレジスタファイルRFのr1から読み出され
る。更に、セルSBE1と読出し番号RB1のレジスタ番号がr
3で一致し、スレッド番号THE1とTH1が一致するので、バ
イパス制御BPE1B1がアサートされ、読出しデータマルチ
プレクサMB1において実行結果DE1がDRB1として選択され
て出力される。更に、スレッド終了ETHがアサートされ
たので、スコアボード制御CTLは図27の第5式により単一
スレッドSTHをアサートする。以上のように本実施例の
マルチスレッド方式によりデータロード時間が隠蔽され
る。本実施例ではデータ定義スレッドが定義してレジス
タモジュールRMの一時バッファTBに書込んだデータをデ
ータ使用スレッドが使用していない。データ使用スレッ
ドが使用しているデータはロードデータでありロード直
後に使用されて直接レジスタファイルRFに書込まれてい
る。このように一時バッファが無駄に使用されている
と、データロード時間を長くした場合に、更に無駄な書
込みのためのバッファが必要になる。データロード時間
が30ならば図16のプログラムを一時バッファフルSTLTB
によるストールなしに実行するには29本の一時バッファ
が必要である。一時バッファのデータはバイパス制御で
随時読出して命令実行部に供給する必要があるので本数
を増やすことはハードウェア量の増大や実行速度の低下
を招く。このような問題を避けるには、。データ定義ス
レッドが定義してデータ使用スレッドが使用するレジス
タを限定すればよい。例えば、リンクレジスタ指定命令
で、特定のレジスタ又はレジスタグループをリンクレジ
スタに指定し、リンクレジスタのみをスレッド間データ
転送に使用できると定義する。そして、図16のプログラ
ムならばr2をリンクレジスタに指定する。すると、r2以
外のレジスタはスレッド間の逆依存及び出力依存を考慮
する必要がないので、実行結果を直接レジスタファイル
RMに書込んでよい。すると、図18のパイプライン動作に
おける一時バッファの使用は全てなくなる。この時、デ
ータロード時間が30の場合に図16のプログラムをストー
ルなしに実行するにはロードステージ数を30とし、L4か
らL29を追加すればよい。これに伴って、レジスタスコ
アボードにはSBL4からSBL29が追加する。そして、SBL0
からSBL28からのバイパス制御は全てストールSTL0及びS
TL1にのみ反映し、データのバイパス経路は増加しな
い。通常のプロセッサではデータロード時間は複数定義
されている。オンチップキャッシュにヒットした場合、
オンチップメモリにある場合、オフチップキャッシュに
ヒットした場合、あるいはオフチップメモリにある場合
等である。例えばデータロード時間として、2,4,10及び
30がありうる場合、SBL1,SBL3,SBL9及びSBL29に対応す
るバイパス経路を設け、データロード時間によって、ス
トールとバイパスを使い分けることにより、本発明を複
数のデータロード時間に対応させることが可能である。
また、本実施例では定義しなかったが除算命令のように
実行時間の長い演算命令もある。このような命令用にデ
ータロード用と同様なハードウェアを実現することは、
本発明の属する技術分野の通常の技術者ならば可能であ
る。本実施例ではスレッド0及び1をデータ定義スレッド
及びデータ使用スレッドに固定したが、前述のようにこ
の固定を外すことは本発明の属する技術分野の通常の技
術者ならば可能である。そして、データ定義スレッドの
処理終了後にTHRDE命令でこのスレッドを終了し、デー
タ使用スレッドが新たにデータ定義スレッドとなってTH
RDG命令で新たなスレッドを起動し、起動したスレッド
を新たなデータ使用スレッドとするといったプログラム
も可能となる。こうすると本実施例で用いたSYNCE命令
が不要となり、スレッドが1本しかない時間を削減で
き、性能が向上する。また、本実施例ではデータの流れ
を一方通行に限定している。しかし、上記リンクレジス
タ指定を行えは、双方向データ通信も可能である。各方
向に対して異なるリンクレジスタを指定し、各スレッド
でリンクレジスタのデータ定義命令の実行が終了した
ら、データ定義同期命令SYNCDを発行し、リンクレジス
タの使用が終わったらデータ使用同期命令SYNCUを発行
する。そして、SYNCU命令発行時にスレッド同期番号を
更新する。SYNCU命令の代わりに本実施例のようなリピ
ートによる同期を行っても良い。複数のスレッドで双方
向のデータをやり取りする例は、データ依存関係が少な
いけれどもないわけではないといったルーズカップリン
グな処理を同時実行する場合に有効である。図31にスレ
ッド間双方向データ通信方式のプログラム処理の流れを
示す。まず、リンクレジスタ指定命令RNCRで、スレッド
TH0からTH1へはr2を、逆方向にはr3をリンクレジスタに
指定する。そして、スレッドTH0及びTH1でそれぞれリン
クレジスタ定義命令#01及び#11を実行する。その後、デ
ータ定義同期命令SYNCDを発行し、リンクレジスタ使用
命令#0t及び#1yを実行する。そして、最後にデータ使用
同期命令SYNCUを発行する。それぞれのスレッドの実行
時間は変動する可能性がある。スレッドTH0に比べてス
レッドTH1の実行が早い場合、図のTH1.aのようになる。
この時、スレッドTH0データ定義同期命令SYNCD発行をス
レッドTH1のリンクレジスタ使用命令#1yが待つので、フ
ロー依存関係の検出ミスは起こらない。また、スレッド
TH1の実行が遅い場合、図のTH1.bのようになる。この
時、スレッドTH1データ定義同期命令SYNCD発行をスレッ
ドTH0のリンクレジスタ使用命令#1tが待つので、フロー
依存関係の検出ミスは起こらない。データ定義同期命令
SYNCDはスレッド間の実行優先度を変更している。但
し、この例における実行優先度はリンクレジスタ毎に異
なっている。r2に関してはスレッドTH0がTH1に、r3に関
してはスレッドTH1がTH0に優先する。本実施例ではレジ
スタを介してスレッド間データ通信を行っているが、レ
ジスタ番号の代わりにメモリアドレスの全部又は一部を
使用してメモリを管理することにより、メモリを介して
スレッド間データ通信を行うようにすることは本発明の
属する技術分野の通常の技術者ならば可能である。
【0006】
【発明の効果】本発明により、大規模なアウトオブオー
ダ実行やソフトウェアパイプラインニングを行った場合
と同等な性能を、従来のマルチスレッドプロセッサに簡
単な制御機構を追加することによりより単純で少ないハ
ードウェアにより達成することができる。また、従来の
マルチスレッドプロセッサが多数のスレッドの同時又は
時分割実行をしなければ達成できない性能を、2個程度
の少ないスレッド数で達成することができる。そして、
スレッド数が少ない分スレッド生成及び終了のオーバヘ
ッドを削減することができ、多数のスレッドの状態を記
憶するためのハードウェアも削減できる。
【図面の簡単な説明】
【図1】サンプルプログラム。
【図2】リピート制御命令。
【図3】2並列スーパスカラプロセッサのパイプライン
例。
【図4】図1のプログラムのロードレイテンシ4の2並
列スーパスカラパイプライン動作。
【図5】図1のプログラムのロードレイテンシ4の2並
列スーパスカラアウトオブオーダパイプライン動作。
【図6】ソフトウェアパイプラインにより図1のプログ
ラムのロードレイテンシ4を隠蔽した例。
【図7】図6のプログラムのロードレイテンシ4の2並
列スーパスカラパイプライン動作。
【図8】図1のプログラムをMerlot方式の4並列マルチ
プロセッサ用に書き換えた例。
【図9】図8のプログラムのロードレイテンシ4のパイ
プライン動作。
【図10】図1のプログラムを特開平8-249183のマルチス
レッドプロセッサ用に書き換えた例。
【図11】図10のプログラムのロードレイテンシ4のパイ
プライン動作。
【図12】既存方式の所要サイクル数比較。
【図13】本発明及び従来方式によるスレッド分割方式。
【図14】従来方式によるロードレイテンシ8の場合のス
レッド実行。
【図15】本発明によるロードレイテンシ8の場合のスレ
ッド実行。
【図16】本発明のマルチスレッドによりロードレイテン
シ4を隠蔽した例。
【図17】2並列マルチスレッドプロセッサのパイプライ
ン例。
【図18】図16のプログラムのロードレイテンシ4のパイ
プライン動作。
【図19】本発明を適用した2スレッドプロセッサの例。
【図20】命令供給部の例。
【図21】命令選択部の例。
【図22】命令マルチプレクサによる命令選択組合せ。
【図23】レジスタスコアボードの構成例。
【図24】ロード系セル入力マルチプレクサの例。
【図25】スコアボード先頭セルの例。
【図26】スコアボード非先頭セルの例。
【図27】スコアボード制御論理の例。
【図28】レジスタモジュールの例。
【図29】一時バッファの例。
【図30】バイパスマルチプレクサの例。
【図31】スレッド間双方向データ通信方式の例。

Claims (11)

    【特許請求の範囲】
  1. 【請求項1】複数のプログラムカウンタと、1つまたは
    複数の命令実行部と、該複数プログラムカウンタのそれ
    ぞれに対応する複数スレッドの命令フローを該命令実行
    部に選択的に供給する手段を有し、該複数スレッドを同
    時または時分割に実行可能なマルチスレッドプロセッサ
    において、該複数スレッド間に時分割に変更可能な実行
    優先度があって該優先度に従って逐次処理した場合と同
    一の結果を生成することを特徴とするプロセッサ。
  2. 【請求項2】請求項1記載のプロセッサにおいて、複数
    スレッド間でプログラムカウンタ以外のプロセッサリソ
    ースの一部または全部を共有することにより、ハードウ
    ェア量の削減と、共有リソースによるスレッド間のデー
    タ受け渡しを可能にしたことを特徴とするプロセッサ。
  3. 【請求項3】請求項1または2記載のプロセッサにおい
    て、繰り返し回数を第1の優先度判定基準、複数スレッ
    ド間の優先度を第2の優先度判定基準とすることによ
    り、命令の介在なしにハードウェアが複数スレッド間の
    同期をとることを可能にしたプロセッサ。
  4. 【請求項4】請求項1から3記載のプロセッサにおい
    て、最優先でないスレッドの実行結果を一時的に保持す
    るバッファを有し、より優先度の高い処理の終了または
    同期報告後に、本来の格納場所に格納することにより、
    最優先でないスレッドの実行を矛盾なく行うことを可能
    にしたプロセッサ。
  5. 【請求項5】請求項1から4記載のプロセッサにおい
    て、複数スレッド間のデータ依存関係を、データの流れ
    が単一方向となるように限定し、データ使用スレッドを
    最優先スレッドの場合のみ実行することにより、定義前
    データの使用をなくして、最優先でないスレッドの実行
    を矛盾なく行うことを可能にしたプロセッサ。
  6. 【請求項6】請求項1から5記載のプロセッサにおい
    て、スレッド間データ通信に用いるデータ格納場所を限
    定したことを特徴とするプロセッサ。
  7. 【請求項7】請求項6記載のプロセッサにおいて、該デ
    ータ格納場所をスレッドの組合せ及び通信方向毎に独立
    に複数箇所定義したことを特徴とするプロセッサ。
  8. 【請求項8】請求項7記載のプロセッサにおいて、該複
    数のデータ格納場所毎に実行優先度を定義したことを特
    徴とするプロセッサ。
  9. 【請求項9】請求項6から8記載のプロセッサにおい
    て、該データ格納場所がレジスタ又はメモリの一部であ
    ることを特徴とするプロセッサ。
  10. 【請求項10】請求項1から9記載のプロセッサにおい
    て、優先度の低いスレッドへの優先スレッド化命令を有
    し、複数スレッド間の優先度変更を容易にしたことを特
    徴とするプロセッサ。
  11. 【請求項11】請求項1から7記載のプロセッサにおい
    て、他のスレッドへのデータ定義同期命令を有し、同期
    後の他スレッドのデータ使用を可能にしたプロセッサ。
JP2001062792A 2001-03-07 2001-03-07 スレッド間優先度可変プロセッサ Expired - Fee Related JP3796124B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2001062792A JP3796124B2 (ja) 2001-03-07 2001-03-07 スレッド間優先度可変プロセッサ
US10/022,533 US6978460B2 (en) 2001-03-07 2001-12-20 Processor having priority changing function according to threads

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001062792A JP3796124B2 (ja) 2001-03-07 2001-03-07 スレッド間優先度可変プロセッサ

Publications (2)

Publication Number Publication Date
JP2002268878A true JP2002268878A (ja) 2002-09-20
JP3796124B2 JP3796124B2 (ja) 2006-07-12

Family

ID=18921879

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001062792A Expired - Fee Related JP3796124B2 (ja) 2001-03-07 2001-03-07 スレッド間優先度可変プロセッサ

Country Status (2)

Country Link
US (1) US6978460B2 (ja)
JP (1) JP3796124B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005182825A (ja) * 2003-12-18 2005-07-07 Nvidia Corp マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ
KR100745904B1 (ko) 2003-04-21 2007-08-02 인터내셔널 비지네스 머신즈 코포레이션 동시적 멀티스레드 프로세서에서 파이프라인 길이를변경하기 위한 방법 및 회로
US7409520B2 (en) 2005-01-25 2008-08-05 International Business Machines Corporation Systems and methods for time division multiplex multithreading
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
US8117425B2 (en) 2007-04-18 2012-02-14 Nec Corporation Multithread processor and method of synchronization operations among threads to be used in same
KR20150111990A (ko) * 2013-01-29 2015-10-06 어드밴스드 마이크로 디바이시즈, 인코포레이티드 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
JP2020107306A (ja) * 2018-12-27 2020-07-09 グラフコアー リミテッドGraphcore Limited マルチスレッドプロセッサの命令キャッシュ

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE392662T1 (de) * 2002-01-30 2008-05-15 Real Entpr Solutions Dev Bv Verfahren und programme zur einstellung von prioritätsstufen in einem datenverarbeitungssystem mit multiprogrammierung und priorisierte warteschlangenbildung
US7248594B2 (en) * 2002-06-14 2007-07-24 Intel Corporation Efficient multi-threaded multi-processor scheduling implementation
US7360220B2 (en) * 2002-10-31 2008-04-15 Intel Corporation Methods and apparatus for multi-threading using differently coded software segments to perform an algorithm
US7401207B2 (en) 2003-04-25 2008-07-15 International Business Machines Corporation Apparatus and method for adjusting instruction thread priority in a multi-thread processor
US7401208B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Method and apparatus for randomizing instruction thread interleaving in a multi-thread processor
US7360062B2 (en) * 2003-04-25 2008-04-15 International Business Machines Corporation Method and apparatus for selecting an instruction thread for processing in a multi-thread processor
US7380247B2 (en) * 2003-07-24 2008-05-27 International Business Machines Corporation System for delaying priority boost in a priority offset amount only after detecting of preemption event during access to critical section
US8607241B2 (en) * 2004-06-30 2013-12-10 Intel Corporation Compare and exchange operation using sleep-wakeup mechanism
JP2006079394A (ja) * 2004-09-10 2006-03-23 Renesas Technology Corp データ処理装置
WO2008109870A1 (en) * 2007-03-07 2008-09-12 Spinealign Medical, Inc. Transdiscal interbody fusion device and method
JP5045159B2 (ja) * 2007-03-12 2012-10-10 三菱電機株式会社 制御用サブユニットおよび制御用メインユニット
GB2447907B (en) * 2007-03-26 2009-02-18 Imagination Tech Ltd Processing long-latency instructions in a pipelined processor
WO2009107462A1 (ja) * 2008-02-26 2009-09-03 日本電気株式会社 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム
US8933953B2 (en) * 2008-06-30 2015-01-13 Intel Corporation Managing active thread dependencies in graphics processing
US20100031268A1 (en) * 2008-07-31 2010-02-04 Dwyer Michael K Thread ordering techniques
KR101892273B1 (ko) * 2011-10-12 2018-08-28 삼성전자주식회사 스레드 프로그레스 트래킹 방법 및 장치
US9697003B2 (en) 2013-06-07 2017-07-04 Advanced Micro Devices, Inc. Method and system for yield operation supporting thread-like behavior
US10055228B2 (en) * 2013-08-19 2018-08-21 Shanghai Xinhao Microelectronics Co. Ltd. High performance processor system and method based on general purpose units
US9608751B2 (en) 2015-03-18 2017-03-28 Accedian Networks Inc. Simplified synchronized Ethernet implementation
US10481913B2 (en) * 2017-08-16 2019-11-19 Mediatek Singapore Pte. Ltd. Token-based data dependency protection for memory access
CN109445854B (zh) * 2018-10-31 2019-11-05 中科驭数(北京)科技有限公司 数据传输方法及装置
CN112181492A (zh) * 2020-09-23 2021-01-05 北京奕斯伟计算技术有限公司 一种指令处理方法、指令处理装置和芯片

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574928A (en) * 1993-10-29 1996-11-12 Advanced Micro Devices, Inc. Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments
US5812811A (en) 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
US6061521A (en) * 1996-12-02 2000-05-09 Compaq Computer Corp. Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle
US5881307A (en) * 1997-02-24 1999-03-09 Samsung Electronics Co., Ltd. Deferred store data read with simple anti-dependency pipeline inter-lock control in superscalar processor

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100745904B1 (ko) 2003-04-21 2007-08-02 인터내셔널 비지네스 머신즈 코포레이션 동시적 멀티스레드 프로세서에서 파이프라인 길이를변경하기 위한 방법 및 회로
JP2005182825A (ja) * 2003-12-18 2005-07-07 Nvidia Corp マルチスレッド式マイクロプロセッサのスレッドにまたがるアウト・オブ・オーダー命令ディスパッチ
US7409520B2 (en) 2005-01-25 2008-08-05 International Business Machines Corporation Systems and methods for time division multiplex multithreading
US7953951B2 (en) 2005-01-25 2011-05-31 International Business Machines Corporation Systems and methods for time division multiplex multithreading
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
US8117425B2 (en) 2007-04-18 2012-02-14 Nec Corporation Multithread processor and method of synchronization operations among threads to be used in same
KR20150111990A (ko) * 2013-01-29 2015-10-06 어드밴스드 마이크로 디바이시즈, 인코포레이티드 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
KR101702651B1 (ko) 2013-01-29 2017-02-03 어드밴스드 마이크로 디바이시즈, 인코포레이티드 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
JP2020107306A (ja) * 2018-12-27 2020-07-09 グラフコアー リミテッドGraphcore Limited マルチスレッドプロセッサの命令キャッシュ
US11567768B2 (en) 2018-12-27 2023-01-31 Graphcore Limited Repeat instruction for loading and/or executing code in a claimable repeat cache a specified number of times

Also Published As

Publication number Publication date
US20020129227A1 (en) 2002-09-12
JP3796124B2 (ja) 2006-07-12
US6978460B2 (en) 2005-12-20

Similar Documents

Publication Publication Date Title
JP2002268878A (ja) スレッド間優先度可変プロセッサ
US10528356B2 (en) Tightly coupled processor arrays using coarse grained reconfigurable architecture with iteration level commits
US6088788A (en) Background completion of instruction and associated fetch request in a multithread processor
US20230106990A1 (en) Executing multiple programs simultaneously on a processor core
US9037837B2 (en) Hardware assist thread for increasing code parallelism
US6279100B1 (en) Local stall control method and structure in a microprocessor
TWI571799B (zh) 以硬體限制為基礎而利用可調整之交易尺寸來動態地最佳化程式碼的裝置、方法與機器可讀媒體
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
US7111126B2 (en) Apparatus and method for loading data values
US20170123795A1 (en) Tightly coupled processor arrays using coarse grained reconfigurable architecture with iteration level commits
US20170083343A1 (en) Out of order commit
WO2000033183A9 (en) Method and structure for local stall control in a microprocessor
JP4230504B2 (ja) データプロセッサ
US10824429B2 (en) Commit logic and precise exceptions in explicit dataflow graph execution architectures
CA2986061A1 (en) Block-based architecture with parallel execution of successive blocks
WO2007027671A2 (en) Scheduling mechanism of a hierarchical processor including multiple parallel clusters
JP3400458B2 (ja) 情報処理装置
US20170371659A1 (en) Load-store queue for block-based processor
JPH07152566A (ja) スーパーパイプライン式スーパースカラーマイクロプロセッサ用の書き込みバッファ
US7725659B2 (en) Alignment of cache fetch return data relative to a thread
JP2000330788A (ja) コンピュータシステム
JPH04153734A (ja) 並列処理装置
US6928534B2 (en) Forwarding load data to younger instructions in annex
JPH10283178A (ja) 命令を発行するための方法及びシステム
EP2843543B1 (en) Arithmetic processing device and control method of arithmetic processing device

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040326

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040329

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20051003

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051011

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051212

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20051212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060313

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060404

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060414

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090421

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100421

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100421

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110421

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110421

Year of fee payment: 5

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110421

Year of fee payment: 5

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120421

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120421

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130421

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140421

Year of fee payment: 8

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees