JP5770334B2 - マルチスレッドプロセッサ - Google Patents

マルチスレッドプロセッサ Download PDF

Info

Publication number
JP5770334B2
JP5770334B2 JP2014090606A JP2014090606A JP5770334B2 JP 5770334 B2 JP5770334 B2 JP 5770334B2 JP 2014090606 A JP2014090606 A JP 2014090606A JP 2014090606 A JP2014090606 A JP 2014090606A JP 5770334 B2 JP5770334 B2 JP 5770334B2
Authority
JP
Japan
Prior art keywords
thread
dispatch
hardware
instruction
value
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.)
Active
Application number
JP2014090606A
Other languages
English (en)
Other versions
JP2014170572A (ja
Inventor
浩次 安達
浩次 安達
鉄平 大本
鉄平 大本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2014090606A priority Critical patent/JP5770334B2/ja
Publication of JP2014170572A publication Critical patent/JP2014170572A/ja
Application granted granted Critical
Publication of JP5770334B2 publication Critical patent/JP5770334B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明にかかるマルチスレッドプロセッサに関し、特に複数のハードウェアスレッドの実行順序をスケジュールするスレッドスケジューラを有するマルチスレッドプロセッサに関する。
近年、プロセッサの処理能力を向上させるためにマルチスレッドプロセッサが提案されている。マルチスレッドプロセッサは、それぞれが独立した命令流を生成するスレッドを有する。そして、マルチスレッドプロセッサは、パイプライン処理により命令を処理する演算回路に対していずれのスレッドにより生成された命令流を処理させるかを切り替えながら演算処理を実行する。このとき、マルチスレッドプロセッサは、1つのスレッドにより生成された命令をパイプライン中の1つの実行ステージで実行しながら、他の実行ステージにおいて他のスレッドにより生成された命令を処理することができる。つまり、マルチスレッドプロセッサの演算回路では、互いに独立関係にある命令がそれぞれ異なる実行ステージで実行されることになる。これにより、マルチスレッドプロセッサは、それぞれの命令流を円滑に処理しながら、パイプラインの実行ステージが何も処理しない時間を削減し、プロセッサの処理能力を向上させる。
このようなマルチスレッドプロセッサの一例が特許文献1に開示されている。特許文献1に記載のマルチスレッドプロセッサでは、複数のプロセッサエレメントと、各プロセッサエレメントのスレッドを切り替える並列プロセッサ制御部とを備える。そして、並列プロセッサ制御部は、プロセッサエレメントにおいて実行されているスレッドの実行時間をカウントし、カウントした時間がスレッドの割り当て時間に達したときにタイムアウト信号を出力し、タイムアウト信号と実行順序レジスタに保持された実行順序情報とに基づきプロセッサエレメントが実行すべきスレッドを切り替える。
このようにマルチスレッドプロセッサでは、演算回路においていずれのスレッドが生成する命令流を処理させるかをスケジュールに従って切り替える。このレッドのスケジュール方法の一例が特許文献2において開示されている。特許文献2に記載のマルチスレッドプロセッサでは、複数のスレッドを巡回的に、そのスレッドに割り当てられた時間ずつ実行する。つまり、特許文献2では、固定的に定められたスケジュールを巡回的に実行することで所定の実行時間比で各スレッドが実行される。
また、スレッドの別のスケジュール方法が特許文献3に開示されている。特許文献3では、スレッドのスケジューリングの方法としてラウンドロビン方式とプライオリティ方式とが記載されている。ラウンドロビン方式では、待ち行列に入っているスレッドを一定時間毎に順番に選んで実行する。そのため、ラウンドロビン方式では、待ち行列にあるスレッドが一定時間毎に公平にCPUに割り当てられて実行される。また、プライオリティ方式は、スレッドの優先度の順にスレッドを実行する。より具体的には、プライオリティ方式では、優先度毎に設けられた待ち行列に各優先度のスレッドがキューイングされ、優先度の高い待ち行列から順にスレッドが選択されCPUに割り当てられて実行される。
特開2007−317171号公報 特開2008−52750号公報 特開2006−155480号公報
しかしながら、ラウンドロビン方式及びプライオリティ方式に共通する問題として、スレッドの最低実行時間を保証しながら、柔軟にスレッドの実行時間を設定できない問題がある。例えば、ラウンドロビン方式では、スレッド数が増加した場合、各スレッドの実行時間が均等に減少し、優先度の高いスレッドに十分な実行時間が割り当てられない問題がある。また、プライオリティ方式では、優先度の高いスレッドの処理が続いた場合、優先度の低いスレッドが処理できない問題がある。
本発明にかかるマルチスレッドプロセッサの一態様は、それぞれが独立した命令流を生成する複数のハードウェアスレッドと、予め前記複数のハードウェアスレッドのそれぞれに対して設定された優先順位に応じて、前記複数のハードウェアスレッドのうち次実行サイクルにおいて選択されるハードウェアスレッドを指定する第1のスレッドスケジューラと、前記指定に応じて前記複数のハードウェアスレッドのいずれか1つを選択し、選択したハードウェアスレッドにより生成された命令を実行する演算回路と、を有し、前記第1のスレッドスケジューラは、前記優先順位が高い前記ハードウェアスレッドを優先的に選択し、前記選択されたハードウェアスレッドにより生成される前記命令が前記演算回路において実行される度に、実行された前記命令を生成した前記ハードウェアスレッドに対する前記優先順位の更新し、最も優先順位が高いハードウェアスレッドの優先順位が最低になるまでの間に少なくとも一つの他のハードウェアスレッドを選択するものである。
本発明にかかるマルチスレッドプロセッサによれば、実行されたハードウェアスレッドの優先順位を更新し、更新後の優先順位に従って次に選択するハードウェアスレッドを決定する。これにより、所定のハードウェアスレッドが固定的に選択されることを防止することができる。
本発明にかかるマルチスレッドプロセッサによれば、ハードウェアスレッドの最低実行時間を保証しながら、柔軟にハードウェアスレッドの実行時間を設定できる。
実施の形態1にかかるマルチスレッドプロセッサのブロック図である。 実施の形態1にかかるスレッドスケジューラのブロック図である。 実施の形態1にかかるディスパッチカウンタのブロック図である。 実施の形態1にかかるマルチスレッドプロセッサにおいて実行される命令群の一例を示す図である。 実施の形態1にかかるマルチスレッドプロセッサにおいてマスク信号を用いない場合の命令の処理フローを示す図である。 実施の形態1にかかるマルチスレッドプロセッサにおいてマスク信号を用いた場合の命令の処理フローを示す図である。 実施の形態1にかかるマルチスレッドプロセッサの起動時の動作手順を示すフローチャートである。 実施の形態1にかかるスレッドスケジューラの動作手順を示すフローチャートである。 実施の形態1にかかるスレッドスケジューラの動作を示す表である。 実施の形態1にかかるスレッドスケジューラの動作を示す表である。 実施の形態2にかかるマルチスレッドプロセッサのブロック図である。 実施の形態2にかかるスレッドスケジューラのブロック図である。 実施の形態2にかかる第2のスレッドスケジューラ内のスロットの構成を示す模式図である。 実施の形態2にかかる第2のスレッドスケジューラの動作を示す表である。 実施の形態2にかかるスレッドスケジューラの動作を示す表である。
実施の形態1
以下、図面を参照して本発明の実施の形態について説明する。図1に本実施の形態にかかるマルチスレッドプロセッサ1を含むプロセッサシステムのブロック図を示す。本実施の形態にかかるプロセッサシステムでは、システムバスを介してマルチスレッドプロセッサ1とメモリ2が接続される。なお、図示はしていないが、システムバスには、入出力インタフェースなどの他の回路も接続されるものとする。
まず、本実施の形態にかかるマルチスレッドプロセッサ1について説明する。マルチスレッドプロセッサ1は、複数のハードウェアスレッドを備える。ハードウェアスレッドは、スレッドプログラムカウンタ、命令メモリ、汎用レジスタ、及び制御レジスタ(本実施の形態ではパイプライン制御回路16に内蔵されるものとする)等の回路群により構成される。そして、ハードウェアスレッドとは、マルチスレッドプロセッサ1に内蔵されるスレッドプログラムカウンタにより出力される命令フェッチアドレスに従って命令メモリから読み出される一連の命令群により構成される命令流を生成する系のことをいう。つまり、1つのハードウェアスレッドにより生成される命令流に含まれる命令は、互いに関連性の高い命令である。本実施の形態では、マルチスレッドプロセッサ1が複数のスレッドプログラムカウンタを備えることでその数に応じた数のハードウェアスレッドが実装される。以下では、マルチスレッドプロセッサ1についてさらに詳細に説明する。
図1に示すようにマルチスレッドプロセッサ1は、演算回路10、割り込みコントローラ11、PC生成回路12、スレッドプログラムカウンタTPC0〜TPC3、セレクタ13、18、命令メモリ14、命令バッファ15、パイプライン制御回路16、命令フェッチコントローラ17、スレッドスケジューラ19を有する。
演算回路10は、セレクタ18によって選択されたハードウェアスレッドが生成する命令に基づき演算処理を実行する。より具体的には、演算回路10は、命令デコーダ21、実行ユニット22、データレジスタ23を有する。命令デコーダ21は受信した命令をデコードして、実行ユニット22に対して演算制御信号SCを出力する。また、命令デコーダ21は、命令のデコード結果に基づきデータの格納位置を示すデータレジスタアドレスRaddの出力を行う。実行ユニット22は、演算制御信号SCに応じて各種の演算を実行する。なお、実行ユニット22は、複数の実行ステージを有し、パイプライン処理により演算を行う。また、実行ユニット22において実行された演算結果は、その演算結果の種類に応じてPC生成回路12、メモリ2、データレジスタ23に送信される。データレジスタ23は、実行ユニット22において用いられるデータが格納される。そして、データレジスタ23は、データレジスタアドレスRaddにより指定したアドレスのデータを出力する。図1に示す例では、データレジスタ23は、データレジスタアドレスRaddに応じてデータaとデータbとを出力する形態となる。また、データレジスタ23は、データレジスタアドレスRaddにより指定されるアドレスに実行ユニット22が出力する演算結果を格納する。
割り込みコントローラ11は、割り込み要求信号を受けて、マルチスレッドプロセッサ1内に割り込み処理の実行を指示する割り込み指示信号を出力する。より具体的には、割り込みコントローラ11は、割り込み要求信号を受信すると、割り込み要因や割り込み処理の優先度等を判定し、当該割り込み要因に関連した処理を行うようにPC生成回路12及びパイプライン制御回路16に割り込み処理の実行を指示する。この割り込み要求は、マルチスレッドプロセッサ1が出力するものの他に、マルチスレッドプロセッサ1以外の回路からも出力される。
PC生成回路12は、システムバスを介して入力される新たなプログラム命令信号、割り込みコントローラ11が出力する割り込み指示信号及び実行ユニット22における処理に基づき出力される分岐指示信号を受けて、プログラムカウント更新値を生成する。そして、PC生成回路12は、プログラムカウント更新値をスレッドプログラムカウンタTPC0〜TPC3のいずれかに与える。なお、PC生成回路12は、生成したプログラムカウント更新値をいずれのスレッドプログラムカウンタに与えるかを判断する機能も有する。
スレッドプログラムカウンタTPC0〜TPC3は、処理すべき命令が格納される命令メモリ14のアドレス(このアドレスを命令フェッチアドレスIMaddと称す)を生成する。また、スレッドプログラムカウンタTPC0〜TPC3は、PC生成回路12からプログラムカウント更新値が与えられた場合は、命令フェッチアドレスIMaddをプログラムカウント更新値に応じて更新する。一方、スレッドプログラムカウンタTPC0〜TPC3は、プログラムカウント更新値の入力がない場合は、アドレスを昇順に計算し、連続する次の命令フェッチアドレスを算出する。なお、図1においては、スレッドプログラムカウンタの数を4つとしたが、プログラムスレッドカウンタの数は、マルチスレッドプロセッサの仕様に応じて任意に設定することができる。
セレクタ13は、命令フェッチコントローラが出力するスレッド指定信号に応じてスレッドプログラムカウンタTPC0〜TPC3のうちいずれか1つを選択し、選択したスレッドプログラムカウンタが出力する命令フェッチアドレスIMaddを出力する。なお、図1のセレクタ13において入力端子に0〜4の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
命令メモリ14は、複数のハードウェアスレッドにより共通して用いられるメモリ領域である。命令メモリ14は、マルチスレッドプロセッサ1において実行される演算で用いられる各種命令が格納される。そして、命令メモリ14は、セレクタ13を介して入力される命令フェッチアドレスIMaddにより指定された命令を出力する。このとき、命令メモリ14は、セレクタ13がスレッドプログラムカウンタTPC0〜TPC3のいずれが出力した命令フェッチアドレスIMaddであるかを判別し、判別結果に応じて命令の出力先を振り分ける。本実施の形態では、命令バッファ15は、スレッドプログラムカウンタTPC0〜TPC3に対応した命令バッファ領域BUF0〜BUF3を有する。そこで、命令メモリ14は、命令フェッチアドレスIMaddの出力元に応じて命令バッファ領域BUF0〜BUF3のいずれかに読み出された命令を振り分ける。なお、命令メモリ14は、メモリ2に含まれる所定のメモリ領域であっても良い。また、命令バッファ領域BUF0〜BUF3は、FIFO(First In First Out)形式のバッファ回路である。また、命令バッファ領域BUF0〜BUF3は、1つのバッファ内において領域分割されたものでも良く、分離された領域に形成されたものであっても良い。
パイプライン制御回路16は、命令バッファ15の先頭に格納された命令と実行ユニット22において実行されている命令とをモニタする。そして、パイプライン制御回路16は、割り込みコントローラ11から割り込み指示信号が入力された場合には、割り込み処理に関係するハードウェアスレッドに属する命令を廃棄する指示を命令バッファ15及び実行ユニット22に対して行う。また、パイプライン制御回路16は、命令バッファ15の先頭に格納された命令と実行ユニット22において実行されている命令との依存関係を確認する。そして、命令間の依存関係が高いと判断した場合は、その命令が属するハードウェアスレッドのハードウェアスレッド番号を通知するマスク信号MSKを出力する。
命令フェッチコントローラ17は、命令バッファ15に格納されている命令の個数に応じていずれのハードウェアスレッドに属する命令をフェッチすべきかを判断し、その判断結果に基づきスレッド指定信号を出力する。例えば、命令フェッチコントローラ17は、命令バッファ領域BUF0に格納される命令キューの数が他の命令バッファ領域に格納される命令キューの数よりも少なければ、0番のハードウェアスレッドに属する命令をフェッチすべきと判断し、0番のハードウェアスレッドを示すスレッド指定信号を出力する。これにより、セレクタ13は、スレッドプログラムカウンタTPC0を選択する。なお、命令フェッチコントローラ17は、ラウンドロビン方式による手順で選択するハードウェアスレッドを決定しても良い。
セレクタ18は、第1のセレクタとして機能するセレクタである。セレクタ18は、スレッドスケジューラ19が出力するスレッド選択信号TSELに応じて命令バッファ領域BUF0〜BUF3のいずれか1つを選択し、選択した命令バッファ領域から読み出した命令を演算回路10に出力する。つまり、セレクタ18は、スレッド選択信号TSELに応じて複数のハードウェアスレッドから1つのハードウェアスレッドを選択し、選択したハードウェアスレッドが出力する命令を演算回路10に出力する。なお、セレクタ18においても、入力端子に0〜4の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
スレッドスケジューラ19は、予め設定されたスケジュールに従って、複数のハードウェアスレッドのうち次の実行サイクルにおいて実行される1つのハードウェアスレッドを指定するスレッド選択信号TSELを出力する。つまり、スレッドスケジューラ19は、複数のハードウェアスレッドのどのような順序で処理するかをスケジュールにより管理し、そのスケジュールに沿った順序でハードウェアスレッドにより生成される命令が実行されるようにスレッド選択信号TSELを出力する。なお、本実施の形態にかかるマルチスレッドプロセッサ1では、このスケジュールをマルチスレッドプロセッサ1の起動の直後に実行される管理プログラムにより設定する。また、スレッドスケジューラ19は、パイプライン制御回路16からマスク信号MSKを受信した場合、受信したマスク信号MSKにより示されるハードウェアスレッド番号に該当するハードウェアスレッド以外のハードウェアスレッドを選択する。さらに、スレッドスケジューラ19は、命令デコーダ21からディスパッチ信号DPTを受信する。ディスパッチ信号DPTは、命令デコーダ21が処理(ディスパッチ)した命令が属するハードウェアスレッドの番号を通知するものである。
本実施の形態にかかるマルチスレッドプロセッサ1では、特にスレッドスケジューラ19において行われるハードウェアスレッドのスケジューリング方法に特徴を有する。以下では、スレッドスケジューラ19及びそのスケジューリングの方法について説明を行う。
図2にスレッドスケジューラ19のブロック図を示す。図2に示すように、スレッドスケジューラ19は、ディスパッチカウンタ30a〜30d、優先順位判定部31、スレッド番号選択部32、初期化判定部33を有する。なお、本実施の形態では、マルチスレッドプロセッサ1が4つのハードウェアスレッドを有すため、スレッドスケジューラ19は、4つのハードウェアスレッドの順序決定を行うための構成とするが、ハードウェアスレッドの個数を変更する場合は、ディスパッチカウンタの個数をハードウェアスレッドの個数に合わせれば良い。また、他の回路ブロックについてもディスパッチカウンタの個数に合わせてその構成を変更すれば良い。
ディスパッチカウンタ30a〜30dは、複数のハードウェアスレッドのうちのいずれか1つに対応して設けられる。ディスパッチカウンタ30a〜30dは、それぞれ、対応するハードウェアスレッドに対する優先順位に相当するディスパッチカウント値DCNT(図2におけるディスパッチカウント値DCNT0〜DCNT3を含む)を保持する。そして、ディスパッチカウンタ30a〜30dは、それぞれ、ディスパッチ信号DPTを受け、自ディスパッチカウンタに対応するハードウェアスレッドに属する命令の実行回数(ディスパッチ回数)をカウントする。より具体的には、ディスパッチカウンタ30a〜30dは、ディスパッチ信号DPTにより通知されるハードウェアスレッド番号を通知が対応するハードウェアスレッドを示すものである場合、ディスパッチカウント値DCNTをデクリメントする。このディスパッチカウント値DCNTの初期値は、マルチスレッドプロセッサ1の起動時に実行される管理プログラムにより設定される。また、ディスパッチカウント値DCNTの初期値は、管理プログラムによりメモリから読み出され、その読み出された値が設定されるものとする。
また、ディスパッチカウンタ30a〜30dには、マスク信号MSK(マスク信号MSK0〜MSK3を含む)と初期化信号CNTintが入力され、カウント現在値Vnow(カウント現在値Vnow0〜Vnow3を含む)を出力する。ディスパッチカウンタ30a〜30dは、対応するハードウェアスレッドに対応するマスク信号MSKが入力されるとディスパッチカウント値DCNTを最低優先順位(例えば0)とする。ディスパッチカウンタ30a〜30dは、初期化信号CNTintが入力されるとディスパッチカウント値DCNTを初期値にリセットする。なお、初期化信号CNTintは、初期化判定部33から出力される。ディスパッチカウンタ30a〜30dは、内部で保持するカウント値CNTに基づきディスパッチカウント値DCNTを出力するが、このカウント値CNTそのものの値をカウント現在値Vnowとして出力する。このディスパッチカウンタ30a〜30dの詳細な構成については後述する。
優先順位判定部31は、ディスパッチカウンタ30a〜30dが出力するディスパッチカウント値DCNTを参照し、最も高い優先順位を示すディスパッチカウント値DCNTを判定することで、最も高い優先順位のハードウェアスレッドを判定する。より具体的には、優先順位判定部31は、比較器34〜36を有する。比較器34〜36は、それぞれ、2つの値が入力され、2つの値のうち大きな値を選択して出力する。このとき比較器34〜36は、選択した値を出力したディスパッチカウンタの情報も合わせて出力する。また、比較器34〜36は、入力される2つの値が同じ値である場合、予め決められたルールに従いいずれか一方の値を選択して出力する。
より具体的には、比較器34は、ディスパッチカウンタ30aが出力するディスパッチカウント値DCNT0とディスパッチカウンタ30bが出力するディスパッチカウント値DCNT1とが入力され、2つのディスパッチカウント値のうち大きな値のディスパッチカウント値を高優先ハードウェアスレッド値M1として出力する。比較器35は、ディスパッチカウンタ30cが出力するディスパッチカウント値DCNT2とディスパッチカウンタ30dが出力するディスパッチカウント値DCNT3とが入力され、2つのディスパッチカウント値のうち大きな値のディスパッチカウント値を高優先ハードウェアスレッド値M2として出力する。比較器36は、比較器34が出力する高優先ハードウェアスレッド値M1と比較器35が出力する高優先ハードウェアスレッド値M2とが入力され、2つの高優先ハードウェアスレッド値のうち大きな値の高優先ハードウェアスレッド値を高優先ハードウェアスレッド値MAXとして出力する。なお、高優先ハードウェアスレッド値M1、M2、MAXには、その値を出力したディスパッカウンタを示す値が付加される。
スレッド番号選択部32は、優先順位判定部31が出力する高優先ハードウェアスレッド値MAXを出力したディスパッチカウンタに対応付けられたハードウェアスレッドを選択し、選択したハードウェアスレッドを示すハードウェアスレッド番号をスレッド選択信号TSELとして出力する。
初期化判定部33は、カウント現在値Vnow0〜Vnow3(ディスパッチカウント値DCNTを出力するためにディスパッチカウンタ内で保持されるカウント値CNT)を受けて、カウント現在値Vnow0〜Vnow3の組み合わせが予め設定された所定の条件を満たしたときに初期化信号CNTintを出力する。本実施の形態における所定の条件は、カウント現在値Vnow0〜Vnow3がすべて0となる条件であるものとする。
次に、ディスパッチカウンタ30a〜30dの構成について詳細に説明する。なお、ディスパッチカウンタ30a〜30dは同一の構成であるため、ディスパッチカウンタ30aを例にディスパッチカウンタの構成について説明する。ディスパッチカウンタ30aのブロック図を図3に示す。図3に示すように、ディスパッチカウンタ30aは、カウンタ初期設定値格納部40、カウント値格納部41、デクリメンタ42、第2のセレクタ(例えば、セレクタ43)を有する。
カウンタ初期設定値格納部40は、ディスパッチカウンタ30aが出力するディスパッチカウント値DCNTのカウンタ初期設定値INIT0を格納する。このカウンタ初期設定値INIT0は、管理プログラムによりメモリ2から読み出される値である。カウント値格納部41は、カウント値CNT0を格納する。また、カウント値格納部41は、初期化信号CNTintに応じてカウンタ初期設定値INIT0を読み出し、カウント値CNT0の初期値とする。このカウント値CNT0は、セレクタ43に対して出力される他、カウント現在値Vnow0として初期化判定部33に出力され、さらに、デクリメンタ42にも出力される。デクリメンタ42は、ディスパッチ信号DPT0が入力される度にカウント値CNT0をデクリメントする。そして、デクリメンタ42は、デクリメント後のカウント値を書き戻し値DCR0として出力し、書き戻し値DCR0によりカウント値CNT0を更新する。セレクタ43は、マスク信号MSKに応じて最低優先順位を示すマスク値(例えば0)とカウント値CNT0のいずれか一方を選択し、選択した値をディスパッチ信号DPT0として出力する。
ここで、マスク信号MSKについて説明する。マスク信号MSKは、パイプライン制御回路16が命令バッファ15の先頭に格納された命令と実行ユニット22において実行されている命令との依存関係を確認し、この命令間の依存関係が高いと判断した場合に出力される。そして、パイプライン制御回路16は、このマスク信号MSKにより、実行ユニット22において実行される命令の処理が十分に完了される前に実行ユニット22において実行されている命令と依存関係の高い命令が読み出されることを防止する。
このマスク信号MSKが出力される状態を説明するために、1つのハードウェアスレッドにおいて生成される命令群の一例を図4に示す。図4に示す命令群は、命令1〜命令3により構成され、このうち命令2と命令3の依存関係が高い例を示すものである。命令1は、レジスタa1の値とレジスタb1の値とを加算し、加算した結果得られた値をレジスタc1に格納する加算命令である。命令2は、メモリ2の0x0(a1)番地のアドレスのデータをレジスタd1にロードするロード命令である。命令3は、レジスタe1の値からレジスタd1の値を減算し、減算した結果をレジスタb1に格納する加算命令である。
そして、マスク信号MSKが出力されることなく、図4に示した命令群が続けて発行された場合に生じる問題を図5を用いて説明する。図5は、命令1〜3が続けて発行された場合における命令処理フローを示すタイミングチャートである。命令1〜3は、デコードステージID、実行ステージEX、書き戻しステージWBにより処理される。さらに、命令2には、メモリ2へのアクセスを実行するメモリアクセス待ちステージMMを有する。図5に示す例では、まず、命令1は、時刻P1においてデコードされ、時刻P2において処理され、時刻P3において演算の結果値をレジスタc1に書き戻す。続いて、命令2は、命令1よりも一時刻遅れた時刻P2においてデコードされ、時刻P3において処理され、時刻P4〜P6の期間にメモリアクセス待ちを行い、時刻P7において演算の結果値をレジスタd1に書き戻す。
また、命令3は、命令2よりも一時刻遅れた時刻P3においてデコードされ、時刻P4において処理され、時刻P5において演算の結果値をレジスタe1に書き戻す。ここで、この命令3の処理において参照されるレジスタd1の値は時刻P7まで待たなければ確定しない。そのため、時刻P5において命令3が読み出したレジスタd1の値は本来意図したものとは異なる値となり、命令3の演算が正しく行われない結果を招く。
このように、実行ユニット22で実行された命令の結果を後続の命令が利用する場合、パイプライン制御回路16は、命令間の依存関係が高いと判断し、マスク信号MSKを出力する。そして、パイプライン制御回路16は、先に実行ユニット22で実行されている命令の処理が完了し、後続の命令を実行できる十分な準備ができるまで、マスク信号MSKにより後続の命令の発行を防止する。
そこで、図5に示したタイミングチャートの処理においてマスク信号MSKが出力される場合の処理のタイミングチャートを図6に示す。図6に示すように、マスク信号MSKが出力される(マスク信号MSK=1となる)ことによって、命令3の実行ステージEXは、時刻P4〜P6の間待機の状態となり、時刻P7で実行される。これにより、命令2の書き戻しステージWBが行われる時刻P7を待って、命令3の実行ステージEXが行われる。これにより、命令3は、実行ステージEXにおいて本来意図した値をレジスタd1から読み出すことができる。
このように、パイプライン制御回路16は、マスク信号MSKを用いることで、実行ユニット22において各演算が正しく行われるように、1つのハードウェアスレッド内の命令発行タイミングを制御する。なお、命令間の依存関係は、メモリ2へのロード/ストア命令以外の命令においても存在する場合がある。
続いて、スレッドスケジューラ19を用いたマルチスレッドプロセッサ1の動作について説明する。図7に、マルチスレッドプロセッサ1の電源投入時から通常処理の開始までの動作の手順を示すフローチャートを示す。図7に示すように、マルチスレッドプロセッサ1は、電源が投入されるとまずハードウェアリセットにより回路の状態を初期化する(ステップS1)。続いて、マルチスレッドプロセッサ1は、シングルスレッドモードにおいて動作を開始する(ステップS2)。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタTPC0、命令メモリ14、命令バッファ領域BUF0が活性化され、他のスレッドプログラムカウンタTPC1〜TPC3及び命令バッファ領域BUF1〜BUF3はスタンバイ状態のまま待機する。
そして、マルチスレッドプロセッサ1は、管理プログラムをメモリ2又は図示しない他の記憶装置から読み出し、管理プログラムを実行する(ステップS3)。その後、管理プログラムに従って、マルチスレッドプロセッサ1は、カウンタ初期設定値格納部40にカウンタ初期設定値INITを設定(ステップS4)する。そして、ディスパッチカウンタ30a〜30dは、カウント値格納部41に格納されるカウント値CNTをカウンタ初期設定値INITにより初期化(ステップS5)する。これらの各種レジスタの設定が完了すると、マルチスレッドプロセッサ1はマルチスレッドモードにて動作を開始する(ステップS6)。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタTPC0〜TCP3、命令メモリ14、命令バッファ領域BUF0〜BUF3が活性化される。そして、マルチスレッドプロセッサ1は、マルチスレッドモードにて通常動作を開始する。
続いて、マルチスレッドプロセッサ1の通常動作時のスレッドスケジューラ19の動作について説明する。図8にスレッドスケジューラ19の通常動作時の動作を示すフローチャートを示す。なお、図8に示すフローチャートはディスパッチカウンタ30aの動作を中心に説明するものであるが、ディスパッチカウンタ30b〜30dも同様の動作となる。
図8に示すように、スレッドスケジューラ19は、まず、初期化判定部33において、カウント現在値Vnow0〜Vnow3が初期化条件を満たすか否かを判断する(ステップS10)。そして、ステップS10においてカウント現在値Vnow0〜Vnow3が初期か条件を満たすと判断された場合(ステップS10のYesの枝)、カウンタ初期設定値INIT0をカウント値CNT0とし、カウント値CNT0を初期化する(ステップS11)。一方、ステップS10においてカウント現在値Vnow0〜Vnow3が初期か条件を満たさないと判断された場合(ステップS10のNoの枝)、ステップS11の処理は行わずに次の処理に進む。
次のステップでは、対応するマスク信号MSK0の値が0か否かを判断する(ステップS12)。このとき、マスク信号MSK0が0であった場合(ステップS12のYesの枝)、ディスパッチカウンタ30aは、ディスパッチカウント値DCNTとしてカウント値CNT0の値を出力する(ステップS13)。一方、ステップS12においてマスク信号MSK0が1であった場合(ステップS12のNoの枝)、ディスパッチカウンタ30aは、ディスパッチカウント値DCNTとしてマスク値の値を出力する(ステップS14)。
次いで、スレッドスケジューラ19は、優先順位判定部31において、最も高い優先順位のディスパッチカウント値DCNTを出力しているディスパッチカウンタを判定し、高優先ハードウェアスレッド値MAXを出力する(ステップS15)。次いで、スレッドスケジューラ19は、スレッド番号選択部32において、高優先ハードウェアスレッド値MAXを出力するディスパッチカウンタに対応するハードウェアスレッドを選択し、選択したハードウェアスレッドを指定するスレッド選択信号TSELを出力する(ステップS16)。
次いで、マルチスレッドプロセッサ1は、スレッド選択信号TSELにより指定されたハードウェアスレッドに属する命令を実行し、実行された命令が属するハードウェアスレッドをディスパッチ信号DPTによりスレッドスケジューラ19に通知する。そして、ディスパッチカウンタ30aがディスパッチ信号DPT0を受け取った場合(ステップS17のYesの枝)には、ディスパッチカウンタ30aはカウント値CNT0をデクリメントする(ステップS18)。その後、スレッドスケジューラ19は、処理をステップS10に戻す。一方、ディスパッチカウンタ30aがディスパッチ信号DPT0を受け取らなかった場合(ステップS17のNoの枝)には、ディスパッチカウンタ30aはカウント値CNT0を更新しない。その後、スレッドスケジューラ19は、処理をステップS10に戻す。
続いて、スレッドスケジューラ19が選択するスレッド番号がどのように切り替わるかを説明する表を図9に示す。図9に示す例では、スレッドの切り替わりタイミングを一時刻としている。また、ディスパッチカウンタ30a〜30dのカウンタ初期設定値をそれぞれ3、4、2、1とした。また、図9に示す例では、マスク信号MSKが常に0を示すものとする。図9に示す例では、時刻t1を初期状態とし、この時刻t1を処理の開始時刻とする。
時刻t1では、ディスパッチカウント値DCNT0〜DCNT3はカウント値CNT0〜CNT3の値と同じ値となる。このとき、最大のディスパッチカウント値は、ディスパッチカウント値DCNT1が示す4である。そのため、スレッド番号選択部32は、ディスパッチカウント値DCNT1を出力するディスパッチカウンタ30bに対応する1番のハードウェアスレッドを示すスレッド選択信号TSELを出力する。そして、マルチスレッドプロセッサ1は、1番のハードウェアスレッドに属する命令を実行し、1番のハードウェアスレッドがディスパッチされたことを通知するディスパッチ信号DPT1を出力する。そのため、時刻t2では1番のハードウェアスレッドに対応するカウント値CNT1及びディスパッチカウント値DCNT1の値が1つデクリメントされる。
時刻t2では、ディスパッチカウント値DCNT0〜DCNT3はカウント値CNT0〜CNT3の値と同じ値となる。このとき、最大のディスパッチカウント値は、ディスパッチカウント値DCNT0及びディスパッチカウント値DCNT1が示す3である。このような場合、優先順位判定部31の比較器34は、より番号の小さなハードウェアスレッドに対応したディスパッチカウンタが出力するディスパッチカウント値を出力する。そのため、スレッド番号選択部32は、ディスパッチカウント値DCNT0を出力するディスパッチカウンタ30aに対応する0番のハードウェアスレッドを示すスレッド選択信号TSELを出力する。そして、マルチスレッドプロセッサ1は、0番のハードウェアスレッドに属する命令を実行し、0番のハードウェアスレッドがディスパッチされたことを通知するディスパッチ信号DPT0を出力する。そのため、時刻t3では0番のハードウェアスレッドに対応するカウント値CNT0及びディスパッチカウント値DCNT0の値が1つデクリメントされる。
以降、時刻t3〜t10においては、カウント値CNT及びディスパッチカウント値DCNTに応じて上記のような動作を繰り返す。そして、時刻t10の処理が行われることで、カウント値CNT0〜CNT3の値がすべて0になる。そのため、時刻t10の経過後に初期化判定部33による初期化処理が行われ、時刻t11のスレッドスケジューラ19の状態は時刻t1の状態にリセットされる。
続いて、スレッドスケジューラ19が選択するスレッド番号がどのように切り替わるかを説明する別の例を示す表を図10に示す。図10に示す例は、図9に示す例においてマスク信号MSKが1になる期間がある場合である。図10に示す例では時刻t1で選択された1番のハードウェアスレッドが実行されることで時刻t2〜t4において1番のハードウェアスレッドに対応するマスク信号MSK1が1となる。そのため、時刻t2〜t4の期間は1番のハードウェアスレッドの優先順位を示すディスパッチカウント値DCNT1が0(最低優先順位)となる。そのため、時刻t2〜t4の期間におけるスレッドスケジューラ19は、1番のハードウェアスレッド以外のハードウェアスレッドをそのときのディスパッチカウント値DCNTに応じて選択する。
また、図10に示す例では、時刻t12で選択された0番のハードウェアスレッドが実行されることで時刻t13〜t14において0番のハードウェアスレッドに対応するマスク信号MSK0が1となる。そのため、時刻t12〜t13の期間は0番のハードウェアスレッドの優先順位を示すディスパッチカウント値DCNT0が0(最低優先順位)となる。そのため、時刻t13〜t14の期間におけるスレッドスケジューラ19は、0番のハードウェアスレッド以外のハードウェアスレッドをそのときのディスパッチカウント値DCNTに応じて選択する。
また、図10に示す例では、時刻t13で選択された1番のハードウェアスレッドが実行されることで時刻t14〜t15において1番のハードウェアスレッドに対応するマスク信号MSK1が1となる。そのため、時刻t13〜t13の期間は1番のハードウェアスレッドの優先順位を示すディスパッチカウント値DCNT1が0(最低優先順位)となる。そのため、時刻t14〜t15の期間におけるスレッドスケジューラ19は、1番のハードウェアスレッド以外のハードウェアスレッドをそのときのディスパッチカウント値DCNTに応じて選択する。つまり、時刻t14の期間は0番のハードウェアスレッド及び1番のハードウェアスレッドが選択肢から除外される。
上記説明より、本実施の形態にかかるマルチスレッドプロセッサ1において用いられるスレッドスケジューラ19は、各ハードウェアスレッドに対応した優先順位をディスパッチカウント値DCNTとして有する。そして、スレッドスケジューラ19は、ハードウェアスレッドの優先順位に応じていずれか1つのハードウェアスレッドを選択し、選択したハードウェアスレッドを示すスレッド選択信号TSELを出力する。さらに、スレッドスケジューラ19は、選択したハードウェアスレッドが実行されたことをディスパッチ信号DPTにより認識し、ディスパッチ信号DPTに応じてハードウェアスレッドの優先順位を更新する。より具体的には、スレッドスケジューラ19は、最も高い優先順位のハードウェアスレッドを選択し、選択したハードウェアスレッドを示すスレッド選択信号TSELを出力する。そして、スレッドスケジューラ19は、選択したハードウェアスレッドが実行されたことをディスパッチ信号DPTにより認識し、ディスパッチ信号DPTに応じてハードウェアスレッドの優先順位を下げる。
これにより、本実施の形態にかかるスレッドスケジューラ19は、初期状態において高い優先順位のハードウェアスレッドを優先的に選択しながら、その後も高い優先順位を維持させることがない。そのため、スレッドスケジューラ19は、初期状態において優先順位の高いハードウェアスレッドを実行しながら他のハードウェアスレッドの実行期間も確保することができる。つまり、本実施の形態にかかるスレッドスケジューラ19を用いたマルチスレッドプロセッサ1は、複数の優先順位を有するハードウェアスレッドを交互に実行しながら、優先順位の高いハードウェアスレッドに対してはより多くの処理時間を割り当てることができる。言い換えると、本実施の形態にかかるマルチスレッドプロセッサ1は、ハードウェアスレッドの優先順位の初期状態に関わりなく複数のハードウェアスレッドを滞りなく実行することができる。
図9において示した例について説明すると、初期状態において高い優先度を有する1番のハードウェアスレッドは、時刻t1〜t10の期間のうち40%の処理時間を有し、他のハードウェアスレッドよりも多くの処理時間を確保する。このとき、本実施の形態にかかるマルチスレッドプロセッサ1では、1番のハードウェアスレッドの実行時間が続くことなく、1番のハードウェアスレッドと他のハードウェアスレッドが交互に実行される。つまり、本実施の形態にかかるマルチスレッドプロセッサ1では、処理時間がいずれか1つのハードウェアスレッドの時間に偏ることなく、複数のハードウェアスレッドが滞りなく実行される。
また、本実施の形態にかかるマルチスレッドプロセッサ1では、実行ユニット22の実行ステージの利用効率(又は、パイプラインの利用効率)を高めることができる。より具体的には、本実施の形態にかかるスレッドスケジューラ19は、パイプラインの状態に起因して本来予定していたハードウェアスレッドを選択できない場合、パイプラインの状態をマスク信号MSKにより認識する。そして、スレッドスケジューラ19は、マスク信号MSKにより通知されたハードウェアスレッドとは異なるハードウェアスレッドを選択する。これにより、パイプラインに空きステージが生じる可能性がある箇所に他のハードウェアスレッドに属する命令を与えることができるため、本実施の形態にかかるマルチスレッドプロセッサ1ではパイプラインの利用効率を高めることができる。
実施の形態2
実施の形態2にかかるマルチスレッドプロセッサ1aのブロック図を図11に示す。図11に示すようにマルチスレッドプロセッサ1aは、実施の形態1におけるスレッドスケジューラ19をスレッドスケジューラ19の変形例となるスレッドスケジューラ19aに置き換えたものである。そのため、以下の説明では、スレッドスケジューラ19aを中心に説明し、他の構成要素の説明は省略する。
図12にスレッドスケジューラ19aのブロック図を示す。図12に示すように、スレッドスケジューラ19aは、第3のセレクタ(例えば、セレクタ50)、第1のスレッドスケジューラ19、第2のスレッドスケジューラ51を有する。セレクタ50は、実時間ビット信号の信号レベルに応じて第1のスレッドスケジューラ19が出力する第1のスレッド選択信号TSELaと第2のスレッドスケジューラ51が出力する第1のスレッド選択信号TSELbとのいずれか一方を選択して、選択したスレッド選択信号を第1のセレクタ18に与えるスレッド選択信号TSELとして出力する。なお、第1のスレッド選択信号TSELaは、実施の形態1において説明したスレッド選択信号TSELと同じものである。ここでは、スレッド選択信号を区別するために、便宜的に第1のスレッドスケジューラ19が出力するスレッド選択信号を第1のスレッド選択信号TSELaと称す。第1のスレッドスケジューラは、実施の形態1におけるスレッドスケジューラ19と同じものであるため、ここでは説明を省略する。
第2のスレッドスケジューラ51は、第1の実行期間と第2の実行期間とを切り替える選択信号(例えば、実時間ビット信号)を出力すると共に、実時間ビット信号が第1の実行期間を指定している期間において予め設定された実行順序で実行されるハードウェアスレッドを指定する第1のハードウェアスレッド番号(例えば第2のスレッド選択信号TSELb)を出力する。ここで、第1の実行期間とは、後述する実時間ビット信号が1である期間であり、第2の実行期間とは、後述する実時間ビット信号が0である期間をいう。また、第1の実行期間においては、選択されるハードウェアスレッド番号が予め設定されており、第2の実行期間においては、選択されるハードウェアスレッド番号が例えば、第1のスレッドスケジューラ19により任意に設定される。この第2のスレッドスケジューラ51は、スレッド制御レジスタ52、カウンタ53、カウント最大値格納部54、一致比較回路55、セレクタ56を有する。
スレッド制御レジスタ52は、複数のスロット(例えば、スロットSLT0〜SLT7)を備える。このスロットの構成を図13に示す。図13に示すように、スロットSLT0〜SLT7は、それぞれハードウェアスレッド番号HWTが格納される番号格納部と、当該スロットが選択された場合における実時間ビット信号の論理レベルを決定する期間属性設定フラグ(例えば実時間ビットRT)が格納される実時間ビット格納部とを有する。
カウンタ53は、所定の間隔でカウント値CNTを更新する。より具体的には、本実施の形態におけるカウンタ53は、図示しないマルチスレッドプロセッサ1の動作クロックに同期してカウント値CNTaをカウントアップする。カウント最大値格納部54は、カウンタ53のカウント値CNTaの上限値を定めるカウント最大値CNTMを格納する。一致比較回路55は、カウント値CNTaとカウント最大値CNTMとを比較し、カウント値CNTとカウント最大値CNTMが一致した場合に、カウンタ53のカウント値CNTaをリセットするリセット信号RSTを出力する。つまり、カウンタ53は、所定の周期でカウント値CNTaを初期化しながら、カウントアップ動作を繰り返すことで、循環的に値が更新されるカウント値CNTaを出力する。
セレクタ56は、カウント値CNTaに応じてスレッド制御レジスタ52内のスロットの1つを選択し、選択したスロットに格納される値に基づき実時間ビット信号と第2のスレッド選択信号TSELbを出力する。より具体的には、セレクタ56は、カウント値CNTaが0であればスロットSLT0を選択し、スロットSLT0の番号格納部に格納されたハードウェアスレッド番号を第2のスレッド選択信号TSELbとし、スロットSLT0の実時間ビット格納部に格納される実時間ビットRTの値を実時間ビット信号の論理レベルとする。
なお、第2のスレッドスケジューラ51のスレッド制御レジスタ52のスロットに格納される値、カウンタ53のカウント値CNTaの初期値、カウント最大値格納部54のカウント最大値CNTMは、マルチスレッドプロセッサ1の起動時に実行される管理プログラムにより設定される。また、管理プログラムは、メモリ2からこれら設定値を読み込むものとする。
次に、通常動作開始後のスレッドスケジューラ19aの動作について説明する。まず、第2のスレッドスケジューラ51のみの動作について説明する。なお、以下の説明では、設定の一例として、カウンタ53のカウント値CNTの初期値を0、カウント最大値CNTMを4とする。また、スレッド制御レジスタ52のスロットの各値は、スロットSLT0〜SLT2、SLT4、SLT5、SLT7の実時間ビットを1とし、スロットSLT3、SLT6の実時間ビットを0とする。さらに、スロットSLT0、SLT2、SLT5、SLT7のハードウェアスレッド番号を0、スロットSLT1、SLT4のハードウェアスレッド番号を1、スロットSLT3のハードウェアスレッド番号を2とする。
上記条件において第2のスレッドスケジューラ51が出力する第2のスレッド選択信号TSELbが選択するハードウェアスレッド番号を図14の表に示す。図14の表では、第2のスレッドスケジューラ51が選択するハードウェアスレッドを切り替える一タイミングを一時刻とし、時刻の経過と共に第2のスレッド選択信号TSELbがどのように切り替わるかを示した。
図15に示すように、まず時刻t1におけるカウント値CNTが0とすると、セレクタ56は、スロットSLT0を選択する。従って、セレクタ56は、実時間ビット信号の論理レベルを1とし、第2のスレッド選択信号TSELbを0番とする。続いて、時刻t2ではカウント値CNTが1にカウントアップされる。そのため、セレクタ56は、スロットSLT1を選択する。従って、セレクタ56は、実時間ビット信号の論理レベルを1とし、第2のスレッド選択信号TSELbを1番とする。次いで、時刻t3ではカウント値CNTが2にカウントアップされる。そのため、セレクタ56は、スロットSLT2を選択する。従って、セレクタ56は、実時間ビット信号の論理レベルを0とし、第2のスレッド選択信号TSELbを1番とする。次いで、時刻t4ではカウント値CNTが3にカウントアップされる。そのため、セレクタ56は、スロットSLT3を選択する。従って、セレクタ56は、実時間ビット信号の論理レベルを1とし、第2のスレッド選択信号TSELbを2番とする。次いで、時刻t5ではカウント値CNTが4にカウントアップされる。そのため、セレクタ56は、スロットSLT4を選択する。従って、セレクタ56は、実時間ビット信号の論理レベルを1とし、第2のスレッド選択信号TSELbを1番とする。そして、時刻t5では、カウント値CNTaがカウント最大値CNTMに達するため、時刻t6の経過後にカウント値CNTaはリセットされる。これにより、時刻t6〜t10の期間の第2のスレッドスケジューラ51は、時刻t1〜t5の動作を繰り返すことになる。
実施の形態2では、第1のスレッドスケジューラ19は、第2のスレッドスケジューラ51により指定される第2の実行期間において実行するハードウェアスレッドの選択を行う。そこで、実施の形態2にかかるスレッドスケジューラ19aの動作を示す表を図15に示す。なお、図15に示した例は、第2のスレッドスケジューラ51の設定値として図14において示した条件を用いる。また、第1のスレッドスケジューラ19のカウンタ初期設定値は、0番のハードウェアスレッドから3番のハードウェアスレッドの順に2、1、3、4とする。つまり、この例における第1のスレッドスケジューラでは、第2のスレッドスケジューラ51において実行が予定されていないハードウェアスレッドの優先順位を他のハードウェアスレッドよりも高くする。
図15に示すように、第2のスレッドスケジューラ51は、時刻t3、t9、t13、t18において実時間ビット信号(図中のRT)を0とする。そのため、スレッドスケジューラ19aは、時刻t3、t9、t13、t18において第1のスレッドスケジューラ19が出力する第1のスレッド選択信号TSELaを用いる。このとき、時刻t3、t9、t13、t18のいずれのタイミングにおいても3番目のハードウェアスレッドに対応するディスパッチカウント値が最も大きくなるため、第1のスレッド選択信号TSELaは、時刻t3、t9、t13、t18のいずれ他のタイミングにおいても3番のハードウェアスレッドを指定する。
なお、第1のスレッドスケジューラ19には、第2のスレッドスケジューラ51が出力する第2のスレッド選択信号TSELbに基づき実行されたハードウェアスレッドがディスパッチ信号DPTにより通知される。そのため、時刻t1〜t18の期間においてカウント値CNT0〜CNT3が減少する。このときカウント値CNT0〜CNT3は0を下限としてそれ以上減少しないものとする。
上記説明より、実施の形態2にかかるスレッドスケジューラ19aでは、第1のスレッドスケジューラ19を、第2のスレッドスケジューラ51において第2の実行期間が指定された場合のスレッド選択信号を生成するために用いる。このとき、第1のスレッドスケジューラでは、第2のスレッドスケジューラ51の動作に基づき実行されたハードウェアスレッドの回数を反映してハードウェアスレッドの優先順位が変動する。そのため、第2のスレッドスケジューラ51に第1のスレッドスケジューラ19を組み合わせることで、第2のスレッドスケジューラ51において実行回数の少ないハードウェアスレッドを第1のスレッドスケジューラ19により指定することができる。
また、第2のスレッドスケジューラ19では、第1の実行期間において実行されるハードウェアスレッドが固定されているため、ハードウェアスレッドの優先順位にかかわらずハードウェアスレッドの最低実行時間を保証することができる。つまり、実施の形態2にかかるマルチスレッドプロセッサ1aによれば、第2のスレッドスケジューラ51により第1の実行期間を指定することでハードウェアスレッドの最低実行時間を保証する。そして、第2の実行期間において第1のスレッドスケジューラ19によるハードウェアスレッドの選択を行うことで、第2の実行期間に実行頻度の低いハードウェアスレッドを優先的に選択することができる。つまり、実施の形態2にかかるマルチスレッドプロセッサ1aによれば、ハードウェアスレッドの最低実行時間を保証しながら、処理が滞るハードウェアスレッドの発生を防止することができる。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、第2のスケジューラにおけるスレッドのスケジューリング方法は、マルチスレッドプロセッサの仕様に応じて適宜変更することが可能である。
1、1a マルチスレッドプロセッサ
2 メモリ
10 演算回路
11 コントローラ
12 PC生成回路
13、18、43、50、56 セレクタ
14 命令メモリ
15 命令バッファ
16 パイプライン制御回路
17 命令フェッチコントローラ
19、19a、51 スレッドスケジューラ
21 命令デコーダ
22 実行ユニット
23 データレジスタ
30a〜30d ディスパッチカウンタ
31 優先順位判定部
32 スレッド番号選択部
33 初期化判定部
34〜36 比較器
40 カウンタ初期設定値格納部
41 カウント値格納部
42 デクリメンタ
52 スレッド制御レジスタ
53 カウンタ
54 カウント最大値格納部
55 一致比較回路
TPC0〜TCP3 スレッドプログラムカウンタ
BUF0〜BUF3 命令バッファ領域
IMadd 命令フェッチアドレス
Radd データレジスタアドレス
SC 演算制御信号
TSEL、TSELa、TSELb スレッド選択信号
DPT、DPT0〜DPT3ディスパッチ信号
MSK、MSK0〜MSK3マスク信号
M1、M2、MAX 高優先ハードウェアスレッド値
CNTint 初期化信号
Vnow0〜Vnow3 カウント現在値
CNT、CNT0〜CNT3、CNTa カウント値
DCNT、DCNT0〜DCNT3 ディスパッチカウント値
INIT0 カウンタ初期設定値
DCR0 書き戻し値
CNTM カウント最大値
RST リセット信号
HWT ハードウェアスレッド番号
RT 実時間ビット
SLT0〜SLT7 スロット

Claims (7)

  1. それぞれが独立した命令流を生成する複数のハードウェアスレッドと、
    予め前記複数のハードウェアスレッドのそれぞれに対して設定された優先順位に応じて、前記複数のハードウェアスレッドのうち次実行サイクルにおいて選択されるハードウェアスレッドを指定するスレッド選択信号を出力するスレッドスケジューラと、
    前記スレッド選択信号に応じて前記複数のハードウェアスレッドのいずれか1つを選択して、選択したハードウェアスレッドにより生成された命令を出力するセレクタと、
    前記セレクタから出力される命令を実行する演算回路と、
    を有し、
    前記演算回路は、前記セレクタから出力された命令に応じて、前記命令が属する前記ハードウェアスレッドの番号を通知するディスパッチ信号を前記スレッドスケジューラに出力し、
    前記スレッドスケジューラは、
    それぞれが対応する前記ハードウェアスレッドに対する前記優先順位に相当するディスパッチカウント値を保持する複数のディスパッチカウンタと、
    前記複数のディスパッチカウンタで保持される前記ディスパッチカウント値を参照し、最もディスパッチカウント値大きい前記ハードウェアスレッドを判定する優先順位判定部と、
    前記優先順位判定部において最もディスパッチカウント値大きいと判定されたハードウェアスレッドを指定する前記スレッド選択信号を出力するスレッド番号選択部と、
    を備え、
    前記スレッド選択信号により選択された前記ハードウェアスレッドにより生成される前記命令が前記演算回路において実行される度に、実行された前記命令を生成した前記ハードウェアスレッドに対する前記ディスパッチカウント値を減少させる更新を行い、
    更新後の前記ディスパッチカウント値に従って前記スレッド選択信号を出力する
    マルチスレッドプロセッサ。
  2. 前記複数のディスパッチカウンタのそれぞれは、前記ディスパッチカウント値の初期値を設定するカウンタ初期設定値格納部を有する請求項1に記載のマルチスレッドプロセッサ。
  3. 前記複数のハードウェアスレッドの前記カウンタ初期設定値格納部に格納される前記ディスパッチカウント値の初期値は、前記マルチスレッドプロセッサの起動時に実行される管理プログラムにより設定される請求項2に記載のマルチスレッドプロセッサ。
  4. 前記スレッドスケジューラは、
    前記複数のハードウェアスレッドにおいて準備されている前記命令が前記演算回路において実行されている前記命令の処理結果を利用する依存関係の高い命令であった場合、前記依存関係の高い命令を含む前記ハードウェアスレッドの前記ディスパッチカウント値を最小値とする請求項1乃至3のいずれか1項に記載のマルチスレッドプロセッサ。
  5. 前記スレッドスケジューラは、前記更新されたカウンタ値を含む前記複数のディスパッチカウンタのカウンタ値のうち最も値の大きいカウンタ値を保持するディスパッチカウンタに対応したハードウェアスレッド番号を前記スレッド選択信号として出力する場合に、前記最も値の大きいカウンタ値を保持するディスパッチカウンタが2つ以上ある場合には、予め設定されたルールに従っていずれか1つの前記最も値の大きいカウンタ値を保持するディスパッチカウンタに対応したハードウェアスレッド番号を前記スレッド選択信号として出力する請求項1乃至4のいずれか1項に記載のマルチスレッドプロセッサ。
  6. 前記スレッドスケジューラは、前記複数のディスパッチカウンタのカウンタ値を減少させる更新を行う毎に当該ディスパッチカウンタのカウンタ値を1ずつ低下させる請求項1乃至5のいずれか1項に記載のマルチスレッドプロセッサ。
  7. 前記スレッドスケジューラは、前記複数のディスパッチカウンタの保持するカウンタ値が予め定められた初期化条件を満たす場合、前記カウンタ値を初期設定値にリセットする初期化判定部を有する請求項1乃至6のいずれか1項に記載のマルチスレッドプロセッサ。
JP2014090606A 2014-04-24 2014-04-24 マルチスレッドプロセッサ Active JP5770334B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014090606A JP5770334B2 (ja) 2014-04-24 2014-04-24 マルチスレッドプロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014090606A JP5770334B2 (ja) 2014-04-24 2014-04-24 マルチスレッドプロセッサ

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2012284003A Division JP5536862B2 (ja) 2012-12-27 2012-12-27 マルチスレッドプロセッサ

Publications (2)

Publication Number Publication Date
JP2014170572A JP2014170572A (ja) 2014-09-18
JP5770334B2 true JP5770334B2 (ja) 2015-08-26

Family

ID=51692855

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014090606A Active JP5770334B2 (ja) 2014-04-24 2014-04-24 マルチスレッドプロセッサ

Country Status (1)

Country Link
JP (1) JP5770334B2 (ja)

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler

Also Published As

Publication number Publication date
JP2014170572A (ja) 2014-09-18

Similar Documents

Publication Publication Date Title
JP5173713B2 (ja) マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法
JP5173711B2 (ja) マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法
US10467053B2 (en) Multi-thread processor with rescheduling when threads are nondispatchable
JP5173712B2 (ja) マルチスレッドプロセッサ
JP5173714B2 (ja) マルチスレッドプロセッサ及びその割り込み処理方法
JP5536862B2 (ja) マルチスレッドプロセッサ
JP5770334B2 (ja) マルチスレッドプロセッサ
JP5946566B2 (ja) マルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法
JP5536863B2 (ja) マルチスレッドプロセッサ
JP5770333B2 (ja) マルチスレッドプロセッサ
JP5838237B2 (ja) マルチスレッドプロセッサ
JP5536864B2 (ja) マルチスレッドプロセッサ
JP2015064861A (ja) マルチスレッドプロセッサ
JP2012059195A (ja) マルチスレッドプロセッサ
JP2014211890A (ja) マルチスレッドプロセッサ及びその割り込み処理方法
JP2014067248A (ja) プロセッサ、割り込み処理方法及び割り込み制御装置
JP2013058265A (ja) マルチスレッドプロセッサ及びその割り込み処理方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150109

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150120

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150320

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: 20150526

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150624

R150 Certificate of patent or registration of utility model

Ref document number: 5770334

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150