JP3169779B2 - マルチスレッドプロセッサ - Google Patents
マルチスレッドプロセッサInfo
- Publication number
- JP3169779B2 JP3169779B2 JP31524194A JP31524194A JP3169779B2 JP 3169779 B2 JP3169779 B2 JP 3169779B2 JP 31524194 A JP31524194 A JP 31524194A JP 31524194 A JP31524194 A JP 31524194A JP 3169779 B2 JP3169779 B2 JP 3169779B2
- Authority
- JP
- Japan
- Prior art keywords
- thread
- register
- instruction
- link
- processor
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Description
【0001】
【産業上の利用分野】本発明は、プロセッサあるいはマ
イクロプロセッサに関し、特に複数のスレッドから構成
されたプログラムの処理を複数のプロセッサ間でスレッ
ド単位で分担して並列に処理することを可能とするマル
チスレッドプロセッサに関する。
イクロプロセッサに関し、特に複数のスレッドから構成
されたプログラムの処理を複数のプロセッサ間でスレッ
ド単位で分担して並列に処理することを可能とするマル
チスレッドプロセッサに関する。
【0002】
【従来の技術】複数のプロセッサから構成される並列プ
ロセッサシステムにおいて、一つのプログラムを並列に
実行することにより高性能化を実現するプログラム並列
実行方法の一つとしてマルチスレッド実行方法が知られ
ている。マルチスレッド実行方法を実現するために都合
が良いような内部構成を持ったプロセッサをマルチスレ
ッドプロセッサと呼ぶ。
ロセッサシステムにおいて、一つのプログラムを並列に
実行することにより高性能化を実現するプログラム並列
実行方法の一つとしてマルチスレッド実行方法が知られ
ている。マルチスレッド実行方法を実現するために都合
が良いような内部構成を持ったプロセッサをマルチスレ
ッドプロセッサと呼ぶ。
【0003】マルチスレッド実行方法では、一つのプロ
グラムが複数の並列実行可能なスレッドにより構成され
ており、これらのスレッドを複数のマルチスレッドプロ
セッサ上で同時並列に処理する。一つ一つのスレッドは
複数の命令から構成される命令列である。マルチスレッ
ドプロセッサは、一般に、スレッド並列起動命令、スレ
ッド終了命令、スレッド逐次起動命令、スレッド戻り命
令を有している。スレッド並列起動命令の動作は、スレ
ッド記述子を生成し、これを他のマルチスレッドプロセ
ッサへ送出することである。一方、あるマルチスレッド
プロセッサ上で並列に起動された実行中のスレッドは、
スレッド終了命令によりその実行を終了する。スレッド
終了命令によりスレッドの実行を終了した際、マルチス
レッドプロセッサは他のマルチスレッドプロセッサまた
は当該マルチスレッドプロセッサ自身から新しいスレッ
ド記述子を受け取り、その指示に従って、新しいスレッ
ドの実行を開始する。このようにしてスレッドの実行を
開始することを並列起動と呼ぶことにする。スレッド逐
次起動命令の動作は、実行中のスレッドの処理を一時中
断し、当該スレッド逐次起動命令により指定された別の
スレッドを逐次的に起動することである。スレッド戻り
命令は、スレッド逐次起動命令で起動されたスレッドの
中にのみ存在する命令である。逐次的に起動された実行
中のスレッドはスレッド戻り命令によりその実行を終了
し、当該スレッドが逐次的に起動される前に実行されて
いたスレッドの実行を再開する。スレッド逐次起動命令
と戻り命令は、通常のプロセッサに存在する、手続き呼
びだし命令、手続き戻り命令とそれぞれ同等の命令であ
る。
グラムが複数の並列実行可能なスレッドにより構成され
ており、これらのスレッドを複数のマルチスレッドプロ
セッサ上で同時並列に処理する。一つ一つのスレッドは
複数の命令から構成される命令列である。マルチスレッ
ドプロセッサは、一般に、スレッド並列起動命令、スレ
ッド終了命令、スレッド逐次起動命令、スレッド戻り命
令を有している。スレッド並列起動命令の動作は、スレ
ッド記述子を生成し、これを他のマルチスレッドプロセ
ッサへ送出することである。一方、あるマルチスレッド
プロセッサ上で並列に起動された実行中のスレッドは、
スレッド終了命令によりその実行を終了する。スレッド
終了命令によりスレッドの実行を終了した際、マルチス
レッドプロセッサは他のマルチスレッドプロセッサまた
は当該マルチスレッドプロセッサ自身から新しいスレッ
ド記述子を受け取り、その指示に従って、新しいスレッ
ドの実行を開始する。このようにしてスレッドの実行を
開始することを並列起動と呼ぶことにする。スレッド逐
次起動命令の動作は、実行中のスレッドの処理を一時中
断し、当該スレッド逐次起動命令により指定された別の
スレッドを逐次的に起動することである。スレッド戻り
命令は、スレッド逐次起動命令で起動されたスレッドの
中にのみ存在する命令である。逐次的に起動された実行
中のスレッドはスレッド戻り命令によりその実行を終了
し、当該スレッドが逐次的に起動される前に実行されて
いたスレッドの実行を再開する。スレッド逐次起動命令
と戻り命令は、通常のプロセッサに存在する、手続き呼
びだし命令、手続き戻り命令とそれぞれ同等の命令であ
る。
【0004】このようなマルチスレッドプロセッサとこ
れを用いた並列プロセッサシステムに関する従来の文献
としては、R.S.Nikhil,G.M.Papad
opoulos and Arvind,“* T:A
MultithreadedMassively pa
rallel Architecture”,InPr
oceedings of the 19th Ann
ual International Symposi
um on Computer Architectu
re,pages 156−167,May 1992
などがある。スレッド並列起動命令は、フォーク命令や
スタート命令、スレッド終了命令は、ストップ命令やエ
グジット命令などと呼ばれることが多い。
れを用いた並列プロセッサシステムに関する従来の文献
としては、R.S.Nikhil,G.M.Papad
opoulos and Arvind,“* T:A
MultithreadedMassively pa
rallel Architecture”,InPr
oceedings of the 19th Ann
ual International Symposi
um on Computer Architectu
re,pages 156−167,May 1992
などがある。スレッド並列起動命令は、フォーク命令や
スタート命令、スレッド終了命令は、ストップ命令やエ
グジット命令などと呼ばれることが多い。
【0005】マルチスレッド実行方法の従来技術の一つ
で、本発明に関係する技術として、スレッド並列起動命
令によるスレッド並列起動動作を動的に制限する技術が
ある。これについては、特願平6−188147号明細
書に述べられている。スレッド並列起動動作の動的な制
限とは、並列マルチスレッドプロセッサシステムにおい
て、すでに十分な数のスレッドが存在する場合に、新た
なスレッドの並列起動動作を動的に中止し、かわりに実
行中のスレッドから当該のスレッドを逐次起動するとい
うことを意味する。このような技術により、過度な並列
性が抽出されることを動的に防止することが出来る。
で、本発明に関係する技術として、スレッド並列起動命
令によるスレッド並列起動動作を動的に制限する技術が
ある。これについては、特願平6−188147号明細
書に述べられている。スレッド並列起動動作の動的な制
限とは、並列マルチスレッドプロセッサシステムにおい
て、すでに十分な数のスレッドが存在する場合に、新た
なスレッドの並列起動動作を動的に中止し、かわりに実
行中のスレッドから当該のスレッドを逐次起動するとい
うことを意味する。このような技術により、過度な並列
性が抽出されることを動的に防止することが出来る。
【0006】
【発明が解決しようとする課題】あるスレッドが別のス
レッドを他のマルチスレッドプロセッサ上で並列に起動
するためには、一般に、当該スレッドが使用する引数を
引き渡す必要がある。つまりスレッドの実行にあたって
は引数が必要であり、その引数は起動時に引き渡され
る。引数の引き渡しを実現するための従来の第1の方法
はスレッド記述子の中に直接引数を入れて送出する方法
である。この方法は、一般には引数の数が分からず、非
常に大きくなってしまうこともあるので、スレッド記述
子の大きさが不定になってしまいかつその大きさの上限
を抑えることが難しく、スレッド記述子の管理が大変に
なってしまうという欠点がある。
レッドを他のマルチスレッドプロセッサ上で並列に起動
するためには、一般に、当該スレッドが使用する引数を
引き渡す必要がある。つまりスレッドの実行にあたって
は引数が必要であり、その引数は起動時に引き渡され
る。引数の引き渡しを実現するための従来の第1の方法
はスレッド記述子の中に直接引数を入れて送出する方法
である。この方法は、一般には引数の数が分からず、非
常に大きくなってしまうこともあるので、スレッド記述
子の大きさが不定になってしまいかつその大きさの上限
を抑えることが難しく、スレッド記述子の管理が大変に
なってしまうという欠点がある。
【0007】また、従来の第2の方法は、生成する側の
スレッドが引数をメモリ装置に書き込み、書き込んだ場
所へのポインタを生成される側のスレッドにスレッド記
述子により教える方法である。この方法の場合、並列起
動する側のスレッドは、レジスタファイル装置からメモ
リ装置へストア命令により引数を一つずつ書き込み、そ
の後にスレッド並列起動命令によりスレッド記述子を送
出する。並列起動される側のスレッドは、ロード命令に
よりメモリ装置からレジスタファイル装置へ一つずつ引
数を読み出す。このように、従来技術の第2の方法で
は、引数の引き渡しに非常に時間がかかるという問題が
ある。
スレッドが引数をメモリ装置に書き込み、書き込んだ場
所へのポインタを生成される側のスレッドにスレッド記
述子により教える方法である。この方法の場合、並列起
動する側のスレッドは、レジスタファイル装置からメモ
リ装置へストア命令により引数を一つずつ書き込み、そ
の後にスレッド並列起動命令によりスレッド記述子を送
出する。並列起動される側のスレッドは、ロード命令に
よりメモリ装置からレジスタファイル装置へ一つずつ引
数を読み出す。このように、従来技術の第2の方法で
は、引数の引き渡しに非常に時間がかかるという問題が
ある。
【0008】また、スレッド並列起動動作の動的な制限
を行なう従来技術では、スレッド並列起動命令によるス
レッド記述子の送出が可能かどうかを確かめ、この結果
に応じてスレッド記述子を送出するか、もしくは逐次的
にスレッドの実行を開始するかの動作の選択を行なう。
前述の特願平6−188147号では、このような動作
をスレッド並列起動命令により実現する方法が述べられ
ているが、しかしながら、引数の引き渡し方法について
は触れられていない。スレッド並列起動命令によるスレ
ッド記述子の送出が可能かどうかは、当該スレッド並列
起動命令を実行してみるまでわからないので、上記の第
2の方法では、可能な場合への対処として、上に説明し
たようにスレッド並列起動命令の前に引数をメモリ装置
に書き込んでおく必要が生じる。すなわち、逐次起動を
行なう場合にも、メモリ装置に引数を書き込んでおく必
要が生じる。一方、逐次的にスレッドを起動する場合の
効率的な引数の引き渡し方として、一般にレジスタ渡し
の名前でよく知られているように、レジスタファイル装
置内に引数を保持しておいてスレッド逐次起動命令を実
行する方法がある。上に説明したように、スレッド並列
起動動作が不可能であった場合に、スレッドの逐次起動
を行なう場合は前もって引数をメモリ装置に書き込んで
おくので、並列起動動作の失敗にともなう逐次起動はス
レッド逐次起動命令によるスレッドの逐次起動よりも大
幅に時間的なオーバーヘッドが大きいという問題が生じ
る。
を行なう従来技術では、スレッド並列起動命令によるス
レッド記述子の送出が可能かどうかを確かめ、この結果
に応じてスレッド記述子を送出するか、もしくは逐次的
にスレッドの実行を開始するかの動作の選択を行なう。
前述の特願平6−188147号では、このような動作
をスレッド並列起動命令により実現する方法が述べられ
ているが、しかしながら、引数の引き渡し方法について
は触れられていない。スレッド並列起動命令によるスレ
ッド記述子の送出が可能かどうかは、当該スレッド並列
起動命令を実行してみるまでわからないので、上記の第
2の方法では、可能な場合への対処として、上に説明し
たようにスレッド並列起動命令の前に引数をメモリ装置
に書き込んでおく必要が生じる。すなわち、逐次起動を
行なう場合にも、メモリ装置に引数を書き込んでおく必
要が生じる。一方、逐次的にスレッドを起動する場合の
効率的な引数の引き渡し方として、一般にレジスタ渡し
の名前でよく知られているように、レジスタファイル装
置内に引数を保持しておいてスレッド逐次起動命令を実
行する方法がある。上に説明したように、スレッド並列
起動動作が不可能であった場合に、スレッドの逐次起動
を行なう場合は前もって引数をメモリ装置に書き込んで
おくので、並列起動動作の失敗にともなう逐次起動はス
レッド逐次起動命令によるスレッドの逐次起動よりも大
幅に時間的なオーバーヘッドが大きいという問題が生じ
る。
【0009】更に従来技術のもう一つの問題点として、
スレッドを並列起動する場合と、スレッドを逐次起動す
る場合において、スレッドの命令列の構成方法が異なる
という問題点がある。これは、端的には、スレッドの終
了方法に現れており、並列に起動されたスレッドを終了
する場合はスレッド終了命令を用い、逐次起動されたス
レッドを終了する場合はスレッド戻り命令を用いる。ま
た、並列起動の動的な制限を行なう場合に、前述の第2
の方法で、逐次起動の場合にレジスタ渡しで引数を引き
渡そうとする場合、これはスレッドを実際に起動する前
にスレッド記述子の送出が可能かどうかをあらかじめ判
断することにより可能になるのであるが、レジスタ渡し
とメモリ渡しと二通りの命令列を用意し、条件判断によ
りどちらかを実行するようにする必要が生じる。する
と、その条件判断のために余計な命令を必要とし、また
双方の命令列を用意しておく必要があるため、命令実行
時間、命令サイズの双方においてオーバーヘッドを生じ
る。
スレッドを並列起動する場合と、スレッドを逐次起動す
る場合において、スレッドの命令列の構成方法が異なる
という問題点がある。これは、端的には、スレッドの終
了方法に現れており、並列に起動されたスレッドを終了
する場合はスレッド終了命令を用い、逐次起動されたス
レッドを終了する場合はスレッド戻り命令を用いる。ま
た、並列起動の動的な制限を行なう場合に、前述の第2
の方法で、逐次起動の場合にレジスタ渡しで引数を引き
渡そうとする場合、これはスレッドを実際に起動する前
にスレッド記述子の送出が可能かどうかをあらかじめ判
断することにより可能になるのであるが、レジスタ渡し
とメモリ渡しと二通りの命令列を用意し、条件判断によ
りどちらかを実行するようにする必要が生じる。する
と、その条件判断のために余計な命令を必要とし、また
双方の命令列を用意しておく必要があるため、命令実行
時間、命令サイズの双方においてオーバーヘッドを生じ
る。
【0010】一方、マイクロプロセッサにおいて、レジ
スタファイル装置とメモリ装置の間のデータ転送バンド
幅を広くする技術として、特願平6−190447号に
述べられた技術がある。この従来技術はレジスタファイ
ル装置を複数のレジスタバンクから構成し、レジスタバ
ンクの大きさ単位でレジスタファイル装置とメモリ装置
との間でデータの転送を行なう技術である。
スタファイル装置とメモリ装置の間のデータ転送バンド
幅を広くする技術として、特願平6−190447号に
述べられた技術がある。この従来技術はレジスタファイ
ル装置を複数のレジスタバンクから構成し、レジスタバ
ンクの大きさ単位でレジスタファイル装置とメモリ装置
との間でデータの転送を行なう技術である。
【0011】本発明は、特願平6−190447号明細
書に述べられた広いデータ転送バンド幅を有するプロセ
ッサであって、上に述べたスレッドの並列起動時の引数
の引き渡しにともなう実行時間上のオーバーヘッドが大
きいという問題を解決する実行効率の良いマルチスレッ
ドプロセッサを提供する。また、本発明は、スレッド並
列起動動作の動的な制限を行なった場合のスレッドの逐
次起動の実行時間上のオーバーヘッドを、スレッド逐次
起動命令による逐次起動と同一の時間的オーバーヘッド
にまで減少することを可能とするものである。更に、本
発明によるマルチスレッドプロセッサは、並列起動の場
合でも、逐次起動の場合でも、同一の命令列でスレッド
を構成することを可能とする。
書に述べられた広いデータ転送バンド幅を有するプロセ
ッサであって、上に述べたスレッドの並列起動時の引数
の引き渡しにともなう実行時間上のオーバーヘッドが大
きいという問題を解決する実行効率の良いマルチスレッ
ドプロセッサを提供する。また、本発明は、スレッド並
列起動動作の動的な制限を行なった場合のスレッドの逐
次起動の実行時間上のオーバーヘッドを、スレッド逐次
起動命令による逐次起動と同一の時間的オーバーヘッド
にまで減少することを可能とするものである。更に、本
発明によるマルチスレッドプロセッサは、並列起動の場
合でも、逐次起動の場合でも、同一の命令列でスレッド
を構成することを可能とする。
【0012】
【課題を解決するための手段】以上のような課題を解決
するために、本発明のマルチスレッドプロセッサは、命
令パイプライン装置とレジスタファイル装置を有し、こ
のレジスタファイルが複数のレジスタバンクから構成さ
れこのレジスタバンク内に記憶される内容をレジスタフ
レームとし、命令の種類としてスレッド並列起動命令、
スレッド終了命令、スレッド逐次起動命令、及びスレッ
ド戻り命令を有し、一つのプロセッサから生成される複
数のスレッドの処理を順次行なうマルチスレッドプロセ
ッサにおいて、前記スレッド並列起動命令及び前記スレ
ッド逐次起動命令の実行に際し、任意数の前記レジスタ
フレームをレジスタファイル装置からメモリ装置へ退避
する手段と、前記スレッド終了命令及び前記スレッド戻
り命令の実行に際し、任意数の前記レジスタフレームを
前記メモリ装置からレジスタファイル装置へ回復させる
手段を有することを特徴とする。
するために、本発明のマルチスレッドプロセッサは、命
令パイプライン装置とレジスタファイル装置を有し、こ
のレジスタファイルが複数のレジスタバンクから構成さ
れこのレジスタバンク内に記憶される内容をレジスタフ
レームとし、命令の種類としてスレッド並列起動命令、
スレッド終了命令、スレッド逐次起動命令、及びスレッ
ド戻り命令を有し、一つのプロセッサから生成される複
数のスレッドの処理を順次行なうマルチスレッドプロセ
ッサにおいて、前記スレッド並列起動命令及び前記スレ
ッド逐次起動命令の実行に際し、任意数の前記レジスタ
フレームをレジスタファイル装置からメモリ装置へ退避
する手段と、前記スレッド終了命令及び前記スレッド戻
り命令の実行に際し、任意数の前記レジスタフレームを
前記メモリ装置からレジスタファイル装置へ回復させる
手段を有することを特徴とする。
【0013】また本発明は、レジスタバンクの種類の一
つとしてリンクレジスタバンクを規定し、このリンクレ
ジスタバンクに記憶されたレジスタフレームを前記メモ
リ装置内に記憶させる際のメモリ位置を示すポインタと
してリンクポインタを規定し、前記スレッド並列起動命
令の実行にあたって、マルチスレッドプロセッサがスレ
ッド記述子を他のマルチスレッドプロセッサへ送出する
際に、前記スレッド記述子内に前記リンクポインタを格
納し、任意個数の前記リンクレジスタバンク内に記憶さ
れた任意個数のレジスタフレームを前記メモリ装置内の
前記リンクポインタで指定されるメモリ位置に退避する
手段を有する。
つとしてリンクレジスタバンクを規定し、このリンクレ
ジスタバンクに記憶されたレジスタフレームを前記メモ
リ装置内に記憶させる際のメモリ位置を示すポインタと
してリンクポインタを規定し、前記スレッド並列起動命
令の実行にあたって、マルチスレッドプロセッサがスレ
ッド記述子を他のマルチスレッドプロセッサへ送出する
際に、前記スレッド記述子内に前記リンクポインタを格
納し、任意個数の前記リンクレジスタバンク内に記憶さ
れた任意個数のレジスタフレームを前記メモリ装置内の
前記リンクポインタで指定されるメモリ位置に退避する
手段を有する。
【0014】また本発明は、スレッド終了命令の実行に
あたって、マルチスレッドプロセッサがスレッド記述子
を受けとり新しいスレッドを並列起動する際に、当該ス
レッド記述子内のリンクポインタを用い、メモリ装置内
の当該リンクポインタで指定されるメモリ位置から任意
個数のレジスタフレームを任意個数のリンクレジスタバ
ンクへ回復する手段を有する。
あたって、マルチスレッドプロセッサがスレッド記述子
を受けとり新しいスレッドを並列起動する際に、当該ス
レッド記述子内のリンクポインタを用い、メモリ装置内
の当該リンクポインタで指定されるメモリ位置から任意
個数のレジスタフレームを任意個数のリンクレジスタバ
ンクへ回復する手段を有する。
【0015】また本発明は、レジスタバンクの種類の一
つとして、コンテキストレジスタバンクを規定し、前記
コンテキストレジスタバンクに記憶されたレジスタフレ
ームをメモリ装置内に記憶する際のメモリ位置を示すポ
インタとしてコンテキストポインタを規定し、スレッド
逐次起動命令の実行にあたって、実行中のスレッドの処
理を中断し、新たなスレッドを逐次起動する際に、任意
個数のコンテキストレジスタバンク内に記憶された任意
個数のレジスタフレームを、メモリ装置のコンテキスト
ポインタで指定されるメモリ位置に退避する手段を有す
る。
つとして、コンテキストレジスタバンクを規定し、前記
コンテキストレジスタバンクに記憶されたレジスタフレ
ームをメモリ装置内に記憶する際のメモリ位置を示すポ
インタとしてコンテキストポインタを規定し、スレッド
逐次起動命令の実行にあたって、実行中のスレッドの処
理を中断し、新たなスレッドを逐次起動する際に、任意
個数のコンテキストレジスタバンク内に記憶された任意
個数のレジスタフレームを、メモリ装置のコンテキスト
ポインタで指定されるメモリ位置に退避する手段を有す
る。
【0016】また本発明は、スレッド戻り命令の実行に
あたって、当該スレッドが逐次起動される前に実行され
ていたスレッドの実行を再開する際に、メモリ装置のコ
ンテキストポインタで指定されるメモリ位置から任意個
数のレジスタフレームを任意個数のコンテキストレジス
タバンクへ回復する手段を有する。
あたって、当該スレッドが逐次起動される前に実行され
ていたスレッドの実行を再開する際に、メモリ装置のコ
ンテキストポインタで指定されるメモリ位置から任意個
数のレジスタフレームを任意個数のコンテキストレジス
タバンクへ回復する手段を有する。
【0017】また本発明は、スレッド並列起動命令の実
行にあたって、マルチスレッドプロセッサがスレッド記
述子を送出する際に、まず前記スレッド記述子の送出が
可能かどうかを判断し、可能な場合は、前記スレッド記
述子内に前記リンクポインタを格納した前記スレッド記
述子を送出し、任意個数の前記リンクレジスタバンク内
に記憶された任意個数の前記レジスタフレームを前記メ
モリ装置内の前記リンクポインタで指定されるメモリ位
置に退避する手段と、可能でない場合は、任意個数の前
記コンテキストレジスタバンク内に記憶された任意個数
の前記レジスタフレームを、前記メモリ装置の前記コン
テキストポインタで指定されるメモリ位置に退避する手
段を有する。
行にあたって、マルチスレッドプロセッサがスレッド記
述子を送出する際に、まず前記スレッド記述子の送出が
可能かどうかを判断し、可能な場合は、前記スレッド記
述子内に前記リンクポインタを格納した前記スレッド記
述子を送出し、任意個数の前記リンクレジスタバンク内
に記憶された任意個数の前記レジスタフレームを前記メ
モリ装置内の前記リンクポインタで指定されるメモリ位
置に退避する手段と、可能でない場合は、任意個数の前
記コンテキストレジスタバンク内に記憶された任意個数
の前記レジスタフレームを、前記メモリ装置の前記コン
テキストポインタで指定されるメモリ位置に退避する手
段を有する。
【0018】また本発明は、マルチスレッドプロセッサ
内に逐次起動フラグを有し、スレッド終了命令の実行に
あたって、実行中のスレッドの処理を終了する際に、ま
ず前記逐次起動フラグを参照することにより、当該スレ
ッドが並列起動されたか逐次起動されたかを判断し、並
列起動された場合は、実行中の前記スレッドの処理を終
了し、前記スレッド記述子を他のマルチスレッドプロセ
ッサもしくは当該マルチスレッドプロセッサより受信
し、当該スレッド記述子内の前記リンクポインタを用
い、前記メモリ装置内の当該リンクポインタで指定され
るメモリ位置から任意個数のレジスタフレームを任意個
数のリンクレジスタバンクへ読み出す手段と、逐次的に
起動された場合は、実行中の前記スレッドの処理を終了
し、前記メモリ装置の前記コンテキストポインタで指定
されるメモリ位置から任意個数の前記レジスタフレーム
を任意個数の前記コンテキストレジスタバンク内に読み
出す手段を有する。
内に逐次起動フラグを有し、スレッド終了命令の実行に
あたって、実行中のスレッドの処理を終了する際に、ま
ず前記逐次起動フラグを参照することにより、当該スレ
ッドが並列起動されたか逐次起動されたかを判断し、並
列起動された場合は、実行中の前記スレッドの処理を終
了し、前記スレッド記述子を他のマルチスレッドプロセ
ッサもしくは当該マルチスレッドプロセッサより受信
し、当該スレッド記述子内の前記リンクポインタを用
い、前記メモリ装置内の当該リンクポインタで指定され
るメモリ位置から任意個数のレジスタフレームを任意個
数のリンクレジスタバンクへ読み出す手段と、逐次的に
起動された場合は、実行中の前記スレッドの処理を終了
し、前記メモリ装置の前記コンテキストポインタで指定
されるメモリ位置から任意個数の前記レジスタフレーム
を任意個数の前記コンテキストレジスタバンク内に読み
出す手段を有する。
【0019】また本発明は、レジスタバンクとメモリ装
置間のレジスタフレームの退避、回復、読み出しを一括
して行なうレジスタフレームロード/ストア手段を有す
る。
置間のレジスタフレームの退避、回復、読み出しを一括
して行なうレジスタフレームロード/ストア手段を有す
る。
【0020】
【実施例】図1は本発明によるマルチスレッドプロセッ
サの一実施例を示したブロック構成図である。図1にお
いて本実施例のマルチスレッドプロセッサ100は、レ
ジスタファイル装置120と命令パイプライン装置14
0とから構成されている。レジスタファイル装置120
は複数のレジスタバンク130を含んでいる。命令パイ
プライン装置140は他のマルチスレッドプロセッサ1
00とスレッド記述子受信線141、スレッド記述子送
信線142を介して接続される。また、命令パイプライ
ン装置140は、レジスタファイル装置120とレジス
タ指定線143、レジスタ読み出し線144、レジスタ
書き込み線145を介して接続され、メモリ装置190
と命令読み出し線146、アドレス指定線147、デー
タロード/ストア線148を介して接続される。レジス
タファイル装置120はメモリ装置190とレジスタフ
レームロード/ストア線121を介して接続される。メ
モリ装置190は他のマルチスレッドプロセッサ100
とも同様に接続されている。
サの一実施例を示したブロック構成図である。図1にお
いて本実施例のマルチスレッドプロセッサ100は、レ
ジスタファイル装置120と命令パイプライン装置14
0とから構成されている。レジスタファイル装置120
は複数のレジスタバンク130を含んでいる。命令パイ
プライン装置140は他のマルチスレッドプロセッサ1
00とスレッド記述子受信線141、スレッド記述子送
信線142を介して接続される。また、命令パイプライ
ン装置140は、レジスタファイル装置120とレジス
タ指定線143、レジスタ読み出し線144、レジスタ
書き込み線145を介して接続され、メモリ装置190
と命令読み出し線146、アドレス指定線147、デー
タロード/ストア線148を介して接続される。レジス
タファイル装置120はメモリ装置190とレジスタフ
レームロード/ストア線121を介して接続される。メ
モリ装置190は他のマルチスレッドプロセッサ100
とも同様に接続されている。
【0021】図2は図1の命令パイプライン装置140
を詳細に示したブロック構成図である。図2において命
令パイプライン装置140は命令読み出し装置210、
命令解読装置220、レジスタ読み出し装置230、演
算装置240、データ読み書き装置250、レジスタ書
き込み装置260、プログラムカウンタ270などを含
んでおり、これらの装置を用いて、順次、スレッドを構
成する命令の処理を行なう。ここで述べたような構成を
有する命令パイプライン装置140における、スレッド
並列起動命令、スレッド終了命令、スレッド逐次起動命
令、スレッド戻り命令以外の一般の命令の処理は周知の
技術であるので、本実施例においては説明を割愛する。
を詳細に示したブロック構成図である。図2において命
令パイプライン装置140は命令読み出し装置210、
命令解読装置220、レジスタ読み出し装置230、演
算装置240、データ読み書き装置250、レジスタ書
き込み装置260、プログラムカウンタ270などを含
んでおり、これらの装置を用いて、順次、スレッドを構
成する命令の処理を行なう。ここで述べたような構成を
有する命令パイプライン装置140における、スレッド
並列起動命令、スレッド終了命令、スレッド逐次起動命
令、スレッド戻り命令以外の一般の命令の処理は周知の
技術であるので、本実施例においては説明を割愛する。
【0022】図2の命令パイプライン装置140は、こ
れらの他に、スレッド記述子受信バッファ280とスレ
ッド記述子送出バッファ290を含んでおり、これらは
マルチスレッドプロセッサに特徴的なものである。本発
明におけるマルチスレッドプロセッサ100において
は、スレッド記述子受信バッファ280とスレッド記述
子送信バッファ290を命令ポインタ282(292)
とリンクポインタ284(294)で構成している点
が、命令パイプライン装置140の特徴的な構成となっ
ている。
れらの他に、スレッド記述子受信バッファ280とスレ
ッド記述子送出バッファ290を含んでおり、これらは
マルチスレッドプロセッサに特徴的なものである。本発
明におけるマルチスレッドプロセッサ100において
は、スレッド記述子受信バッファ280とスレッド記述
子送信バッファ290を命令ポインタ282(292)
とリンクポインタ284(294)で構成している点
が、命令パイプライン装置140の特徴的な構成となっ
ている。
【0023】図3は図1の実施例におけるレジスタファ
イル装置120を詳細に示したブロック構成図である。
図3においてレジスタファイル装置120は複数のレジ
スタバンク130と指定装置310、読み書き装置32
0とから構成されている。レジスタバンク130は複数
のレジスタ330から構成されており、全てのレジスタ
バンク130は同数のレジスタ330から構成されてい
る。図3の実施例では、レジスタバンク130の数が4
つの場合を示しているが、本発明はこれに捕らわれるも
のではない。本発明のレジスタファイル装置120にお
いては、レジスタバンク130には少なくともリンクレ
ジスタバンク130−Lとコンテキストレジスタバンク
130−Cの二つの種類が存在する。それぞれの種類の
レジスタバンク130がいくつずつ存在するかは任意で
あり、図3の実施例では、それぞれ一つずつ存在する場
合を示している。全てのレジスタバンク130がリンク
レジスタバンク130−Lもしくはコンテキストレジス
タバンク130−Cのいずれかである場合も可能である
し、使用方法を特定しない、任意用途のレジスタバンク
を設定することも可能である。
イル装置120を詳細に示したブロック構成図である。
図3においてレジスタファイル装置120は複数のレジ
スタバンク130と指定装置310、読み書き装置32
0とから構成されている。レジスタバンク130は複数
のレジスタ330から構成されており、全てのレジスタ
バンク130は同数のレジスタ330から構成されてい
る。図3の実施例では、レジスタバンク130の数が4
つの場合を示しているが、本発明はこれに捕らわれるも
のではない。本発明のレジスタファイル装置120にお
いては、レジスタバンク130には少なくともリンクレ
ジスタバンク130−Lとコンテキストレジスタバンク
130−Cの二つの種類が存在する。それぞれの種類の
レジスタバンク130がいくつずつ存在するかは任意で
あり、図3の実施例では、それぞれ一つずつ存在する場
合を示している。全てのレジスタバンク130がリンク
レジスタバンク130−Lもしくはコンテキストレジス
タバンク130−Cのいずれかである場合も可能である
し、使用方法を特定しない、任意用途のレジスタバンク
を設定することも可能である。
【0024】図4は図1の実施例における、スレッド並
列起動命令、スレッド終了命令、スレッド逐次起動命
令、スレッド戻り命令の各実施例を二通り示した説明図
である。
列起動命令、スレッド終了命令、スレッド逐次起動命
令、スレッド戻り命令の各実施例を二通り示した説明図
である。
【0025】図4においてスレッド並列起動命令410
の実施例1のFORK命令412は直値引数nとレジス
タ引数$xを有しており、実施例2のFORK命令41
8は直値引数nだけを有している。スレッド終了命令4
20の実施例1のSTOP命令422はレジスタ引数$
xを有しており、実施例2のSTOP命令428は引数
なしである。スレッド逐次起動命令430の実施例1の
CALL命令432は直値引数nとレジスタ引数$xを
有しており、実施例2のCALL命令438は直値引数
だけを有している。スレッド戻り命令440の実施例1
のRETURN命令442はレジスタ引数$xを有して
おり、実施例2のRETURN命令448は引数なしで
ある。以下では、まずこの実施例1の各命令フォーマッ
トFORK412、STOP422、CALL432、
RETURN442を用いて、本発明によるマルチスレ
ッドプロセッサの動作の実施例を説明する。
の実施例1のFORK命令412は直値引数nとレジス
タ引数$xを有しており、実施例2のFORK命令41
8は直値引数nだけを有している。スレッド終了命令4
20の実施例1のSTOP命令422はレジスタ引数$
xを有しており、実施例2のSTOP命令428は引数
なしである。スレッド逐次起動命令430の実施例1の
CALL命令432は直値引数nとレジスタ引数$xを
有しており、実施例2のCALL命令438は直値引数
だけを有している。スレッド戻り命令440の実施例1
のRETURN命令442はレジスタ引数$xを有して
おり、実施例2のRETURN命令448は引数なしで
ある。以下では、まずこの実施例1の各命令フォーマッ
トFORK412、STOP422、CALL432、
RETURN442を用いて、本発明によるマルチスレ
ッドプロセッサの動作の実施例を説明する。
【0026】図5は本発明におけるFORK命令412
とSTOP命令422の動作方法の実施例を説明するた
めの説明図である。図5において左側のマルチスレッド
プロセッサ100A上で模式的にFORK命令412の
動作を説明している。また、右側のマルチスレッドプロ
セッサ100B上で模式的にSTOP命令422の動作
を説明している。以下、それぞれの命令の動作の特徴に
ついて、図1から図5までを参照しながら説明する。
とSTOP命令422の動作方法の実施例を説明するた
めの説明図である。図5において左側のマルチスレッド
プロセッサ100A上で模式的にFORK命令412の
動作を説明している。また、右側のマルチスレッドプロ
セッサ100B上で模式的にSTOP命令422の動作
を説明している。以下、それぞれの命令の動作の特徴に
ついて、図1から図5までを参照しながら説明する。
【0027】まず、FORK命令412を命令読み出し
装置210(図2)が読み出し、これを命令解読装置2
20が解読することによりスレッド記述子の送出が行な
われる。この際、スレッド記述子送出バッファ290の
命令ポインタ292とリンクポインタ294に値を書き
込む。ここで命令ポインタ292の値は、フォークされ
るスレッドの先頭命令アドレスを示しており、プログラ
ムカウンタ270の値と、FORK命令412内の直値
引数nの加算を命令解読装置220で行なうことで求め
られる。またリンクポインタ294は並列起動されるス
レッドが使用する引数を記憶したメモリ装置190内の
メモリ位置を示しており、この値はFORK命令412
のレジスタ引数$xにより指定されたレジスタファイル
装置120内のいずれかのレジスタ330に記憶された
値をレジスタ読み出し線144を介して読み出すことで
求められる。図5では、ここで指定されるレジスタ33
0を、リンクレジスタ530と呼んで示している。この
ようにして生成されたスレッド記述子はスレッド記述子
送出線142を介して外部に送出される。リンクレジス
タバンク130−Lには、送出されるスレッド記述子に
より並列起動されるスレッドが使用する引数を格納して
おく。スレッド記述子を送出する際に、上記のリンクレ
ジスタ530から読み出されたリンクポインタの値をア
ドレス指定線147を介してメモリ装置190に伝え、
このリンクポインタの値により指定されるメモリ位置
に、リンクレジスタバンク130−Lの記憶内容である
レジスタフレームをレジスタフレームロード/ストア線
121を介して書き込む。
装置210(図2)が読み出し、これを命令解読装置2
20が解読することによりスレッド記述子の送出が行な
われる。この際、スレッド記述子送出バッファ290の
命令ポインタ292とリンクポインタ294に値を書き
込む。ここで命令ポインタ292の値は、フォークされ
るスレッドの先頭命令アドレスを示しており、プログラ
ムカウンタ270の値と、FORK命令412内の直値
引数nの加算を命令解読装置220で行なうことで求め
られる。またリンクポインタ294は並列起動されるス
レッドが使用する引数を記憶したメモリ装置190内の
メモリ位置を示しており、この値はFORK命令412
のレジスタ引数$xにより指定されたレジスタファイル
装置120内のいずれかのレジスタ330に記憶された
値をレジスタ読み出し線144を介して読み出すことで
求められる。図5では、ここで指定されるレジスタ33
0を、リンクレジスタ530と呼んで示している。この
ようにして生成されたスレッド記述子はスレッド記述子
送出線142を介して外部に送出される。リンクレジス
タバンク130−Lには、送出されるスレッド記述子に
より並列起動されるスレッドが使用する引数を格納して
おく。スレッド記述子を送出する際に、上記のリンクレ
ジスタ530から読み出されたリンクポインタの値をア
ドレス指定線147を介してメモリ装置190に伝え、
このリンクポインタの値により指定されるメモリ位置
に、リンクレジスタバンク130−Lの記憶内容である
レジスタフレームをレジスタフレームロード/ストア線
121を介して書き込む。
【0028】次に、STOP命令422を命令読み出し
装置210が読み出し、これを命令解読装置220が解
読することにより、実行中のスレッドを終了し、新たな
スレッド記述子をスレッド記述子受信線141を介して
受信し、このスレッド記述子の指示にしたがって新たな
スレッドの並列起動を行なう。スレッド記述子受信バッ
ファ280内の命令ポインタ282とリンクポインタ2
84に受信された値は、上の説明から明らかなように、
それぞれ、スレッドの先頭命令アドレスとスレッドの使
用する引数を記憶したメモリ領域のメモリ位置を示して
いる。そこで、マルチスレッドプロセッサ100Bは、
受けとった命令ポインタ282をプログラムカウンタ2
70に転送し、これにより新たなスレッドの実行を開始
する。また、受けとったリンクポインタ284をアドレ
ス指定線147を介してメモリ装置190に送り、これ
により指定されるメモリ位置からリンクレジスタバンク
130−Lへレジスタフレームロード/ストア線121
を介してレジスタフレームを読み出す。また、リンクポ
インタ284の値はSTOP命令422のレジスタ引数
$xにより指定されたレジスタ330に書き込まれる。
図5では、このレジスタもリンクレジスタ530として
記述している。
装置210が読み出し、これを命令解読装置220が解
読することにより、実行中のスレッドを終了し、新たな
スレッド記述子をスレッド記述子受信線141を介して
受信し、このスレッド記述子の指示にしたがって新たな
スレッドの並列起動を行なう。スレッド記述子受信バッ
ファ280内の命令ポインタ282とリンクポインタ2
84に受信された値は、上の説明から明らかなように、
それぞれ、スレッドの先頭命令アドレスとスレッドの使
用する引数を記憶したメモリ領域のメモリ位置を示して
いる。そこで、マルチスレッドプロセッサ100Bは、
受けとった命令ポインタ282をプログラムカウンタ2
70に転送し、これにより新たなスレッドの実行を開始
する。また、受けとったリンクポインタ284をアドレ
ス指定線147を介してメモリ装置190に送り、これ
により指定されるメモリ位置からリンクレジスタバンク
130−Lへレジスタフレームロード/ストア線121
を介してレジスタフレームを読み出す。また、リンクポ
インタ284の値はSTOP命令422のレジスタ引数
$xにより指定されたレジスタ330に書き込まれる。
図5では、このレジスタもリンクレジスタ530として
記述している。
【0029】なお、以上の図5の説明において、リンク
レジスタバンク130−Lが複数個ある場合は、FOR
K命令412、STOP命令422のレジスタ引数を複
数個指定するか、あるいは一つのレジスタ引数により指
定されたリンクレジスタ530の値から簡単に計算でき
る値で指定されるメモリ位置、例えば引き続くメモリ位
置などへこれら複数のリンクレジスタバンク130−L
の記憶内容であるレジスタフレームを書き込み、もしく
は読みとる。また、引数の数が多く、リンクレジスタバ
ンク130−Lに入り切らない場合は、引き続くメモリ
位置にこれらの引数を前もって書き込んでおく。また、
図5ではリンクレジスタ530はコンテキストレジスタ
バンク130−C内に確保されているが、必ずしもそう
である必要はない。更に、リンクレジスタ530はレジ
スタ引数$xにより指定されるので、任意のレジスタ3
30にとることが可能である。
レジスタバンク130−Lが複数個ある場合は、FOR
K命令412、STOP命令422のレジスタ引数を複
数個指定するか、あるいは一つのレジスタ引数により指
定されたリンクレジスタ530の値から簡単に計算でき
る値で指定されるメモリ位置、例えば引き続くメモリ位
置などへこれら複数のリンクレジスタバンク130−L
の記憶内容であるレジスタフレームを書き込み、もしく
は読みとる。また、引数の数が多く、リンクレジスタバ
ンク130−Lに入り切らない場合は、引き続くメモリ
位置にこれらの引数を前もって書き込んでおく。また、
図5ではリンクレジスタ530はコンテキストレジスタ
バンク130−C内に確保されているが、必ずしもそう
である必要はない。更に、リンクレジスタ530はレジ
スタ引数$xにより指定されるので、任意のレジスタ3
30にとることが可能である。
【0030】図6は本発明のマルチスレッドプロセッサ
におけるCALL命令432とRETURN命令442
の動作例を説明するための説明図である。以下、それぞ
れの命令の動作の特徴について図1から図4と図6を参
照しながら説明する。
におけるCALL命令432とRETURN命令442
の動作例を説明するための説明図である。以下、それぞ
れの命令の動作の特徴について図1から図4と図6を参
照しながら説明する。
【0031】まず、CALL命令432(図4)を命令
読み出し装置210(図2)が読み出し、これを命令解
読装置220が解読することによりスレッドの逐次起動
が行なわれる。この際、逐次起動する命令の先頭アドレ
スは、プログラムカウンタ270の値と、CALL命令
432内の直値引数nを命令解読装置220で加算する
ことにより求められる。また、実行を中断した命令の次
の命令アドレスを命令解読装置220からレジスタ13
0へ書き込み線145を介して書き込む。ここでこのよ
うにして書き込まれるレジスタ330を図6では戻り命
令レジスタ631と呼んで示している。更に、コンテキ
ストレジスタバンク130−Cの記憶内容のレジスタフ
レームが、レジスタフレームロード/ストア線121を
介して、CALL命令432のレジスタ引数$xで指定
されるレジスタ130から読み出された値で指定される
メモリ装置190内のメモリ位置に退避される。ここで
このようにして指定されるレジスタ130をここではコ
ンテキストレジスタ630と呼んでいる。コンテキスト
レジスタバンク130−Cにはスレッドの実行を中断す
るにあたって、後ほど当該スレッドの実行を再開する時
に使用する必要のあるデータを格納しておく。このよう
なデータを総称してコンテキスト情報と呼ぶことにす
る。
読み出し装置210(図2)が読み出し、これを命令解
読装置220が解読することによりスレッドの逐次起動
が行なわれる。この際、逐次起動する命令の先頭アドレ
スは、プログラムカウンタ270の値と、CALL命令
432内の直値引数nを命令解読装置220で加算する
ことにより求められる。また、実行を中断した命令の次
の命令アドレスを命令解読装置220からレジスタ13
0へ書き込み線145を介して書き込む。ここでこのよ
うにして書き込まれるレジスタ330を図6では戻り命
令レジスタ631と呼んで示している。更に、コンテキ
ストレジスタバンク130−Cの記憶内容のレジスタフ
レームが、レジスタフレームロード/ストア線121を
介して、CALL命令432のレジスタ引数$xで指定
されるレジスタ130から読み出された値で指定される
メモリ装置190内のメモリ位置に退避される。ここで
このようにして指定されるレジスタ130をここではコ
ンテキストレジスタ630と呼んでいる。コンテキスト
レジスタバンク130−Cにはスレッドの実行を中断す
るにあたって、後ほど当該スレッドの実行を再開する時
に使用する必要のあるデータを格納しておく。このよう
なデータを総称してコンテキスト情報と呼ぶことにす
る。
【0032】次に、RETURN命令442を命令読み
出し装置210が読み出し、これを命令解読装置220
が解読することにより、実行中の逐次起動されたスレッ
ドを終了し、当該スレッドが逐次起動される前に実行さ
れていたスレッドの実行を再開する。ここで再開する命
令のアドレスは戻り命令レジスタ631の値を読み出す
ことにより得られ、この値がプログラムカウンタ270
に書き込まれる。また、RETURN命令442のレジ
スタ引数$xはコンテキストレジスタ630を指してお
り、コンテキストレジスタ630の値を用いてメモリ装
置190からレジスタファイル装置120のコンテキス
トレジスタバンク130−Cにレジスタフレームロード
/ストア線121を介して、レジスタフレームを回復す
る。
出し装置210が読み出し、これを命令解読装置220
が解読することにより、実行中の逐次起動されたスレッ
ドを終了し、当該スレッドが逐次起動される前に実行さ
れていたスレッドの実行を再開する。ここで再開する命
令のアドレスは戻り命令レジスタ631の値を読み出す
ことにより得られ、この値がプログラムカウンタ270
に書き込まれる。また、RETURN命令442のレジ
スタ引数$xはコンテキストレジスタ630を指してお
り、コンテキストレジスタ630の値を用いてメモリ装
置190からレジスタファイル装置120のコンテキス
トレジスタバンク130−Cにレジスタフレームロード
/ストア線121を介して、レジスタフレームを回復す
る。
【0033】なお、以上の図6の説明において、コンテ
キストレジスタバンク130−Cが複数個ある場合は、
CALL命令432、RETURN命令442のレジス
タ引数を複数個指定するか、あるいは一つのレジスタ引
数により指定されたコンテキストレジスタ630の値か
ら簡単に計算できる値で指定されるメモリ位置、例えば
引き続くメモリ位置などへこれら複数のコンテキストレ
ジスタバンク130−Cの記憶内容であるレジスタフレ
ームを書き込み、もしくは読みとる。
キストレジスタバンク130−Cが複数個ある場合は、
CALL命令432、RETURN命令442のレジス
タ引数を複数個指定するか、あるいは一つのレジスタ引
数により指定されたコンテキストレジスタ630の値か
ら簡単に計算できる値で指定されるメモリ位置、例えば
引き続くメモリ位置などへこれら複数のコンテキストレ
ジスタバンク130−Cの記憶内容であるレジスタフレ
ームを書き込み、もしくは読みとる。
【0034】また、図6ではコンテキストレジスタ63
0はコンテキストレジスタバンク130−C内に確保さ
れているが、必ずしもそうである必要はない。更に、コ
ンテキストレジスタ630はレジスタ引数$xにより指
定されるので、任意のレジスタ330にとることが可能
である。戻り命令レジスタ631はコンテキストレジス
タバンク130−C外に確保されているが、必ずしもそ
うである必要はない。戻り命令アドレスは、命令のレジ
スタ引数としては指定されず、固定的にとられるレジス
タ330である。なお、注意すべきことは、RETUR
N命令442によりコンテキストレジスタ630を指定
する際に、このコンテキストレジスタ630の値が、対
応するCALL命令432で指定されたコンテキストレ
ジスタ630の値と同じである必要がある点である。こ
れを実現するためには、例えば、RETURN命令44
2とCALL命令432が同じレジスタ330をコンテ
キストレジスタ630として使用し、その値が同じであ
ることを逐次起動されたスレッドが保証する方法があ
る。このような方法で使用可能なレジスタの例としては
スタックポインタを格納するレジスタ330があげられ
る。
0はコンテキストレジスタバンク130−C内に確保さ
れているが、必ずしもそうである必要はない。更に、コ
ンテキストレジスタ630はレジスタ引数$xにより指
定されるので、任意のレジスタ330にとることが可能
である。戻り命令レジスタ631はコンテキストレジス
タバンク130−C外に確保されているが、必ずしもそ
うである必要はない。戻り命令アドレスは、命令のレジ
スタ引数としては指定されず、固定的にとられるレジス
タ330である。なお、注意すべきことは、RETUR
N命令442によりコンテキストレジスタ630を指定
する際に、このコンテキストレジスタ630の値が、対
応するCALL命令432で指定されたコンテキストレ
ジスタ630の値と同じである必要がある点である。こ
れを実現するためには、例えば、RETURN命令44
2とCALL命令432が同じレジスタ330をコンテ
キストレジスタ630として使用し、その値が同じであ
ることを逐次起動されたスレッドが保証する方法があ
る。このような方法で使用可能なレジスタの例としては
スタックポインタを格納するレジスタ330があげられ
る。
【0035】以上の動作において、FORK命令41
2、STOP命令422、CALL命令432、RET
URN命令442の代わりに、FORK命令418、S
TOP命令428、CALL命令438、RETURN
命令448をそれぞれ使用する場合の動作について以下
簡単に説明する。FORK命令418とSTOP命令4
28を使用する場合は、リンクレジスタ530をレジス
タ引数を用いて指定することが出来ない。このため、リ
ンクレジスタ530は常に固定的なレジスタ330にと
られる。それ以外の動作はFORK命令412とSTO
P命令422とそれぞれ同じである。CALL命令43
8とRETURN命令448を使用する場合は、コンテ
キストレジスタ630をレジスタ引数を用いて指定する
ことが出来ない。このため、コンテキストレジスタ63
0は常に固定的なレジスタ330にとられる。それ以外
の動作はCALL命令432とRETURN命令442
とそれぞれ同じである。
2、STOP命令422、CALL命令432、RET
URN命令442の代わりに、FORK命令418、S
TOP命令428、CALL命令438、RETURN
命令448をそれぞれ使用する場合の動作について以下
簡単に説明する。FORK命令418とSTOP命令4
28を使用する場合は、リンクレジスタ530をレジス
タ引数を用いて指定することが出来ない。このため、リ
ンクレジスタ530は常に固定的なレジスタ330にと
られる。それ以外の動作はFORK命令412とSTO
P命令422とそれぞれ同じである。CALL命令43
8とRETURN命令448を使用する場合は、コンテ
キストレジスタ630をレジスタ引数を用いて指定する
ことが出来ない。このため、コンテキストレジスタ63
0は常に固定的なレジスタ330にとられる。それ以外
の動作はCALL命令432とRETURN命令442
とそれぞれ同じである。
【0036】図7は命令パイプライン装置140のもう
一つの実施例を示したブロック構成図である。この実施
例では図2と比べて、逐次起動フラグ720を新しく備
えており、逐次起動フラグ720は命令解読装置220
と双方向に接続されている。また命令解読装置220は
マルチスレッドプロセッサの外部とフォーク可否通知線
721により接続されている。
一つの実施例を示したブロック構成図である。この実施
例では図2と比べて、逐次起動フラグ720を新しく備
えており、逐次起動フラグ720は命令解読装置220
と双方向に接続されている。また命令解読装置220は
マルチスレッドプロセッサの外部とフォーク可否通知線
721により接続されている。
【0037】図8は図7の命令パイプライン装置140
を用いた場合の、スレッド並列起動命令、FORK命令
412もしくは418と、スレッド終了命令、STOP
命令422もしくは428の動作例を説明する説明図で
ある。
を用いた場合の、スレッド並列起動命令、FORK命令
412もしくは418と、スレッド終了命令、STOP
命令422もしくは428の動作例を説明する説明図で
ある。
【0038】図8において左側のマルチスレッドプロセ
ッサ100A上で模式的にFORK命令412もしくは
418の動作と逐次起動されたスレッドにおけるSTO
P命令422もしくは428の動作が説明されている。
また、右側のマルチスレッドプロセッサ100B上で模
式的に並列起動されたスレッドにおけるSTOP命令4
22もしくは428の動作が説明されている。以下、そ
れぞれの命令の動作の特徴について、図1から図4と図
7及び図8を参照しながら説明する。
ッサ100A上で模式的にFORK命令412もしくは
418の動作と逐次起動されたスレッドにおけるSTO
P命令422もしくは428の動作が説明されている。
また、右側のマルチスレッドプロセッサ100B上で模
式的に並列起動されたスレッドにおけるSTOP命令4
22もしくは428の動作が説明されている。以下、そ
れぞれの命令の動作の特徴について、図1から図4と図
7及び図8を参照しながら説明する。
【0039】まず、FORK命令412を命令読み出し
装置210が読み出し、これを命令解読装置220が解
読することによりスレッド記述子の送出を行なう際に、
スレッド記述子の送出が可能かどうかを確認する。この
確認は、スレッド並列起動可否通知線721を介してマ
ルチスレッドプロセッサ100の外部より通知される。
スレッド記述子の送出が可能な場合は、図5を用いて説
明したFORK命令412もしくは418の動作と同じ
動作が行なわれる。一方スレッド記述子の送出が不可能
な場合は、命令解読装置220から逐次起動フラグ72
0にフラグを立てた後、図6を用いて説明したCALL
命令432もしくは438の動作と同じ動作が行なわれ
る。ここで、スレッド並列起動命令410とスレッド逐
次起動命令420の二つの実施例において、それぞれの
命令フォーマットにおける引数の指定方法が同一なの
で、このような同じ動作を行なうことが可能である。
装置210が読み出し、これを命令解読装置220が解
読することによりスレッド記述子の送出を行なう際に、
スレッド記述子の送出が可能かどうかを確認する。この
確認は、スレッド並列起動可否通知線721を介してマ
ルチスレッドプロセッサ100の外部より通知される。
スレッド記述子の送出が可能な場合は、図5を用いて説
明したFORK命令412もしくは418の動作と同じ
動作が行なわれる。一方スレッド記述子の送出が不可能
な場合は、命令解読装置220から逐次起動フラグ72
0にフラグを立てた後、図6を用いて説明したCALL
命令432もしくは438の動作と同じ動作が行なわれ
る。ここで、スレッド並列起動命令410とスレッド逐
次起動命令420の二つの実施例において、それぞれの
命令フォーマットにおける引数の指定方法が同一なの
で、このような同じ動作を行なうことが可能である。
【0040】次に、STOP命令422を命令読み出し
装置210が読み出し、これを命令解読装置220が解
読することにより、実行中のスレッドを終了する際に、
逐次起動フラグ720を命令解読装置220より参照す
る。フラグが立っていない場合は、図5を用いて説明し
たSTOP命令422もしくは428の動作と同じ動作
が行なわれる。フラグが立っている場合は、図6を用い
て説明したRETURN命令442もしくは448と同
じ動作が行なわれる。
装置210が読み出し、これを命令解読装置220が解
読することにより、実行中のスレッドを終了する際に、
逐次起動フラグ720を命令解読装置220より参照す
る。フラグが立っていない場合は、図5を用いて説明し
たSTOP命令422もしくは428の動作と同じ動作
が行なわれる。フラグが立っている場合は、図6を用い
て説明したRETURN命令442もしくは448と同
じ動作が行なわれる。
【0041】ここで注意しなければならない点は、FO
RK命令412もしくは418においてスレッド記述子
を生成できない場合、逐次起動フラグ720をメモリ装
置190に退避する必要がある点である。これは、実行
中のスレッドが逐次起動されたか並列起動されたかとい
う情報をコンテキスト情報として保持しておく必要があ
るからである。上記の退避動作は、本実施例において
は、逐次起動フラグ720の値を命令解読装置220と
レジスタ書き込み線145を介してレジスタファイル装
置へ送り、コンテキストレジスタバンク130−Cの記
憶内用のレジスタフレームをメモリ装置190へレジス
タフレームロード/ストア線121を介して退避する際
に、これを一緒に退避することにより実現されている。
同様に、STOP命令で、逐次起動フラグ720にフラ
グが立っていた場合、コンテキストレジスタバンク13
0−Cにレジスタフレームを回復する際に、回復された
レジスタフレームから当該のスレッドの逐次起動フラグ
の値を逐次起動フラグ720へ回復する動作を行なうこ
とにより、本実施例では退避された逐次起動フラグ72
0の値を回復している。
RK命令412もしくは418においてスレッド記述子
を生成できない場合、逐次起動フラグ720をメモリ装
置190に退避する必要がある点である。これは、実行
中のスレッドが逐次起動されたか並列起動されたかとい
う情報をコンテキスト情報として保持しておく必要があ
るからである。上記の退避動作は、本実施例において
は、逐次起動フラグ720の値を命令解読装置220と
レジスタ書き込み線145を介してレジスタファイル装
置へ送り、コンテキストレジスタバンク130−Cの記
憶内用のレジスタフレームをメモリ装置190へレジス
タフレームロード/ストア線121を介して退避する際
に、これを一緒に退避することにより実現されている。
同様に、STOP命令で、逐次起動フラグ720にフラ
グが立っていた場合、コンテキストレジスタバンク13
0−Cにレジスタフレームを回復する際に、回復された
レジスタフレームから当該のスレッドの逐次起動フラグ
の値を逐次起動フラグ720へ回復する動作を行なうこ
とにより、本実施例では退避された逐次起動フラグ72
0の値を回復している。
【0042】
【発明の効果】以上実施例を用いて説明した本発明のマ
ルチスレッドプロセッサは、以下のような効果を有す
る。
ルチスレッドプロセッサは、以下のような効果を有す
る。
【0043】1.スレッド並列起動時の引数の引き渡し
をスレッド並列起動命令とスレッド終了命令だけで行な
うことができ、メモリ装置への引数のロード/ストアを
スレッドのコード中に明示的に指示する必要がない。
をスレッド並列起動命令とスレッド終了命令だけで行な
うことができ、メモリ装置への引数のロード/ストアを
スレッドのコード中に明示的に指示する必要がない。
【0044】2.スレッド逐次起動時のレジスタファイ
ル装置内のコンテキスト情報の退避と回復をスレッド逐
次起動命令とスレッド戻り命令だけで行なうことがで
き、メモリ装置へのコンテキスト情報のロード/ストア
をスレッドのコード中に明示的に指示する必要がない。
ル装置内のコンテキスト情報の退避と回復をスレッド逐
次起動命令とスレッド戻り命令だけで行なうことがで
き、メモリ装置へのコンテキスト情報のロード/ストア
をスレッドのコード中に明示的に指示する必要がない。
【0045】3.動的にスレッドの並列起動を制御する
場合に、スレッド並列起動命令がスレッド記述子の送出
が可能かどうかを判断し、可能な場合は引数の退避を行
ない、可能でない場合はコンテキスト情報の退避を行な
うことにより、スレッドが動的に逐次起動された場合で
も、レジスタ渡しにより効率的に引数の引き渡しを行な
うことが出来る。
場合に、スレッド並列起動命令がスレッド記述子の送出
が可能かどうかを判断し、可能な場合は引数の退避を行
ない、可能でない場合はコンテキスト情報の退避を行な
うことにより、スレッドが動的に逐次起動された場合で
も、レジスタ渡しにより効率的に引数の引き渡しを行な
うことが出来る。
【0046】4.動的にスレッドの並列起動を制御する
場合に、スレッド終了命令が当該のスレッドが並列に起
動されたか逐次に起動されたかを判断し、並列起動の場
合は次のスレッドの実行を開始し、逐次起動の場合は、
コンテキスト情報の回復を行なうことにより、動的に並
列起動を制御する場合に、全く同一の命令列でスレッド
を構成することが可能になる。
場合に、スレッド終了命令が当該のスレッドが並列に起
動されたか逐次に起動されたかを判断し、並列起動の場
合は次のスレッドの実行を開始し、逐次起動の場合は、
コンテキスト情報の回復を行なうことにより、動的に並
列起動を制御する場合に、全く同一の命令列でスレッド
を構成することが可能になる。
【0047】5.スレッド並列起動時の引数の引き渡し
をリンクレジスタバンクに記憶されたレジスタフレーム
をレジスタフレームロード/ストア機能を用いてレジス
タフレーム単位で一括して行なえば、高速に引数の引き
渡しを行なうことが出来る。
をリンクレジスタバンクに記憶されたレジスタフレーム
をレジスタフレームロード/ストア機能を用いてレジス
タフレーム単位で一括して行なえば、高速に引数の引き
渡しを行なうことが出来る。
【0048】6.スレッド逐次起動時のレジスタファイ
ル装置内のコンテキスト情報の退避と回復をコンテキス
トレジスタバンクに記憶されたレジスタフレームをレジ
スタフレームロード/ストア機能を用いてレジスタフレ
ーム単位で一括して行なえば、高速にコンテキスト情報
の退避と回復を行なうことが出来る。
ル装置内のコンテキスト情報の退避と回復をコンテキス
トレジスタバンクに記憶されたレジスタフレームをレジ
スタフレームロード/ストア機能を用いてレジスタフレ
ーム単位で一括して行なえば、高速にコンテキスト情報
の退避と回復を行なうことが出来る。
【0049】このように、本発明のマルチスレッドプロ
セッサはスレッドの並列起動、逐次起動に伴う時間的オ
ーバーヘッドを削減し、効率良くマルチスレッドを実行
できる。
セッサはスレッドの並列起動、逐次起動に伴う時間的オ
ーバーヘッドを削減し、効率良くマルチスレッドを実行
できる。
【図1】本発明によるマルチスレッドプロセッサの一実
施例を示すブロック構成図である。
施例を示すブロック構成図である。
【図2】図1の実施例における命令パイプライン装置の
詳細を示すブロック構成図である。
詳細を示すブロック構成図である。
【図3】図1の実施例におけるレジスタファイル装置の
実施例を示すブロック構成図である。
実施例を示すブロック構成図である。
【図4】本発明のマルチスレッドプロセッサにおけるス
レッド並列起動命令、スレッド終了命令、スレッド逐次
起動命令、スレッド戻り命令に関して、二つの実施例を
示した説明図である。
レッド並列起動命令、スレッド終了命令、スレッド逐次
起動命令、スレッド戻り命令に関して、二つの実施例を
示した説明図である。
【図5】図1の実施例におけるスレッド並列起動命令と
スレッド終了命令の動作の実施例を示した説明図であ
る。
スレッド終了命令の動作の実施例を示した説明図であ
る。
【図6】図1の実施例におけるスレッド逐次起動命令と
スレッド戻り命令の動作の実施例を示した説明図であ
る。
スレッド戻り命令の動作の実施例を示した説明図であ
る。
【図7】図1の実施例における命令パイプライン装置の
もう一つの実施例を示すブロック構成図である。
もう一つの実施例を示すブロック構成図である。
【図8】図7の実施例の命令パイプライン装置の実施例
を使用したスレッド並列起動命令とスレッド終了命令の
動作のもう一つの実施例を示した説明図である。
を使用したスレッド並列起動命令とスレッド終了命令の
動作のもう一つの実施例を示した説明図である。
100,100A,100B マルチスレッドプロセッ
サ 120 レジスタファイル装置 121 レジスタフレームロード/ストア線 130 レジスタバンク 130−C コンテキストレジスタバンク 130−L リンクレジスタバンク 140 命令パイプライン装置 141 スレッド記述子受信線 142 スレッド記述子送出線 143 レジスタ指定線 144 レジスタ読み出し線 145 レジスタ書き込み線 190 メモリ装置 210 メモリ読み出し装置 220 命令解読装置 230 レジスタ読み出し装置 240 演算装置 250 データ書き込み装置 260 レジスタ書き込み装置 270 プログラムカウンタ 280 スレッド記述子受信バッファ 282,292 命令ポインタ 284,294 リンクポインタ 310 指定装置 530 リンクレジスタ 630 コンテキストレジスタ 631 戻り命令レジスタ 720 逐次起動フラグ
サ 120 レジスタファイル装置 121 レジスタフレームロード/ストア線 130 レジスタバンク 130−C コンテキストレジスタバンク 130−L リンクレジスタバンク 140 命令パイプライン装置 141 スレッド記述子受信線 142 スレッド記述子送出線 143 レジスタ指定線 144 レジスタ読み出し線 145 レジスタ書き込み線 190 メモリ装置 210 メモリ読み出し装置 220 命令解読装置 230 レジスタ読み出し装置 240 演算装置 250 データ書き込み装置 260 レジスタ書き込み装置 270 プログラムカウンタ 280 スレッド記述子受信バッファ 282,292 命令ポインタ 284,294 リンクポインタ 310 指定装置 530 リンクレジスタ 630 コンテキストレジスタ 631 戻り命令レジスタ 720 逐次起動フラグ
フロントページの続き (56)参考文献 特開 平2−156335(JP,A) 特開 平6−44199(JP,A) 特開 平4−97436(JP,A) 特開 昭62−242243(JP,A) 特開 昭63−150734(JP,A) 特公 昭58−43778(JP,B2) 井上・他「スレッドレベル並列処理ア ーキテクチャの検討」情報処理学会研究 報告 94−ARC−107(Vol.94. No.66),P.81〜88
Claims (5)
- 【請求項1】命令パイプライン装置とレジスタファイル
装置を有し、このレジスタファイルが複数のレジスタバ
ンクから構成され、このレジスタバンク内に記憶される
内容をレジスタフレームとし、スレッドに関する命令の
種類としてスレッド並列起動命令、スレッド終了命令、
スレッド逐次起動命令、及びスレッド戻り命令を使用
し、一つのプログラムから生成される複数のスレッドの
処理を順次行なうマルチスレッドプロセッサにおいて、
前記スレッド並列起動命令及び前記スレッド逐次起動命
令の実行に際し、任意数の前記レジスタフレームをレジ
スタファイル装置からメモリ装置へ退避する手段と、前
記スレッド終了命令及び前記スレッド戻り命令の実行に
際し、任意数の前記レジスタフレームを前記メモリ装置
からレジスタファイル装置へ回復させる手段を有し、レ
ジスタバンクの種類の一つとしてリンクレジスタバンク
を規定し、前記リンクレジスタバンクに記憶されたレジ
スタフレームをメモリ装置内に記憶させる際のメモリ位
置を示すポインタとしてリンクポインタを規定し、スレ
ッド並列起動命令の実行にあたって、マルチスレッドプ
ロセッサがスレッド記述子を他のマルチスレッドプロセ
ッサへ送出する際に、前記スレッド記述子内に前記リン
クポインタを格納し、任意個数の前記リンクレジスタバ
ンク内に記憶された任意個数のレジスタフレームをメモ
リ装置内の前記リンクポインタで指定されるメモリ位置
に退避する手段を有することを特徴とするマルチスレッ
ドプロセッサ。 - 【請求項2】スレッド終了命令の実行にあたって、マル
チスレッドプロセッサがスレッド記述子を受けとり新し
いスレッドを並列起動する際に、当該スレッド記述子内
のリンクポインタを用い、メモリ装置内の当該リンクポ
インタで指定されるメモリ位置から任意個数のレジスタ
フレームを任意個数のリンクレジスタバンクへ回復する
手段を有することを特徴とする請求項1記載のマルチス
レッドプロセッサ。 - 【請求項3】スレッド並列起動命令の実行にあたって、
マルチスレッドプロセッサがスレッド記述子を送出する
際に、まず前記スレッド記述子の送出が可能かどうかを
判断し、可能な場合は、前記スレッド記述子内にリンク
ポインタを格納した前記スレッド記述子を送出し、任意
個数の前記リンクレジスタバンク内に記憶 された任意個
数の前記レジスタフレームを前記メモリ装置内の前記リ
ンクポインタで指定されるメモリ位置に前記レジスタフ
レームロード/ストア機能を介して退避する手段と、可
能でない場合は、任意個数のコンテキストレジスタバン
ク内に記憶された任意個数のレジスタフレームを、前記
メモリ装置のコンテキストポインタで指定されるメモリ
位置に退避する手段を有することを特徴とする請求項1
記載のマルチスレッドプロセッサ。 - 【請求項4】マルチスレッドプロセッサ内に逐次起動フ
ラグを有し、スレッド終了命令の実行にあたって、実行
中のスレッドの処理を終了する際に、まず前記逐次起動
フラグを参照することにより、当該スレッドが並列起動
されたか逐次起動されたかを判断し、並列起動された場
合は、実行中の前記スレッドの処理を終了し、前記スレ
ッド記述子を他のマルチスレッドプロセッサもしくは当
該マルチスレッドプロセッサより受信し、当該スレッド
記述子内の前記リンクポインタを用い、前記メモリ装置
内の当該リンクポインタで指定されるメモリ位置から任
意個数のレジスタフレームを任意個数のリンクレジスタ
バンクへ読み出す手段と、逐次的に起動された場合は、
実行中の前記スレッドの処理を終了し、前記メモリ装置
の前記コンテキストポインタで指定されるメモリ位置か
ら任意個数の前記レジスタフレームを任意個数の前記コ
ンテキストレジスタバンク内に読み出す手段を有するこ
とを特徴とする請求項3記載のマルチスレッドプロセッ
サ。 - 【請求項5】前記レジスタバンクとメモリ装置間のレジ
スタフレームの退避、回復、読み出しを一括して行なう
レジスタフレームロード/ストア手段を有する請求項
1,2,3または4記載のマルチスレッドプロセッサ。
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP31524194A JP3169779B2 (ja) | 1994-12-19 | 1994-12-19 | マルチスレッドプロセッサ |
| US08/575,145 US5742822A (en) | 1994-12-19 | 1995-12-19 | Multithreaded processor which dynamically discriminates a parallel execution and a sequential execution of threads |
| GB9525935A GB2296354B (en) | 1994-12-19 | 1995-12-19 | Multithreaded processor |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP31524194A JP3169779B2 (ja) | 1994-12-19 | 1994-12-19 | マルチスレッドプロセッサ |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH08171494A JPH08171494A (ja) | 1996-07-02 |
| JP3169779B2 true JP3169779B2 (ja) | 2001-05-28 |
Family
ID=18063077
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP31524194A Expired - Fee Related JP3169779B2 (ja) | 1994-12-19 | 1994-12-19 | マルチスレッドプロセッサ |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US5742822A (ja) |
| JP (1) | JP3169779B2 (ja) |
| GB (1) | GB2296354B (ja) |
Families Citing this family (110)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
| JP2970553B2 (ja) * | 1996-08-30 | 1999-11-02 | 日本電気株式会社 | マルチスレッド実行方法 |
| US6247040B1 (en) | 1996-09-30 | 2001-06-12 | Lsi Logic Corporation | Method and structure for automated switching between multiple contexts in a storage subsystem target device |
| US6081849A (en) * | 1996-10-01 | 2000-06-27 | Lsi Logic Corporation | Method and structure for switching multiple contexts in storage subsystem target device |
| US6212542B1 (en) * | 1996-12-16 | 2001-04-03 | International Business Machines Corporation | Method and system for executing a program within a multiscalar processor by processing linked thread descriptors |
| US6173309B1 (en) * | 1997-02-20 | 2001-01-09 | Hewlett-Packard Company | Null thread library and thread abstraction interface |
| US5996068A (en) * | 1997-03-26 | 1999-11-30 | Lucent Technologies Inc. | Method and apparatus for renaming registers corresponding to multiple thread identifications |
| US6167423A (en) * | 1997-04-03 | 2000-12-26 | Microsoft Corporation | Concurrency control of state machines in a computer system using cliques |
| US6233599B1 (en) * | 1997-07-10 | 2001-05-15 | International Business Machines Corporation | Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers |
| US7076784B1 (en) | 1997-10-28 | 2006-07-11 | Microsoft Corporation | Software component execution management using context objects for tracking externally-defined intrinsic properties of executing software components within an execution environment |
| US6134594A (en) | 1997-10-28 | 2000-10-17 | Microsoft Corporation | Multi-user, multiple tier distributed application architecture with single-user access control of middle tier objects |
| US6385724B1 (en) | 1998-11-30 | 2002-05-07 | Microsoft Corporation | Automatic object caller chain with declarative impersonation and transitive trust |
| US6487665B1 (en) | 1998-11-30 | 2002-11-26 | Microsoft Corporation | Object security boundaries |
| US6286027B1 (en) | 1998-11-30 | 2001-09-04 | Lucent Technologies Inc. | Two step thread creation with register renaming |
| US6574736B1 (en) | 1998-11-30 | 2003-06-03 | Microsoft Corporation | Composable roles |
| US6205494B1 (en) * | 1998-12-18 | 2001-03-20 | Western Digital Corporation | Controller with automatic generation of linked list of data transfer descriptors for sequential commands, with linked list being used for execution of sequential data transfers |
| US6401155B1 (en) | 1998-12-22 | 2002-06-04 | Philips Electronics North America Corporation | Interrupt/software-controlled thread processing |
| US6275749B1 (en) | 1998-12-22 | 2001-08-14 | Philips Electronics North America Corporation | Interrupt-controlled thread processing |
| US6668285B1 (en) | 1999-05-12 | 2003-12-23 | Koninklijke Philips Electronics N.V. | Object oriented processing with dedicated pointer memories |
| US6606704B1 (en) * | 1999-08-31 | 2003-08-12 | Intel Corporation | Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode |
| US6983350B1 (en) | 1999-08-31 | 2006-01-03 | Intel Corporation | SDRAM controller for parallel processor architecture |
| US6427196B1 (en) * | 1999-08-31 | 2002-07-30 | Intel Corporation | SRAM controller for parallel processor architecture including address and command queue and arbiter |
| US6668317B1 (en) * | 1999-08-31 | 2003-12-23 | Intel Corporation | Microengine for parallel processor architecture |
| US7191309B1 (en) | 1999-09-01 | 2007-03-13 | Intel Corporation | Double shift instruction for micro engine used in multithreaded parallel processor architecture |
| HK1046049A1 (zh) | 1999-09-01 | 2002-12-20 | Intel Corporation | 用於多线程处理器的分支指令 |
| WO2001016702A1 (en) | 1999-09-01 | 2001-03-08 | Intel Corporation | Register set used in multithreaded parallel processor architecture |
| US6574725B1 (en) | 1999-11-01 | 2003-06-03 | Advanced Micro Devices, Inc. | Method and mechanism for speculatively executing threads of instructions |
| JP2001147819A (ja) * | 1999-11-19 | 2001-05-29 | Fujitsu Ltd | 最適化装置および記録媒体 |
| US6532509B1 (en) | 1999-12-22 | 2003-03-11 | Intel Corporation | Arbitrating command requests in a parallel multi-threaded processing system |
| US6694380B1 (en) | 1999-12-27 | 2004-02-17 | Intel Corporation | Mapping requests from a processing unit that uses memory-mapped input-output space |
| US7620702B1 (en) | 1999-12-28 | 2009-11-17 | Intel Corporation | Providing real-time control data for a network processor |
| US6307789B1 (en) * | 1999-12-28 | 2001-10-23 | Intel Corporation | Scratchpad memory |
| US6631430B1 (en) * | 1999-12-28 | 2003-10-07 | Intel Corporation | Optimizations to receive packet status from fifo bus |
| US6625654B1 (en) * | 1999-12-28 | 2003-09-23 | Intel Corporation | Thread signaling in multi-threaded network processor |
| US6661794B1 (en) * | 1999-12-29 | 2003-12-09 | Intel Corporation | Method and apparatus for gigabit packet assignment for multithreaded packet processing |
| US6976095B1 (en) | 1999-12-30 | 2005-12-13 | Intel Corporation | Port blocking technique for maintaining receive packet ordering for a multiple ethernet port switch |
| US6584522B1 (en) * | 1999-12-30 | 2003-06-24 | Intel Corporation | Communication between processors |
| US7480706B1 (en) | 1999-12-30 | 2009-01-20 | Intel Corporation | Multi-threaded round-robin receive for fast network port |
| US6952824B1 (en) | 1999-12-30 | 2005-10-04 | Intel Corporation | Multi-threaded sequenced receive for fast network port stream of packets |
| US6631462B1 (en) * | 2000-01-05 | 2003-10-07 | Intel Corporation | Memory shared between processing threads |
| US7681018B2 (en) | 2000-08-31 | 2010-03-16 | Intel Corporation | Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set |
| US7020871B2 (en) | 2000-12-21 | 2006-03-28 | Intel Corporation | Breakpoint method for parallel hardware threads in multithreaded processor |
| US7320065B2 (en) | 2001-04-26 | 2008-01-15 | Eleven Engineering Incorporated | Multithread embedded processor with input/output capability |
| JP3702813B2 (ja) * | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
| US7225281B2 (en) | 2001-08-27 | 2007-05-29 | Intel Corporation | Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms |
| US6868476B2 (en) * | 2001-08-27 | 2005-03-15 | Intel Corporation | Software controlled content addressable memory in a general purpose execution datapath |
| US7216204B2 (en) | 2001-08-27 | 2007-05-08 | Intel Corporation | Mechanism for providing early coherency detection to enable high performance memory updates in a latency sensitive multithreaded environment |
| US7487505B2 (en) | 2001-08-27 | 2009-02-03 | Intel Corporation | Multithreaded microprocessor with register allocation based on number of active threads |
| US7126952B2 (en) * | 2001-09-28 | 2006-10-24 | Intel Corporation | Multiprotocol decapsulation/encapsulation control structure and packet protocol conversion method |
| US7158964B2 (en) * | 2001-12-12 | 2007-01-02 | Intel Corporation | Queue management |
| US7107413B2 (en) | 2001-12-17 | 2006-09-12 | Intel Corporation | Write queue descriptor count instruction for high speed queuing |
| US7269179B2 (en) | 2001-12-18 | 2007-09-11 | Intel Corporation | Control mechanisms for enqueue and dequeue operations in a pipelined network processor |
| US7895239B2 (en) | 2002-01-04 | 2011-02-22 | Intel Corporation | Queue arrays in network devices |
| US7181573B2 (en) | 2002-01-07 | 2007-02-20 | Intel Corporation | Queue array caching in network devices |
| US6934951B2 (en) | 2002-01-17 | 2005-08-23 | Intel Corporation | Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section |
| US7181594B2 (en) * | 2002-01-25 | 2007-02-20 | Intel Corporation | Context pipelines |
| US7610451B2 (en) | 2002-01-25 | 2009-10-27 | Intel Corporation | Data transfer mechanism using unidirectional pull bus and push bus |
| US7149226B2 (en) | 2002-02-01 | 2006-12-12 | Intel Corporation | Processing data packets |
| US7437724B2 (en) | 2002-04-03 | 2008-10-14 | Intel Corporation | Registers for data transfers |
| CN100449478C (zh) * | 2002-05-31 | 2009-01-07 | 德拉华州大学 | 用于实时多线程处理的方法和装置 |
| US7471688B2 (en) * | 2002-06-18 | 2008-12-30 | Intel Corporation | Scheduling system for transmission of cells to ATM virtual circuits and DSL ports |
| US7337275B2 (en) | 2002-08-13 | 2008-02-26 | Intel Corporation | Free list and ring data structure management |
| US7352769B2 (en) | 2002-09-12 | 2008-04-01 | Intel Corporation | Multiple calendar schedule reservation structure and method |
| US7433307B2 (en) * | 2002-11-05 | 2008-10-07 | Intel Corporation | Flow control in a network environment |
| US7216346B2 (en) * | 2002-12-31 | 2007-05-08 | International Business Machines Corporation | Method and apparatus for managing thread execution in a multithread application |
| US6941438B2 (en) | 2003-01-10 | 2005-09-06 | Intel Corporation | Memory interleaving |
| US7443836B2 (en) | 2003-06-16 | 2008-10-28 | Intel Corporation | Processing a data packet |
| US7870553B2 (en) * | 2003-08-28 | 2011-01-11 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
| US7836450B2 (en) * | 2003-08-28 | 2010-11-16 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
| EP1658563B1 (en) * | 2003-08-28 | 2013-06-05 | MIPS Technologies, Inc. | Apparatus, and method for initiation of concurrent instruction streams in a multithreading microprocessor |
| US20050050305A1 (en) * | 2003-08-28 | 2005-03-03 | Kissell Kevin D. | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor |
| US9032404B2 (en) | 2003-08-28 | 2015-05-12 | Mips Technologies, Inc. | Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor |
| US7360064B1 (en) | 2003-12-10 | 2008-04-15 | Cisco Technology, Inc. | Thread interleaving in a multithreaded embedded processor |
| US7441101B1 (en) | 2003-12-10 | 2008-10-21 | Cisco Technology, Inc. | Thread-aware instruction fetching in a multithreaded embedded processor |
| US7206922B1 (en) | 2003-12-30 | 2007-04-17 | Cisco Systems, Inc. | Instruction memory hierarchy for an embedded processor |
| US7213099B2 (en) * | 2003-12-30 | 2007-05-01 | Intel Corporation | Method and apparatus utilizing non-uniformly distributed DRAM configurations and to detect in-range memory address matches |
| US7261412B2 (en) * | 2005-06-30 | 2007-08-28 | Visx, Incorporated | Presbyopia correction through negative high-order spherical aberration |
| US20080276067A1 (en) * | 2007-05-01 | 2008-11-06 | Via Technologies, Inc. | Method and Apparatus for Page Table Pre-Fetching in Zero Frame Display Channel |
| EP2169537B1 (en) * | 2007-06-20 | 2013-02-27 | Fujitsu Limited | Instruction processor |
| US20110055838A1 (en) * | 2009-08-28 | 2011-03-03 | Moyes William A | Optimized thread scheduling via hardware performance monitoring |
| US8489865B1 (en) * | 2010-04-15 | 2013-07-16 | Lockheed Martin Corporation | Device, system, and method for single thread command chaining instructions from multiple processor elements |
| KR20150019349A (ko) * | 2013-08-13 | 2015-02-25 | 삼성전자주식회사 | 다중 쓰레드 실행 프로세서 및 이의 동작 방법 |
| US10489382B2 (en) | 2017-04-18 | 2019-11-26 | International Business Machines Corporation | Register restoration invalidation based on a context switch |
| US10963261B2 (en) | 2017-04-18 | 2021-03-30 | International Business Machines Corporation | Sharing snapshots across save requests |
| US10649785B2 (en) | 2017-04-18 | 2020-05-12 | International Business Machines Corporation | Tracking changes to memory via check and recovery |
| US10540184B2 (en) | 2017-04-18 | 2020-01-21 | International Business Machines Corporation | Coalescing store instructions for restoration |
| US10782979B2 (en) | 2017-04-18 | 2020-09-22 | International Business Machines Corporation | Restoring saved architected registers and suppressing verification of registers to be restored |
| US10740108B2 (en) | 2017-04-18 | 2020-08-11 | International Business Machines Corporation | Management of store queue based on restoration operation |
| US10572265B2 (en) | 2017-04-18 | 2020-02-25 | International Business Machines Corporation | Selecting register restoration or register reloading |
| US10838733B2 (en) | 2017-04-18 | 2020-11-17 | International Business Machines Corporation | Register context restoration based on rename register recovery |
| US11010192B2 (en) | 2017-04-18 | 2021-05-18 | International Business Machines Corporation | Register restoration using recovery buffers |
| US10564977B2 (en) | 2017-04-18 | 2020-02-18 | International Business Machines Corporation | Selective register allocation |
| US10552164B2 (en) | 2017-04-18 | 2020-02-04 | International Business Machines Corporation | Sharing snapshots between restoration and recovery |
| US10545766B2 (en) | 2017-04-18 | 2020-01-28 | International Business Machines Corporation | Register restoration using transactional memory register snapshots |
| GB2569098B (en) | 2017-10-20 | 2020-01-08 | Graphcore Ltd | Combining states of multiple threads in a multi-threaded processor |
| US11093251B2 (en) | 2017-10-31 | 2021-08-17 | Micron Technology, Inc. | System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network |
| US11119782B2 (en) | 2018-05-07 | 2021-09-14 | Micron Technology, Inc. | Thread commencement using a work descriptor packet in a self-scheduling processor |
| US11068305B2 (en) | 2018-05-07 | 2021-07-20 | Micron Technology, Inc. | System call management in a user-mode, multi-threaded, self-scheduling processor |
| US11513840B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
| US11119972B2 (en) | 2018-05-07 | 2021-09-14 | Micron Technology, Inc. | Multi-threaded, self-scheduling processor |
| US11074078B2 (en) | 2018-05-07 | 2021-07-27 | Micron Technology, Inc. | Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion |
| US11513837B2 (en) | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric |
| US11157286B2 (en) | 2018-05-07 | 2021-10-26 | Micron Technology, Inc. | Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor |
| US11513838B2 (en) | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread state monitoring in a system having a multi-threaded, self-scheduling processor |
| US11132233B2 (en) | 2018-05-07 | 2021-09-28 | Micron Technology, Inc. | Thread priority management in a multi-threaded, self-scheduling processor |
| US11126587B2 (en) | 2018-05-07 | 2021-09-21 | Micron Technology, Inc. | Event messaging in a system having a self-scheduling processor and a hybrid threading fabric |
| US11513839B2 (en) | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Memory request size management in a multi-threaded, self-scheduling processor |
| GB2605471B (en) | 2021-09-30 | 2023-11-01 | Imagination Tech Ltd | Processor with hardware pipeline |
| GB2605664B (en) * | 2021-09-30 | 2023-03-29 | Imagination Tech Ltd | Processor with hardware pipeline |
| GB2605665B (en) | 2021-09-30 | 2023-11-01 | Imagination Tech Ltd | Graphics processor |
Family Cites Families (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS5843778A (ja) * | 1981-09-08 | 1983-03-14 | Ookura Syuzo Kk | 清酒の醸造法 |
| US5050067A (en) * | 1987-08-20 | 1991-09-17 | Davin Computer Corporation | Multiple sliding register stacks in a computer |
| JPH02156335A (ja) * | 1988-12-09 | 1990-06-15 | Hitachi Ltd | レジスタ退避方式 |
| US5353418A (en) * | 1989-05-26 | 1994-10-04 | Massachusetts Institute Of Technology | System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread |
| US5165038A (en) * | 1989-12-29 | 1992-11-17 | Supercomputer Systems Limited Partnership | Global registers for a multiprocessor system |
| US5339415A (en) * | 1990-06-11 | 1994-08-16 | Cray Research, Inc. | Dual level scheduling of processes to multiple parallel regions of a multi-threaded program on a tightly coupled multiprocessor computer system |
| US5404469A (en) * | 1992-02-25 | 1995-04-04 | Industrial Technology Research Institute | Multi-threaded microprocessor architecture utilizing static interleaving |
| JP2684993B2 (ja) * | 1994-08-10 | 1997-12-03 | 日本電気株式会社 | プロセッサシステムとその制御方法 |
-
1994
- 1994-12-19 JP JP31524194A patent/JP3169779B2/ja not_active Expired - Fee Related
-
1995
- 1995-12-19 GB GB9525935A patent/GB2296354B/en not_active Expired - Fee Related
- 1995-12-19 US US08/575,145 patent/US5742822A/en not_active Expired - Lifetime
Non-Patent Citations (1)
| Title |
|---|
| 井上・他「スレッドレベル並列処理アーキテクチャの検討」情報処理学会研究報告 94−ARC−107(Vol.94.No.66),P.81〜88 |
Also Published As
| Publication number | Publication date |
|---|---|
| JPH08171494A (ja) | 1996-07-02 |
| GB2296354B (en) | 1999-10-06 |
| GB9525935D0 (en) | 1996-02-21 |
| GB2296354A (en) | 1996-06-26 |
| US5742822A (en) | 1998-04-21 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3169779B2 (ja) | マルチスレッドプロセッサ | |
| JP3231571B2 (ja) | 順序付きマルチスレッド実行方法とその実行装置 | |
| CN108647104B (zh) | 请求处理方法、服务器及计算机可读存储介质 | |
| CN103942178A (zh) | 多核处理器上实时操作系统与非实时操作系统之间的通信方法 | |
| CN107077390A (zh) | 一种任务处理方法以及网卡 | |
| JPH0450621B2 (ja) | ||
| US20010052065A1 (en) | Efficient saving and restoring state in task switching | |
| US6886112B2 (en) | Recovering from device failure | |
| US7437535B1 (en) | Method and apparatus for issuing a command to store an instruction and load resultant data in a microcontroller | |
| CN1021604C (zh) | 在向量数据处理运算中从缺页故障中恢复的设备和方法 | |
| JP2003330873A (ja) | 情報処理装置及び入出力方法並びにプログラム | |
| JPH0895798A (ja) | データ処理装置 | |
| JP2814683B2 (ja) | 命令処理装置 | |
| JP2004038844A (ja) | 画像処理装置 | |
| JP2022107229A (ja) | 情報処理装置、制御方法及び制御プログラム | |
| JP4631442B2 (ja) | プロセッサ | |
| JPH11167494A (ja) | 演算処理装置、及び演算処理装置のレジスタ管理方法 | |
| JP2765831B2 (ja) | データ処理装置 | |
| JPS61118853A (ja) | ストアバツフア装置 | |
| JP2979108B2 (ja) | データ処理装置における非同期処理の同期化方式 | |
| JP2549410B2 (ja) | 主記憶参照順序制御方式 | |
| JPH0764960A (ja) | データフロープロセサ | |
| CN120704749A (zh) | 一种指令处理方法、装置及相关设备 | |
| JPH01106158A (ja) | プロセツサ間のデータ通信制御方式 | |
| CN121523907A (zh) | 任务处理方法、异步硬件加速系统及相关装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080316 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090316 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090316 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100316 Year of fee payment: 9 |
|
| LAPS | Cancellation because of no payment of annual fees |