(57)【特許請求の範囲】
【請求項１】
複数のスレッドを実行するプロセッサであって、
他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行すると、当該メモリ領域への書き込みが完了したか否かを示す利用情報に、当該一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を設定する設定手段と、
前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、他のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止する制御手段とを備える
ことを特徴とするプロセッサ。
【請求項２】
前記設定手段は、
前記位置に存在する命令に応じたプログラムカウンタの値を予め保持する保持領域を有しており、
外部から前記プログラムカウンタの値を取得すると、前記保持領域へ格納し、
前記一のスレッドにて実行される命令に応じたプログラムカウンタの値と、保持している値とが一致する場合に、前記一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を前記利用情報に設定する
ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記保持領域には、さらに、
前記利用情報と、前記メモリ領域を示すメモリアドレスとが対応付けられて保持されており、
前記制御手段は、前記他のスレッドから前記読み出し命令による読み出し対象であるメモリ領域の読み出し対象アドレスを取得し、前記読み出し対象アドレスと前記メモリアドレスとが一致する場合に、対応する利用情報が示す内容に応じて前記読み出し命令を実行及び抑止する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記プロセッサは、さらに、
データの読み出しを行う際に取得した仮想アドレスを物理アドレスに変換し、変換した前記物理アドレスが前記保持領域で予め保持している前記メモリアドレスとの間に関連がある場合には、前記メモリ領域の利用状況を確認すべき旨を通知するアドレス変換手段を備え、
前記制御手段は、前記通知を受け取ると、前記メモリアドレスに対応する前記メモリ領域の利用状況を前記利用情報に基づいて判断する
ことを特徴とする請求項３に記載のプロセッサ。
【請求項５】
前記メモリ領域は、前記他のスレッドとは別のスレッドにも利用される領域であり、
前記制御手段は、さらに、
前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、前記別のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項６】
前記プロセッサは、さらに、
命令をフェッチする際に取得した仮想アドレスを物理アドレスに変換し、変換した前記物理アドレスが前記保持領域で予め保持している前記プログラムカウンタとの間に関連がある場合には、前記設定手段による前記設定を実行することを要求する要求情報を前記設定手段に通知するアドレス変換手段を備え、
前記設定手段は、前記要求情報を前記アドレス変換手段から受け取ると、前記設定を行う
ことを特徴とする請求項２に記載のプロセッサ。
【請求項７】
前記設定手段は、さらに、
前記メモリ領域への書き込みが完了したことを示す旨を利用情報に設定する際に、他のプロセッサで管理されている別の利用情報に対しても前記メモリ領域への書き込みが完了したことを示す内容を設定する
ことを特徴とする請求項２に記載のプロセッサ。
【請求項８】
前記一のスレッド及び他のスレッドは、画像のデコード処理を行うためのものであり、
前記プロセッサは、
画像のデコード処理を行う画像処理システムに備えられる
ことを特徴とする請求項１に記載のプロセッサ。
【請求項９】
前記一のスレッド及び他のスレッドは、画像のエンコード処理を行うためのものであり、
前記プロセッサは、
画像のエンコード処理を行う画像処理システムに備えられる
ことを特徴とする請求項１に記載のプロセッサ。
【請求項１０】
複数のスレッドを実行するプロセッサで用いられる制御方法であって、
他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行すると、当該メモリ領域への書き込みが完了したか否かを示す利用情報に、当該一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を設定する設定ステップと、
前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、他のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止する制御ステップとを含む
ことを特徴とする制御方法。
【請求項１１】
複数のスレッドを用いて画像を処理する画像処理装置であって、
他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行すると、当該メモリ領域への書き込みが完了したか否かを示す利用情報に、当該一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を設定する設定手段と、
前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、他のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止する制御手段とを備える
ことを特徴とする画像処理装置。
【請求項１２】
前記画像処理装置は、符号化された画像を復号するものであり、
前記複数のスレッドには、符号化された一の画像において配置が連続するマクロブロックが互いに異なるよう割り当てられ、
前記書き込みが完了したこと保証する位置に存在する命令とは、可変長復号処理、逆量子化・逆周波数変換に係る処理、動き補償に係る処理、画像の再構成処理及びデブロッキングフィルタ処理の何れかの処理が完了したことを示す命令であり、
制御手段は、一のマクロブロックについて、前記書き込みが完了したと判断する場合には、当該一のマクロブロックの後続に位置する次のマクロブロックについて、書き込みが完了したと判断された処理と同一の処理を実行するよう当該処理を制御する
ことを特徴とする請求項１１に記載の画像処理装置。
【請求項１３】
前記画像処理装置は、画像を符号化するものであり、
前記複数のスレッドには、一の画像において配置が連続するマクロブロックが互いに異なるよう割り当てられ、
前記書き込みが完了したこと保証する位置に存在する命令とは、符号化対象の画像データに対する予測誤差を算出する減算処理、予測誤差に対して量子化と周波数変換を行う量子化処理、符号化処理、参照画像の生成処理、動き補償に係る処理の何れかであり、
制御手段は、一のマクロブロックについて、前記書き込みが完了したと判断する場合には、当該一のマクロブロックの後続に位置する次のマクロブロックについて、書き込みが完了したと判断された処理と同一の処理を実行するよう当該処理を制御する
ことを特徴とする請求項１１に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、本発明は、複数のスレッドを同時に実行することができるプロセッサにおいて、複数のスレッド間で共有するデータの授受を効率化することによって、演算効率を向上させる技術に関する。
【背景技術】
【０００２】
デジタル化された映像データや、音声データなどの圧縮、伸張等を行うメディア処理は非常に演算量が大きい。このため、メディア処理を行なうための専用ハードウェアや高性能なＤＳＰ（Digital Signal Processor）などが普及している。【０００３】
このようなメディア処理の中でも、ＭＰＥＧ（Moving Picture Experts Group）−２、ＭＰＥＧ−４、Ｈ．２６３、Ｈ．２６４等、非常に多数の規格が実用化されている。このため、デジタルＡＶ（Audio-Visual）機器は、複数の規格のメディア処理に対応することが要求されている。さらに、各メディア処理アプリケーションの複雑度は上昇しており、画像サイズ、音声のチャネル数等も増加する傾向にあり、演算量は増大の一歩をたどっている。【０００４】
そこで、複数のプログラムを同時に実行することにより演算効率を大幅に向上させた、高性能なマルチスレッドプロセッサ（例えば、非特許文献１参照。）を用いることにより、性能向上を図っている。【０００５】
マルチスレッドプロセッサでは、複数のスレッド（プログラム）を同時に実行する際に、一のスレッドと他のスレッドに依存関係があり、例えば、一のスレッドによる所定の書き込み命令が実行された後に、他のスレッドにより、当該所定の書き込み命令により書き込まれた箇所のデータを読み出す読み出し命令が実行する状況がある。【０００６】
この場合の処理の実現方法として、特許文献１にその技術が開示されている。【０００７】
特許文献１では、両者の依存関係をメモリ領域のアドレスを管理することで実現している。具体的には、特許文献１の技術では、管理しているアドレスについて、一のスレッドによる書き込み命令が実行されると、他のスレッドが当該アドレスで示される領域へアクセスすることを可能、つまり読み出しを行うことを可能としている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００６−５００６３９号公報
【非特許文献】
【０００９】
【非特許文献１】『ヘネシー＆パターソン  コンピュータアーキテクチャ 定量的アプローチ 第4版』、株式会社  翔泳社、p.185-192(ISBN978-4-7981-1440-8)
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記にて示す技術では、依存関係が、１つの書き込み命令に対するものであれば効果的であるが、例えば、１つのアドレスで示されるメモリ領域について、複数回書き込み命令を実行した後に、読み出し命令を行う場合には対応できていない。なぜなら、管理対象をアドレスとしているので、最初の書き込み命令が実行されると他のスレッドによる同一のアドレスで示されるメモリ領域への読み出し命令が実行されることになる。そのため、複数の書き込み命令の実行後の読み出し命令を実行するという依存関係が保たれない。【００１１】
そこで、本発明は、複数の命令と１つの読み出し命令との依存関係を保つことのできるプロセッサ及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明は、複数のスレッドを実行するプロセッサであって、他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行すると、当該メモリ領域への書き込みが完了したか否かを示す利用情報に、当該一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を設定する設定手段と、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、他のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止する制御手段とを備えることを特徴とする。
【発明の効果】
【００１３】
上記に示す構成によると、プロセッサは、他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行することで、他のスレッドによる当該メモリ領域に存在するデータの読み出しを行う。つまり、プロセッサは、当該位置に存在する命令が実行されるまでに存在する命令が実行されていることを保証した上で、他のスレッドによる当該メモリ領域に存在するデータの読み出しを行うことができる。これにより、プロセッサは、例えば書き込み命令を複数回実行した後に読み出し命令を実行するという依存関係を保つことができる。
【図面の簡単な説明】
【００１４】
【図１】マルチスレッドプロセッサ１００の構成を示す図である。
【図２】（ａ）はアクセス管理テーブルＴ１００のデータ構造の一例を示す図であり、（ｂ）はＲｅａｄアクセス管理テーブルＴ１５０のデータ構造の一例を示す図である。
【図３】読み出し検出部１１６及び命令検出部１１７の構成を示す図である。
【図４】命令検出部１１７で行われる動作を示す流れ図である。
【図５】Ｒｅａｄアクセス管理テーブルＴ１５０の更新に係る動作を示す流れ図である。
【図６】Ｒｅａｄ命令が実行される際の動作を示す流れ図である。
【図７】マルチスレッドプロセッサ１１００の構成を示す図である。
【図８】アドレス変換部１１３０の構成、及び変換テーブルＴ２００のデータ構造の一例を示す図である。
【図９】マルチスレッドプロセッサ２１００の構成を示す図である。
【図１０】アドレス変換部２１３０の構成、及び変換テーブルＴ３００のデータ構造の一例を示す図である。
【図１１】マルチコアプロセッサシステム３０００のハードウェア構成を示す図である。
【図１２】マルチスレッドプロセッサ１００を映像のデコード処理に適用する場合の概略を示す図である。
【図１３】マクロブロック間におけるデコード処理に係る依存関係を示す図である。
【発明を実施するための形態】
【００１５】
１．第１の実施の形態
以下、本発明に係る第１の実施の形態について、図面を参照しながら説明する。
【００１６】
１．１  構成
図１は、第１の実施の形態におけるマルチスレッドプロセッサ１００の構成を示すブロック図である。
【００１７】
マルチスレッドプロセッサ１００は、Ｎ（Ｎは２以上の整数）個の命令流（Ｎ個のスレッド）を同時に独立して実行するプロセッサであり、命令メモリ１０１と、命令フェッチ制御部１０２と、命令群決定部１０３と、Ｎ個の命令バッファ（第１命令バッファ１０４、第２命令バッファ１０５、…、第Ｎ命令バッファ１０６）と、発行命令決定部１０７と、優先度決定部１０８と、Ｎ個のレジスタファイル（第１レジスタファイル１０９、第２レジスタファイル１１０、…、第Ｎレジスタファイル１１１）と、演算器群１１２と、ライトバックバス１１３と、更新制御部１１４、データメモリ１１５と、読み出し検出部１１６と、命令検出部１１７と、管理テーブル記憶部１１８を備えている。
【００１８】
ここで、各命令バッファとレジスタファイルは１対１に対応付けられ、Ｎ個の論理プロセッサを構成する。
【００１９】
（１）命令メモリ１０１
命令メモリ１０１は、マルチスレッドプロセッサにおいて実行される命令を保持するメモリであり、Ｎ本の独立に実行される命令流（スレッド）を保持している。
【００２０】
（２）命令フェッチ制御部１０２
命令フェッチ制御部１０２は、各スレッドのプログラムカウンタ（ＰＣ）を保持し、次に実行する命令を命令メモリから読み出す。ここで、各スレッドのプログラムカウンタは、互いに異なる値の範囲においてカウントされるものとする。
【００２１】
また、命令フェッチ制御部１０２は、読み出し検出部１１６から、命令のフェッチの継続の可否を示すＲｅａｄアクセス信号を受信すると、受信した信号の値に応じて、命令のフェッチを継続、及び例外発生に相当する特殊処理ベクタへの分岐処理の起動を行う。具体的には、受信した信号の値が１である場合には、命令フェッチ制御部１０２は、それまでの命令実行シーケンスを停止し、例外発生に相当する特殊処理ベクタへの分岐処理を起動する。受信した信号の値が０である場合には、それまでの命令実行シーケンスを継続する。
【００２２】
（３）命令群決定部１０３
命令群決定部１０３は、命令メモリ１０１から、各命令流に属する命令を読み出し、デコードを行い、当該命令が割り当てられている命令バッファに書き込む。
【００２３】
（４）第１命令バッファ１０４から第Ｎ命令バッファ１０６
第ｉ命令バッファ（ｉは１以上Ｎ以下の整数）は、ｉ番目の命令流（以下、第ｉ命令流という。）に属する命令を受け取り、保持するものである。
【００２４】
（５）発行命令決定部１０７
発行命令決定部１０７は、Ｎ個の命令バッファからマシンサイクル毎に発行する命令を決定するものである。
【００２５】
（６）優先度決定部１０８
優先度決定部１０８は、発行命令決定部１０７において発行する命令を決定する際に用いる優先度情報テーブル保持している。
【００２６】
このとき、発行命令決定部１０７は、優先度決定部１０８で保持されている優先度情報テーブルを用いて、マシンサイクル毎に発行する命令を決定することになる。
【００２７】
（７）第１レジスタファイル１０９から第Ｎレジスタファイル１１１
第ｉレジスタファイル（ｉは１以上Ｎ以下の整数）は、第ｉ命令バッファに保持された命令流を実行することによって、読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
【００２８】
また、演算器群１１２は、図１に示すように、メモリアクセス１２０をも有している。
【００２９】
ここで、メモリアクセス１２０は、データメモリとアクセスする命令を実行するための演算器である。
【００３０】
（９）ライトバックバス１１３
ライトバックバス１１３は、演算器群１１２からの出力を第１レジスタファイル１０９〜第Ｎレジスタファイル１１１に書き戻すためのバスである。
【００３１】
（１０）データメモリ１１５
データメモリ１１５は、データメモリとアクセスする命令によってアクセスされ、プログラムを実行する際のデータを保持している。
【００３２】
（１１）管理テーブル記憶部１１８
管理テーブル記憶部１１８は、図２（ａ）、（ｂ）に示すように、アクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０を記憶している。
【００３３】
（１１−１）アクセス管理テーブルＴ１００
アクセス管理テーブルＴ１００は、図２（ａ）に示すように、ｅｎｔｒｙ＿ｖａｌｉｄ２００、ｄｅｐ＿ｉｄ２０１及びｖａｌｉｄ化ＰＣ２０２からなる組を複数個記憶するための領域を有している。
【００３４】
ｅｎｔｒｙ＿ｖａｌｉｄ２００は、当該組（エントリ）が有効な情報であるか否かを示すものであり、例えば、ｅｎｔｒｙ＿ｖａｌｉｄ２００に値“０”が設定されている場合には当該エントリが無効であることを、値“１”が設定されている場合には当該エントリが有効であることを示す。
【００３５】
ｄｅｐ＿ｉｄ２０１は、当該エントリとＲｅａｄアクセス管理テーブルＴ１５０内のエントリとの対応付けを行うための情報である。
【００３６】
Ｒｅａｄアクセス管理テーブルＴ１５０は、ｅｎｔｒｙ＿ｖａｌｉｄ２１０、ｄｅｐ＿ｉｄ２１１、Ａｄｄｒｅｓｓ２１２、ｖａｌｉｄ２１３、ｔｈ＿ｉｄ２１４、ｔｈ＿ｓｔｒｉｄｅ２１５からなる組を複数個記憶するための領域を有している。
【００３７】
ｅｎｔｒｙ＿ｖａｌｉｄ２１０は、当該組（エントリ）に有効な情報であるか否かを示すものであり、例えばｅｎｔｒｙ＿ｖａｌｉｄ２００と同様に、ｅｎｔｒｙ＿ｖａｌｉｄ２１０に値“０”が設定されている場合には当該エントリが無効であることを、値“１”が設定されている場合には当該エントリは有効であることを示す。
【００３８】
ｄｅｐ＿ｉｄ２１１は、当該エントリとアクセス管理テーブルＴ１００内のエントリとの対応付けを行うための情報である。ここでは、ｄｅｐ＿ｉｄ２１１とｄｅｐ＿ｉｄ２０１との値が同一のもの同士が対応しているものとする。
【００３９】
Ａｄｄｒｅｓｓ２１２は、当該エントリで管理されるメモリ領域の開始アドレスを示している。
【００４０】
ｖａｌｉｄ２１３は、当該エントリで管理されるメモリ領域に対して、いずれかのスレッドによる書き込みが完了していることを示している。
【００４１】
ｔｈ＿ｉｄ２１４は、当該エントリで管理されるメモリ領域に対する書き込みが完了したスレッドの番号を示すものである。
【００４２】
ｔｈ＿ｓｔｒｉｄｅ２１５は、当該エントリで管理されるメモリ領域に対する書き込みが完了したスレッドと読み出しを行うスレッドの距離を示す値である。
【００４３】
（１２）更新制御部１１４
更新制御部１１４は、アクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０を更新するものである。
【００４４】
（１２−１）アクセス管理テーブルＴ１００について
更新制御部１１４は、ソフトウェアからソフトウェア更新指示を受け付けると、アクセス管理テーブルＴ１００内のフィールドを更新する。いずれのフィールドも、ソフトウェアによる読み出し、書き込みが可能である。
【００４５】
例えば、更新制御部１１４は、Ｎ個のスレッドで動作するソフトウェアの処理開始前に、ソフトウェア更新指示を受け付けると、当該ソフトウェアについてアクセス管理テーブルＴ１００で管理されるべき複数のエントリを記録する。
【００４６】
（１２−２）Ｒｅａｄアクセス管理テーブルＴ１５０について
更新制御部１１４は、アクセス管理テーブルＴ１００の更新時と同様にソフトウェアからソフトウェア更新指示を受け付けると、Ｒｅａｄアクセス管理テーブルＴ１５０内のフィールドを更新する。いずれのフィールドも、ソフトウェアによる読み出し、書き込みが可能である。
【００４７】
例えば、更新制御部１１４は、Ｎ個のスレッドで動作するソフトウェアの処理開始前に、ソフトウェア更新指示を受け付けると、当該ソフトウェアについてＲｅａｄアクセス管理テーブルＴ１５０で管理されるべき複数のエントリを記録する。
【００４８】
また、更新制御部１１４は、命令検出部１１７から命令検出情報を受け付けると、Ｒｅａｄアクセス管理テーブルＴ１５０内のフィールドを更新する。ここで、命令検出情報は、アクセス管理テーブルＴ１００の更新を契機となる命令を検出した旨の情報（以下、命令検出信号という。）と、更新対象となるエントリに含まれるｄｅｐ＿ｉｄ（以下、命令ｄｅｐ＿ｉｄという。）の値と、命令ｔｈ＿ｉｄとを含むものである。ここで、命令ｔｈ＿ｉｄは、ある命令が実行された際に演算器群１１２より出力される当該命令が属するプログラムのスレッド番号である。
【００４９】
例えば、更新制御部１１４は、命令検出部１１７から命令検出情報を受け取ると、受け取った命令検出情報に含まれる命令ｄｅｐ＿ｉｄと一致するｄｅｐ＿ｉｄを含むエントリについて、当該エントリに含まれるｖａｌｉｄの値を１に変更し、さらに、当該エントリのｔｈ＿ｉｄの値を受け取った命令検出情報に含まれる命令ｔｈ＿ｉｄの値へと変更する。
【００５０】
さらに、更新制御部１１４は、あるスレッドにおいて、ｖａｌｉｄの値が「１」であるメモリ領域についての読み出し命令が実行されると、当該ｖａｌｉｄの値を「１」から「０」へと更新する。
【００５１】
（１３）命令検出部１１７
命令検出部１１７は、命令の実行時に、その命令のプログラムカウンタの値に基づいて、管理テーブル記憶部１１８で保持されているアクセス管理テーブルＴ１００で管理されているプログラムカウンタか否かを検出する処理部である。つまり、あるメモリ領域への書き込みが完了したか否かを検出するものである。
【００５２】
命令検出部１１７は、図３に示すように、テーブル読出制御部３００、ｄｅｐ＿ｉｄ選択部３０１及びＰＣ比較部３０２を有している。
【００５３】
テーブル読出制御部３００は、ある命令が実行された際に演算器群１１２から命令実行信号を受け取ると、アクセス管理テーブルＴ１００のエントリの読み出しの動作を開始する。
【００５４】
ＰＣ比較部３０２は、読み出されたアクセス管理テーブルＴ１００のエントリに含まれるｖａｌｉｄ化ＰＣと、ある命令が実行された際に演算器群１１２から出力されたＰＣとが一致するか否かを判定し、その結果をｄｅｐ＿ｉｄ選択部３０１へ出力する。
【００５５】
ｄｅｐ＿ｉｄ選択部３０１は、テーブル読出制御部３００により読み出されたｅｎｔｒｙ＿ｖａｌｉｄの値と、ｄｅｐ＿ｉｄの値とを取得する。
【００５６】
また、ｄｅｐ＿ｉｄ選択部３０１は、ＰＣ比較部３０２による比較結果をも取得する。
【００５７】
さらには、ｄｅｐ＿ｉｄ選択部３０１は、ある命令が実行された際に演算器群１１２から命令実行信号、ＰＣ及び命令ｔｈ＿ｉｄをも受け取る。
【００５８】
ｄｅｐ＿ｉｄ選択部３０１は、ＰＣ比較部３０２の比較結果に基づいて、実行された命令のＰＣの値が検出すべき命令であった場合には、対応して受け取った命令ｔｈ＿ｉｄ、取得したｄｅｐ＿ｉｄ（以下、命令ｄｅｐ＿ｉｄという。）及び命令検出信号を含む命令検出情報を更新制御部１１４へ出力する。
【００５９】
（１４）読み出し検出部１１６
読み出し検出部１１６は、データメモリとアクセスする命令の実行時に、そのアクセス対象アドレスに基づいて、管理テーブル記憶部１１８で保持されているＲｅａｄアクセス管理テーブルＴ１５０で管理されているメモリ領域であるか否かを検出する。
【００６０】
読み出し検出部１１６は、図３に示すように、テーブル読出制御部４００、ｖａｌｉｄ選択部４０１、Ｒｅａｄアドレス比較部４０２、ｔｈ＿ｉｄ比較部４０３及び加算器４０４を有している。
【００６１】
テーブル読出制御部４００は、メモリアクセス１２０においてデータメモリ１１５に読み出しアクセスを行うＲｅａｄ命令が実行された際にメモリアクセス１２０からＲｅａｄ実行信号を受け取ると、Ｒｅａｄアクセス管理テーブルＴ１５０のエントリの読み出しの動作を開始する。
【００６２】
Ｒｅａｄアドレス比較部４０２は、読み出されたＲｅａｄアクセス管理テーブルＴ１５０のａｄｄｒｅｓｓの値と、メモリアクセス１２０から出力されたＲｅａｄアドレスとを比較し、比較した結果をｖａｌｉｄ選択部４０１へ出力する。ここで、Ｒｅａｄアドレスとは、メモリアクセス１２０においてデータメモリ１１５に読み出しアクセスを行う命令が実行された際に、メモリアクセス１２０より出力される、読み出しアクセスを行う対象のデータメモリアドレスである。
【００６３】
加算器４０４は、読み出されたｔｈ＿ｉｄの値とｔｈ＿ｓｔｒｉｄｅの値の和を算出し、算出結果をｔｈ＿ｉｄ比較部４０３へ出力する。
【００６４】
ｔｈ＿ｉｄ比較部４０３は、メモリアクセス１２０から出力されたＲｅａｄ  ｔｈ＿ｉｄの値と、加算器４０４から受け取った値（読み出されたｔｈ＿ｉｄの値とｔｈ＿ｓｔｒｉｄｅの値の和）とを比較し、比較した結果をｖａｌｉｄ選択部４０１へ出力する。ここで、Ｒｅａｄ  ｔｈ＿ｉｄは、メモリアクセス１２０においてデータメモリ１１５に読み出しアクセスを行う命令が実行された際に、メモリアクセス１２０より出力される、読み出しアクセスを行う命令が属するスレッドのスレッド番号である。
【００６５】
ｖａｌｉｄ選択部４０１は、Ｒｅａｄ実行信号をメモリアクセス１２０から受け取る。
【００６６】
また、ｖａｌｉｄ選択部４０１は、テーブル読出制御部３００により読み出されたｅｎｔｒｙ＿ｖａｌｉｄの値、ｄｅｐ＿ｉｄの値及びｖａｌｉｄの値を取得する。
【００６７】
さらに、ｖａｌｉｄ選択部４０１は、Ｒｅａｄアドレス比較部４０２による比較結果、及びｔｈ＿ｉｄ比較部４０３による比較結果のそれぞれを取得する。
【００６８】
ｖａｌｉｄ選択部４０１は、Ｒｅａｄアドレス比較部４０２による比較結果、及びｔｈ＿ｉｄ比較部４０３による比較結果から、Ｒｅａｄアドレスが検出すべきものであった場合、それに対応して取得したvalidの値を、メモリアクセス１２０へ出力する。
【００６９】
１．２  動作
ここでは、マルチスレッドプロセッサ１００の動作について説明する。
【００７０】
（１）命令検出時の動作について
まず、ある命令が実行された際に、命令検出部１１７で行われる動作について、図４に示す流れ図を用いて説明する。なお、当該処理は、命令検出部１１７が演算器群１１２からある命令に対する命令実行信号、ＰＣ及び命令ｔｈ＿ｉｄを受け取ったことで、開始されるものとする。
【００７１】
ある命令が実行されると、テーブル読出制御部３００は、アクセス管理テーブルＴ１００からエントリを読み出すための制御に用いるカウンタｎを０に初期化する（ステップＳ５）。ここで、カウンタｎは、テーブル読出制御部３００に保持されている。
【００７２】
ＰＣ比較部３０２は、アクセス管理テーブルＴ１００からｎ番目のエントリに含まれるｖａｌｉｄ化ＰＣの値を取得し（ステップＳ１０）、取得したｖａｌｉｄ化ＰＣの値と、演算器群１１２から受け取ったＰＣの値とが等しいか否かを判断する（ステップＳ１５）。
【００７３】
ＰＣ比較部３０２がｖａｌｉｄ化ＰＣの値と演算器群１１２から受け取ったＰＣの値とが等しいと判断する場合（ステップＳ１５における「Ｙｅｓ」）、ｄｅｐ＿ｉｄ選択部３０１は、ｎ番目のエントリに含まれるｅｎｔｒｙ＿ｖａｌｉｄの値を取得する（ステップＳ２０）。ここで、ステップＳ１５における判断結果が真であるとは、アクセス管理テーブルＴ１００において管理されているＰＣで示される命令までが実行された、つまりあるメモリ領域への書き込みが完了したことを検出したことを示す。
【００７４】
ｄｅｐ＿ｉｄ選択部３０１は、取得したｅｎｔｒｙ＿ｖａｌｉｄの値が、「１」であるか否かを判断する（ステップＳ２５）。
【００７５】
「１」であると判断する場合（ステップＳ２５における「Ｙｅｓ」）、ｄｅｐ＿ｉｄ選択部３０１は、アクセス管理テーブルＴ１００からｎ番目のエントリに含まれるｄｅｐ＿ｉｄの値を取得する(ステップＳ３０)。
【００７６】
ｄｅｐ＿ｉｄ選択部３０１は、取得したｄｅｐ＿ｉｄの値（命令ｄｅｐ＿ｉｄ）と、実行された命令を含むスレッドに対応するｔｈ＿ｉｄ（命令ｔｈ＿ｉｄ）と、命令検出信号とを更新制御部１１４へ出力する（ステップＳ３５）。
【００７７】
ｄｅｐ＿ｉｄ選択部３０１が「１」ででないと判断する場合（ステップＳ２５における「Ｎｏ」）、テーブル読出制御部３００は、カウンタｎの値をインクリメントする（ステップＳ４０）。テーブル読出制御部３００は、アクセス管理テーブルＴ１００に登録されているエントリの終端番号をエントリ終端レジスタから取得する（ステップＳ４５）。そして、テーブル読出制御部３００は、カウンタｎの値が、エントリの終端番号と一致するか否かを判断する（ステップＳ５０）。等しいと判断する場合には処理を終了し（ステップＳ５０における「Ｙｅｓ」）、等しくないと判断する場合には処理はステップＳ１０へ戻る（ステップＳ５０における「Ｎｏ」）。
【００７８】
（２）Ｒｅａｄアクセス管理テーブルＴ１５０の更新の動作について
ここでは、アクセス管理テーブルＴ１００において管理されているＰＣで示される命令までが実行されると、行なわれるＲｅａｄアクセス管理テーブルＴ１５０の更新の動作について、図５に示す流れ図を用いて説明する。
【００７９】
更新制御部１１４は、命令検出部１１７から命令ｄｅｐ＿ｉｄ、命令ｔｈ＿ｉｄ及び命令検出信号を受け取ると、Ｒｅａｄアクセス管理テーブルＴ１５０からエントリを読み出すための制御に用いるカウンタｍを０に初期化する（ステップＳ１００）。ここで、カウンタｍは、更新制御部１１４に保持されている。
【００８０】
更新制御部１１４は、Ｒｅａｄアクセス管理テーブルＴ１５０からｍ番目のエントリに含まれるｄｅｐ＿ｉｄの値を取得し（ステップＳ１０５）、取得したｄｅｐ＿ｉｄの値と、命令検出部１１７から受け取った命令ｄｅｐ＿ｉｄの値とが等しいか否かを判断する（ステップＳ１１０）。
【００８１】
ｄｅｐ＿ｉｄの値と命令ｄｅｐ＿ｉｄの値とが等しいと判断する場合（ステップＳ１１０における「Ｙｅｓ」）、更新制御部１１４は、Ｒｅａｄアクセス管理テーブルＴ１５０からｍ番目のエントリに含まれるｖａｌｉｄの値を「１」に変更し、且つｔｈ＿ｉｄの値を命令検出部１１７から受け取った命令ｔｈ＿ｉｄの値に変更する（ステップＳ１１５）。
【００８２】
ｄｅｐ＿ｉｄの値と命令ｄｅｐ＿ｉｄの値とが等しくないと判断する場合（ステップＳ１１０における「Ｎｏ」）、更新制御部１１４は、カウンタｍの値をインクリメントする（ステップＳ１２０）。更新制御部１１４は、Ｒｅａｄアクセス管理テーブルＴ１５０に登録されているエントリの終端番号をエントリ終端レジスタから取得する（ステップＳ１２５）。そして、更新制御部１１４は、カウンタｍの値が、エントリの終端番号と一致するか否かを判断する（ステップＳ１３０）。等しいと判断する場合には処理を終了し（ステップＳ１３０における「Ｙｅｓ」）、等しくないと判断する場合には処理はステップＳ１０５へ戻る（ステップＳ１３０における「Ｎｏ」）。
【００８３】
（３）Ｒｅａｄ命令検出時の動作について
ここでは、Ｒｅａｄ命令が実行される際の動作について、図６に示す流れ図を用いて説明する。なお、当該処理は、読み出し検出部１１６がメモリアクセス１２０からＲｅａｄ命令に対するＲｅａｄ実行信号、Ｒｅａｄアドレス及びＲｅａｄ  ｔｈ＿ｉｄを受け取ったことで、開始されるものとする。
【００８４】
まず、テーブル読出制御部４００は、Ｒｅａｄアクセス管理テーブルＴ１５０からエントリを読み出すための制御に用いるカウンタｐを０に初期化する（ステップＳ２００）。ここで、カウンタｐは、テーブル読出制御部４００に保持されている。
【００８５】
Ｒｅａｄアドレス比較部４０２は、Ｒｅａｄアクセス管理テーブルＴ１５０のｐ番目のエントリに含まれるＡｄｄｒｅｓｓの値を取得し（ステップＳ２０５）、取得したＡｄｄｒｅｓｓの値が、メモリアクセス１２０から受け取ったＲｅａｄアドレスの値と一致するか否かを判断する（ステップＳ２１０）。
【００８６】
Ｒｅａｄアドレス比較部４０２が一致すると判断する場合（ステップＳ２１０における「Ｙｅｓ」）、ｖａｌｉｄ選択部４０１は、Ｒｅａｄアクセス管理テーブルＴ１５０のｐ番目のエントリに含まれるｅｎｔｒｙ＿ｖａｌｉｄの値を取得する（ステップＳ２１５）。ｖａｌｉｄ選択部４０１は、取得したｅｎｔｒｙ＿ｖａｌｉｄの値が１であるか否かを判断する（ステップＳ２２０）。
【００８７】
ｖａｌｉｄ選択部４０１がｅｎｔｒｙ＿ｖａｌｉｄの値は１であると判断する場合（ステップＳ２２０における「Ｙｅｓ」）、加算器４０４は、Ｒｅａｄアクセス管理テーブルＴ１５０のｐ番目のエントリに含まれるｔｈ＿ｉｄの値とｔｈ＿ｓｔｒｉｄｅの値を取得し、その和を算出する（ステップＳ２２５）。
【００８８】
ｔｈ＿ｉｄ比較部４０３は、算出された和（ｔｈ＿ｉｄの値とｔｈ＿ｓｔｒｉｄｅの値の和）が、メモリアクセス１２０から受け取ったＲｅａｄ  ｔｈ＿ｉｄの値と一致するか否かを判断する（ステップＳ２３０）。
【００８９】
一致すると判断する場合（ステップＳ２３０における「Ｙｅｓ」）、ｖａｌｉｄ選択部４０１は、Ｒｅａｄアクセス管理テーブルＴ１５０のｐ番目のエントリに含まれるｖａｌｉｄの値を取得する（ステップＳ２３５）。ここで、比較結果が真（一致）であることは、ｔｈ＿ｓｔｒｉｄｅの値で示された所望の先行スレッドによる書き込みが完了したメモリ領域であることを示している。
【００９０】
ｖａｌｉｄ選択部４０１は、取得したｖａｌｉｄの値が１であるか否かを判断する（ステップＳ２４０）。
【００９１】
ｖａｌｉｄの値が１であると判断する場合（ステップＳ２４０のおける「Ｙｅｓ」）、ｖａｌｉｄ選択部４０１は、値が０であるＲｅａｄアクセス信号を命令フェッチ制御部１０２へ出力する（ステップＳ２４５）。
【００９２】
Ｒｅａｄアドレス比較部４０２が一致しないと判断する場合（ステップＳ２１０における「Ｎｏ」）、及びｖａｌｉｄ選択部４０１がｅｎｔｒｙ＿ｖａｌｉｄの値は１ないと判断する場合（ステップＳ２２０における「Ｎｏ」）、
テーブル読出制御部４００は、カウンタｐの値をインクリメントする（ステップＳ２５０）。テーブル読出制御部４００は、Ｒｅａｄアクセス管理テーブルＴ１５０に登録されているエントリの終端番号をエントリ終端レジスタから取得する（ステップＳ２５５）。そして、テーブル読出制御部４００は、カウンタｐの値が、エントリの終端番号と一致するか否かを判断する（ステップＳ２６０）。等しいと判断する場合には処理を終了し（ステップＳ２６０における「Ｙｅｓ」）、等しくないと判断する場合には処理はステップＳ２０５へ戻る（ステップＳ２６０における「Ｎｏ」）。
【００９３】
ｖａｌｉｄの値が１でないと判断する場合（ステップＳ２４０のおける「Ｎｏ」）、ｖａｌｉｄ選択部４０１は、値が１であるＲｅａｄアクセス信号を命令フェッチ制御部１０２へ出力する（ステップＳ２６５）。
【００９４】
ここで、命令フェッチ制御部１０２は、Ｒｅａｄアクセス信号を受信すると、受信した信号の値が１である場合には、それまでの命令実行シーケンスを停止し、例外発生に相当する特殊処理ベクタへの分岐処理を起動する。なぜなら、アクセス管理テーブルＴ１００で管理されているＰＣまでの命令が実行されていない、つまり所望の先行スレッドによるメモリ領域への書き込みが終了していないので、例外を発生させ書き込みの完了を待つシーケンスに入る必要があるからである。
【００９５】
１．３  まとめ
以上により、本実施の形態で示すマルチスレッドプロセッサ１００は、例えば書き込み命令を複数回実行した後に読み出し命令を実行するという依存関係を保つことができる。
【００９６】
また、ハードウェアレベルで命令実行の管理を行うことにより従来のようにセマフォによる処理と比較して同期用のコードが不要となり、通信のオーバヘッドが小さくなる。したがって、スレッド間の依存関係を管理するためのソフトウェア処理が、スレッド数が多くなった場合や依存関係が複雑になった場合にも、大きな性能劣化要因とならないプロセッサを実現することができる。
【００９７】
また、上記のアクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０についての生成のタイミングは、実行すべきプログラムを並列化ツールにより分割し、並列に処理が可能となるよう各スレッドに割り当てが行われた後である。なぜなら、各スレッドに割り当てることにより、各スレッド間での依存関係が明確になるからである。
【００９８】
２．第２の実施の形態
以下、本発明に係る第２の実施の形態について、図面を参照しながら、第１の実施の形態と異なる点を中心に説明する。
【００９９】
２．１  構成
図７は、第２の実施の形態におけるマルチスレッドプロセッサ１１００の構成を示すブロック図である。
【０１００】
マルチスレッドプロセッサ１１００は、Ｎ（Ｎは２以上の整数）個の命令流（Ｎ個のスレッド）を同時に独立して実行するプロセッサであり、命令メモリ１１０１と、命令フェッチ制御部１１０２と、命令群決定部１１０３と、Ｎ個の命令バッファ（第１命令バッファ１１０４、第２命令バッファ１１０５、…、第Ｎ命令バッファ１１０６）と、発行命令決定部１１０７と、優先度決定部１１０８と、Ｎ個のレジスタファイル（第１レジスタファイル１１０９、第２レジスタファイル１１１０、…、第Ｎレジスタファイル１１１１）と、演算器群１１１２と、ライトバックバス１１１３と、更新制御部１１１４、データメモリ１１１５と、読み出し検出部１１１６と、命令検出部１１１７と、管理テーブル記憶部１１１８と、アドレス変換部１１３０を備えている。
【０１０１】
ここで、各命令バッファとレジスタファイルは１対１に対応付けられ、第１の実施の形態と同様に、Ｎ個の論理プロセッサを構成する。
【０１０２】
（１）アドレス変換部１１３０
アドレス変換部１１３０は、命令フェッチ制御部１１０２から入力されたフェッチアドレス（論理アドレス）を、変換テーブルＴ２００を用いて別アドレス（物理アドレス）へ変換して、命令メモリ１１０１へ出力するものである。この動作は、仮想空間を扱うためにＭＭＵ（メモリマネージメントユニット）を備えるプロセッサ上で、仮想空間のページを管理するためのＴＬＢ（トランスレーションルックアサイドバッファ）の動作である（例えば、以下の非特許文献２を参照）。
【０１０３】
非特許文献２：『Modern Processor Design』、McGraw-Hill Series in Electrical and Computer Engineering、p.142-145(ISBN0-07-057064)
以下、本実施の形態におけるアドレス変換部１１３０の具体的な機能について説明する。
【０１０４】
アドレス変換部１１３０は、図８に示すように、変換テーブルＴ２００を有している。
【０１０５】
変換テーブルＴ２００は、ＰＣチェックフラグ、フラグ類、論理アドレス及び物理アドレスからなる組（エントリ）を複数個記憶するための領域を有している。ここで、各エントリにおいて、４KB単位のページと呼ばれるメモリ領域が管理されている。
【０１０６】
ＰＣチェックフラグは、当該エントリに含まれるページ内に、命令検出部１１１７に通知してチェックすべきＰＣが含まれている可能性があることを示すフラグである。具体的には、ＰＣチェックフラグの値が１である場合にはチェックすべきＰＣが含まれている可能性があることを示し、値が０である場合にはチェックすべきＰＣが含まれている可能性が無いことを示す。
【０１０７】
フラグ類は、一般的なＴＬＢに備えられているフラグ類であり、本特許では詳細な説明は省く。
【０１０８】
論理アドレスは、一般的なＴＬＢに備えられている論理アドレスフィールドであり、本特許では詳細な説明は省く。
【０１０９】
物理アドレスは、一般的なＴＬＢに備えられている物理アドレスフィールドであり、本特許では詳細な説明は省く。
【０１１０】
アドレス変換部１１３０は、命令フェッチ制御部１１０２から論理アドレスを受け取ると、変換テーブルＴ２００を用いて当該論理アドレスを物理アドレスへと変換する。
【０１１１】
アドレス変換部１１３０は、受け取った論理アドレスに対応するＰＣチェックフラグの値が１である場合には、物理アドレスと、値が１であるＰＣチェック要求とを命令メモリ１１０１へ出力する。ＰＣチェックフラグの値が０である場合には、アドレス変換部１１３０は、物理アドレスと、値が０であるＰＣチェック要求を命令メモリ１１０１へ出力する。ここで、ＰＣチェック要求とは、命令検出部１１１７に通知して実行される命令のＰＣをチェックすべきか否かを示すものであり、ＰＣチェック要求の値が１である場合にはチェックすべき旨を示し、値が０である場合にはチェック不要を示す。
【０１１２】
（２）命令メモリ１１０１
命令メモリ１１０１は、第１の実施の形態と同様に、マルチスレッドプロセッサにおいて実行される命令を保持するメモリであり、Ｎ本の独立に実行される命令流（スレッド）を保持している。
【０１１３】
命令メモリ１１０１は、命令フェッチ制御部１１０２から値が１であるＰＣチェック要求を受け取ると、物理アドレスで指定された命令をフェッチする際に、フェッチされた命令に対してチェック対象の命令であることを示すフラグ情報を付加して、命令フェッチ制御部１１０２に出力する。
【０１１４】
以降の命令デコード・スケジュール・実行の動作においては、当該フラグ状態が付加された状態のまま行われる。
【０１１５】
（３）命令フェッチ制御部１１０２
命令フェッチ制御部１１０２は、各スレッドのプログラムカウンタを保持し、次に実行する命令を命令メモリから読み出す。
【０１１６】
具体的には、命令フェッチ制御部１１０２は、次に実行する命令の論理アドレスをアドレス変換部１１３０へ出力し、その後、命令メモリ１１０１から命令を受け取る。命令を受け取る際には、ＰＣをチェックすべき命令である場合には、フラグ状態が付加されている。
【０１１７】
（４）命令群決定部１１０３
命令群決定部１１０３は、第１の実施の形態で示す命令群決定部１０３と同様であるので、ここでの説明は省略する。
【０１１８】
（５）第１命令バッファ１１０４から第Ｎ命令バッファ１１０６
第１命令バッファ１１０４から第Ｎ命令バッファ１１０６は、は、第１の実施の形態で示す各命令バッファと同様であるので、ここでの説明は省略する。なお、以下において、ｉ番目の命令流を第ｉ命令流という（ｉは１以上Ｎ以下の整数）。
【０１１９】
（６）発行命令決定部１１０７
発行命令決定部１１０７は、第１の実施の形態で示す発行命令決定部１０７と同様であるので、ここでの説明は省略する。
【０１２０】
（７）優先度決定部１１０８
優先度決定部１１０８は、第１の実施の形態で示す優先度決定部１０８と同様であるので、ここでの説明は省略する。
【０１２１】
（８）第１レジスタファイル１１０９から第Ｎレジスタファイル１１１１
第１レジスタファイル１１０９から第Ｎレジスタファイル１１１１は、第１の実施の形態で示す各レジスタファイルと同様であるので、ここでの説明は省略する。
【０１２２】
演算器群１１１２は、第１の実施の形態と同様に、加算器や乗算器などの複数の演算器を含む処理部であり、メモリアクセス１１２０をも有している。ここで、メモリアクセス１２０は、データメモリとアクセスする命令を実行するための演算器である。
【０１２３】
演算器群１１１２は、実行する命令にフラグ状態が付加されている場合には、ＰＣのチェックをすべき旨の情報を通知する。
【０１２４】
（１０）ライトバックバス１１１３
ライトバックバス１１１３は、第１の実施の形態で示すライトバックバス１１３と同様であるので、ここでの説明は省略する。
【０１２５】
（１１）データメモリ１１１５
データメモリ１１１５は、第１の実施の形態で示すデータメモリ１１５と同様であるので、ここでの説明は省略する。
【０１２６】
（１２）管理テーブル記憶部１１１８
管理テーブル記憶部１１１８は、第１の実施の形態と同様に、アクセス管理テーブル及びＲｅａｄアクセス管理テーブルを記憶している。なお、以降の説明において必要であれば、図２（ａ）、（ｂ）で示すアクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０を用いて説明する。
【０１２７】
（１３）更新制御部１１１４
更新制御部１１１４は、第１の実施の形態の更新制御部１１４と同様に、アクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０を更新するものである。なお、更新についての詳細な機能は、第１の実施の形態と同様であるので、ここでの説明は省略する。
【０１２８】
（１４）命令検出部１１１７
命令検出部１１１７は、第１の実施の形態で示す命令検出部１１７と同様の構成要素を有し、命令の実行時に、その命令のプログラムカウンタの値に基づいて、管理テーブル記憶部１１１８で保持されているアクセス管理テーブルＴ１００で管理されているプログラムカウンタか否かを検出する処理を行う。
【０１２９】
第１の実施の形態と異なる点は、上記の処理は、演算器群１１１２からＰＣをチェックすべき旨の情報が通知されたときに開始されることである。
【０１３０】
以下、必要であれば、第１の実施の形態で示す構成要素を用いて説明する。
【０１３１】
（１５）読み出し検出部１１１６
読み出し検出部１１１６は、第１の実施の形態で示す読み出し検出部１１６と同様の構成要素を有し、データメモリとアクセスする命令の実行時に、そのアクセス対象アドレスに基づいて、管理テーブル記憶部１１１８で保持されているＲｅａｄアクセス管理テーブルＴ１５０で管理されているメモリ領域であるか否かを検出する。
【０１３２】
なお、詳細な機能については、第１の実施の形態と同様であるので、ここでの説明は省略する。
【０１３３】
２．２  動作
ここでは、マルチスレッドプロセッサ１１００の動作について、第１の実施の形態で示すマルチスレッドプロセッサ１００の動作と異なる点を中心に説明する。
【０１３４】
（１）命令検出時の動作について
命令検出時の動作は、第１の実施の形態で示す動作（図４参照）と同様の動作の流れであるが、開始のタイミングが異なる。本実施の形態では、命令検出部１１１７は、演算器群１１１２からＰＣをチェックすべき旨の情報が通知されたときに、当該処理を開始する。
【０１３５】
（２）Ｒｅａｄアクセス管理テーブルＴ１５０の更新の動作について
本実施の形態におけるＲｅａｄアクセス管理テーブルＴ１５０の更新の動作は、第１の実施の形態で示す動作（図５参照）と同様であるので、ここでの説明は省略する。
【０１３６】
（３）Ｒｅａｄ命令検出時の動作について
本実施の形態におけるＲｅａｄ命令検出時の動作は、第１の実施の形態で示す動作（図６参照）と同様であるので、ここでの説明は省略する。
【０１３７】
２．３  まとめ
以上により、アドレス変換部１１３０を用いることで、演算器群１１１２で実行され、命令検出部１１１７でチェックする命令数を大幅に削減し、命令検出部１１１７の動作頻度を削減し、回路の消費電力を削減することができる。
【０１３８】
また、第１の実施の形態と同様に、本実施の形態で示すマルチスレッドプロセッサ１００は、例えば書き込み命令を複数回実行した後に読み出し命令を実行するという依存関係を保つことができる。
【０１３９】
第１の実施の形態と同様に、第２の実施の形態においても、ハードウェアレベルで命令実行の管理を行っており、従来のようにセマフォによる処理と比較して同期用のコードが不要となり、通信のオーバヘッドが小さくなる。したがって、スレッド間の依存関係を管理するためのソフトウェア処理が、スレッド数が多くなった場合や依存関係が複雑になった場合にも、大きな性能劣化要因とならないプロセッサを実現することができる。
【０１４０】
また、第１の実施の形態と同様に、アクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０についての生成のタイミングは、実行すべきプログラムを並列化ツールにより分割し、並列に処理が可能となるよう各スレッドに割り当てが行われた後である。さらに、変換テーブルＴ２００についても、実行すべきプログラムを並列化ツールにより分割し、並列に処理が可能となるよう各スレッドに割り当てが行われた後に生成される。なぜなら、各スレッドに割り当てることにより、各スレッド間で使用されるページ等も明確にかるからである。
【０１４１】
３．第３の実施の形態
以下、本発明に係る第３の実施の形態について、図面を参照しながら、第１及び第２の実施の形態と異なる点を中心に説明する。
【０１４２】
３．１  構成
図９は、第３の実施の形態におけるマルチスレッドプロセッサ２１００の構成を示すブロック図である。
【０１４３】
マルチスレッドプロセッサ２１００は、Ｎ（Ｎは２以上の整数）個の命令流（Ｎ個のスレッド）を同時に独立して実行するプロセッサであり、命令メモリ２１０１と、命令フェッチ制御部２１０２と、命令群決定部２１０３と、Ｎ個の命令バッファ（第１命令バッファ２１０４、第２命令バッファ２１０５、…、第Ｎ命令バッファ２１０６）と、発行命令決定部２１０７と、優先度決定部２１０８と、Ｎ個のレジスタファイル（第１レジスタファイル２１０９、第２レジスタファイル２１１０、…、第Ｎレジスタファイル２１１１）と、演算器群２１１２と、ライトバックバス２１１３と、更新制御部２１１４、データメモリ２１１５と、読み出し検出部２１１６と、命令検出部２１１７と、管理テーブル記憶部２１１８と、アドレス変換部２１３０を備えている。
【０１４４】
ここで、各命令バッファとレジスタファイルは１対１に対応付けられ、第１及び第２の実施の形態と同様に、Ｎ個の論理プロセッサを構成する。
【０１４５】
（１）命令メモリ２１０１
命令メモリ２１０１は、第１の実施の形態と同様に、マルチスレッドプロセッサにおいて実行される命令を保持するメモリであり、Ｎ本の独立に実行される命令流（スレッド）を保持している。
【０１４６】
（２）命令フェッチ制御部２１０２
命令フェッチ制御部２１０２は、第１の実施の形態で示す命令フェッチ制御部１０２と同様であるので、ここでの説明は省略する。
【０１４７】
（３）命令群決定部２１０３
命令群決定部２１０３は、第１の実施の形態で示す命令群決定部１０３と同様であるので、ここでの説明は省略する。
【０１４８】
（４）第１命令バッファ２１０４から第Ｎ命令バッファ２１０６
第１命令バッファ２１０４から第Ｎ命令バッファ２１０６は、は、第１の実施の形態で示す各命令バッファと同様であるので、ここでの説明は省略する。なお、以下において、ｉ番目の命令流を第ｉ命令流という（ｉは１以上Ｎ以下の整数）。
【０１４９】
（５）発行命令決定部２１０７
発行命令決定部２１０７は、第１の実施の形態で示す発行命令決定部１０７と同様であるので、ここでの説明は省略する。
【０１５０】
（６）優先度決定部２１０８
優先度決定部２１０８は、第１の実施の形態で示す優先度決定部１０８と同様であるので、ここでの説明は省略する。
【０１５１】
（７）第１レジスタファイル２１０９から第Ｎレジスタファイル２１１１
第１レジスタファイル２１０９から第Ｎレジスタファイル２１１１は、第１の実施の形態で示す各レジスタファイルと同様であるので、ここでの説明は省略する。
【０１５２】
（８）アドレス変換部２１３０
アドレス変換部２１３０は、メモリアクセス２１２０から入力されたアクセスアドレス（論理アドレス）を、変換テーブルＴ３００を用いて別アドレス（物理アドレス）へ変換して、データメモリ２１１５へ出力するものである。この動作は、仮想空間を扱うためにＭＭＵ（メモリマネージメントユニット）を備えるプロセッサ上で、仮想空間のページを管理するためのＴＬＢ（トランスレーションルックアサイドバッファ）の動作である（非特許文献１参照）。
【０１５３】
以下、本実施の形態におけるアドレス変換部２１３０の具体的な機能について説明する。
【０１５４】
アドレス変換部２１３０は、図１０に示すように、変換テーブルＴ３００を有している。
【０１５５】
変換テーブルＴ３００は、Ｒｅａｄチェックフラグ、フラグ類、論理アドレス及び物理アドレスからなる組（エントリ）を複数個記憶するための領域を有している。ここで、各エントリにおいて、４KB単位のページと呼ばれるメモリ領域が管理されている。
【０１５６】
Ｒｅａｄチェックフラグは、当該エントリに含まれるページ内に、読み出し検出部２１１６に通知してチェックすべきＲｅａｄアドレスが含まれている可能性があることを示すフラグである。具体的には、Ｒｅａｄチェックフラグの値が１である場合にはチェックすべきＲｅａｄアドレスが含まれている可能性があることを示し、値が０である場合にはチェックすべきＲｅａｄアドレスが含まれている可能性が無いことを示す。
【０１５７】
フラグ類は、一般的なＴＬＢに備えられているフラグ類であり、本特許では詳細な説明は省く。
【０１５８】
論理アドレスは、一般的なＴＬＢに備えられている論理アドレスフィールドであり、本特許では詳細な説明は省く。
【０１５９】
論理アドレスは、一般的なＴＬＢに備えられている物理アドレスフィールドであり、本特許では詳細な説明は省く。
【０１６０】
アドレス変換部２１３０は、メモリアクセス２１２０から論理アドレスを受け取ると、変換テーブルＴ３００を用いて当該論理アドレスを物理アドレスへと変換する。
【０１６１】
アドレス変換部２１３０は、受け取った論理アドレスに対応するＲｅａｄチェックフラグの値が１である場合には、値が１であるＲｅａｄチェック要求とをメモリアクセス２１２０へ出力する。Ｒｅａｄチェックフラグの値が０である場合には、アドレス変換部２１３０は、値が０であるＲｅａｄチェック要求をメモリアクセス２１２０へ出力する。ここで、Ｒｅａｄチェック要求とは、読み出し検出部２１１６に通知して実行されるＲｅａｄ命令のＲｅａｄアクセスをチェックすべきか否かを示すものであり、Ｒｅａｄチェック要求の値が１である場合にはチェックすべき旨を示し、値が０である場合にはチェック不要を示す。
【０１６２】
演算器群２１１２は、第１の実施の形態と同様に、加算器や乗算器などの複数の演算器を含む処理部であり、メモリアクセス２１２０をも有している。ここで、メモリアクセス２２０は、データメモリとアクセスする命令を実行するための演算器である。
【０１６３】
メモリアクセス２１２０は、実行する命令に対するＲｅａｄチェック要求をアドレス変換部２１３０から受け取ると、Ｒｅａｄアドレスのチェックをすべき旨の情報を通知する。
【０１６４】
（１０）ライトバックバス２１１３
ライトバックバス２１１３は、第１の実施の形態で示すライトバックバス１１３と同様であるので、ここでの説明は省略する。
【０１６５】
（１１）データメモリ２１１５
データメモリ２１１５は、第１の実施の形態で示すデータメモリ１１５と同様であるので、ここでの説明は省略する。
【０１６６】
（１２）管理テーブル記憶部２１１８
管理テーブル記憶部２１１８は、第１の実施の形態と同様に、アクセス管理テーブル及びＲｅａｄアクセス管理テーブルを記憶している。なお、以降の説明において必要であれば、図２（ａ）、（ｂ）で示すアクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０を用いて説明する。
【０１６７】
（１３）更新制御部２１１４
更新制御部２１１４は、第１の実施の形態の更新制御部１１４と同様に、アクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０を更新するものである。なお、更新についての詳細な機能は、第１の実施の形態と同様であるので、ここでの説明は省略する。
【０１６８】
（１４）命令検出部２１１７
命令検出部２１１７は、第１の実施の形態で示す命令検出部１１７と同様の構成要素を有し、命令の実行時に、その命令のプログラムカウンタの値に基づいて、管理テーブル記憶部２１１８で保持されているアクセス管理テーブルＴ１００で管理されているプログラムカウンタか否かを検出する処理を行う。
【０１６９】
なお、詳細な機能については、第１の実施の形態と同様であるので、ここでの説明は省略する。
【０１７０】
（１５）読み出し検出部２１１６
読み出し検出部２１１６は、第１の実施の形態で示す読み出し検出部１１６と同様の構成要素を有し、データメモリとアクセスする命令の実行時に、そのアクセス対象アドレスに基づいて、管理テーブル記憶部１１１８で保持されているＲｅａｄアクセス管理テーブルＴ１５０で管理されているメモリ領域であるか否かを検出する。
【０１７１】
第１及び第２の実施の形態と異なる点は、上記の処理は、メモリアクセス２１２０からＲｅａｄアドレスをチェックすべき旨の情報が通知されたときに開始されることである。
【０１７２】
以下、必要であれば、第１の実施の形態で示す構成要素を用いて説明する。
【０１７３】
３．２  動作
ここでは、マルチスレッドプロセッサ２１００の動作について、第１の実施の形態で示すマルチスレッドプロセッサ１００、及び第２の実施の形態で示すマルチスレッドプロセッサ１１００の動作と異なる点を中心に説明する。
【０１７４】
（１）命令検出時の動作について
命令検出時の動作は、第１の実施の形態で示す動作（図４参照）と同様であるので、ここでの説明は省略する。
【０１７５】
（２）Ｒｅａｄアクセス管理テーブルＴ１５０の更新の動作について
本実施の形態におけるＲｅａｄアクセス管理テーブルＴ１５０の更新の動作は、第１の実施の形態で示す動作（図５参照）と同様であるので、ここでの説明は省略する。
【０１７６】
（３）Ｒｅａｄ命令検出時の動作について
本実施の形態におけるＲｅａｄ命令検出時の動作は、第１の実施の形態で示す動作（図６参照）と同様の動作の流れであるが、開始のタイミングが異なる。本実施の形態では、読み出し検出部２１１６は、メモリアクセス２１２０からＲｅａｄアドレスをチェックすべき旨の情報が通知されたときに、当該処理を開始する。
【０１７７】
なお、詳細な動作の流れは、図４にて示す流れ図と同様であるので、ここでの説明は省略する。
【０１７８】
３．３  まとめ
以上により、アドレス変換部１１３０を用いることで、演算器群２１１２で実行され、読み出し検出部２１１６でチェックするＲｅａｄ命令数を大幅に削減し、読み出し検出部２１１６の動作頻度を削減し、回路の消費電力を削減することができる。
【０１７９】
また、第１の実施の形態と同様に、本実施の形態で示すマルチスレッドプロセッサ１００は、例えば書き込み命令を複数回実行した後に読み出し命令を実行するという依存関係を保つことができる。
【０１８０】
第１の実施の形態と同様に、第３の実施の形態においても、ハードウェアレベルで命令実行の管理を行っており、従来のようにセマフォによる処理と比較して同期用のコードが不要となり、通信のオーバヘッドが小さくなる。したがって、スレッド間の依存関係を管理するためのソフトウェア処理が、スレッド数が多くなった場合や依存関係が複雑になった場合にも、大きな性能劣化要因とならないプロセッサを実現することができる。
【０１８１】
なお、本実施の形態で示すマルチスレッドプロセッサ２１００は、第１の実施の形態で示すマルチスレッドプロセッサ１００の構成要素にアドレス変換部２１３０を加えた構成としたが、本実施の形態で示すマルチスレッドプロセッサ２１００は、第２の実施の形態で示すマルチスレッドプロセッサ１１００の構成要素にアドレス変換部２１３０を加えた構成としてもよい。
【０１８２】
また、第１の実施の形態と同様に、アクセス管理テーブルＴ１００及びＲｅａｄアクセス管理テーブルＴ１５０についての生成のタイミングは、実行すべきプログラムを並列化ツールにより分割し、並列に処理が可能となるよう各スレッドに割り当てが行われた後である。さらに、変換テーブルＴ３００についても、実行すべきプログラムを並列化ツールにより分割し、並列に処理が可能となるよう各スレッドに割り当てが行われた後に生成される。なぜなら、各スレッドに割り当てることにより、各スレッド間で使用されるページ等も明確にかるからである。
【０１８３】
４．第４の実施の形態
以下、本発明に係る第４の実施の形態について、図面を参照しながら、第１の実施の形態と異なる点を中心に説明する。
【０１８４】
図１１は、第４の実施の形態におけるマルチコアプロセッサシステム３０００のハードウェア構成を示すブロック図である。
【０１８５】
マルチコアプロセッサシステム３０００は、図３に示すようにマルチスレッドプロセッサ１００ａと１００ｂとから構成されている。
【０１８６】
マルチスレッドプロセッサ１００ａと１００ｂとは、ともに第１の実施の形態で示すマルチスレッドプロセッサ１００と同様の構成を有している。
【０１８７】
マルチスレッドプロセッサ１００と異なる点は、マルチスレッドプロセッサ１００ａが有する更新制御部１１４ａと、マルチスレッドプロセッサ１００ｂが有する更新制御部１１４ｂとの機能が、第１の実施の形態における更新制御部１１４の機能と異なる点である。
【０１８８】
以下、その点を中心に説明する。
【０１８９】
マルチスレッドプロセッサ１００ａが有する管理テーブル記憶部１１８ａと、マルチスレッドプロセッサ１００ｂが有する管理テーブル記憶部１１８ｂとは、第１の実施の形態で示す管理テーブル記憶部１１８ｂと同様であるのでここでの説明は省略する。
【０１９０】
更新制御部１１４ａは、当該マルチスレッドプロセッサ１００ａで保持されている各テーブルを更新するとともに、マルチスレッドプロセッサ１００ｂで保持されている各テーブルの更新をも行う。
【０１９１】
また、更新制御部１１４ｂについても同様に、当該マルチスレッドプロセッサ１００ｂで保持されている各テーブルを更新するとともに、マルチスレッドプロセッサ１００ａで保持されている各テーブルの更新をも行う。
【０１９２】
なお、更新のタイミングについては、第１の実施の形態と同様であるので、ここでの詳細な説明については、省略する。
【０１９３】
以上により、プロセッサ間の密結合を抑制し、半導体としての実装難易度を下げることができる。
【０１９４】
なお、本実施の形態で示すマルチスレッドプロセッサ３１００は、第１の実施の形態で示すマルチスレッドプロセッサ１００の更新制御部１１４を変更した構成としたが、これに限定されない。本実施の形態で示すマルチスレッドプロセッサ３１００は、第２の実施の形態で示すマルチスレッドプロセッサ１１００の更新制御部１１１４を変更した構成としてもよいし、第３の実施の形態で示すマルチスレッドプロセッサ２１００の更新制御部２１１４を変更した構成としてもよい。
【０１９５】
５．第５の実施の形態
ここでは、本発明に係る第５の実施の形態について、第１の実施の形態で示すマルチスレッドプロセッサ１００をデジタルＡＶ機器向けのシステムＬＳＩ映像のデコード及びエンコード処理に適用する場合の動作を説明する。
【０１９６】
先ず、デコード処理に適用した場合について説明する。
【０１９７】
マルチスレッドプロセッサ１００は、図１２に示すように、４つのマクロブロック（ＭＢｎ、ＭＢｎ＋１、Ｂｎ＋２、Ｂｎ＋３）をデコードするものであり、マクロブロック単位（ＭＢｎ、ＭＢｎ＋１、Ｂｎ＋２、Ｂｎ＋３）の処理を、スレッド０からスレッド３として、各マクロブロックのデコード処理を行う。ここで、マクロブロックＭＢｎ、ＭＢｎ＋１、Ｂｎ＋２、Ｂｎ＋３は、これらの配置が連続していることとする。
【０１９８】
例えば、Ｈ．２６４等の規格を用いて圧縮された映像信号をデコードするためには、ビットストリームの解析・可変長符号化された信号の可変長復号処理（ＶＬＤ）・逆量子化及び逆周波数変換（ＩＱＴ）・動き補償（ＭＣ）・画像の再構成（Ｒｅｃｏｎ）・デブロックフィルタ処理（ＤＢＦ）を行う必要がある。
【０１９９】
また、例えば、マクロブロックＭＢｎの可変長復号処理においては、次のマクロブロックＭＢｎ＋１で参照すべきデータ（受け渡しデータ）をあるメモリ領域へ書き込む。図１３で示すように、時間ｔ１でその書き込みが完了すると、マルチスレッドプロセッサ１００は、Ｒｅａｄアクセス管理テーブルＴ１５０での当該メモリ領域に対応するＡｄｄｒｅｓｓに応じたｖａｌｉｄの値を１へと更新する。こうすることで、次のマクロブロックＭＢｎ＋１は、当該メモリ領域に書き込まれた受け渡しデータの読み出しを開始することができる。
【０２００】
また、時間ｔ２、ｔ３、ｔ４、ｔ５においても同様に、マクロブロックＭＢｎでデコードに係る処理（ＩＱＴ、ＭＣ、Ｒｅｃｏｎ、ＤＢＦ）それぞれが完了すると、つまり受け渡しデータの書込みが完了すると、マルチスレッドプロセッサ１００は、Ｒｅａｄアクセス管理テーブルＴ１５０で対応するＡｄｄｒｅｓｓに応じたｖａｌｉｄの値を１へと更新する。これにより、マクロブロックＭＢｎ＋１では、デコードに係る処理（ＩＱＴ、ＭＣ、Ｒｅｃｏｎ、ＤＢＦ）を実行する際に、マクロブロックＭＢｎにより書き込まれた受け渡しデータの読み出しを開始することができる。
【０２０１】
なお、マクロブロックＭＢｎ＋１とマクロブロックＭＢｎ＋２との間、及びマクロブロックＭＢｎ＋２とマクロブロックＭＢｎ＋３との間それぞれにおけるデコード処理に係る依存関係についても上記と同様であるので、ここでの説明は省略する。
【０２０２】
次に、エンコード処理に適用した場合を説明する。
【０２０３】
マクロブロックのエンコード処理には、通常、符号化対象の画像データに対する予測誤差を算出する減算処理、予測誤差に対して周波数変換及び量子化を行う量子化処理、量子化ＤＣＴ係数及び動きベクトルを可変長符号化する符号化処理、参照画像の生成に係る処理、動き補償に係る処理が含まれる。
【０２０４】
マルチスレッドプロセッサの動作の概念は、上記のデコード処理に適用した場合と同様に、あるマクロブロック（例えば、ＭＢｎ）についての減算処理が完了する、つまり次のマクロブロックＭＢｎ＋１に引き渡すデータの書き込みが完了すると、マクロブロックＭＢｎ＋１は、書き込まれた受け渡しデータの読み出しを開始する。
【０２０５】
また、他の処理についての依存関係においても同様である。
【０２０６】
このように、マクロブロック単位のエンコード処理及びエンコード処理をスレッド毎に実行する場合、各スレッド間の依存関係をプログラムカウンタで管理することにより、スレッド間の依存関係を管理するためのソフトウェア処理が、スレッド数が多くなった場合や依存関係が複雑になった場合にも、大きな性能劣化要因とならないデジタルＡＶ機器向けのシステムＬＳＩ映を実現することができる。
【０２０７】
６．変形例
以上、各実施の形態に基づいて説明したが、本発明は上記の各実施の形態に限られない。例えば、以下のような変形例が考えられる。
【０２０８】
（１）上記第１の実施の形態において、Ｒｅａｄアドレスの値とＲｅａｄアクセス管理テーブルＴ１５０のＡｄｄｒｅｓｓの値との比較において、全アドレスビットを用いた比較を行っていたが、これに限定されない。
【０２０９】
例えば、下位７ビットを比較対象から除外することで、１２８ビット精度での比較としてもよい。こうすることで、Ｒｅａｄアクセス管理テーブルＴ１５０の記憶容量を削減することができる。
【０２１０】
（２）上記各実施の形態において、アクセス管理テーブル及びＲｅａｄアクセス管理テーブルを管理テーブル記憶部へ記憶するタイミングは、ユーザ操作によるものであってよい。
【０２１１】
または、アクセス管理テーブル及びＲｅａｄアクセス管理テーブルを管理テーブル記憶部とは異なる記憶領域に予め保持しておき、その保持しているアドレスを指定する専用の命令を実行することで、前記異なる記憶領域から管理テーブル記憶部へ、各テーブルをコピーしてもよい。
【０２１２】
（３）上記各実施の形態において、あるメモリ領域への書き込みの完了の検出、つまりスレッドに含まれる特定の位置に存在する命令の検出をプログラムカウンタ（ＰＣ）で制御したが、これに限定されない。
【０２１３】
例えば、検出対象となるスレッドに含まれる特定の位置に、専用命令を置いてもよい。または、実行前にその位置にＯＰ例外が発生するようなコードをおいて対応する割り込み処理ルーチンで処理をしてもよい。
【０２１４】
（４）上記各実施の形態において、読み出し命令についてもプロセッサエレメントのデコード処理する他に、実行前にＯＰ例外が発生するよう読み出し命令をコード書き換えする等の方法でトラップして対応するルーチンで特別処理をしてもよい。
【０２１５】
（５）上記各実施の形態において、アクセス管理テーブルのエントリとＲｅａｄアクセス管理テーブルのエントリとは、１対１の関係にあったが、これに限定されない。
【０２１６】
１対多の関係であってもよい。この場合、読み出し検出部は、図６に示すステップＳ２３０の判断について「Ｎｏ」と判断する場合、処理の移行先をステップＳ２５０へと変更することで実現できる。
【０２１７】
（６）上記各実施の形態において、管理対象となるメモリ領域の領域長は、固定長であってもよいし、管理対象となるメモリ領域毎に異なる可変長であってもよい。
【０２１８】
（７）上記各実施の形態において、データを読み出す際には、アドレスを参照したが、これに限定されない。
【０２１９】
ＰＣ（プログラムカウンタ）指定により読み出しを行ってもよい。例えば、書き込み（Ｗｒｉｔｅ）と読み出し（Ｒｅａｄ）の依存関係において、Ｗｒｉｔｅ時にＰＣを特定できない場合に、Ｒｅａｄ側でＰＣ（既に書き込みが終わっていることを保証する命令）を特定することで、ＷｒｉｔｅとＲｅａｄの依存関係を保つことができる。
【０２２０】
（８）上記各実施の形態において、書き込みが終わっていることを保証するものとしてＰＣを特定することとしたが、これに限定されない。
特定の制御レジスタの内容やメモリの内容を参照して、書き込みが終わっているか否かを判断してもよい。  （９）上記第５の実施の形態において、配置が連続するマクロブロック単位に並列処理、つまりスレッドの割り当てを行ったが、これに限定されない。
【０２２１】
並列処理は、マクロブロックライン単位であってもよいし、画像処理におけるＩＤＣＴ等の処理単位であってもよい。または、ＧＯＰ（Ｇｒｏｕｐ  Ｏｆ  Ｐｉｃｔｕｒｅ）単位であってもよい。
【０２２２】
（１０）上記の実施の形態で説明した手法の手順を記述したプログラムをメモリに記憶しておき、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などがメモリからプログラムを読み出して、読み出したプログラムを実行することによって、上記の手法が実現されるようにしてもよい。
【０２２３】
また、当該手法の手順を記述したプログラムを記録媒体に格納して、頒布するようにしてもよい。
【０２２４】
（１１）上記実施の形態及び変形例を組み合わせるとしてもよい。
【０２２５】
７．補足
（１）本発明の一実施態様である、複数のスレッドを実行するプロセッサは、他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行すると、当該メモリ領域への書き込みが完了したか否かを示す利用情報に、当該一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を設定する設定手段と、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、他のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止する制御手段とを備えることを特徴とする。
【０２２６】
この構成によると、プロセッサは、他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行することで、他のスレッドによる当該メモリ領域に存在するデータの読み出しを行う。つまり、プロセッサは、当該位置に存在する命令が実行されるまでに存在する命令が実行されていることを保証した上で、他のスレッドによる当該メモリ領域に存在するデータの読み出しを行うことができる。これにより、プロセッサは、例えば書き込み命令を複数回実行した後に読み出し命令を実行するという依存関係を保つことができる。
【０２２７】
（２）ここで、前記設定手段は、前記位置に存在する命令に応じたプログラムカウンタの値を予め保持する保持領域を有しており、外部から前記プログラムカウンタの値を取得すると、前記保持領域へ格納し、前記一のスレッドにて実行される命令に応じたプログラムカウンタの値と、保持している値とが一致する場合に、前記一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を前記利用情報に設定するとしてもよい。
【０２２８】
この構成によると、プロセッサは、プログラムカウンタを用いることで、一のスレッドにおける前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を容易に特定することができる。
【０２２９】
（３）ここで、前記保持領域には、さらに、前記利用情報と、前記メモリ領域を示すメモリアドレスとが対応付けられて保持されており、前記制御手段は、前記他のスレッドから前記読み出し命令による読み出し対象であるメモリ領域の読み出し対象アドレスを取得し、前記読み出し対象アドレスと前記メモリアドレスとが一致する場合に、対応する利用情報が示す内容に応じて前記読み出し命令を実行及び抑止するとしてもよい。
【０２３０】
この構成によると、プロセッサは、利用情報とメモリアドレスとを対応付けて保持しているので、読み出し対象を示すメモリアドレスが示すメモリ領域の利用状況を容易に特定することができる。
【０２３１】
（４）ここで、前記プロセッサは、さらに、データの読み出しを行う際に取得した仮想アドレスを物理アドレスに変換し、変換した前記物理アドレスが前記許可手段で予め保持している前記メモリアドレスとの間に関連がある場合には、前記メモリ領域の利用状況を確認すべき旨を通知するアドレス変換手段を備え、前記制御手段は、前記通知を受け取ると、前記メモリアドレスに対応する前記メモリ領域の利用状況を前記利用情報に基づいて判断するとしてもよい。
【０２３２】
この構成によると、プロセッサは、アドレス変換手段を備えることで、制御手段が前記所定のメモリ領域の利用状況を判断する必要があるか否かを事前に特定することができる。
【０２３３】
（５）ここで、前記メモリ領域は、前記他のスレッドとは別のスレッドにも利用される領域であり、前記制御手段は、さらに、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、前記別のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止するとしてもよい。
【０２３４】
この構成によると、プロセッサは、複数の命令の実行後、複数のスレッドで共通に利用するメモリ領域に対する読み出し命令を実行する場合でも、依存関係を保持したままで実行することができる。
【０２３５】
（６）ここで、前記プロセッサは、さらに、命令をフェッチする際に取得した仮想アドレスを物理アドレスに変換し、変換した前記物理アドレスが前記許可手段で予め保持している前記プログラムカウンタとの間に関連がある場合には、前記許可手段による前記判断を実行することを要求する要求情報を前記許可手段に通知するアドレス変換手段を備え、前記許可手段は、前記要求情報を前記アドレス変換手段から受け取ると、前記判断を行うとしてもよい。
【０２３６】
この構成によると、プロセッサは、アドレス変換手段を備えることで、許可手段による判断を行う必要があるか否かを事前に特定することができる。
【０２３７】
（７）ここで、前記設定手段は、さらに、前記メモリ領域への書き込みが完了したことを示す旨を利用情報に設定する際に、他のプロセッサで管理されている別の利用情報に対しても前記メモリ領域への書き込みが完了したことを示す内容を設定するとしてもよい。
【０２３８】
この構成によると、プロセッサは、他のプロセッサとの間においても複数の書き込み命令の実行後に読み出し命令を実行するという依存関係を保ちながら処理を行うことができる。
【０２３９】
（８）ここで、前記一のスレッド及び他のスレッドは、画像のデコード処理を行うためのものであり、前記プロセッサは、画像のデコード処理を行う画像処理システムに備えられるとしてもよい。
【０２４０】
この構成によると、プロセッサは、複数の書き込み命令の実行後に読み出し命令を実行するという依存関係を保ちながらデコード処理を行うことができる。
【０２４１】
（９）ここで、前記一のスレッド及び他のスレッドは、画像のエンコード処理を行うためのものであり、前記プロセッサは、画像のエンコード処理を行う画像処理システムに備えられるとしてもよい。
【０２４２】
この構成によると、プロセッサは、複数の書き込み命令の実行後に読み出し命令を実行するという依存関係を保ちながらエンコード処理を行うことができる。
【０２４３】
（１０）また、本発明の一態様である、複数のスレッドを用いて画像を処理する画像処理装置は、他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行すると、当該メモリ領域への書き込みが完了したか否かを示す利用情報に、当該一のスレッドによる当該メモリ領域への書き込みが完了したことを示す旨を設定する設定手段と、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了したことを示している場合には、他のスレッドによる前記メモリ領域に存在するデータの読み出し命令を実行し、前記利用情報が前記一のスレッドによる前記メモリ領域への書き込みが完了していないことを示している場合には、当該読み出し命令の実行を抑止する制御手段とを備えることを特徴とする。
【０２４４】
この構成によると、画像処理装置は、他のスレッドと共通に利用するメモリ領域への書き込みを行う一のスレッドにおいて前記メモリ領域への書き込みが完了したこと保証する位置に存在する命令を実行することで、他のスレッドによる当該メモリ領域に存在するデータの読み出しを行う。つまり、画像処理装置は、当該位置に存在する命令が実行されるまでに存在する命令が実行されていることを保証した上で、他のスレッドによる当該メモリ領域に存在するデータの読み出しを行うことができる。これにより、画像処理装置は、例えば書き込み命令を複数回実行した後に読み出し命令を実行するという依存関係を保つことができる。
【０２４５】
（１１）ここで、前記画像処理装置は、符号化された画像を復号するものであり、前記複数のスレッドには、符号化された一の画像において配置が連続するマクロブロックが互いに異なるよう割り当てられ、前記書き込みが完了したこと保証する位置に存在する命令とは、可変長復号処理、逆量子化・逆周波数変換に係る処理、動き補償に係る処理、画像の再構成処理及びデブロッキングフィルタ処理の何れかの処理が完了したことを示す命令であり、制御手段は、一のマクロブロックについて、前記書き込みが完了したと判断する場合には、当該一のマクロブロックの後続に位置する次のマクロブロックについて、書き込みが完了したと判断された処理と同一の処理を実行するよう当該処理を制御するとしてもよい。
【０２４６】
この構成によると、画像処理装置は、配置が連続するマクロブロックについて、マクロブロック間の依存関係を保ったまま、デコード処理を行うことができる。
【０２４７】
（１２）ここで、前記画像処理装置は、画像を符号化するものであり、前記複数のスレッドには、一の画像において配置が連続するマクロブロックが互いに異なるよう割り当てられ、前記書き込みが完了したこと保証する位置に存在する命令とは、符号化対象の画像データに対する予測誤差を算出する減算処理、予測誤差に対して量子化と周波数変換を行う量子化処理、符号化処理、参照画像の生成処理、動き補償に係る処理の何れかであり、制御手段は、一のマクロブロックについて、前記書き込みが完了したと判断する場合には、当該一のマクロブロックの後続に位置する次のマクロブロックについて、書き込みが完了したと判断された処理と同一の処理を実行するよう当該処理を制御するとしてもよい。
【０２４８】
この構成によると、画像処理装置は、配置が連続するマクロブロックについて、マクロブロック間の依存関係を保ったまま、エンコード処理を行うことができる。
【産業上の利用可能性】
【０２４９】
本発明に係るマルチスレッドプロセッサは、柔軟で高性能な演算処理を実現する機能を有するため、ＤＶＤレコーダやデジタルＴＶ等の映像や音声のメディア処理を行なうマルチスレッドプロセッサ等に適用できる。
【符号の説明】
【０２５０】
１００    マルチスレッドプロセッサ
１０１    命令メモリ
１０２    命令フェッチ制御部
１０３    命令群決定部
１０４    第１命令バッファ
１０５    第２命令バッファ
１０６    第Ｎ命令バッファ
１０７    発行命令決定部
１０８    優先度決定部
１０９    第１レジスタファイル
１１０    第２レジスタファイル
１１１    第Ｎレジスタファイル
１１２    演算器群
１１３    ライトバックバス
１１４    更新制御部
１１５    データメモリ
１１６    読み出し検出部
１１７    命令検出部
１１８    管理テーブル記憶部
１２０    メモリアクセス
３００    テーブル読出制御部
３０１    ｄｅｐ＿ｉｄ選択部
３０２    ＰＣ比較部
４００    テーブル読出制御部
４０１    ｄｅｐ＿ｉｄ選択部
４０２    Ｒｅａｄアドレス比較部
４０３    比較部
４０４    加算器
【図１】
0005853217.tif 000002
【図２】
0005853217.tif 000003
【図３】
0005853217.tif 000004
【図４】
0005853217.tif 000005
【図５】
0005853217.tif 000006
【図６】
0005853217.tif 000007
【図７】
0005853217.tif 000008
【図８】
0005853217.tif 000009
【図９】
0005853217.tif 000010
【図１０】
0005853217.tif 000011
【図１１】
0005853217.tif 000012
【図１２】
0005853217.tif 000013
【図１３】
0005853217.tif 000014