(57)【要約】【課題】各スレッドに要求される処理時間を正確に見積もることができるプロセッサを提供する。【解決手段】複数の命令流を同時に実行するプロセッサであって、複数の命令を実行する演算器群１１２と、前記命令流毎に、当該命令流に含まれる命令を、前記演算器群１１２に対して同時に発行することができる命令毎にグループ分けする命令スケジューラ１０３と、前記命令流毎に、当該命令流に含まれる命令を、前記命令スケジューラ１０３でグループ分けされたグループ単位で保持する命令バッファ１０４〜１０６と、プロセッサの実行サイクル毎に、前記命令バッファ１０４〜１０６からグループ単位で命令を読み出し、読み出した前記命令を、前記演算器群１１２に発行する発行命令決定部１１１とを備える。【選択図】図１
2008123045.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令流を同時に実行するプロセッサであって、
複数の命令を実行する複数の演算器と、
前記命令流毎に、当該命令流に含まれる命令を、前記複数の演算器に対して同時に発行することができる命令からなるグループにグループ分けするグループ分け手段と、
前記命令流毎に、当該命令流に含まれる命令を、前記グループ分け手段でグループ分けされたグループ単位で保持する命令バッファと、
プロセッサの実行サイクル毎に、前記命令バッファからグループ単位で命令を読み出し、読み出した前記命令を、前記複数の演算器に発行する命令発行手段とを備える
ことを特徴とするプロセッサ。
【請求項２】
前記プロセッサは、さらに、
命令流識別子を複数記憶している第１優先度キューと、
当該第１優先度キューから、少なくとも１つ以上の前記命令流識別子を、前記プロセッサの実行サイクル毎に切り替えながら順位付けして選択し、選択された前記少なくとも１つ以上の前記命令流識別子を優先度情報として決定する優先度決定手段とを備え、
前記命令発行手段は、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて命令流を決定し、当該命令流の１グループ分の命令を前記命令バッファから読み出し、読み出した前記命令を前記複数の演算器に発行する
ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記命令発行手段は、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて、前記複数の演算器に対して発行可能な命令が前記命令バッファに存在し、かつ発行可能な命令が前記命令バッファに存在する命令流のうち最も優先度が高い命令流の１グループ分の命令を、前記命令バッファから読み出し、読み出した前記命令を前記複数の演算器に発行する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記プロセッサは、さらに、命令流識別子を複数記憶している第２優先度キューを備え、
前記優先度決定手段は、前記第１優先度キューに含まれる命令流識別子の優先度を前記第２優先度キューに含まれる命令流識別子の優先度よりも高くし、前記第１優先度キュー及び前記第２優先度キューから、少なくとも１つ以上の前記命令流識別子を、前記プロセッサの実行サイクル毎に切り替えながら順位付けして選択し、選択された前記少なくとも１つ以上の前記命令流識別子を優先度情報として決定する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項５】
前記優先度決定手段は、前記第１優先度キューに含まれる命令流識別子の優先度を前記第２優先度キューに含まれる命令流識別子の優先度よりも高くし、前記第１優先度キューに含まれるすべての命令流識別子と前記第２優先度キューに含まれるすべての命令流識別子とを、前記プロセッサの実行サイクル毎に切り替えながら順位付けして選択し、選択された命令流識別子を優先度情報として決定し、
前記命令発行手段は、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて、前記複数の演算器に対して発行可能な命令が前記命令バッファに存在し、かつ発行可能な命令が前記命令バッファに存在する命令流のうち最も優先度が高い命令流の１グループ分の命令を、前記命令バッファから読み出し、読み出した前記命令を前記複数の演算器に発行する
ことを特徴とする請求項４に記載のプロセッサ。
【請求項６】
前記優先度決定手段は、前記第１優先度キューに含まれる命令流識別子の優先度を前記第２優先度キューに含まれる命令流識別子の優先度よりも高くし、前記第１優先度キューに含まれる１つの命令流識別子と前記第２優先度キューに含まれるすべての命令流識別子とを、前記プロセッサの実行サイクル毎に切り替えながら順位付けして選択し、選択された命令流識別子を優先度情報として決定し、
前記命令発行手段は、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて、前記複数の演算器に対して発行可能な命令が前記命令バッファに存在し、かつ発行可能な命令が前記命令バッファに存在する命令流のうち最も優先度が高い命令流の１グループ分の命令を、前記命令バッファから読み出し、読み出した前記命令を前記複数の演算器に発行する
ことを特徴とする請求項４に記載のプロセッサ。
【請求項７】
前記命令発行手段は、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて、前記複数の演算器に対して発行可能な最も優先度が高い命令流の１グループ分の命令が前記命令バッファに存在する場合には、当該命令を発行するとともに、残りの命令流のうち、発行された命令と同時に前記複数の演算器に対して発行可能であり、かつ最も優先度が高い命令流の１グループ分の命令を発行する
ことを特徴とする請求項４に記載のプロセッサ。
【請求項８】
前記命令発行手段は、さらに、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて、前記複数の演算器に対して発行可能な最も優先度が高い命令流の１グループ分の命令が前記命令バッファに存在しない場合には、残りの命令流のうち、前記複数の演算器に対して発行可能な命令が前記命令バッファに存在し、かつ発行可能な命令が前記命令バッファに存在する命令流のうち最も優先度が高い命令流の１グループ分の命令を、前記命令バッファから読み出し、読み出した前記命令を前記複数の演算器に発行する
ことを特徴とする請求項７に記載のプロセッサ。
【請求項９】
前記命令発行手段は、さらに、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて、前記複数の演算器に対して発行可能な最も優先度が高い命令流の１グループ分の命令が前記命令バッファに存在しない場合には、当該実行サイクルにおける命令発行を停止する
ことを特徴とする請求項７に記載のプロセッサ。
【請求項１０】
前記複数の命令流に対して保証すべき性能を示す保証性能決定手段と、
前記複数の命令流に対して実行された性能を計測する性能計測手段とを備え、
前記優先度決定手段または前記命令発行手段は、前記性能計測手段で計測された性能が、前記保証性能決定手段が示す保証すべき性能に達した時点で、前記複数の演算器に対する命令発行方法を変更する
ことを特徴とする請求項２〜９のいずれか１項に記載のプロセッサ。
【請求項１１】
前記優先度決定手段は、前記性能計測手段で計測された性能が、前記保証性能決定手段が示す保証すべき性能に達した時点で、前記優先度情報を変更する
ことを特徴とする請求項１０に記載のプロセッサ。
【請求項１２】
前記優先度決定手段は、前記性能計測手段で計測された性能が、前記保証性能決定手段が示す保証すべき性能に達した時点で、性能が達した命令流の命令流識別子を除外し、次実行サイクル以降の前記優先度情報を決定する
ことを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
前記優先度決定手段は、前記性能計測手段で計測された性能が、前記保証性能決定手段が示す保証すべき性能に達した時点で、性能が達成した命令流の優先度を最低とし、次実行サイクル以降の前記優先度情報を決定する
ことを特徴とする請求項１１に記載のプロセッサ。
【請求項１４】
前記命令発行手段は、前記性能計測手段で計測された性能が、前記保証性能決定手段が示す保証すべき性能に達した時点で、性能が達成した命令流の命令は存在しないものとして、他の命令流の命令を前記複数の演算器に発行する
ことを特徴とする請求項１０に記載のプロセッサ。
【請求項１５】
前記性能計測手段は、命令流に対して実行された性能として、前記命令発行手段から当該命令流の命令が発行された回数をカウントする
ことを特徴とする請求項１０〜１４のいずれか１項に記載のプロセッサ。
【請求項１６】
前記プロセッサは、さらに、
予め定められた基本周期を決定する基本周期決定手段と、
実行サイクル数をカウントする基本周期カウント手段と、
前記基本周期カウント手段でカウントされる実行サイクル数が、前記基本周期決定手段で決定された基本周期に達した段階で、前記基本周期カウント手段でカウントされる実行サイクル数と、前記性能計測手段で計測される性能とを初期状態にリセットする
ことを特徴とする請求項１０〜１５のいずれか１項に記載のプロセッサ。
【請求項１７】
複数の命令流を同時に実行するプロセッサを備えるリアルタイム処理システムであって、
複数の命令を実行する複数の演算器と、
前記命令流毎に、当該命令流に含まれる命令を、前記複数の演算器に対して同時に発行することができる命令からなるグループにグループ分けするグループ分け手段と、
前記命令流毎に、当該命令流に含まれる命令を、前記グループ分け手段でグループ分けされたグループ単位で保持する命令バッファと、
プロセッサの実行サイクル毎に、前記命令バッファからグループ単位で命令を読み出し、読み出した前記命令を、前記複数の演算器に発行する命令発行手段と、
リアルタイム処理が要求される命令流の命令流識別子を複数記憶している第１優先度キューと、
リアルタイム処理が要求されない命令流の命令流識別子を複数記憶している第２優先度キューとを備え、
前記優先度決定手段は、前記第１優先度キューに含まれる命令流識別子の優先度を前記第２優先度キューに含まれる命令流識別子の優先度よりも高くし、前記第１優先度キュー及び前記第２優先度キューから、少なくとも１つ以上の前記命令流識別子を、前記プロセッサの実行サイクル毎に切り替えながら順位付けして選択し、選択された前記少なくとも１つ以上の前記命令流識別子を優先度情報として決定し、
前記命令発行手段は、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて命令流を決定し、当該命令流の１グループ分の命令を前記命令バッファから読み出し、読み出した前記命令を前記複数の演算器に発行する
ことを特徴とするリアルタイム処理システム。
【請求項１８】
前記リアルタイム処理が要求される命令流は、映像信号または音声信号のデコード処理またはエンコード処理の命令流である
ことを特徴とする請求項１７に記載のリアルタイム処理システム。
【請求項１９】
複数の命令流を同時に実行するプロセッサによる命令発行方法であって、
命令流毎に、当該命令流に含まれる命令を、複数の命令を実行する複数の演算器に対して同時に発行することができる命令からなるグループにグループ分けするグループ分けステップと、
前記命令流毎に、当該命令流に含まれる命令を、前記グループ分けステップでグループ分けされたグループ単位で命令バッファに記憶されるステップと、
プロセッサの実行サイクル毎に、前記命令バッファからグループ単位で命令を読み出し、読み出した前記命令を、前記複数の演算器に発行する命令発行ステップとを含む
ことを特徴とする命令発行方法。
【請求項２０】
複数の命令流を同時に実行するプロセッサが実行するプログラムであって、
命令流毎に、当該命令流に含まれる命令を、複数の命令を実行する複数の演算器に対して同時に発行することができる命令からなるグループにグループ分けするグループ分けステップと、
前記命令流毎に、当該命令流に含まれる命令を、前記グループ分けステップでグループ分けされたグループ単位で命令バッファに記憶されるステップと、
プロセッサの実行サイクル毎に、前記命令バッファからグループ単位で命令を読み出し、読み出した前記命令を、前記複数の演算器に発行する命令発行ステップとを前記プロセッサに実行させる
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の命令流の命令を並列に発行することにより、複数の演算ユニットを効率よく使用するマルチスレッドプロセッサに関する。
【背景技術】
【０００２】
デジタル化された映像データや、音声データなどの圧縮、伸張等を行うメディア処理は非常に演算量が大きい。このため、メディア処理を行なうための専用ハードウェアや高性能なＤＳＰ（Digital Signal Processor）などが普及している。
【０００３】
このようなメディア処理の中でも、ＭＰＥＧ（Moving Picture Experts Group）２、ＭＰＥＧ４、Ｈ．２６３、Ｈ．２６４等、非常に多数の規格が実用化されている。このため、デジタルＡＶ（Audio-Visual）機器は、複数の規格のメディア処理に対応することが要求されている。さらに、各メディア処理アプリケーションの複雑度は上昇しており、画像サイズ、音声のチャネル数等も増加する傾向にあり、演算量は増大の一歩をたどっている。
【０００４】
このような状況に対し、デジタルＡＶ機器に、上述のようにメディア処理を行なうための専用ハードウェアを搭載する方法や、ソフトウェアによって柔軟な処理を実現する方法などが用いられている。
【０００５】
専用ハードウェアを搭載する方法では、高性能な処理を実現することができるものの、実現すべき機能が多数になった場合には回路規模が大きくなるという問題がある。また、新たな機能を追加する際には、さらなるハードウェアの追加が必要になるという問題もある。
【０００６】
一方、ソフトウェアによりメディア処理を実現する方法によれば、多数の機能の実現、追加に容易に対応することができる。その一方、専用ハードウェアを搭載する方法に比べ、性能面での課題が存在する。
【０００７】
そこで、複数のプログラムを同時に実行することにより演算効率を大幅に向上させた、高性能なマルチスレッドプロセッサ（例えば、非特許文献１参照。）を用いることにより、性能向上を図っている。
【非特許文献１】“A Multithreaded Processor Architecture with Simultaneous Instruction Issuing,” In Proc. of ISS'91:International Symposium on Supercomputing, Fukuoka, Japan, pp.87-96, November 1991
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、マルチスレッドプロセッサを用いてメディア処理を実現する方法では、複数のプログラムに対する性能割当ての課題が存在する。
【０００９】
具体的には、映像処理用のスレッドや、音声処理用のスレッドに対する割当時間が不足することにより、映像処理や音声処理が間に合わず、映像のフレーム落ちや、音声の音飛び等が発生してしまうという課題が存在する。
【００１０】
このように、実時間性が要求されるスレッドに対しては、一定の期間内に一定の処理が完了することを保証しなければならない。そのためには、各スレッドに要求される処理時間を正確に見積もる必要がある。
【００１１】
本発明は、このような状況に鑑みてなされたものであり、各スレッドに要求される処理時間を正確に見積もることができるプロセッサを提供することを目的とする。
【００１２】
また、実時間性が要求されるスレッドに対しては、一定の期間内に一定の処理が完了することを保証することができるプロセッサを提供することも目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、本発明に係るプロセッサは、複数の命令流を同時に実行するプロセッサであって、複数の命令を実行する複数の演算器と、前記命令流毎に、当該命令流に含まれる命令を、前記複数の演算器に対して同時に発行することができる命令からなるグループにグループ分けするグループ分け手段と、前記命令流毎に、当該命令流に含まれる命令を、前記グループ分け手段でグループ分けされたグループ単位で保持する命令バッファと、プロセッサの実行サイクル毎に、前記命令バッファからグループ単位で命令を読み出し、読み出した前記命令を、前記複数の演算器に発行する命令発行手段とを備える。
【００１４】
命令流毎に当該命令流に含まれる命令をグループ分けしている。このため、命令流毎にグループ数を計数可能である。よって、各命令流、すなわち各スレッドに要求される処理時間を正確に見積もることができる。
【００１５】
好ましくは、前記プロセッサは、さらに、命令流識別子を複数記憶している第１優先度キューと、当該第１優先度キューから、少なくとも１つ以上の前記命令流識別子を、前記プロセッサの実行サイクル毎に切り替えながら順位付けして選択し、選択された前記少なくとも１つ以上の前記命令流識別子を優先度情報として決定する優先度決定手段とを備え、前記命令発行手段は、プロセッサの実行サイクル毎に、前記優先度決定手段で決定された前記優先度情報に基づいて命令流を決定し、当該命令流の１グループ分の命令を前記命令バッファから読み出し、読み出した前記命令を前記複数の演算器に発行する。
【００１６】
優先度発行手段は、実行サイクル毎に優先度情報を変更する。また、命令発行手段は、実行サイクル毎に変更される優先度情報に基づいて、命令流を決定し、その命令流の命令を発行する。このため、優先度情報で特定される命令流に一定の性能を割り当てることができ、実時間性が要求されるスレッド（命令流）に対しては、一定の期間内に一定の処理が完了することを保証することができる。
【発明の効果】
【００１７】
本発明によると、各スレッドに要求される処理時間を正確に見積もることができるプロセッサを提供できる。
【００１８】
また、実時間性が要求されるスレッドに対しては、一定の期間内に一定の処理が完了することを保証することができるプロセッサを提供できる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００２０】
（実施の形態１）
図１は、本発明の実施の形態１におけるマルチスレッドプロセッサのハードウェア構成を示すブロック図である。
【００２１】
マルチスレッドプロセッサは、Ｎ（Ｎは２以上の整数）個の命令流（Ｎ個のスレッド）を同時に独立して実行するプロセッサであり、命令メモリ１０１と、命令デコーダ１０２と、命令スケジューラ１０３と、Ｎ個の命令バッファ（第１命令バッファ１０４、第２命令バッファ１０５、…、第Ｎ命令バッファ１０６）と、Ｎ個のレジスタファイル（第１レジスタファイル１０７、第２レジスタファイル１０８、…、第Ｎレジスタファイル１０９）と、優先度決定部１１０と、発行命令決定部１１１と、演算器群１１２と、ライトバックバス１１３とを備えている。
【００２２】
命令メモリ１０１は、マルチスレッドプロセッサにおいて実行される命令を保持するメモリであり、Ｎ本の独立に実行される命令流（スレッド）を保持している。
【００２３】
命令デコーダ１０２は、命令メモリ１０１から、各命令流に属する命令を読み出し、デコードを行う処理部である。命令デコーダ１０２の詳細な動作については後述する。
【００２４】
命令スケジューラ１０３は、命令デコーダ１０２から命令を読み出し、命令スケジュールを行う処理部である。命令スケジューラ１０３の詳細な動作については後述する。
【００２５】
第１命令バッファ１０４は、命令スケジューラ１０３から、スケジュールされた１番目の命令流（以下、ｉ番目の命令流を第ｉ命令流という。）に属する命令を受け取り、保持する記憶部である。
【００２６】
第２命令バッファ１０５は、命令スケジューラ１０３から、スケジュールされた第２命令流に属する命令を受け取り、保持する記憶部である。
【００２７】
第Ｎ命令バッファ１０６は、命令スケジューラ１０３から、スケジュールされた第Ｎ命令流に属する命令を受け取り、保持する記憶部である。
【００２８】
第１レジスタファイル１０７は、第１命令バッファ１０４に保持された第１命令流を実行することによって読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
【００２９】
第２レジスタファイル１０８は、第２命令バッファ１０５に保持された第２命令流を実行することによって読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
【００３０】
第Ｎレジスタファイル１０９は、第Ｎ命令バッファ１０６に保持された第Ｎ命令流を実行することによって読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
【００３１】
優先度決定部１１０は、Ｎ本の命令流に対する優先度を決定する処理部である。優先度決定部１１０の実行する処理については後述する。
【００３２】
発行命令決定部１１１は、優先度決定部１１０から優先度を受け取り、かつ第１命令バッファ１０４〜第Ｎ命令バッファ１０６の各々から命令が実行可能であるか否かを示す命令バッファ情報を受け取り、受け取った優先度及び命令バッファ情報に基づいて、発行すべき命令流の命令が保持されている命令バッファと当該命令流が必要とするレジスタファイルとを選択することにより、仮想プロセッサを実現する処理部である。
【００３３】
演算器群１１２は、加算器や乗算器などの複数の演算器を含む処理部である。
ライトバックバス１１３は、演算器群１１２からの出力を第１レジスタファイル１０７〜第Ｎレジスタファイル１０９に書き戻すためのバスである。
【００３４】
次に、命令メモリ１０１、命令デコーダ１０２、命令スケジューラ１０３、第１命令バッファ１０４〜第Ｎ命令バッファ１０６の動作を詳細に説明する。
【００３５】
図２は、命令メモリ１０１、命令デコーダ１０２、命令スケジューラ１０３、第１命令バッファ〜第Ｎ命令バッファの動作を説明するための図である。
【００３６】
命令メモリ１０１には、第１命令流２０１から第Ｎ命令流２０３までのＮ本の命令流が記憶されている。
【００３７】
命令デコーダ１０２は、命令メモリ１０１に記憶されている第１命令流２０１〜第Ｎ命令流２０３の中から１つずつ命令流を選択し、命令のデコードを行なう。なお、命令デコーダ１０２は、第１命令バッファ１０４〜第Ｎ命令バッファ１０６における命令の充填状況をモニタして、充填数の少ない命令流から順に選択を行ない、命令のデコードを行うようにしてもよい。
【００３８】
命令スケジューラ１０３は、命令デコーダ１０２からデコードされた命令流を受け取り、同時に発行可能な複数の命令を１つのグループにグループ化する。すなわち、命令スケジューラ１０３は、命令メモリ１０１から読み出された命令流毎に、同一サイクルに発行可能な命令を１つのグループとしてグループ化する。命令スケジューラ１０３は、グループ化した命令を、第１命令バッファ１０４〜第Ｎ命令バッファ１０６のうち、当該命令が属する命令流に対応する命令バッファのいずれかに格納する。
【００３９】
第１命令バッファ１０４〜第Ｎ命令バッファ１０６の各々には、命令デコーダ１０２によってデコードされ、命令スケジューラ１０３によってグループ化された状態で命令が保持される。ここで、命令のグループを示す方法としては、各命令にグループを識別可能な識別子を付与するようにしてもよいし、グループとグループの境界に位置する命令に境界を示す識別子を付与するようにしても良い。
【００４０】
図３は、命令スケジューラ１０３により、単一の命令流に対する命令のスケジューリング処理を説明するための図である。
【００４１】
例えば、図３（ａ）に示すようにある、命令流３０１のうち、任意の連続した８命令についてのスケジューリングを考える。
【００４２】
命令スケジューラ１０３は、命令間に存在するデータ依存関係等に基づいて、同時に実行可能な命令を同一のグループとすることにより、命令のスケジューリングを行なう。
【００４３】
この結果、例えば、図３（ｂ）に示すように、命令流３０１のうち、最初の２命令が第１グループ３０２にグループ化される。次の３命令が第２グループ３０３にグループ化される。次の１命令が第３グループ３０４にグループ化される。次の２命令が第４グループ３０５にグループ化される。
【００４４】
第１グループ３０２に含まれる２命令は、第１サイクルに発行可能である。第２グループ３０３に含まれる３命令は、第２サイクルに発行可能である。第３グループ３０４に含まれる１命令は、第３サイクルに発行可能である。第４グループ３０５に含まれる２命令は、第４サイクルに発行可能である。なお、各グループは、同一サイクルで発行可能な命令のグループを示しているものである。このため、第１グループ３０２、第２グループ３０３、第３グループ３０４、第４グループ３０５の順に命令が連続したサイクルで発行される必要はなく、飛び飛びのサイクルで発行されてもよいし、発行される命令のグループの順序が上記した順序でなくてもよい。
【００４５】
なお、複数の演算器を有するマルチスレッドプロセッサにおける同時発行可能な命令のグループ化の手順に関しては、様々な方法が考えられる。例えば、命令の発行順序を保ったまま、同時に発行可能な命令数と、演算リソース数のみに基づいて、同時発行可能な命令グループを作成する方法などがある。また、この手順はあらかじめコンパイラ等で行われていても構わない。その場合、命令スケジューラ２０５は、命令流中の命令に含まれる所定の識別子または命令数などに基づいて、グループの境界を認識し、グループ化を行なうこととなる。
【００４６】
本発明では、ソフトウェア開発者があらかじめ予測した性能を実現するために、複数の命令流を組み合わせた命令の最適化を行わない点に特徴がある。これは、他の命令流の命令の現れ方が、自命令流の命令実行に対して影響を及ぼすことを防ぐためである。その結果、ソフトウェア開発者は、命令流毎にグループ数を計数する事で、各命令流で必要とされる性能、すなわち、当該命令流に割り当てられるべき仮想プロセッサの実行時間を容易に算出することができる。
【００４７】
図４は、第１命令バッファ１０４〜第Ｎ命令バッファ１０６、第１レジスタファイル１０７〜第Ｎレジスタファイル１０９、演算器群１１２及びライトバックバス１１３を用いた細粒度マルチスレッド処理について説明するための図である。
【００４８】
上述したように、発行命令決定部１１１は、優先度決定部１１０から受け取った優先度情報及び各命令バッファより受け取った命令バッファ情報に基づいて、発行すべき命令流の命令が保持されている命令バッファと当該命令流が必要とするレジスタファイルとを選択することにより、仮想プロセッサを実現する。
【００４９】
ここで、マルチスレッドプロセッサは、演算器群１１２を用いてパイプライン処理を実行する。パイプラインのステージ数は、例えば６ステージであるものとし、第１演算ステージ４０６、第２演算ステージ４０７、第３演算ステージ４０８、第４演算ステージ４０９、第５演算ステージ４１０及びライトバックステージ４１１からなるものとする。
【００５０】
第１演算ステージ４０６〜第５演算ステージ４１０の各ステージの各々は、Ｎ本の命令流のうちいずれかの命令流に含まれる命令を実行する。
【００５１】
また、ライトバックステージ４１１では、第１演算ステージ４０６〜第５演算ステージ４１０で行なわれた演算結果を、ライトバックバス１１３を介して第１レジスタファイル１０７〜第Ｎレジスタファイル１０９のいずれかのレジスタファイルに書き戻す処理を実行する。
【００５２】
このように、パイプライン化された演算ステージに対して、発行命令決定部１１１が命令流を切り替えながら発行することで、複数の仮想プロセッサを実現することができる。例えば、第１演算ステージ４０６には、第２命令流を実行する第２仮想プロセッサが割り当てられている。
【００５３】
このようなmultithreaded pipelineを用いることで、データの依存性による命令発行に対する制約を大きく削減することができる。
【００５４】
次に、優先度の決定方法について説明する。
図５は、優先度決定部１１０及び発行命令決定部１１１の動作を説明するための図である。
【００５５】
優先度決定部１１０は、最優先で命令が発行される仮想プロセッサの番号（スレッド、命令流の番号）を登録している最優先対象優先度キュー５０３を含む。最優先対象優先度ポインタ５０４は、最優先対象優先度キュー５０３において、最優先となるエントリを指し示すポインタである。
【００５６】
優先度決定部１１０は、最優先対象優先度キュー５０３及び最優先対象優先度ポインタ５０４の指し示すエントリに基づいて、ある１動作サイクルにおける仮想プロセッサの優先度を示す優先度情報５０５を求め、出力する。
【００５７】
以下、優先度情報５０５の求め方について具体例をあげながら説明する。
優先度決定部１１０は、最優先対象優先度キュー５０３に登録された仮想プロセッサ番号に基づいて、サイクル毎の優先度を決定する。例えば、最優先対象優先度キュー５０３に「１・２・３…Ｎ・ＥＮＤ」という順で仮想プロセッサ番号が登録されているものとする。ここで、「ＥＮＤ」は、最優先対象優先度キュー５０３の最終エントリを示す識別子である。
【００５８】
あるサイクルにおいて、最優先対象優先度ポインタ５０４が、最優先対象優先度キュー５０３の第２エントリを指し示していた場合、そのサイクルにおける優先度情報５０５は、「２・３…Ｎ・１」となる。すなわち、最優先対象優先度キュー５０３の最優先対象優先度ポインタ５０４が指し示すエントリから最終エントリの１つ前のエントリまでの順で、仮想プロセッサ番号の優先度が決定され、優先度情報５０５の前半部として「２・３…Ｎ」が求められる。さらに、最優先対象優先度キュー５０３の先頭エントリから最優先対象優先度ポインタ５０４が指し示すエントリの１つ前のエントリまでの順で、仮想プロセッサ番号の優先度が決定され、優先度情報５０５の後半部として「１」が求められる。優先度情報５０５の前半部と後半部とをあわせることにより、優先度情報５０５「２・３…Ｎ・１」が求められる。すなわち、このサイクルにおいては、第２仮想プロセッサ、第３仮想プロセッサ、…、第Ｎ仮想プロセッサ、第１仮想プロセッサの順に優先的に命令が発行されることになる。
【００５９】
次サイクルにおいては、最優先対象優先度ポインタ５０４が１エントリ進み、最優先対象優先度キュー５０３の第３エントリを指し示す。なお、最優先対象優先度ポインタ５０４の遷移は、最優先対象の仮想プロセッサに対して命令が発行されたか否かには依存せず、サイクル毎に必ず行われる。したがって、このサイクルの優先度情報５０５は、「３…Ｎ・１・２」となる。
【００６０】
以下、同様の動作を繰り返し、最優先対象優先度ポインタ５０４が識別子「ＥＮＤ」を格納している最終エントリを指し示すと、最優先対象優先度ポインタ５０４は第１エントリに遷移する。本実施の形態では、最優先対象優先度キュー５０３には、Ｎ個の仮想プロセッサの仮想プロセッサ番号が、１つずつ登録されていることを想定しているが、同じ仮想プロセッサ番号が複数登録されていても構わない。
【００６１】
発行命令決定部１１１は、第１命令バッファ１０４〜第Ｎ命令バッファ１０６から出力される命令バッファ情報５０６を受信する。命令バッファ情報５０６は、そのサイクルに、各命令バッファが保持するグループ化された命令のうち、発行可能な命令が存在するか否かを示す情報である。例えば、各命令バッファが空であったり、空でなかったとしても、以前に発行した命令との間にデータの依存性があり、その命令の演算がまだ完了していないために命令を発行できないなどの要因があったりする場合には、命令バッファ情報５０６には、対応した命令バッファには発行可能なグループ化した命令が存在しないことを示す信号が含まれる。
【００６２】
発行命令決定部１１１は、ある１動作サイクルにおいて発行する仮想プロセッサを選択する発行命令選択信号５０７を出力する。
【００６３】
すなわち、発行命令決定部１１１は、優先度情報５０５に従って、命令バッファ情報５０６のチェックを行い、最優先発行対象の仮想プロセッサに発行可能なグループ化された命令が存在するか否かを確認する。発行可能なグループ化された命令が存在する場合には、発行命令決定部１１１は、最優先発行対象の仮想プロセッサを選択する信号を、発行命令選択信号５０７として出力する。
【００６４】
発行可能なグループ化された命令が存在しない場合には、発行命令決定部１１１は、発行すべき命令がないことを示す信号を、発行命令選択信号５０７として出力する。ここで、本実施の形態では、最優先発行対象の仮想プロセッサに発行すべき命令を持たない場合、他の仮想プロセッサに発行すべき命令を持つか否かに関らず、命令を発行しない。しかし、発行命令決定部１１１は、他の仮想プロセッサに発行可能な命令を持つ場合、発行を行っても構わない。ただし、その場合も、最優先対象優先度ポインタ５０４の遷移ルールは変わらない。
【００６５】
図６は、本実施の形態に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示す図である。
【００６６】
図６に示すように、第１仮想プロセッサに割り当てられた性能６０１、第２仮想プロセッサに割り当てられた性能６０２、第３仮想プロセッサに割り当てられた性能６０３、…、第Ｎ仮想プロセッサに割り当てられた性能６０４の各々は、全動作サイクルの１／Ｎである。
【００６７】
なお、サイクル単位仮想プロセッサ動作６０５には、サイクル単位で割り当てられる仮想プロセッサの番号が示されており、第１仮想プロセッサから第Ｎ仮想プロセッサの順にサイクル単位で最も高い優先度が決定されている。ただし、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第１仮想プロセッサに対する命令発行時には、上述したように発行すべき命令が存在しない等の理由により、命令の発行が行なわれなかったことが示されている。
【００６８】
以上説明したように、本実施の形態によると第１仮想プロセッサ〜第Ｎ仮想プロセッサに対して、すべて均等な性能６０１〜６０４を割り当てることができる。なお、サイクル単位仮想プロセッサ動作６０５に示した各サイクルにおいて、破線で囲まれたサイクルにおいては命令を発行していないが、命令を発行していないサイクルに関しても、対象となるプロセッサへの性能割当は行われたと考えている。
【００６９】
また、命令スケジューラ１０３は、命令流毎に命令をグルーピングしている。このため、同時実行可能な命令グループの数を命令流毎（スレッド毎）に計数することができる。これにより、スレッド毎の実行サイクル数、すなわち、スレッドに要求される処理時間を正確に見積もることができる。
【００７０】
これにより、各スレッドに要求される処理時間の割合に応じて、最優先対象優先度キュー５０３に登録する仮想プロセッサ番号の数を変化させることにより、実時間性が要求されるスレッドに対しては、一定の期間内に一定の処理が完了するように、スレッドを割り当てることができる。
【００７１】
（実施の形態２）
次に、本発明の実施の形態２に係るマルチスレッドプロセッサについて説明する。
【００７２】
実施の形態２に係るマルチスレッドプロセッサは、図１に示した実施の形態１に係るマルチスレッドプロセッサと同様の構成を有するが、優先度決定部１１０及び発行命令決定部１１１が異なる。以下、優先度決定部及び発行命令決定部を中心に、実施の形態２に係るマルチスレッドプロセッサについて説明する。
【００７３】
図７は、実施の形態２に係る優先度決定部７０１及び発行命令決定部７０２の構成及び動作を説明するための図である。
【００７４】
優先度決定部７０１は、図１に示したマルチスレッドプロセッサにおける優先度決定部１１０の代わりに設けられ、動作サイクル毎に、Ｎ本の命令流に対する優先度を決定し、仮想プロセッサ毎の優先度を示す優先度情報７０７を出力する処理部である。
【００７５】
発行命令決定部７０２は、図１に示したマルチスレッドプロセッサにおける発行命令決定部１１１の代わりに設けられ、優先度決定部７０１から優先度情報７０７を受け取り、かつ第１命令バッファ１０４〜第Ｎ命令バッファ１０６の各々から命令が実行可能であるか否かを示す命令バッファ情報５０６を受け取り、受け取った優先度情報７０７及び命令バッファ情報５０６に基づいて、発行すべき命令流の命令が保持されている命令バッファと当該命令流が必要とするレジスタファイルとを選択することにより、仮想プロセッサを実現する処理部である。
【００７６】
優先度決定部７０１は、最優先で命令が発行される仮想プロセッサの番号（スレッドの番号、命令流の番号）が登録されている最優先対象優先度キュー７０３と、最優先で命令が発行されない仮想プロセッサの番号が登録されている非最優先対象優先度キュー７０５とを含む。
【００７７】
最優先対象優先度ポインタ７０４は、最優先対象優先度キュー７０３において、最優先となるエントリを指し示すポインタである。非最優先対象優先度ポインタ７０６は、非最優先対象優先度キュー７０５において、命令の発行対象となる仮想プロセッサの番号を記憶しているエントリを指し示すポインタである。
【００７８】
以下、優先度情報７０７の求め方について具体例をあげながら説明する。
優先度決定部７０１は、最優先対象優先度キュー７０３に登録された仮想プロセッサ番号と非最優先対象優先度キュー７０５に登録された仮想プロセッサ番号とに基づいて、サイクル毎の優先度を決定する。例えば、最優先対象優先度キュー７０３に「１・２・３・４・５・ＥＮＤ」という順で仮想プロセッサ番号が登録されているものとする。また、非最優先対象優先度キュー７０５に「６・７・ＥＮＤ」という順で仮想プロセッサ番号が登録されているものとする。ここで、「ＥＮＤ」は、最優先対象優先度キュー７０３及び７０５の最終エントリを示す識別子である。
【００７９】
あるサイクルにおいて、最優先対象優先度ポインタ７０４が、最優先対象優先度キュー７０３の第２エントリを指し示しており、非最優先対象優先度ポインタ７０６が、非最優先対象優先度キュー７０５の第２エントリを指し示しているものとする。このとき、このサイクルにおける優先度情報７０７は、「２・３・４・５・１・７・６」となる。すなわち、優先度決定部７０１は、最優先対象優先度キュー７０３及び最優先対象優先度ポインタ７０４に基づいて、優先度情報７０７の前半部分「２・３・４・５・１」を求める。また、優先度決定部７０１は、非最優先対象優先度キュー７０５及び非最優先対象優先度ポインタ７０６に基づいて、優先度情報７０７の後半部分「７・６」を求める。優先度情報７０７の前半部分及び後半部分の求め方については、図５を参照して説明した優先度決定部１１０による優先度情報５０５の求め方と同様である。このため、その詳細な説明はここでは繰り返さない。
【００８０】
次サイクルには、最優先対象優先度ポインタ７０４が１エントリ進み、最優先対象優先度キュー７０３の第３エントリを指し示し、非最優先対象優先度ポインタ７０６が１エントリ進み、非最優先対象優先度キュー７０５の第１エントリを指し示す。最優先対象優先度ポインタ７０４の遷移は、最優先対象の仮想プロセッサに対して命令が発行されたか否かには依存せず、サイクル毎に必ず行われる。一方、非最優先対象優先度ポインタ７０６の遷移は、非最優先対象の仮想プロセッサに対して命令が発行されたか否かには依存せず、サイクル毎に必ず行われてもよいし、命令が発行された場合にのみ遷移するようにしても良い。このサイクルの優先度情報７０７は、「３・４・５・１・２・６・７」となる。以下同様の動作を繰り返し、最優先対象優先度ポインタ７０４が識別子「ＥＮＤ」を格納している最終エントリを指し示すと、最優先対象優先度ポインタ７０４は第１エントリに遷移し、非最優先対象優先度ポインタ７０６が識別子「ＥＮＤ」を格納している最終エントリを指し示すと、非最優先対象優先度ポインタ７０６は第１エントリに遷移する。本実施の形態では、最優先対象優先度キュー７０３には、第１仮想プロセッサから第５仮想プロセッサまでの５個の仮想プロセッサの仮想プロセッサ番号が、１つずつ登録されていることを想定しているが、同じ仮想プロセッサ番号が複数登録されていても構わない。また、非最優先対象優先度キュー７０５には、最優先対象優先度キュー７０３に登録されない第６仮想プロセッサ及び第７仮想プロセッサの仮想プロセッサ番号が、１つずつ登録されていることを想定しているが、同じ仮想プロセッサ番号が複数登録されていても構わない。
【００８１】
発行命令決定部７０２は、ある１動作サイクルにおいて発行する仮想プロセッサを選択する発行命令選択信号５０７を出力する。
【００８２】
すなわち、発行命令決定部７０２は、優先度情報７０７の優先度に従って、命令バッファ情報５０６のチェックを行い、最優先発行対象の仮想プロセッサに発行可能なグループ化された命令が存在するか否かを確認する。発行可能なグループ化された命令が存在する場合には、発行命令決定部７０２は、最優先発行対象の仮想プロセッサを選択する信号を、発行命令選択信号５０７として出力する。
【００８３】
発行可能なグループ化された命令が存在しない場合には、発行命令決定部７０２は、次に優先度の高い発行対象の仮想プロセッサに発行可能なグループ化された命令が存在するか否かを確認し、発行可能なグループ化された命令が存在する場合、当該仮想プロセッサを選択する信号を、発行命令選択信号５０７として出力する。発行命令決定部７０２は、以上の動作を繰り返し、最終的に全く発行可能な命令グループが存在しない場合には、発行すべき命令がないことを示す信号を、発行命令選択信号５０７として出力する。
【００８４】
図８は、実施の形態２に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示す図である。
【００８５】
図８に示すように、第１仮想プロセッサ〜第５仮想プロセッサには、全て均等な保証された性能８０１〜８０５がそれぞれ割り付けられ、第６仮想プロセッサ及び第７仮想プロセッサには、保証されない出来高の性能８０６及び８０７がそれぞれ割り付けられる。
【００８６】
サイクル単位の仮想プロセッサ動作８０８には、サイクル単位で割り当てられる仮想プロセッサの番号が示されており、最優先対象優先度キュー７０３に登録されている仮想プロセッサ番号に対応する第１仮想プロセッサから第５仮想プロセッサの順にサイクル単位でもっとも高い優先度が決定されている。ただし、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第３仮想プロセッサに対する命令発行時には、上述したように発行すべき命令が存在しない等の理由により、命令を発行することができない。このため、発行可能な命令を有する仮想プロセッサのうち、優先度が最も高い仮想プロセッサが当該実行サイクルにおいて割り当てられる。例えば、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第３仮想プロセッサの代わりに、第３仮想プロセッサ、第７仮想プロセッサ及び第５仮想プロセッサがそれぞれ割り当てられる。なお、他の仮想プロセッサが割り当てられた場合であっても、次のサイクルでは、そのサイクルで最も優先度が高い仮想プロセッサが選択される。したがって、あらかじめソフトウェア開発者が意図した命令のレイテンシを考慮したワーストサイクルでの命令実行を保証することができる。
【００８７】
（実施の形態３）
次に、本発明の実施の形態３に係るマルチスレッドプロセッサについて説明する。
【００８８】
実施の形態３に係るマルチスレッドプロセッサは、実施の形態２に係るマルチスレッドプロセッサと同様の構成を有するが、優先度決定部７０１の動作が異なる。このため、実施の形態２と異なる部分を中心に説明を行なう。
【００８９】
図７を用いて、優先度決定部７０１及び発行命令決定部７０２の動作について説明する。
【００９０】
優先度決定部７０１による優先度情報７０７の求め方について具体例をあげながら説明する。
【００９１】
優先度決定部７０１は、最優先対象優先度キュー７０３に登録された仮想プロセッサ番号と、非最優先対象優先度キュー７０５に登録された仮想プロセッサ番号とに基づいて、サイクル毎の優先度を決定する。最優先対象優先度キュー７０３及び非最優先対象優先度キュー７０５に登録されている仮想プロセッサ番号は、実施の形態２と同様であるものとする。
【００９２】
あるサイクルにおいて、最優先対象優先度ポインタ７０４が、最優先対象優先度キュー７０３の第２エントリを指し示しており、非最優先対象優先度ポインタ７０６が、非最優先対象優先度キュー７０５の第２エントリを指し示しているものとする。このとき、このサイクルにおける優先度情報７０７は、「２・７・６」となる。すなわち、優先度決定部７０１は、最優先対象優先度キュー７０３及び最優先対象優先度ポインタ７０４に基づいて、優先度情報７０７の前半部分「２」を求める。また、優先度決定部７０１は、非最優先対象優先度キュー７０５及び非最優先対象優先度ポインタ７０６に基づいて、優先度情報７０７の後半部分「７・６」を求める。優先度情報７０７の後半部分の求め方は実施の形態２と同じであるが、前半部分の求め方が実施の形態２とは異なる。すなわち、優先度情報７０７の前半部分は、最優先対象優先度ポインタ７０４が指し示す非最優先対象優先度キュー７０５のエントリに格納されている仮想プロセッサ番号のみである。
【００９３】
次サイクルには、最優先対象優先度ポインタ７０４が１エントリ進み、最優先対象優先度キュー７０３の第３エントリを指し示し、非最優先対象優先度ポインタ７０６が１エントリ進み、非最優先対象優先度キュー７０５の第１エントリを指し示す。最優先対象優先度ポインタ７０４の遷移は、最優先対象の仮想プロセッサに対して命令が発行されたか否かには依存せず、サイクル毎に必ず行われる。一方、非最優先対象優先度ポインタ７０６の遷移は、非最優先対象の仮想プロセッサに対して命令が発行されたか否かには依存せず、サイクル毎に必ず行われてもよいし、命令が発行された場合にのみ遷移するようにしても良い。また、このサイクルの優先度情報７０７は、「３・６・７」となる。このように、最優先対象優先度キュー７０３に基づいた仮想プロセッサ番号を最優先とし、続く優先度としては非最優先対象優先度キュー７０５に基づいた優先度を設定する。以下同様の動作を繰り返し、最優先対象優先度ポインタ７０４が識別子「ＥＮＤ」を格納している最終エントリを指し示すと、最優先対象優先度ポインタ７０４は第１エントリに遷移し、非最優先対象優先度ポインタ７０６が識別子「ＥＮＤ」を格納している最終エントリを指し示すと、最優先対象優先度ポインタ７０６は第１エントリに遷移する。本実施の形態では、最優先対象優先度キュー７０３には、第１仮想プロセッサから第５仮想プロセッサまでの５個の仮想プロセッサの仮想プロセッサ番号が、１つずつ登録されていることを想定しているが、同じ仮想プロセッサ番号が複数登録されていても構わない。また、非最優先対象優先度キュー７０５には、最優先対象優先度キュー７０３に登録されない第６仮想プロセッサ及び第７仮想プロセッサの仮想プロセッサ番号が、１つずつ登録されていることを想定しているが、同じ仮想プロセッサ番号が複数登録されていても構わない。
【００９４】
発行命令決定部７０２は、ある１動作サイクルにおいて発行する仮想プロセッサを選択する発行命令選択信号５０７を出力する。発行命令決定部７０２の行なう動作は、実施の形態２と同様であるため、詳細な説明はここでは繰り返さない。
【００９５】
図９は、実施の形態３に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示す図である。
【００９６】
図９に示すように、第１仮想プロセッサ〜第５仮想プロセッサには、全て均等な保証された性能９０１〜９０５がそれぞれ割り付けられ、第６仮想プロセッサ及び第７仮想プロセッサには、保証されない出来高の性能９０６及び９０７がそれぞれ割り付けられる。
【００９７】
サイクル単位の仮想プロセッサ動作９０８には、サイクル単位で割り当てられる仮想プロセッサの番号が示されており、最優先対象優先度キュー７０３に登録されている仮想プロセッサ番号に対応する第１仮想プロセッサから第５仮想プロセッサの順にサイクル単位でもっとも高い優先度が決定されている。ただし、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第３仮想プロセッサに対する命令発行時には、上述したように発行すべき命令が存在しない等の理由により、命令を発行することができない。このため、非最優先対象優先度キュー７０５に登録されている番号の仮想プロセッサのうち、優先度が最も高い仮想プロセッサが当該実行サイクルにおいて割り当てられる。例えば、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第３仮想プロセッサの代わりに、非最優先対象の仮想プロセッサである第６仮想プロセッサ、第７仮想プロセッサ及び第６仮想プロセッサがそれぞれ割り当てられる。このように、発行命令決定部７０２が他の仮想プロセッサを選択した場合であっても、次のサイクルでは、そのサイクルで最も優先度が高い仮想プロセッサが選択される。したがって、あらかじめソフトウェア開発者が意図した命令のレイテンシを考慮したワーストサイクルでの命令実行を保証することができる。
【００９８】
以上の動作によって、ソフトウェア開発者が意図した性能に対して過不足ない性能を、最優先対象優先度キュー７０３に登録された仮想プロセッサに対して与え、同時に、非最優先対象優先度キュー７０５に登録された出来高性能を与える仮想プロセッサに積極的に性能を割り与えることが可能となる。
【００９９】
（実施の形態４）
次に、本発明の実施の形態４に係るマルチスレッドプロセッサについて説明する。
【０１００】
実施の形態４に係るマルチスレッドプロセッサは、図１に示した実施の形態１に係るマルチスレッドプロセッサにおいて、優先度決定部１１０の代わりに実施の形態２または実施の形態３で説明した優先度決定部７０１を用い、発行命令決定部１１１の代わりに発行命令決定部１００５を用いた構成を有する。また、細粒度マルチスレッド処理が実施の形態１〜３とは異なる。以下、上述の実施の形態と異なる点を中心に本実施の形態について説明する。
【０１０１】
図１０は、第１命令バッファ１０４〜第Ｎ命令バッファ１０６、第１レジスタファイル１０７〜第Ｎレジスタファイル１０９、演算器群１１２及びライトバックバス１１３を用いた細粒度マルチスレッド処理について説明するための図である。
【０１０２】
優先度決定部７０１は、Ｎ本の命令流に対する優先度を決定し、優先度情報を出力する処理部である。優先度決定部７０１の構成及び動作は、実施の形態２または実施の形態３で説明したものと同様であり、いずれの構成及び動作を用いても良い。このため、その詳細な説明はここでは繰り返さない。
【０１０３】
発行命令決定部１００５は、優先度決定部７０１から受け取った優先度情報及び第１命令バッファ１０４〜第Ｎ命令バッファ１０６に命令発行可能であるか否かを示す命令バッファ情報に基づいて、発行すべき命令流の命令が保持されている命令バッファと当該命令流が必要とするレジスタファイルとを選択することにより、仮想プロセッサを実現する。
【０１０４】
この際、発行命令決定部１００５は、優先度情報７０７の優先度に従って、命令バッファ情報５０６のチェックを行い、最優先発行対象の仮想プロセッサに発行可能なグループ化された命令が存在するか否かを確認する。発行命令決定部１００５は、発行可能なグループ化された命令が存在する場合には、最優先発行対象の仮想プロセッサを選択する信号を、発行命令選択信号５０７として出力する。さらに、発行命令決定部１００５は、優先度が上位のものから順に、命令バッファ情報５０６に基づき、発行可能なグループ化された命令が存在するか否かを確認し、同時に発行することが可能なグループ化された命令が存在するかどうかのチェックを行い、存在する場合には、当該グループ化された命令を同時に発行する。この同時発行が可能かどうかのチェックは例えば、同時発行すると仮定する複数のスレッドの総命令数が、使用する演算リソースの数以下であるか否かをチェックし、この条件を満たす場合には、同時発行可能と判断する。
【０１０５】
最優先発行対象の仮想プロセッサに発行可能なグループ化された命令が存在しない場合には、発行命令決定部１００５は、次に優先度の高い発行対象の仮想プロセッサに発行可能なグループ化された命令が存在するか否かを確認する。当該発行可能なグループ化された命令が存在する場合には、発行命令決定部１００５は、次に優先度の高い発行対象の仮想プロセッサを選択する信号を、発行命令選択信号５０７として出力する。この場合も同様に、発行命令決定部１００５は、優先度が上位のものから順に、命令バッファ情報５０６に基づき、同時発行可能なグループ化された命令が存在するか否かを確認し、同時に発行することが可能なグループ化された命令が存在するかどうかのチェックを行う。同時発行可能なグループ化された命令が存在する場合には、発行命令決定部１００５は、当該グループ化された命令を同時に発行する。
【０１０６】
以上の動作を繰り返し、最終的に発行可能な命令グループが全く存在しない場合には、発行命令決定部１００５は、発行すべき命令がないことを示す信号を、発行命令選択信号５０７として出力する。
【０１０７】
ここで、マルチスレッドプロセッサは、演算器群１１２を用いてパイプライン処理を実行する。パイプラインのステージ数は、例えば６ステージであるものとし、第１演算ステージ１００６、第２演算ステージ１００７、第３演算ステージ１００８、第４演算ステージ１００９、第５演算ステージ１０１０及びライトバックステージ１０１１からなるものとする。
【０１０８】
第１演算ステージ１００６〜第５演算ステージ１０１０の各ステージの各々は、Ｎ本の命令流に含まれる命令を実行する。
【０１０９】
また、ライトバックステージ１０１１では、第１演算ステージ１００６〜第５演算ステージ１０１０で行なわれた演算結果を、ライトバックバス１１３を介して第１レジスタファイル１０７〜第Ｎレジスタファイル１０９のいずれかのレジスタファイルに書き戻す処理を実行する。
【０１１０】
このように、パイプライン化された演算ステージに対して、発行命令決定部１００５が命令流を切り替えながら発行することで、複数の仮想プロセッサを実現することができる。例えば、第１演算ステージ１００６には、第１命令流を実行する第１仮想プロセッサが割り当てられている。また、第２演算ステージ１００７には、第５命令流を実行する第５仮想プロセッサ及び第７命令流を実行する第７仮想プロセッサが割り当てられている。
【０１１１】
このようなmultithreaded pipelineを用いることで、データの依存性による命令発行に対する制約を大きく削減することができる。
【０１１２】
なお、実施の形態４と実施の形態１〜３との異なる点は、第２演算ステージ１００７や第５演算ステージ１０１０のように、複数の仮想プロセッサの命令が同一のステージに混在していることである。これは、発行命令決定部１００５が複数の仮想プロセッサの命令を同時に発行した結果である。このような技術は、一般的に同時マルチスレッディング（SMT: Simultaneous Multi Threading）と呼ばれているが、本特許はグルーピングされた命令単位で命令を同時発行する点に特徴がある。
【０１１３】
図１１は、本実施の形態に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示した図である。
【０１１４】
図１１に示すように、第１仮想プロセッサ〜第５仮想プロセッサには、全て均等な保証された性能１１０１〜１１０５がそれぞれ割り付けられ、第６仮想プロセッサ及び第７仮想プロセッサには、保証されない出来高の性能１１０６及び１１０７がそれぞれ割り付けられる。
【０１１５】
サイクル単位の仮想プロセッサ動作１１０８には、サイクル単位で割り当てられる仮想プロセッサの番号が示されており、最優先対象優先度キュー７０３に登録されている仮想プロセッサ番号に対応する第１仮想プロセッサから第５仮想プロセッサの順にサイクル単位でもっとも高い優先度が決定されている。ただし、第３仮想プロセッサ及び第７仮想プロセッサに対しては、同時に命令が発行されている。第４仮想プロセッサ及び第５仮想プロセッサに対しても同様に同時に命令が発行されている。また、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第３仮想プロセッサに対する命令発行時には、上述の実施形態で説明したように発行すべき命令が存在しない等の理由により、命令を発行することができない。このため、発行可能な命令を有する仮想プロセッサのうち、優先度が最も高い仮想プロセッサが当該実行サイクルにおいて割り当てられる。例えば、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第３仮想プロセッサの代わりに、第３仮想プロセッサ、第６仮想プロセッサ及び第７仮想プロセッサがそれぞれ割り当てられる。
【０１１６】
なお、他の仮想プロセッサが割り当てられた場合であっても、次のサイクルでは、そのサイクルで最も優先度が高い仮想プロセッサが選択される。したがって、あらかじめソフトウェア開発者が意図した命令のレイテンシを考慮したワーストサイクルでの命令実行を保証することができる。
【０１１７】
以上の動作によって、ソフトウェア開発者が意図した性能に対して過不足ない性能を、最優先対象優先度キュー７０３に登録された仮想プロセッサに対して与え、同時に、非最優先対象優先度キュー７０５に登録された出来高性能を与える仮想プロセッサに積極的に性能を割り与えることが可能となる。
【０１１８】
なお、上述の説明では、各演算ステージには、最大２つの仮想プロセッサの命令が同時発行されているが、これに限定されるものではなく、演算リソースが利用可能であれば、３つ以上の仮想プロセッサの命令を１つの演算ステージに同時発行するようにしても良い。
【０１１９】
（実施の形態５）
次に、本発明の実施の形態５に係るマルチスレッドプロセッサについて説明する。
【０１２０】
実施の形態５に係るマルチスレッドプロセッサは、図１０を用いて説明した実施の形態４に示したマルチスレッドプロセッサと同様の構成を有する。ただし、発行命令決定部１００５の動作が異なる。
【０１２１】
実施の形態４に係る発行命令決定部１００５は、各実行サイクルにおいて、最優先発行対象の仮想プロセッサに発行可能なグループ化された命令が存在しない場合には、その他の仮想プロセッサに発行可能なグループ化された命令が存在すれば、当該仮想プロセッサに対してグループ化された命令を発行していた。
【０１２２】
これに対して、本実施の形態に係る発行命令決定部１００５は、各実行サイクルにおいて、最優先発行対象の仮想プロセッサに発行可能なグループ化された命令が存在しない場合には、その他の仮想プロセッサに発行可能なグループ化された命令が存在したとしても、一切の命令発行を行なわない。すなわち、発行命令決定部１００５は、発行すべき命令がないことを示す信号を、発行命令選択信号５０７として出力する。
【０１２３】
このような動作によって、命令発行が行なわれない実行サイクルにおいては、第１命令バッファ１０４〜第Ｎ命令バッファ１０６、第１レジスタファイル１０７〜第Ｎレジスタファイル１０９、当該実行サイクルに対応する演算ステージの動作を完全に停止させる。これにより、マルチスレッドプロセッサで使用される電力を削減することができる。
【０１２４】
図１２は、本実施の形態に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示した図である。
【０１２５】
図１２に示すように、第１仮想プロセッサ〜第５仮想プロセッサには、全て均等な保証された性能１１０１〜１１０５がそれぞれ割り付けられ、第６仮想プロセッサ及び第７仮想プロセッサには、保証されない出来高の性能１１０６及び１１０７がそれぞれ割り付けられる。
【０１２６】
サイクル単位の仮想プロセッサ動作１２０８には、サイクル単位で割り当てられる仮想プロセッサの番号が示されており、最優先対象優先度キュー７０３に登録されている仮想プロセッサ番号に対応する第１仮想プロセッサから第５仮想プロセッサの順にサイクル単位でもっとも高い優先度が決定されている。ただし、第３仮想プロセッサ及び第７仮想プロセッサに対しては、同時に命令が発行されている。同様に、第４仮想プロセッサ及び第５仮想プロセッサ、ならびに第１仮想プロセッサ及び第６仮想プロセッサに対しても、同時に命令が発行されている。
【０１２７】
また、破線で示した第２仮想プロセッサ、第５仮想プロセッサ及び第３仮想プロセッサに対する命令発行時には、上述の実施形態で説明したように発行すべき命令が存在しない等の理由により、命令を発行することができない。このため、命令は発行しない。
【０１２８】
なお、他の仮想プロセッサが割り当てられた場合や、仮想プロセッサが割り当てられなかった場合であっても、次のサイクルでは、そのサイクルで最も優先度が高い仮想プロセッサが選択される。したがって、あらかじめソフトウェア開発者が意図した命令のレイテンシを考慮したワーストサイクルでの命令実行を保証することができる。
【０１２９】
以上の動作によって、ソフトウェア開発者が意図した性能に対して過不足ない性能を、最優先対象優先度キュー７０３に登録された仮想プロセッサに対して与え、同時に、非最優先対象優先度キュー７０５に登録された出来高性能を与える仮想プロセッサに積極的に性能を割り与えることが可能となる。
【０１３０】
（実施の形態６）
次に、本発明の実施の形態６に係るマルチスレッドプロセッサについて説明する。
【０１３１】
本実施の形態に係るマルチスレッドプロセッサは、図１に示した実施の形態１に係るマルチスレッドプロセッサにおいて、優先度決定部１１０の代わりに優先度決定部１３０１を用い、発行命令決定部１１１の代わりに発行命令決定部１３０２を用いたものである。以下、上述の実施の形態と異なる点を中心に本実施の形態について説明する。
【０１３２】
図１３は、優先度決定部１３０１及び発行命令決定部１３０２の構成及び動作を説明するための図である。
【０１３３】
優先度決定部１３０１は、動作サイクル毎に、Ｎ本の命令流に対する優先度を決定し、仮想プロセッサ毎の優先度を示す優先度情報１３１２を出力する処理部である。
【０１３４】
発行命令決定部１３０２は、図１に示したマルチスレッドプロセッサにおける発行命令決定部１１１の代わりに設けられ、優先度決定部１３０１から優先度情報１３１２を受け取り、かつ第１命令バッファ１０４〜第Ｎ命令バッファ１０６の各々から命令が実行可能であるか否かを示す命令バッファ情報５０６を受け取り、受け取った優先度情報１３１２及び命令バッファ情報５０６に基づいて、発行すべき命令流の命令が保持されている命令バッファと当該命令流が必要とするレジスタファイルとを選択することにより、仮想プロセッサを実現する処理部である。
【０１３５】
発行命令決定部１３０２は、最優先対象優先度キュー１３０３と、保証性能決定部１３０５と、保証性能測定部１３０６と、非最優先対象優先度キュー１３０７と、基本周期決定部１３０９と、基本周期カウント部１３１０と、リセット信号生成部１３１１とを含む。
【０１３６】
最優先対象優先度キュー１３０３は、最優先で命令が発行される仮想プロセッサの番号（スレッドの番号、命令流の番号）が登録されている記憶部である。最優先対象優先度キュー１３０３において、最優先となるエントリは、最優先対象優先度ポインタ１３０４により指し示されている。
【０１３７】
保証性能決定部１３０５は、最優先対象優先度キュー１３０３と対応して、仮想プロセッサ毎にどれだけの性能を実行すべきかを示す記憶部である。
【０１３８】
保証性能測定部１３０６は、最優先対象優先度キュー１３０３と対応して、仮想プロセッサ毎にどれだけの性能を実現できたかを示す記憶部である。
【０１３９】
非最優先対象優先度キュー１３０７は、最優先で命令が発行されない仮想プロセッサの番号が登録されている記憶部である。非最優先対象優先度キュー１３０７において、命令発行対象となる仮想プロセッサの番号が格納されたエントリは、非最優先対象優先度ポインタ１３０８により指し示される。
【０１４０】
基本周期決定部１３０９は、性能カウントを行うための一定の周期を決定する処理部である。
【０１４１】
基本周期カウント部１３１０は、性能カウントを行うための一定の周期の実行サイクル数をカウントする処理部である。
【０１４２】
リセット信号生成部１３１１は、基本周期カウント部１３１０でカウントしている実行サイクル数が、基本周期決定部１３０９で設定された基本周期に達した場合に、保証性能測定部１３０６と基本周期カウント部１３１０にリセット信号を通知する処理部である。リセット信号を受け取った保証性能測定部１３０６及び基本周期カウント部１３１０は、自身が保持する実行サイクル数を０にリセットする。
【０１４３】
以下、各処理部の動作について、より詳細に説明する。
保証性能決定部１３０５は、ソフトウェアより設定可能なレジスタであり、仮想プロセッサ毎にエントリを有し、仮想プロセッサ毎に期待する動作サイクル数を、当該仮想プロセッサに対応するエントリに設定するものであり、あるシステム状態で動作し始める際に、仮想プロセッサと対応してあらかじめ設定されるものである。
【０１４４】
保証性能測定部１３０６は、仮想プロセッサ毎にエントリを有し、各エントリは０を初期状態として、対応する仮想プロセッサに対して最優先のサイクルが割り当てられるとカウントアップする。カウントアップする毎に対応する保証性能決定部１３０５に記憶された動作サイクル数と比較され、一致しない場合は同様の動作を継続する。一致した場合は、以降のカウント動作を停止するとともに、対応する仮想プロセッサの予定性能が達成されたことを示す信号を出力する。
【０１４５】
この信号は、以降の対応する仮想プロセッサの命令発行に対する制御信号となり、以下の制御に用いられる。
【０１４６】
１．当該仮想プロセッサを最優先対象優先度キュー１３０３によって定められる優先度の決定対象からはずし、命令発行対象の候補としない。すなわち、優先度情報１３１２に当該仮想プロセッサの情報が含まれない。
【０１４７】
２．当該仮想プロセッサを最優先対象優先度キュー１３０３、及び非最優先対象優先度キュー１３０７によって定められる優先度の中で、もっとも低いものとして、優先度情報１３１２を出力する。
【０１４８】
３．優先度の制御には用いず、優先度情報１３１２の一部として発行命令決定部１３０２に出力され、当該信号を受け取った発行命令決定部１３０２は、対応する仮想プロセッサが命令を保持しないものとして発行命令選択信号１３１４を出力する。
【０１４９】
基本周期決定部１３０９は、ソフトウェアより設定可能なレジスタであり、保証性能決定部１３０５、保証性能測定部１３０６で設定された保証すべき性能が、どれだけのサイクル中に保証されることを期待するかを示す値であり、あるシステム状態で動作し始める際に、あらかじめ設定されるものである。
【０１５０】
基本周期カウント部１３１０は、０を初期状態として、動作サイクル毎に、カウントアップされる。また、基本周期カウント部１３１０の保持する値は、カウントアップされる毎に、リセット信号生成部１３１１において基本周期決定部１３０９に記憶された値と比較され、両値が一致しない場合は同様の動作が継続される。両値が一致した場合は、リセット信号生成部１３１１は、以降のカウント動作を停止させるとともに、基本周期決定部１３０９によって定められた基本周期が達成されたことを示す信号を出力する。
【０１５１】
この基本周期の完了を示す信号は、保証性能測定部１３０６及び基本周期カウント部１３１０を初期化する役目を持ち、保証すべき性能のカウントと基本周期のカウントを初期状態から再開させる。
【０１５２】
以上の制御に加え、優先度情報１３１２が決定されるが、優先度情報１３１２の決定する方法は、実施の形態２〜５のいずれかで述べたものと同様である。
【０１５３】
また、発行命令決定部１３０２における発行命令選択信号１３１４の決定処理も、上述の実施の形態のいずれかで述べたものと同様である。このため、それらの詳細な説明はここでは繰り返さない。
【０１５４】
図１４は、本発明の実施の形態に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示した図である。
【０１５５】
図１４に示すように、第１仮想プロセッサ〜第５仮想プロセッサには、保証性能決定部１３０５に設定された第１保証性能〜第５保証性能と同じ性能１４０１〜１４０５が割り付けられ、第６仮想プロセッサ及び第７仮想プロセッサには、保証されない出来高の性能１１０６及び１１０７がそれぞれ割り付けられる。
【０１５６】
以上説明したように、本実施の形態では、仮想プロセッサ１４０１〜１４０５に対して、保証性能決定部１３０５においてそれぞれ保証すべき性能が定められ、非均等な保証された性能が割り付けられる点に特徴がある。したがって、ソフトウェア開発者が意図した性能に対して過不足ない性能を、最優先対象優先度キュー１３０３に登録された仮想プロセッサに対して与え、同時に、非最優先対象優先度キュー１３０７に登録された出来高性能を与える仮想プロセッサに積極的に性能を割り与えることが可能となる。
【０１５７】
（実施の形態７）
次に、本発明の実施の形態７に係るリアルタイム処理システムについて説明する。
【０１５８】
図１５は、リアルタイム処理システムの概略構成を示すブロック図である。
本実施の形態に係るリアルタイム処理システムは、例えば、動画像及び音声の再生を行うシステムであり、上述の実施の形態１〜６のいずれかで説明したマルチスレッドプロセッサを用いたシステムである。
【０１５９】
マルチスレッドプロセッサ１５０１は、仮想プロセッサ１５０２、１５０３及び１５０４を含む。仮想プロセッサ１５０２及び１５０３は、ソフトウェア開発者が意図した性能に対して過不足ない性能が保証された仮想プロセッサであり、仮想プロセッサ１５０４は、性能保証の対象とされず、出来高性能が与えられえる仮想プロセッサである。
【０１６０】
性能が保証される仮想プロセッサ１５０２及び１５０３では、時間的制約が厳しいソフトウェア処理である動画像のデコードを行なう映像処理ソフトウェア１５０５及び音声のデコードを行なう音声処理ソフトウェア１５０６がそれぞれ実行される。また、出来高性能が与えられる仮想プロセッサ１５０４では、時間的制約の厳しくないそれ以外の一般処理ソフトウェア１５０７が実行される。
【０１６１】
例えば、一般処理ソフトウェア１５０７が実行する処理としては、デジタルテレビやＤＶＤレコーダ等にマルチスレッドプロセッサ１５０１を適用する場合を考えると、ＯＳＤ(On Screen Display)の表示や、チャネル切り替え処理などが考えられる。
【０１６２】
以上のような構成とすることにより、性能保証が必要なソフトウェアに対して必要な性能を確実に割り当て、必要でないソフトウェアに対してはそれ以外の性能を可能な限り割り当て、マルチスレッドプロセッサ全体のスループットを引き上げ、高速かつ柔軟な処理を実現することができる。
【０１６３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【０１６４】
本発明に係るマルチスレッドプロセッサは、柔軟で高性能な演算処理を実現する機能を有するため、ＤＶＤレコーダやデジタルＴＶ等の映像や音声のメディア処理を行なうマルチスレッドプロセッサ等に適用できる。
【図面の簡単な説明】
【０１６５】
【図１】実施の形態１に係るマルチスレッドプロセッサのハードウェア構成を示すブロック図である。
【図２】実施の形態１に係る命令メモリ、命令デコーダ、命令スケジューラ、第１命令バッファ〜第Ｎ命令バッファの動作を説明するための図である。
【図３】実施の形態１に係る命令スケジューラにより、単一の命令流に対する命令のスケジューリング処理を説明するための図である。
【図４】実施の形態１に係る第１命令バッファ〜第Ｎ命令バッファ、第１レジスタファイル〜第Ｎレジスタファイル、演算器群及びライトバックバスを用いた細粒度マルチスレッド処理について説明するための図である。
【図５】実施の形態１に係る優先度決定部及び発行命令決定部の動作を説明するための図である。
【図６】実施の形態１に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示す図である。
【図７】実施の形態２に係る優先度決定部及び発行命令決定部の構成及び動作を説明するための図である。
【図８】実施の形態２に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示す図である。
【図９】実施の形態３に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示す図である。
【図１０】実施の形態４に係る第１命令バッファ〜第Ｎ命令バッファ、第１レジスタファイル〜第Ｎレジスタファイル、演算器群及びライトバックバスを用いた細粒度マルチスレッド処理について説明するための図である。
【図１１】実施の形態４に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示した図である。
【図１２】実施の形態５に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示した図である。
【図１３】実施の形態６に係る優先度決定部及び発行命令決定部の構成及び動作を説明するための図である。
【図１４】実施の形態６に係るマルチスレッドプロセッサにおいて、各仮想プロセッサに割り当てられる性能を示した図である。
【図１５】実施の形態７に係るリアルタイム処理システムの概略構成を示すブロック図である。
【符号の説明】
【０１６６】
１０１  命令メモリ
１０２  命令デコーダ
１０３  命令スケジューラ
１０４  第１命令バッファ
１０５  第２命令バッファ
１０６  第Ｎ命令バッファ
１０７  第１レジスタファイル
１０８  第２レジスタファイル
１０９  第Ｎレジスタファイル
１１０  優先度決定部
１１１  発行命令決定部
１１２  演算器群
１１３  ライトバックバス
２０１  第１命令流
２０２  第２命令流
２０３  第Ｎ命令流
３０１  命令流
３０２  第１グループ
３０３  第２グループ
３０４  第３グループ
３０５  第４グループ
４０６  第１演算ステージ
４０７  第２演算ステージ
４０８  第３演算ステージ
４０９  第４演算ステージ
４１０  第５演算ステージ
４１１  ライトバックステージ
５０３  最優先対象優先度キュー
５０４  最優先対象優先度ポインタ
５０５  優先度情報
５０６  命令バッファ情報
５０７  発行命令選択信号
６０１〜６０４  性能
６０５  サイクル単位仮想プロセッサ動作
【図１】
2008123045.tif 000003
【図２】
2008123045.tif 000004
【図３】
2008123045.tif 000005
【図４】
2008123045.tif 000006
【図５】
2008123045.tif 000007
【図６】
2008123045.tif 000008
【図７】
2008123045.tif 000009
【図８】
2008123045.tif 000010
【図９】
2008123045.tif 000011
【図１０】
2008123045.tif 000012
【図１１】
2008123045.tif 000013
【図１２】
2008123045.tif 000014
【図１３】
2008123045.tif 000015
【図１４】
2008123045.tif 000016
【図１５】
2008123045.tif 000017