(57)【要約】【課題】  プログラムの種類に係わらず並列実行及びシリアル実行を適応的に行い、並列度を高めても細粒度の並列実行を高効率で行うマルチスレッドプロセッサを実現する。【解決手段】  スレッドユニット２ａ〜２ｈは、生成する実行命令に、演算ユニット５ａ〜５ｄ中の任意の演算ユニットで実行される演算が他の演算ユニットで演算した演算結果を用いる依存性演算が含まれる場合は、被依存性実行命令を生成するスレッドユニットを特定してセマフォ情報を記憶領域２１に記述する一方、生成する実行命令に被依存性実行命令が含まれる場合は、プログラム実行後にセマフォ情報をクリアさせる実行命令を付した実行命令を生成するプログラム生成部２３と、セマフォ情報がクリアされた後に依存性演算の実行命令を、命令クロスバースイッチ４を介し演算ユニットに供給させる命令投入部２４を備えて実現した。【選択図】      図１
2008033490.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行命令群で記述されるアプリケーションプログラムを記憶するプログラムメモリから複数あるうちの一部の実行命令群を取得し、取得された実行命令群に記述される複数の実行命令のうち一部の実行命令を順次出力する複数のスレッドユニットと、前記複数のスレッドユニットから順次出力される前記実行命令を複数ある出力端のうち所望の出力端に出力する命令交換伝送路と、前記命令交換伝送路のそれぞれの出力端に接続され、接続された出力端に供給されるそれぞれの実行命令を実行して得られた演算結果を記憶手段に記憶する複数の演算ユニットと、前記演算結果を所望のスレッドユニットに実行用演算結果として供給する演算結果交換伝送路と、を有し、
前記命令交換伝送路は前記複数のスレッドユニットから出力される前記複数の実行命令を、前記複数の演算ユニットのうち待機状態にある演算ユニットに出力するようになすマルチスレッドプロセッサにおいて、
前記複数の各スレッドユニットは、
前記出力する実行命令に、前記実行用演算結果を得るための被依存性実行命令が含まれ且つ前記実行用演算結果を用いて演算を行う依存性実行命令が含まれない場合は、前記実行用演算結果が得られていないことを示すセマフォ情報をセマフォ記憶部に記憶すると共に、当該実行命令を実行した後に前記実行用演算結果が得られたことを示す結果取得情報を前記演算結果交換伝送路に出力させる属性情報を付した実行命令を前記命令交換伝送路に出力し、
前記出力する実行命令に、前記依存性実行命令が含まれ且つ前記被依存性実行命令が含まれない場合は前記セマフォ記憶部に記憶されるセマフォ情報を参照し、記憶されているセマフォ情報が検出される場合は前記依存性実行命令の前記命令交換伝送路への出力を待機し、記憶されているセマフォ情報が検出されない場合は前記依存性実行命令を前記命令交換伝送路に出力し、
前記出力する実行命令に、前記依存性実行命令であり且つ前記被依存性実行命令である実行命令が含まれる場合は前記セマフォ記憶部に記憶されるセマフォ情報を参照し、記憶されているセマフォ情報が検出される場合は前記実行命令の前記命令交換伝送路への出力を待機し、記憶されているセマフォ情報が検出されない場合は前記セマフォ情報を前記セマフォ記憶部に記憶すると共に、前記結果取得情報を前記演算結果交換伝送路に出力させる属性情報を付した実行命令を前記命令交換伝送路に出力する一方、
前記出力する実行命令に前記依存性実行命令又は前記被依存性実行命令の何れも含まれない場合は当該実行命令を前記命令交換伝送路に出力する命令投入部と、
前記演算結果交換伝送路に供給される前記結果取得情報を取得し、前記演算用実行結果に係り前記セマフォ記憶部に記憶されているセマフォ情報を消去するセマフォ情報制御部と、
を備えたことを特徴とするマルチスレッドプロセッサ。
【請求項２】
請求項１記載のマルチスレッドプロセッサであって、
前記複数のスレッドユニットの数は前記複数の演算ユニットの数よりも大きな数であることを特徴とするマルチスレッドプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションをスレッドと呼ばれる複数の処理単位に分割生成し、そのスレッドを順にパイプラインで実行するようになすマルチスレッドマイクロプロセッサに関し、特に少ない電力で多くの演算を高い効率で実行するマルチスレッドプロセッサに関する。
【背景技術】
【０００２】
従来より、情報処理装置の処理能力を高めるため、逐次処理形の単体のプロセッサではＲＩＳＣ（Reduced Instruction Set Computer）、ＶＬＩＷ（Very Long Instruction Word；超長命令語）などが用いられている。しかし、半導体加工技術微細化の限界や処理量に伴う消費電力の増加などのため、動作周波数を高めて処理速度を上げることが難しくなってきている。
一方、情報処理装置には、マルチタスクやマルチスレッドなどのＯＳ（Operating System）が使用されることが多く、その場合は複数の処理を平行して行える。プロセッサ単体の処理能力が小さくとも１つのＬＳＩ上に複数のプロセッサコアを搭載することにより処理能力を高められる。マルチコア技術が実用化されてきた。マルチコア以上にプロセッサを並列化する技術として、バスやネットワークを用い、多数のプロセッサを並列動作させる並列計算機がある。ＳＭＰ（Symmetric Multi Processor）、ＮＵＭＡ（Non-Uniform Memory Access）、ＰＣクラスタ、グリッド計算機などである。これらはハードウエア技術である。
【０００３】
ソフトウエア技術においても高い並列性のあるアルゴリズムが開発されている。特に、画像処理や３次元ＣＧなどでは、光線の独立性に着目したレイトレース法などでの処理量の多い演算に用いられている。
従来の並列計算機では、逐次処理に適したプロセッサを複数並べることにより処理能力を高められる。反面、並列度を高めると設置場所が増えたり、消費電力が増加する。並列度のみを高めても個々のプロセッサでは演算器の利用効率が低いものも混在してしまう。並列度が高められ、且つ利用効率が高く保持されるプロセッサアーキテクチャの開発が望まれる。
【０００４】
特許文献１には、ハードウェアスケジューリング機能とソフトウェアスケジューリング機能とを混在させたマルチスレッドプロセッサが開示されている。スレッド実行ユニットが、処理中のスレッドが新たなスレッド生成を行うこと及び処理中のスレッドが終了することを可能とする機械語命令を備える。さらに、新しいスレッドの割り当てをハードウェアで直接行う機能と、ハードウェアによる割り当てを行うかどうかをソフトウェアで指示する機能と、ハードウェアによる割り当てを行わない場合に生成されるスレッドのレジスタコンテキストを保持する機能と、処理中のスレッドが終了する際に保持されているレジスタコンテキストをスレッド実行ユニット上に復旧する機能とを備え、必要に応じて、スレッド実行ユニットが処理中のスレッドにより生成される新しいスレッドを、処理中のスレッドが終了した後に自ら処理するようにしたマルチスレッドプロセッサが開示されている。
【特許文献１】特開２０００−２０７２３３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示されているマルチスレッドプロセッサでは、ハードウエアを用いる複数スレッドをシリアライズした実行処理とソフトウエアスケジューリングによる実行処理とを混在させながら処理能力を高めようとしているため、スケジューリング処理に適したプログラムの場合は実行処理を効率的に行うことが出来るものの、実行処理中には複数スレッドの処理状況を把握したり、ソフトウエアスケジューリングの処理を行うため又はハードウエアスケジューリングの処理を行うための判断を行ったり、いずれか一方の処理に移行するための新たな処理を行ったりしなければならない。全ての種類のプログラムに対して細粒度で並列実行させるマルチスレッドプロセッサを実現することはできなかった。
【０００６】
そこで、本発明は、上記のような問題点を解消するためになされたもので、アプリケーションプログラムの種類に係わらず並列実行及びシリアル実行を適応的に行い、並列度を高めても細粒度の並列実行を可能とし少ない電力で利用効率の高いパイプライン演算を行うことのできるマルチスレッドプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願発明における第１の発明は、複数の実行命令群で記述されるアプリケーションプログラムを記憶したプログラムメモリを有し、前記アプリケーションプログラムの中の複数の実行命令群から一部の実行命令を取り出して、順次出力する複数のスレッドユニットと、前記複数のスレッドユニットから順次出力された前記一部の実行命令に対応した演算処理を行う複数の演算実行ユニットと、前記複数のスレッドユニットから順次出力された前記一部の実行命令に対応した演算実行ユニットを選択する命令クロスバースイッチと、前記複数のスレッドユニットで次の演算が実行される場合に、前記命令クロスバースイッチで選択された演算実行ユニットで演算を行った結果を次の実行用演算結果として前記複数のスレッドユニットのうち所望のスレッドユニットに供給する演算結果クロスバー制御部と、前記実行用演算結果が得られていないことを示すセマフォ情報を格納するセマフォ記憶部と、を有するマルチスレッドプロセッサにおいて、
前記複数のスレッドユニットのそれぞれは、
前記一部の実行命令が、前記実行用演算結果を用いて演算を行う依存性実行命令でなく且つ前記次の実行用演算結果を得るための被依存性実行命令である場合に、前記セマフォ情報を前記セマフォ記憶部に格納し、前記被依存性実行命令を実行させた後に前記実行用演算結果が得られたことを示す結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を前記命令クロスバースイッチに出力し、
前記一部の実行命令が、前記依存性実行命令であり、且つ前記被依存性実行命令でない場合に、前記セマフォ記憶部の検索を行って、前記セマフォ情報が検出されたときには、前記依存性実行命令の前記命令クロスバースイッチへの出力を待機し、前記セマフォ情報が検出されなかったときには、前記依存性実行命令を前記命令クロスバースイッチに出力し、
前記一部の実行命令が、前記依存性実行命令であり且つ前記被依存性実行命令である場合に、前記セマフォ記憶部の検索を行って、前記セマフォ情報が検出されたときには、前記前記依存性実行命令であり且つ前記被依存性実行命令である実行命令の前記命令クロスバースイッチへの出力を待機し、前記セマフォ情報が検出されないときには、次の演算実行のためのセマフォ情報を前記セマフォ記憶部に記憶すると共に、前記依存性実行命令であり且つ前記被依存性実行命令である実行命令を実行させた後に前記結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を前記命令クロスバースイッチに出力し、
前記一部の実行命令が、前記依存性実行命令でなく且つ前記被依存性実行命令でない場合に、前記依存性実行命令でなく且つ前記被依存性実行命令でない実行命令を前記命令クロスバースイッチに出力する命令投入部と、
前記演算結果クロスバー制御部から出力される前記結果取得情報を取得し、前記実行演算用結果に関する前記セマフォ記憶部に記憶されているセマフォ情報を消去するセマフォ情報制御部と、
を備えたことを特徴とするマルチスレッドプロセッサを提供する。
第２の発明は、請求項１記載のマルチスレッドプロセッサであって、前記複数のスレッドユニットの数は前記複数の演算ユニットの数よりも大きな数であることを特徴とするマルチスレッドプロセッサを提供する。
【発明の効果】
【０００８】
本発明によれば、複数の各スレッドユニットは、一部の実行命令が、実行用演算結果を用いて演算を行う依存性実行命令でなく且つ次の実行用演算結果を得るための被依存性実行命令である場合に、セマフォ情報をセマフォ記憶部に格納し、被依存性実行命令を実行させた後に実行用演算結果が得られたことを示す結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を命令クロスバースイッチに出力し、一部の実行命令が、依存性実行命令であり、且つ被依存性実行命令でない場合に、セマフォ記憶部の検索を行って、セマフォ情報が検出されたときには、依存性実行命令の命令クロスバースイッチへの出力を待機し、セマフォ情報が検出されなかったときには、依存性実行命令を命令クロスバースイッチに出力し、一部の実行命令が、依存性実行命令であり且つ被依存性実行命令である場合に、セマフォ記憶部の検索を行って、セマフォ情報が検出されたときには、依存性実行命令であり且つ被依存性実行命令である実行命令の命令クロスバースイッチへの出力を待機し、セマフォ情報が検出されないときには、次の演算実行のためのセマフォ情報をセマフォ記憶部に記憶すると共に、依存性実行命令であり且つ被依存性実行命令である実行命令を実行させた後に結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を命令クロスバースイッチに出力し、一部の実行命令が、依存性実行命令でなく且つ被依存性実行命令でない場合に、依存性実行命令でなく且つ被依存性実行命令でない実行命令を命令クロスバースイッチに出力する命令投入部と、演算結果クロスバー制御部から出力される結果取得情報を取得し、実行演算用結果に関するセマフォ記憶部に記憶されているセマフォ情報を消去するセマフォ情報制御部と、を備えた格別な構成があるので、アプリケーションプログラムの種類に係わらず並列実行及びシリアル実行を適応的に行い、並列度を高めても細粒度の並列実行を可能とし少ない電力で利用効率の高いパイプライン演算を行うことのできるマルチスレッドプロセッサを実現できる。
複数のスレッドユニットの数は複数の演算ユニットの数よりも大きな数である場合は、さらに並列度を高めても細粒度の並列実行を可能とし少ない電力で利用効率の高いパイプライン演算を行うことのできるマルチスレッドプロセッサを実現できる。
【発明を実施するための最良の形態】
【０００９】
以下に本発明の実施例に係るマルチスレッドプロセッサについて図１〜図８を用いて説明する。図１は、本発明の実施に係るマルチスレッドプロセッサの構成例を示すブロック図である。図２は、本発明の実施に係るマルチスレッドプロセッサ要部のスレッドユニットの構成例を示す図である。図３は、本発明の実施に係るマルチスレッドプロセッサの要部の信号記述例（その１）を示す図である。図４は、本発明の実施に係るマルチスレッドプロセッサの演算実行ユニットの構成例を示す図である。図５は、本発明の実施に係るマルチスレッドプロセッサの要部の信号記述例（その２）を示す図である。図６は、本発明の実施に係るマルチスレッドプロセッサのロードストアユニットの構成例を示す図である。図７は、本発明の実施に係るマルチスレッドプロセッサの動作例（その１）を示す図である。図８は、本発明の実施に係るマルチスレッドプロセッサの動作例（その２）を示す図である。
【００１０】
そのマルチスレッドプロセッサは、アプリケーションプログラムの種類に係わらず並列実行及びシリアル実行を適応的に行い、並列度を高めても細粒度の並列実行を可能とし少ない電力で利用効率の高いパイプライン演算を行うマルチスレッドプロセッサを実現するという目的を、複数の各スレッドユニットは、複数の各スレッドユニットは、一部の実行命令が、実行用演算結果を用いて演算を行う依存性実行命令でなく且つ次の実行用演算結果を得るための被依存性実行命令である場合に、セマフォ情報をセマフォ記憶部に格納し、被依存性実行命令を実行させた後に実行用演算結果が得られたことを示す結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を命令クロスバースイッチに出力し、一部の実行命令が、依存性実行命令であり、且つ被依存性実行命令でない場合に、セマフォ記憶部の検索を行って、セマフォ情報が検出されたときには、依存性実行命令の命令クロスバースイッチへの出力を待機し、セマフォ情報が検出されなかったときには、依存性実行命令を命令クロスバースイッチに出力し、一部の実行命令が、依存性実行命令であり且つ被依存性実行命令である場合に、セマフォ記憶部の検索を行って、セマフォ情報が検出されたときには、依存性実行命令であり且つ被依存性実行命令である実行命令の命令クロスバースイッチへの出力を待機し、セマフォ情報が検出されないときには、次の演算実行のためのセマフォ情報をセマフォ記憶部に記憶すると共に、依存性実行命令であり且つ被依存性実行命令である実行命令を実行させた後に結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を命令クロスバースイッチに出力し、一部の実行命令が、依存性実行命令でなく且つ被依存性実行命令でない場合に、依存性実行命令でなく且つ被依存性実行命令でない実行命令を命令クロスバースイッチに出力する命令投入部と、演算結果クロスバー制御部から出力される結果取得情報を取得し、実行演算用結果に関するセマフォ記憶部に記憶されているセマフォ情報を消去するセマフォ情報制御部と、を備えるようにして実現した。
【００１１】
マルチスレッドプロセッサの構成について述べる。
図１に示すマルチスレッドプロセッサ１０は、演算クロスバースイッチ（演算結果交換伝送路）１、スレッドユニット２ａ〜２ｈ、命令クロスバー制御部３、命令クロスバースイッチ（命令交換伝送路）４、演算実行ユニット５ａ〜５ｄ、ロードストアユニット６、演算結果クロスバー制御部７、及び外部インタフェース（ＩＦ）部８より構成される。
図２に示すマルチスレッドプロセッサ１０の要部であるスレッドユニット２は、１６個のレジスタ（Ｒ0〜Ｒ15）２１ａ〜２１ｐ、プログラムカウンタ（ＰＣ）２１ｒ及びスタックポインタ（ＳＰ）２１ｓよりなるレジスタ群２１と、ｎ個の命令セマフォ部２２と、プログラムメモリ２３と、命令投入部２４と、命令ＦＩＦＯ（first in first out）部２５とより構成される。スレッドユニット２ａ〜２ｈのそれぞれはスレッドユニット２と同一構成である。
図４に示す演算実行ユニット５は、命令デコード部５１、ＡＬＵ（Arithmetic and Logic Unit）５２、ＦＰＵ（Floating point number Processing Unit）５３、及び演算結果生成部５４より構成される。
図６に示すロードストアユニット６は、命令デコード部６１およびロードストア結果生成部６２より構成される。
【００１２】
マルチスレッドプロセッサの動作について述べる。
図１に示すマルチスレッドプロセッサ１０のロードストアユニット６は、命令クロスバースイッチ４を介して供給される命令クロスバー制御部３からの制御信号により制御され、マルチスレッドプロセッサ１０で演算を行うためのアプリケーションプログラムを、外部インタフェース部８を介して得る。又はプログラムメモリ２３に記憶されているプログラムの中から所定のプログラム群をプログラムカウンタ２１ｒにより指定して取得する。演算結果クロスバー制御部７は、得られたアプリケーションプログラムを複数の処理単位（スレッド）の小プログラム（実行命令群）に分割する。演算クロスバースイッチ１は演算結果クロスバー制御部７で生成された小プログラムをスレッドユニット２ａ〜２ｈに順に割り付ける。スレッドユニット２ａ〜２ｈのそれぞれは割り付けられた小プログラムから演算を実行するための機械語プログラムで記述される実行命令を後述のレジスタ群より得る。命令クロスバー制御部３はスレッドユニット２ａ〜２ｈのそれぞれから得られるリクエストを基に命令クロスバースイッチ４の接続方法に係る制御信号を生成し、命令クロスバースイッチ（命令交換伝送路）４に供給する。命令クロスバースイッチ４はスレッドユニット２ａ〜２ｈのそれぞれで生成された実行命令を演算実行ユニット５ａ〜５ｄのうち演算待機中の、例えば演算実行ユニット５ａに供給する。その実行命令は演算開始の直前に行う、例えばセマフォ（手旗）を立ち上げる実行命令を含む。そのセマフォは複数の演算実行ユニットがメモリ領域を共有して演算を行う場合に、同時にメモリ領域をアクセスして記憶内容の破壊や不整合が起きるのを防ぐために用いるフラグである。その実行命令には、演算の実行を完了し、演算結果をライトバックした直後にセマフォを下げる実行命令も含む。
【００１３】
演算実行ユニット５ａは命令クロスバースイッチ４を介して供給された実行命令に従って演算処理を行い、得られた演算結果を演算クロスバースイッチ（演算結果交換伝送路）１に供給すると共に、演算が終了した場合は演算が終了したことを示す演算終了信号を演算結果クロスバー制御部７に供給する。演算結果クロスバー制御部７は演算の終了状況に応じて新たな小プログラムを作成し演算クロスバースイッチ１に供給する。新たな小プログラムの演算は、その演算に用いるための演算結果が全て得られている場合にのみ開始できる。新たな小プログラムには演算に用いられる演算結果が全て得られているか否かをチェックするために用いるセマフォ依存性情報が付されている。
【００１４】
演算クロスバースイッチ１から新たな小プログラムを供給された例えばスレッドユニット２ｂは、新たな小プログラムに付されるセマフォ依存性情報を基に、新たな演算に用いる演算結果が全て得られているかをチェックする。演算結果の全てが得られていない場合は新たな演算をさせるための実行命令を出力しない。命令クロスバースイッチ４は、スレッドユニット２ａ〜２ｈのそれぞれから出力される実行命令を、演算実行ユニット５ａ〜５ｄのうちの演算が可能である演算実行ユニットに順次供給する。演算実行ユニット５ａ〜５ｄは次々と供給される実行命令を実行し、演算結果を所定のメモリ領域に記憶する。実行命令の出力を待機しているスレッドユニット２ｂは、セマフォ依存性情報に記述される演算用定数と、その定数の演算を前もって実行させるスレッドとが関連付けられて記述されたセマフォセット情報と、当該スレッドの演算命令により演算実行ユニット５ａ〜５ｄのそれぞれが実行されてクリアされるセマフォクリア情報とを比較する。両者が合致した場合にセットされたセマフォ情報をクリアする。全ての立てられたセマフォ情報がクリアされることにより、実行命令の出力を待機しているスレッドユニット２ｂは演算に必要な全ての演算結果が得られたとして検出する。スレッドユニット２ｂは新たな演算の実行命令を出力する。
【００１５】
以降、同様にして、スレッドユニット２ａ〜２ｈは演算実行ユニット５ａ〜５ｄで実行させる実行命令を生成し、セマフォ依存性情報と実際に立てられているセマフォとを比較することによりハザード（障害）がないことをセマフォを参照することにより検出し、ハザードがないことを検出した後に実行命令を出力する。演算実行ユニット５ａ〜５ｄは供給される実行命令に従って演算を実行する。
マルチスレッドプロセッサ１０は演算実行ユニット５ａ〜５ｄの４個の演算実行ユニットに対して８個のスレッドユニット２ａ〜２ｈを有しているため、４個のスレッドユニットが実行命令を出力しない場合であっても他の４個のスレッドユニットから実行命令が出力されるため、４個の演算実行ユニット５ａ〜５ｄは演算を待機することによるデータハザードや制御ハザードを生じさせることはない。
【００１６】
次に、詳細に説明する。
図２を参照し、マルチスレッドプロセッサ１０の要部であるスレッドユニット２について述べる。同図に示すスレッドユニット２は、スレッドユニット２ａ〜２ｈのそれぞれと構成が同一であり、行われる動作も同一である。
まず、レジスタ群２１は、演算クロスバースイッチ１を介して演算結果クロスバー制御部７から供給される小プログラムに記述される演算用のデータのそれぞれをレジスタ２１ａ〜２１ｐに記憶する。プログラムカウンタ２１ｒは次に実行する命令が格納されているメインメモリのアドレスを記憶する。スタックポインタ２１ｓは小プログラムに記述されるスタックポインタのアドレス値を記憶する。
【００１７】
プログラムメモリ２３はプログラムカウンタ２１ｒに記憶されるメインメモリのアドレスを参照してプログラムメモリからマシン語で記述される実行命令を読み出す。命令投入部２４は読み出された実行命令を一時記憶すると共に、実行命令中に記述されるセマフォ依存性情報を基に実行命令として生成されたセマフォセット情報を命令セマフォ部２２にロードする。セマフォセット情報は、例えば８個のスレッドユニット２ａ〜２ｈでなされる実行命令の演算経過を８ビットの数により管理する。例えばスレッドユニット２ｈでの実行命令をスレッドユニット２ａ、２ｂ、及び２ｄの演算結果を用いて演算する場合のセマフォセット情報は「１１０１００００」となる。命令セマフォ部２２には「１１０１００００」がセットされる。命令セマフォ部２２は演算クロスバースイッチ１に要求して供給される信号を基にスレッドユニット２ａ、２ｂ、及び２ｄでの演算経過情報を得る。スレッドユニット２ａから出力される実行命令の演算が演算実行ユニットでなされた後に、セマフォが下げられた場合にセマフォセット情報の最初のビットをクリアし、セマフォセット情報を「０１０１００００」に変更する。スレッドユニット２ｂ、及び２ｄのセマフォが下げられた場合にセマフォセット情報は「００００００００」となる。新しい演算に用いる演算結果が全て得られた全ビットが０の状態である。命令投入部２４は一時記憶している実行命令を出力する。実行命令は命令ＦＩＦＯ部２５を介して命令クロスバー制御部３及び命令クロスバースイッチ４に供給される。演算実行ユニットでは、供給された実行命令が実行される。
【００１８】
図３を参照し、スレッドユニット２のプログラムメモリ２３にロードされる実行命令及び命令投入部２４から出力される命令の記述形式について述べる。
同図（Ａ）はプログラムメモリ上に記述される命令フィールドからなるマシン語であり、そのフィールドはセマフォ依存性情報、セマフォセット情報、オペレーションコード（Ｏｐｃｏｄｅ）、ソース１レジスタ（ｓｏｕｒｃｅ＿１  ｒｅｇｉｓｔｅｒ）番号、ソース２レジスタ（ｓｏｕｒｃｅ＿２  ｒｅｇｉｓｔｅｒ）番号、及び演算結果書き込みレジスタ（ｄｅｓｔｉｎａｔｉｏｎ  ｒｅｇｉｓｔｅｒ）番号の順に記述される。命令投入部２４は入力されるマシン語を演算実行ユニットに入力するフォーマットの記述形式に変換する。
【００１９】
同図（Ｂ）は命令投入部２４から変換されて出力される記述形式である。セマフォ依存性情報を自分のスレッド番号に置換する。セマフォセット情報はそのままである。Ｏｐｃｏｄｅは命令の一部をデコードし、得られる演算結果がロードストアユニット６を介して出力するか又は演算クロスバースイッチ１を介してさらに演算を継続するかを判別する。演算結果の行き先に応じて同図（Ｃ）に示す行き先を記述したリクエストを生成する。
同図（Ｂ）のソース１データ（ｓｏｕｒｃｅ＿１  ｄａｔａ）は、ソース１レジスタ番号を参照してレジスタ群２１から得たデータに置換する。同様にしてソース２データに取得したデータを記述する。演算結果書き込みレジスタ（ｄｅｓｔｉｎａｔｉｏｎ  ｒｅｇｉｓｔｅｒ）番号には（Ａ）の内容がそのまま記述される。
同図（Ｂ）に示すフォーマットで記述される命令投入部２４の出力信号は命令セマフォ部２２のセマフォセット情報のそれぞれのビットのＡＮＤを演算し、全ビットが０として検出された場合に出力される。
【００２０】
図４を参照して演算実行ユニット５について述べる。同図に示す演算実行ユニット５は、演算実行ユニット５ａ〜５ｄのそれぞれと構成が同一であり、行われる動作も同一である。
まず、命令デコード部５１は、命令クロスバースイッチ４を介してスレッドユニット２ａ〜２ｈのいずれかから供給される図３（Ｂ）に示した命令投入部出力の命令、Ｏｐｃｏｄｅをデコードする。ＡＬＵ５２は、デコードして得られた命令が整数及び論理演算の場合はソース１データ及びソース２データの演算処理を行う。ＦＰＵ５３は、命令が浮動小数点演算の場合はソース１データ及びソース２データの浮動小数点演算を行う。セマフォセット情報及びセマフォの情報はそのまま演算結果生成部５４に供給する。演算結果生成部５４は供給された演算結果や情報を所定のフォーマットの情報に記述して出力するための信号を生成する。
【００２１】
図５を参照して演算結果出力信号の記述形式について述べる。
同図（Ａ）はその記述形式であり、記述されるフィールドは順にセマフォクリア情報、演算結果データ、及び演算結果書き込みレジスタ（ｄｅｓｔｉｎａｔｉｏｎ  ｒｅｇｉｓｔｅｒ）番号である。セマフォクリア情報は、演算結果が得られた場合にセマフォセット情報によりセットされたセマフォの、該当する部分のセマフォをクリアするために用いるクリアすべきセマフォの位置を示す情報である。演算結果データには演算した結果得られたデータが記述される。演算結果書き込みレジスタ番号には図３（Ｂ）に示した演算結果書き込みレジスタ番号がそのまま記述される。
同図（Ｂ）は演算結果クロスバー制御部７に対してスレッド番号を指定し、そのスレッドの演算の経過に係る情報をリクエストして得るために出力するリクエストの記述フォーマットである。演算結果クロスバー制御部７はリクエスト情報を参照し、要求されたスレッドに対して（Ａ）の演算結果のデータを転送するように動作する。スレッドユニット２ａ〜２ｈの何れかからロード若しくはストア命令が命令クロスバー制御部３にリクエストされた場合には、リクエストの行き先はロードストアユニット６になる。
【００２２】
図６を参照し、ロードストアユニット６について述べる。
命令デコード部６１は命令クロスバースイッチ４から入力される命令をデコードし、外部インタフェース部８を介して供給されるデータをロードするか、乃至は外部インタフェース部８を介してデータを供給しストアさせるかの実行制御を行う。ロードストアユニット６は、ロード命令の場合には、図３（Ｂ）に示したソース１データの箇所をアドレスとし、外部インタフェース部８に対してｒｅａｄ信号を出力する。ロードストア結果生成部６２は外部インタフェース部８から入力される信号を図５（Ａ）に示した演算結果信号フォーマットの演算結果データの部分に挿入して演算クロスバースイッチ１に出力する。セマフォクリア情報及び演算結果書き込みレジスタ番号にはそれらの情報を記述する。ロードストアユニット６は、ストア命令の場合には、図３（Ｂ）に示したソース１データの箇所をアドレスとし、ソース２データの箇所をデータとし、外部インタフェース部８に対してＷｒｉｔｅ信号を出力する。演算結果は既に得られているため、ロードストアユニット６は演算結果を演算クロスバースイッチ１に供給しない。
【００２３】
ロードストア結果生成部６２は、必要に応じ、例えば演算結果を演算クロスバースイッチ１に供給しないとするダミーデータを演算クロスバースイッチ１に出力する。セマフォセット情報及び演算結果書き込みレジスタ番号は図３（Ａ）の内容がそのままコピーされて出力される。なお、図５（Ｂ）に示すスレッド番号のリクエストは、スレッドユニット２ａ〜２ｈの何れかから発せられるリクエストに対し、演算クロスバースイッチ１を介して送出するリクエストとしてロードストア結果生成部６２で生成して出力する。演算クロスバースイッチ１を介して図４（Ａ）、（Ｂ）の形式で記述される演算結果を受け取ったスレッドユニットは、図３（Ａ）の命令投入部出力のセマフォセット情報によりセットしたセマフォに対応するビットのセマフォを図５（Ａ）のセマフォクリア情報によりクリアする。これにより、新しい演算に用いる演算結果が出力されていないことにより待ち合わせ状態となっていたスレッドユニットの待ち合わせ状態が解消される。
【００２４】
図７、図８を参照し、マルチスレッドプロセッサ１０の命令実行について述べる。
まず、演算結果クロスバー制御部７は、外部インタフェース部８及びロードストアユニット６を介して得られる、Ｃ言語やフォートランなどで記述して入力されるアプリケーションプログラムの命令実行順序や演算に用いられる演算用データの依存関係を解析し、マシン語で記述される実行命令を生成する。例えば、図７（Ａ）に示される命令１〜５のうち命令１〜命令４は相互に演算の依存性がないが、命令５は命令１及び２の演算結果を得て後に行われる。そこで、命令１のセマフォクリア情報は第１ビット目を１にした「１０００００００」とし、命令２のセマフォクリア情報は第２ビット目を１にした「０１００００００」とする。命令５のセマフォセット情報は第１ビット目及び第２ビット目を１にした「１１００００００」とする。命令３、４は命令１、２の実行に関係なく演算が可能であるのでセマフォセット情報及びセマフォクリア情報の両者は「００００００００」とされる。
【００２５】
図７（Ａ）は命令１〜４が同時に実行開始される場合である。そして、例えば命令１の実行が終了した場合に命令５のセマフォセット情報「１１００００００」は命令１のセマフォクリア情報「１０００００００」により１ビット目がクリアされ「０１００００００」となる。セマフォセット情報に１が存在しているため命令５の演算実行の待機を継続する。次に命令２の演算結果が得られた場合に命令５のセマフォセット情報「０１００００００」は命令２のセマフォクリア情報「０１００００００」により２ビット目がクリアされる。命令５のセマフォセット情報は「００００００００」となる。命令５は待機が解除された状態となり、命令１と命令２で得られた演算結果が用いられて演算が開始される。
【００２６】
図７（Ｂ）は、演算実行ユニット５ａ〜５ｄが他の演算を行っているなどにより演算能力が不足している場合などで、命令２が先に実行開始されている例である。命令３、４が実行された後に命令１が実行される。この場合も（Ａ）と同様に、命令１及び命令２の両者の演算が終了して後に命令５が実行される。
図８（Ａ）は相互に依存性を有しない命令３、４は命令５の後に実行されている例である。この場合もセマフォセット情報、セマフォクリア情報は図７（Ａ）で述べたと同様にセット及びクリアがなされる。
ここで、命令５の実行結果を得て図示しない命令６の実行がなされる場合は、命令５は命令１、命令２に依存されて演算を行う依存性実行命令であると共に、命令６に対しては被依存性実行命令となる。命令５は命令１及び命令２の実行命令が実行されてセマフォ情報がクリアされた際に、命令５に対するセマフォ情報をセットする。その後、命令５が実行されて実行結果が得られた際にセットした命令５のセマフォ情報がクリアされる。命令５のセマフォクリアにより、命令６はセマフォ情報の参照時に、セマフォが立てられていないと検出される。命令６の実行命令がスレッドユニットより出力される。命令６は待機状態にある演算実行ユニットにより実行される。
【００２７】
ここで、演算実行ユニット５ａ〜５ｄの総数は４個であり、スレッドユニット２ａ〜２ｈの総数は８個である。演算実行ユニットの数よりもスレッドユニットの数の方が多い。これにより、スレッドユニットでは常に多くの小プログラムが生成され、演算実行ユニットでの演算待ちとなる。演算実行ユニットは与えられた演算が終了次第、セマフォが立てられていない実行可能は小プログラムが供給される。演算実行ユニットにおいて演算待ちの待機状態が生じることはない。演算実行ユニットの稼動率は高く保たれる。
【００２８】
演算に用いる演算結果が得られていないことによる待機はスレッドユニットで行われる。スレッドユニットは演算実行ユニットに比し回路構成が簡単であるためマルチスレッドプロセッサ１０を半導体で構成する場合の面積は演算実行ユニットの面積よりも小さい。さらに、待機状態における消費電力は、スレッドユニットの方が演算実行ユニットよりも小さな値である。演算実行ユニットの数をスレッドユニットの数よりも小さくし、且つ演算実行ユニットでの待機状態を生じさせないようにすることにより、チップ面積が小さく、演算実行時の消費電力を小さくしたマルチスレッドプロセッサ１０のＬＳＩを実現することが出来る。
【００２９】
そして、セマフォ情報をＣＰＵの汎用レジスタであるレジスタ群に記憶する代わりに実行プログラムから直接アクセスする必要のない記憶領域をセマフォ記憶部として用いてもよい。セマフォ情報はＣＰＵハードウエア内部の情報として記憶する。その場合はセマフォ情報セット命令やセマフォ情報クリア命令などの命令コマンドを使用することなく演算実行をさせることが出来る。従って、１命令で演算の実行とセマフォ情報の管理を行えることになる。
【００３０】
以上のように、本実施例で示したマルチスレッドプロセッサは、一部の実行命令が、実行用演算結果を用いて演算を行う依存性実行命令でなく且つ次の実行用演算結果を得るための被依存性実行命令である場合に、セマフォ情報をセマフォ記憶部２１に格納し、被依存性実行命令を実行させた後に実行用演算結果が得られたことを示す結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を命令クロスバースイッチ４に出力し、一部の実行命令が、依存性実行命令であり、且つ被依存性実行命令でない場合に、セマフォ記憶部２１の検索を行って、セマフォ情報が検出されたときには、依存性実行命令の命令クロスバースイッチ４への出力を待機し、セマフォ情報が検出されなかったときには、依存性実行命令を命令クロスバースイッチ４に出力し、一部の実行命令が、依存性実行命令であり且つ被依存性実行命令である場合に、セマフォ記憶部の検索を行って、セマフォ情報が検出されたときには、依存性実行命令であり且つ被依存性実行命令である実行命令の命令クロスバースイッチ４への出力を待機し、セマフォ情報が検出されないときには、次の演算実行のためのセマフォ情報をセマフォ記憶部に記憶すると共に、依存性実行命令であり且つ被依存性実行命令である実行命令を実行させた後に結果取得情報を当該実行命令を実行した演算実行ユニットから出力させる属性情報を付した実行命令を命令クロスバースイッチに出力し、一部の実行命令が、依存性実行命令でなく且つ被依存性実行命令でない場合に、依存性実行命令でなく且つ被依存性実行命令でない実行命令を命令クロスバースイッチに出力する命令投入部２４と、演算結果クロスバー制御部から出力される結果取得情報を取得し、実行演算用結果に関するセマフォ記憶部に記憶されているセマフォ情報を消去するセマフォ情報制御部２２とを備えた複数のスレッドユニットを用いて実現した。
【図面の簡単な説明】
【００３１】
【図１】本発明の実施に係るマルチスレッドプロセッサの構成例を示すブロック図である。
【図２】本発明の実施に係るマルチスレッドプロセッサの要部のスレッドユニットの構成例を示す図である。
【図３】本発明の実施に係るマルチスレッドプロセッサの要部の信号記述例（その１）を示す図である。
【図４】本発明の実施に係るマルチスレッドプロセッサの演算実行ユニットの構成例を示す図である。
【図５】本発明の実施に係るマルチスレッドプロセッサの要部の信号記述例（その２）を示す図である。
【図６】本発明の実施に係るマルチスレッドプロセッサのロードストアユニットの構成例を示す図である。
【図７】本発明の実施に係るマルチスレッドプロセッサの動作例（その１）を示す図である。
【図８】本発明の実施に係るマルチスレッドプロセッサの動作例（その２）を示す図である。
【符号の説明】
【００３２】
１    演算クロスバースイッチ（演算結果交換伝送路）
２、２ａ〜２ｈ    スレッドユニット
３    命令クロスバー制御部
４    命令クロスバースイッチ（命令交換伝送路）
５、５ａ〜５ｄ    演算実行ユニット
６    ロードストアユニット
７    演算結果クロスバー制御部
８    外部インタフェース部
１０    マルチスレッドプロセッサ
２１    レジスタ群
２１ａ〜２１ｐ    レジスタ
２１ｒ    プログラムカウンタ
２１ｓ    スタックポインタ
２２    命令セマフォ部
２３    プログラムメモリ
２４    命令投入部
２５    令ＦＩＦＯ部
５１    命令デコード部
５２    ＡＬＵ
５３    ＦＰＵ
５４    演算結果生成部
６１    命令デコード部
６２    ロードストア結果生成部
【図１】
2008033490.tif 000003
【図２】
2008033490.tif 000004
【図３】
2008033490.tif 000005
【図４】
2008033490.tif 000006
【図５】
2008033490.tif 000007
【図６】
2008033490.tif 000008
【図７】
2008033490.tif 000009
【図８】
2008033490.tif 000010