(57)【要約】  処理効率を低下させることなく複数のスレッドを処理できるマルチプロセッサを提供する。  複数のスレッドのうち実行対象となる所定個のスレッドそれぞれに異なるレジスタファイルを割り付けて、割り付けられた各スレッドの処理を並列に行う第１プロセッサと、前記第１プロセッサの指示に応じた処理を行う第２プロセッサとからなるマルチプロセッサであって、  前記第１プロセッサは、前記複数のスレッド毎に割り当てられた記憶領域を有し、実行対象の一のスレッドに含まれる命令に応じて前記第２プロセッサに処理依頼をし、前記第２プロセッサから当該スレッドに対する処理結果の値の書き込み要求を受け付けると、現時点で当該スレッドが実行対象であるか否かを判断し、実行対象でないと判断する場合には当該スレッドに割り当てられた記憶領域に前記処理結果の値を書き込むよう制御する。
2009153977.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドのうち実行対象となる所定個のスレッドそれぞれに異なるレジスタファイルを割り付けて、割り付けられた各スレッドの処理を並列に行う第１プロセッサと、前記第１プロセッサの指示に応じた処理を行う第２プロセッサとからなるマルチプロセッサであって、
前記第２プロセッサは、前記第１プロセッサから処理依頼がなされると、前記第１プロセッサの指示に応じた処理を行い、当該処理結果の値の書き込み要求を前記第１プロセッサへ通知し、
前記第１プロセッサは、
前記複数のスレッド毎に割り当てられた領域を有する記憶手段と、
実行対象である各スレッドについて、当該スレッドが実行対象から非実行対象となる場合に当該スレッドに割り付けられたレジスタファイル内の値を前記記憶手段において割り当てられた領域に保存する第１の制御手段と、
実行対象の一のスレッドに含まれる命令に応じて前記第２プロセッサに処理依頼をし、前記第２プロセッサから当該スレッドに対する処理結果の値の書き込み要求を受け付けると、現時点で当該スレッドが実行対象であるか否かを判断し、実行対象でないと判断する場合には前記記憶手段において当該スレッドに割り当てられた領域の一部に前記処理結果の値を書き込むよう制御する第２の制御手段と、
スレッドが非実行対象から再度実行対象となる場合に、当該スレッドに割り当てられた領域内の値を再度割り付けられたレジスタファイルへ復元する第３の制御手段とを備える
ことを特徴とするマルチプロセッサ。
【請求項２】
前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、
前記第２プロセッサは、前記スレッド識別子を、前記第１プロセッサから受け取って記憶し、
前記第２の制御手段は、前記書き込み要求を受け付けると、前記第２プロセッサにて記憶されている前記スレッド識別子を取得し、取得したスレッド識別子に基づいて前記判断の対象となるスレッドを特定する
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項３】
前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、
前記第２プロセッサは、
前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドとを含む命令を実行すると、前記書き込み要求を前記第１プロセッサへ通知し、
前記第２の制御手段は、
前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御し、
前記判断により前記スレッド識別子にて示されるスレッドが実行対象であると判断する場合には、対応するレジスタ識別子が示すレジスタファイルにおいて前記第２のオペランドにて示されるレジスタへ、前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御する
ことを特徴とする請求項２に記載のマルチプロセッサ。
【請求項４】
前記第２の制御手段は、
前記複数のスレッドそれぞれに対して、当該スレッドが実行対象であるか非実行対象であるかを示すフラグと、当該スレッドが実行対象となる場合において割り付けられるレジスタファイルを識別するレジスタ識別子とを対応付けて記憶し、
前記判断により前記スレッド識別子にて示されるスレッドに対応するフラグを用いて前記判断を行う
ことを特徴とする請求項３に記載のマルチプロセッサ。
【請求項５】
前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、
前記第２プロセッサは、前記第１プロセッサから受け取って記憶し、前記書き込み要求を通知する際に、前記スレッド識別子を前記書き込み要求に含めて前記第１プロセッサへ通知し、
前記第２の制御手段は、前記書き込み要求を受け付けると、受け取った前記書き込み要求に含まれるスレッド識別子に基づいて前記判断の対象となるスレッドを特定する
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項６】
前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、
前記第２プロセッサは、前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドと、処理を要求したスレッドを識別するスレッド識別子とを含む命令を実行すると、前記スレッド識別子を含む前記書き込み要求を前記第１プロセッサへ通知し、
前記第２の制御手段は、
前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御する
ことを特徴とする請求項５に記載のマルチプロセッサ。
【請求項７】
前記マルチプロセッサは、映像のデコード処理を実行する処理システムであって、
前記第１プロセッサにて処理される各スレッドは、前記デコード処理のうち可変長符号化された信号のデコードを行い、
前記第２プロセッサにて行われる前記指示に応じた処理は、前記デコード処理のうち逆量子化、逆周波数変換、動き補償及び画像データの加算に係る処理である
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項８】
前記マルチプロセッサは、映像のエンコード処理を実行する処理システムであって、
前記第１プロセッサにて処理される各スレッドは、前記エンコード処理のうち画像データに対する可変長符号化に係る処理を行い、
前記第２プロセッサにて行われる前記指示に応じた処理は、前記エンコード処理のうち符号化対象の画像データに対する予測誤差、量子化、周波数変換、動き補償、動き検索、逆量子化、逆周波数変換及び画像データの加算に係る処理である
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項９】
複数のスレッドのうち実行対象となる所定個のスレッドそれぞれに異なるレジスタファイルを割り付けて、割り付けられた各スレッドの処理を並列に行う第１プロセッサと、前記第１プロセッサの指示に応じた処理を行う第２プロセッサとからなるマルチプロセッサで用いられる処理方法であって、
前記第２プロセッサは、前記第１プロセッサから処理依頼がなされると、前記第１プロセッサの指示に応じた処理を行い、当該処理結果の値の書き込み要求を前記第１プロセッサへ通知し、
前記第１プロセッサは、前記複数のスレッド毎に割り当てられた領域を有する記憶手段を備え、
前記処理方法は、
実行対象である各スレッドについて、当該スレッドが実行対象から非実行対象となる場合に当該スレッドに割り付けられたレジスタファイル内の値を前記記憶手段において割り当てられた領域に保存する第１の制御ステップと、
実行対象の一のスレッドに含まれる命令に応じて前記第２プロセッサに処理依頼をし、前記第２プロセッサから当該スレッドに対する処理結果の値の書き込み要求を受け付けると、現時点で当該スレッドが実行対象であるか否かを判断し、実行対象でないと判断する場合には前記記憶手段において当該スレッドに割り当てられた領域の一部に前記処理結果の値を書き込むよう制御する第２の制御ステップと、
スレッドが非実行対象から再度実行対象となる場合に、当該スレッドに割り当てられた領域内の値を再度割り付けられたレジスタファイルへ復元する第３の制御ステップとを含む
ことを特徴とする処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドを同時に実行することができる一のプロセッサと、前記一のプロセッサの処理要求に応じた処理を行う他のプロセッサとにおいて、これらプロセッサ間のデータの受け渡しを効率的に行う技術に関する。
【背景技術】
【０００２】
デジタル化された映像データや、音声データなどの圧縮、伸張等を行うメディア処理を行うために、専用ハードウェアや、高性能なＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）などが用いられている。【０００３】
近年、メディア処理の複雑度は上昇しており、画像サイズ、音声のチャネル数等も増加する傾向にあり、当該メディア処理の演算量は増大の一歩をたどっている。そのため、処理効率の向上が求められている。【０００４】
そこで、例えば、非特許文献１において、複数のプログラムを同時に実行することにより演算効率を大幅に向上させた、高性能なマルチスレッドプロセッサが開示されている。このマルチスレッドプロセッサを用いることにで、メディア処理の性能向上を図ることができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】"A Multithreaded Processor Architecture with Simultaneous Instruction Issuing", In Proc. of ISS'91:International Symposium on Supercomputing, Fukuoka, Japan, pp.87-96, November 1991
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献１に開示されているマルチスレッドプロセッサを用いてメディア処理を実現する方法では、プロセッサ間でのデータの受け渡し時において問題が存在する。【０００７】
具体的には、あるアプリケーションを実現するために複数のスレッドをマルチスレッドプロセッサにて実行し、マルチスレッドプロセッサにて実行されている一のスレッドからの処理要求に応じて他のプロセッサが処理を行っている場合、これらプロセッサ間でデータの受け渡しを行う必要性が生じる。この受け渡し動作を行う際、データを受け取る側のスレッド（処理を要求したスレッド）がアクティブでない場合、相手側がアクティブになるのを待つ、あるいは、相手側をアクティブにするための処理が必要となる。その間、データを渡す側の前記他のプロセッサはリソースを使用した状態となり、プロセッサの演算効率を低下させてしまう。【０００８】
具体例を図１３にて示す。なお、ここでは、２つの論理プロセッサ上において、異なるスレッドが実行され、拡張演算プロセッサは論理プロセッサ上のスレッドの処理依頼により処理を実行し、実行結果を依頼元のスレッドへ返すものとする。【０００９】
時間ｔ０時点において、第１論理プロセッサではスレッド２が、第２論理プロセッサではスレッド１が、それぞれ実行されている（ステップＳ５００、Ｓ５０１）。【００１０】
時間ｔ１において、スレッド１は拡張演算プロセッサへ処理依頼を行い、処理依頼を受けた拡張演算プロセッサは、スレッド１に対する処理を行う（ステップＳ５０２）。【００１１】
時間ｔ２において、スレッド１が非アクティブとなり、スレッド３が第２論理プロセッサ上で実行され（ステップＳ５０３）、スレッド３の実行中の時間ｔ３において拡張演算プロセッサの処理が終了する。この場合、スレッド３が実行されているので、拡張演算プロセッサは処理結果をスレッド１へ反映できないため、第２プロセッサ上の処理対象がスレッド３からスレッド１へと切り替わるまで、待ち状態となる。そのため、時間ｔ４において、スレッド２にて処理依頼が発行されても拡張演算プロセッサは処理依頼を受け付けることができない。【００１２】
その後、第２論理プロセッサ上で処理対象がスレッド３からスレッド１へと切り替わると（時間ｔ５）、拡張演算プロセッサはステップＳ５０２における処理結果をスレッド１へ反映し、スレッド１の処理から解放される（時間ｔ６）。【００１３】
時間ｔ６以降において、第２論理プロセッサでは処理結果が反映されたスレッド１が実行される（ステップＳ５０４）。【００１４】
そして、時間ｔ７において、拡張演算プロセッサは、スレッド２からの処理依頼を受け付け、スレッド２に対する処理を行う。【００１５】
このように、時間ｔ３からｔ５までの間、スレッド１に対する処理が終了しているにも関わらず、スレッド１が処理対象となっていない、つまり処理結果を反映できる状態になっていないため、拡張演算プロセッサは、スレッド１による占有から解放されないままの状態となっているので、演算効率が低下する。【００１６】
そこで、本発明は、処理効率を低下させることなく複数のスレッドを処理できるマルチプロセッサ、及び処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記にて示す目的を達成するために、本発明は、複数のスレッドのうち実行対象となる所定個のスレッドそれぞれに異なるレジスタファイルを割り付けて、割り付けられた各スレッドの処理を並列に行う第１プロセッサと、前記第１プロセッサの指示に応じた処理を行う第２プロセッサとからなるマルチプロセッサであって、前記第２プロセッサは、前記第１プロセッサから処理依頼がなされると、前記第１プロセッサの指示に応じた処理を行い、当該処理結果の値の書き込み要求を前記第１プロセッサへ通知し、前記第１プロセッサは、前記複数のスレッド毎に割り当てられた領域を有する記憶手段と、実行対象である各スレッドについて、当該スレッドが実行対象から非実行対象となる場合に当該スレッドに割り付けられたレジスタファイル内の値を前記記憶手段において割り当てられた領域に保存する第１の制御手段と、実行対象の一のスレッドに含まれる命令に応じて前記第２プロセッサに処理依頼をし、前記第２プロセッサから当該スレッドに対する処理結果の値の書き込み要求を受け付けると、現時点で当該スレッドが実行対象であるか否かを判断し、実行対象でないと判断する場合には前記記憶手段において当該スレッドに割り当てられた領域の一部に前記処理結果の値を書き込むよう制御する第２の制御手段と、スレッドが非実行対象から再度実行対象となる場合に、当該スレッドに割り当てられた領域内の値を再度割り付けられたレジスタファイルへ復元する第３の制御手段とを備えることを特徴とする。
【発明の効果】
【００１８】
この構成によると、マルチプロセッサの第１プロセッサは、第２プロセッサからの書き込み要求を受け付けた時点で第２プロセッサへ処理を依頼したスレッドが実行対象外である場合には、処理結果の値を記憶手段に書き込むので、処理を依頼したスレッドに対する第２プロセッサの処理を終了させることができる。これにより、第１プロセッサは、次なる処理依頼を第２プロセッサへ依頼することができるので、マルチプロセッサは処理効率を低下させることなく複数のスレッドを処理することができる。【００１９】
ここで、前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、前記第２プロセッサは、前記スレッド識別子を、前記第１プロセッサから受け取って記憶し、前記第２の制御手段は、前記書き込み要求を受け付けると、前記第２プロセッサにて記憶されている前記スレッド識別子を取得し、取得したスレッド識別子に基づいて前記判断の対象となるスレッドを特定するとしてもよい。【００２０】
この構成によると、マルチプロセッサの第１プロセッサは、前記書き込み要求を受け付けると、第２プロセッサから処理依頼したスレッドを識別するスレッド識別子を取得するので、判断対象のスレッドを確実に特定できる。【００２１】
ここで、前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、前記第２プロセッサは、前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドとを含む命令を実行すると、前記書き込み要求を前記第１プロセッサへ通知し、前記第２の制御手段は、前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御し、前記判断により前記スレッド識別子にて示されるスレッドが実行対象であると判断する場合には、対応するレジスタ識別子が示すレジスタファイルにおいて前記第２のオペランドにて示されるレジスタへ、前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御するとしてもよい。【００２２】
この構成によると、第２プロセッサが前記命令を実行することで、第２プロセッサ内における処理結果の値の格納位置、及び処理依頼したスレッドに対する書き込み位置が確実に特定される。【００２３】
ここで、前記第２の制御手段は、前記複数のスレッドそれぞれに対して、当該スレッドが実行対象であるか非実行対象であるかを示すフラグと、当該スレッドが実行対象となる場合において割り付けられるレジスタファイルを識別するレジスタ識別子とを対応付けて記憶し、前記判断により前記スレッド識別子にて示されるスレッドに対応するフラグを用いて前記判断を行うとしてもよい。【００２４】
この構成によると、第１プロセッサは、前記フラグを用いることで、判断対象のスレッドが実行対象であるか否かを確実に判断することができる。【００２５】
ここで、前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、前記第２プロセッサは、前記第１プロセッサから受け取って記憶し、前記書き込み要求を通知する際に、前記スレッド識別子を前記書き込み要求に含めて前記第１プロセッサへ通知し、前記第２の制御手段は、前記書き込み要求を受け付けると、受け取った前記書き込み要求に含まれるスレッド識別子に基づいて前記判断の対象となるスレッドを特定するとしてもよい。【００２６】
この構成によると、マルチプロセッサの第１プロセッサは、処理依頼したスレッドを識別するスレッド識別子を含む前記書き込み要求を受け付けるので、判断対象のスレッドを確実に特定できる。【００２７】
ここで、前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、前記第２プロセッサは、前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドと、処理を要求したスレッドを識別するスレッド識別子とを含む命令を実行すると、前記スレッド識別子を含む前記書き込み要求を前記第１プロセッサへ通知し、前記第２の制御手段は、前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御するとしてもよい。【００２８】
この構成によると、第２プロセッサが前記命令を実行することで、第２プロセッサ内における処理結果の値の格納位置、処理依頼したスレッドに対する書き込み位置、及び処理依頼したスレッドが確実に特定される。【００２９】
ここで、前記マルチプロセッサは、映像のデコード処理を実行する処理システムであって、前記第１プロセッサにて処理される各スレッドは、前記デコード処理のうち可変長符号化された信号のデコードを行い、前記第２プロセッサにて行われる前記指示に応じた処理は、前記デコード処理のうち逆量子化、逆周波数変換、動き補償及び画像データの加算に係る処理であるとしてもよい。【００３０】
この構成によると、マルチプロセッサによるデコード処理は、処理効率を低下させることなく複数のスレッドを処理することができる。【００３１】
ここで、前記マルチプロセッサは、映像のエンコード処理を実行する処理システムであって、前記第１プロセッサにて処理される各スレッドは、前記エンコード処理のうち画像データに対する可変長符号化に係る処理を行い、前記第２プロセッサにて行われる前記指示に応じた処理は、前記エンコード処理のうち符号化対象の画像データに対する予測誤差、量子化、周波数変換、動き補償、動き検索、逆量子化、逆周波数変換及び画像データの加算に係る処理であるとしてもよい。【００３２】
この構成によると、マルチプロセッサによるエンコード処理は、処理効率を低下させることなく複数のスレッドを処理することができる。
【図面の簡単な説明】
【００３３】
【図１】マルチプロセッサシステム１０の構成を示す図である。
【図２】制御部１１１の構成を示す図である。
【図３】スレッド情報テーブルＴ１００のデータ構造の一例を示す図である。
【図４】演算終了制御命令Ｔ１１０のデータ構造の一例を示す図である。
【図５】反映対象スレッドがアクティブな場合のデータの反映先を示す図である。
【図６】反映対象スレッドが非アクティブな場合のデータの反映先を示す図である。
【図７】演算終了制御命令Ｔ１１０の実行時における処理の動作を示す流れ図である。
【図８】複数のスレッドが実行される場合の動作の具体例を示す図である。
【図９】演算終了制御命令Ｔ１２０のデータ構造の一例を示す図である。
【図１０】マルチプロセッサシステム１０００の構成を示す図である。
【図１１】マルチプロセッサシステム１０をデコーダ１０Ａに適用した場合の一例を示す図である。
【図１２】マルチプロセッサシステム１０をエンコーダ１０Ｂに適用した場合の一例を示す図である。
【図１３】従来において、複数のスレッドが実行される場合の動作の具体例を示す図である。
【発明を実施するための形態】
【００３４】
１．実施の形態１
以下、本発明の実施の形態１について、図面を参照しながら説明する。
【００３５】
１．１  構成
図１は、本発明の実施の形態１におけるマルチプロセッサシステム１０の構成を示す。
【００３６】
マルチプロセッサシステム１０は、マルチスレッドプロセッサ１１と、拡張演算プロセッサ１２とから構成されている。
【００３７】
マルチスレッドプロセッサ１１は、最大Ｎ（Ｎは２以上の整数）個の命令流（Ｎ個のスレッド）を同時に独立して実行するプロセッサである。
【００３８】
拡張演算プロセッサ１２は、マルチスレッドプロセッサ１１からの制御により起動され、マルチスレッドプロセッサ１１において実行中である１つのスレッドの指示による処理を実行するプロセッサである。
【００３９】
以下、これらプロセッサの構成について説明する。
【００４０】
（１）マルチスレッドプロセッサ１１の構成
マルチスレッドプロセッサ１１は、図１にて示すように、命令メモリ１０１、命令デコーダ１０２、Ｎ個の命令バッファ（第１命令バッファ１０３、第２命令バッファ１０４、…、第Ｎ命令バッファ１０５）、Ｎ個のレジスタファイル（第１レジスタファイル１０６、第２レジスタファイル１０７、…、第Ｎレジスタファイル１０８）、演算器群１０９、ライトバックバス１１０、制御部１１１、及びコンテキストメモリ１１２から構成されている。
【００４１】
ここで、各命令バッファと各レジスタファイルは１対１に対応付けられ、Ｎ個の論理プロセッサを構成する。本実施の形態１においては、第１命令バッファ１０３と第１レジスタファイル１０６とから第１論理プロセッサ１５１が、第２命令バッファ１０４と第２レジスタファイル１０７とから第２論理プロセッサ１５２が、・・・、第Ｎ命令バッファ１０５と第Ｎレジスタファイル１０８とから第Ｎ論理プロセッサ１５３が、それぞれ構成されているものとする。
【００４２】
マルチスレッドプロセッサ１１は、複数のスレッドのうち最大Ｎ個のスレッドそれぞれを、異なる論理プロセッサへ割り付けることで、最大Ｎ個のスレッドが並列に実行すること実現する。
【００４３】
（１−１）命令メモリ１０１
命令メモリ１０１は、Ｎ個の論理プロセッサの何れかにより実行される複数の命令流（スレッド）を保持している。
【００４４】
（１−２）命令デコーダ１０２
命令デコーダ１０２は、命令メモリ１０１から、実行対象である１以上のスレッドに属する命令を読み出し、デコードを行い、当該命令が属するスレッドが割り付けられた論理プロセッサの命令バッファに書き込む。
【００４５】
（１−３）第１命令バッファ１０３〜第Ｎ命令バッファ１０５
第ｉ命令バッファ（ｉは１以上Ｎ以下の整数、以下同じ。）は、第ｉ論理プロセッサに属し、当該第ｉ論理プロセッサに割り付けられたスレッドに属する命令を受け取り、保持するものである。
【００４６】
（１−４）第１レジスタファイル１０６〜第Ｎレジスタファイル１０８
第ｉレジスタファイルは、第ｉ論理プロセッサに属し、第ｉ命令バッファに保持された命令が実行される際に、読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
【００４７】
なお、レジスタファイルそれぞれの先頭アドレスは、０番から始まるものとする。
【００４８】
（１−５）演算器群１０９
演算器群１０９は、加算器や乗算器などの複数の演算器を含む処理部であり、各論理プロセッサの処理を並列に行う。
【００４９】
（１−６）ライトバックバス１１０
ライトバックバス１１０は、演算器群１０９からの出力を第１レジスタファイル１０６〜第Ｎレジスタファイル１０８に書き戻すためのバスである。
【００５０】
（１−７）制御部１１１
制御部１１１は、図２にて示すように、スレッド制御部１６０と、スレッド情報記憶部１６１と、プロセッサ制御部１６２とから構成されている。
【００５１】
（１−７−１）スレッド制御部１６０
スレッド制御部１６０は、各スレッドのアクティブ化と非アクティブ化を管理するものである。ここで、アクティブなスレッドとは、第ｉ論理プロセッサ、つまり第ｉ命令バッファと第ｉレジスタファイルとを占有するリソースとして確保され、当該第ｉ論理プロセッサ上で即座に実行できる状態にあるスレッドのことを指す。非アクティブなスレッドとは、どの論理プロセッサのいずれも占有するリソースとして確保されていないスレッドのことを指す。
【００５２】
スレッド制御部１６０は、スレッド切り替えの要因に基づいて、スレッドの非アクティブ化とアクティブ化を行う。ここで、スレッド切り替えの要因としては、アクティブなスレッドの実行時間が一定値に達したことを示す信号の受け取りや、他のハードウェアから入力されるイベント発生信号の受け取りや、特定の命令の実行が挙げられる。
【００５３】
スレッド制御部１６０は、図２にて示すように、退避部１６５及び復元部１６６を有しており、退避部１６５にてスレッドの非アクティブ化を行い、復元部１６６にてスレッドのアクティブ化を行う。
【００５４】
スレッド制御部１６０は、例えば、アクティブなスレッドの実行時間が一定値に達したことを示す信号を受け取ると、当該スレッドを非アクティブ化にする。具体的には、退避部１６５が、非アクティブ化対象と定められたスレッド（例えば、第２論理プロセッサ上で実行されていたスレッドとする）の命令メモリ１０１からの命令読み出しと、第２命令バッファ１０４からの命令発行を停止する。そして、退避部１６５は、第２レジスタファイル１０７の内容を、コンテキストメモリ１１２の定められた領域に退避する。
【００５５】
スレッド制御部１６０は、非アクティブ状態であるスレッドが再度実行対象となる場合、当該スレッドのアクティブ化を行う。具体的には、復元部１６６が、アクティブ化対象と定められたスレッド（ここでは第２論理プロセッサに割り付けられたスレッドとする）が使用するデータ（値）をコンテキストメモリ１１２から読み出し、第２レジスタファイル１０７に復帰する。その後、命令メモリ１０１からの対応する命令を読み出し、及び実行が開始される。コンテキストメモリ１１２上のデータの管理方法については後述する。
【００５６】
スレッド制御部１６０は、スレッドをアクティブ化及び非アクティブ化する際に、後述するスレッド情報テーブルＴ１００の更新を行う。
【００５７】
（１−７−２）スレッド情報記憶部１６１
スレッド情報記憶部１６１は、個々のスレッドそれぞれの状態を管理するものであり、図３にて示すように、スレッド情報テーブルＴ１００を有している。
【００５８】
スレッド情報テーブルＴ１００は、スレッドＩＤ２０１、バリッド（Ｖａｌｉｄ）フラグ２０２、論理プロセッサＩＤ２０３、スレッド状態フラグ２０４、及びベースアドレス２０５とからなる組（エントリ）を複数個（スレッドの個数分）記憶するための領域を有している。
【００５９】
スレッドＩＤ２０１は、各エントリに保持されるスレッドの情報が、どのスレッドに対応するものかを示すＩＤ番号である。
【００６０】
バリッドフラグ２０２は、各エントリに保持されるスレッドの情報が有効なものであるかどうかを示すバリッドビットであり、"０"が無効な情報、"１"が有効な情報であることを示す。
【００６１】
論理プロセッサＩＤ２０３は、各エントリに保持されるスレッドの情報が、いずれの論理プロセッサ上で実行されているかを示すＩＤ番号である。例えば、論理プロセッサＩＤの値「００」は第１論理プロセッサ１５１を示し、「０１」は第２論理プロセッサ１５２を示している。
【００６２】
スレッド状態フラグ２０４は、各エントリに保持されるスレッド状態を示す情報である。"００"が非アクティブ状態、"０１"がアクティブ状態、"１０"または"１１"が、アクティブ化または非アクティブ化のプロセス途中であることを示す。なお、スレッド状態フラグ２０４は、スレッド制御部１６０においてスレッドのアクティブから非アクティブへの状態変更、又は非アクティブからアクティブへの状態変更が行われる際に、スレッド制御部１６０にて更新される。例えば、スレッドのアクティブから非アクティブへの状態変更は退避部１６５が行い、非アクティブからアクティブへの状態変更は復元部１６６が行う。
【００６３】
ベースアドレス２０５は、コンテキストメモリ１１２内のアドレスを示し、当該アドレスを先頭位置として、エントリに保持されているスレッドＩＤに対応するスレッドに対するレジスタ値が格納されている
エントリ２０６は、スレッドＩＤが「００００１」であるスレッド１が、有効なものであり、現在論理プロセッサＩＤ「００」とスレッド状態フラグにより第１論理プロセッサ１５１上で実行されていることを示している。
【００６４】
また、エントリ２０８は、スレッドＩＤが「０００１１」であるスレッド３が、有効なものであり、現在非アクティブな状態にあることを示している。
【００６５】
なお、上述したように、スレッド情報テーブルＴ１００は、スレッド制御部１６０により更新される。例えば、スレッド１がアクティブから非アクティブへと切り替わる場合、退避部１６５が、スレッド１、つまりスレッドＩＤ「００００１」に対応するスレッド状態フラグが「００」からスレッド状態の切替中である旨を示す値「１０」へ更新し、切替が完了するとスレッド状態フラグが「１０」から非アクティブ状態である旨を示す値「０１」へと更新される。また、逆に、非アクティブからアクティブへと切り替わる場合、復元部１６６が、スレッド１のスレッド状態フラグを「０１」からスレッド状態の切替中である旨を示す値「１１」へと更新し、スレッド状態の切替中である旨を示し、切替が完了するとスレッド状態フラグを「１１」から「００」へと更新する。
【００６６】
さらには、例えば、スレッド３が初めて論理プロセッサに割り当てられたとき（ここでは、第１論理プロセッサとする）、スレッド制御部１６０は、スレッド３に対応するエントリを追加する。この場合、エントリには、スレッドＩＤ「０００１１」、バリッドフラグ「１」、論理プロセッサＩＤ「００」、スレッド状態フラグ「０１」、及びベースアドレス「０ｘ４００００００」が含まれる。
【００６７】
（１−７−３）プロセッサ制御部１６２
プロセッサ制御部１６２は、実行対象である一のスレッドの命令により、拡張演算プロセッサ１２へ処理依頼する。具体的には、プロセッサ制御部１６２は、演算器群１０９のうち、１の論理プロセッサに割り付けられたスレッドの命令を実行している演算器により実行された命令に従って、拡張演算プロセッサ１２へ処理依頼する。また、プロセッサ制御部１６２は、処理を要求した当該一のスレッドを識別するスレッドＩＤをスレッド情報テーブルＴ１００より取得して、取得したスレッドＩＤを拡張演算プロセッサへ出力する。
【００６８】
その後、プロセッサ制御部１６２は、拡張演算プロセッサ１２へ処理を要求したスレッドへの書き込みに係る書込要求を拡張演算プロセッサ１２から受け取ると、拡張演算プロセッサ１２から処理の依頼元であるスレッドのスレッドＩＤを取得する。ここで、書込要求とは、拡張演算プロセッサ１２にて演算終了制御命令Ｔ１１０が実行されると、プロセッサ制御部１６２へ通知されるものである。なお、演算終了制御命令Ｔ１１０の詳細は後述する。
【００６９】
プロセッサ制御部１６２は、スレッド情報テーブルＴ１００を用いて、取得したスレッドＩＤを含むエントリ内のスレッド状態フラグを参照して、当該スレッドＩＤに対応するスレッドが実行対象として論理プロセッサが割り付けられているか否かを、つまりアクティブ状態であるか、非アクティブ状態であるかを判断する。
【００７０】
非アクティブ状態であると判断する場合には、プロセッサ制御部１６２は、拡張演算プロセッサ１２から出力された書き込み対象のデータを、当該エントリ内のベースアドレスと拡張演算プロセッサ１２にて指定されたレジスタとから特定されるコンテキストメモリ１１２内のアドレスへ書き込むよう制御する。なお、コンテキストメモリ１１２内への書き込みは、現時点でアクティブなスレッドの実行に影響を与えることなく、並列してハードウェアの処理により実現するものとする。このような動作により、アクティブなスレッドの実行の実行時間をうばって処理効率を低下させることを防ぐことができる。
【００７１】
アクティブ状態であると判断する場合には、プロセッサ制御部１６２は、当該スレッドＩＤに対応するスレッドが割り付けられた論理プロセッサのレジスタファイルに、拡張演算プロセッサ１２から出力された書き込み対象のデータを、拡張演算プロセッサ１２にて指定されたアドレスへ書き込むよう制御する。
【００７２】
ここで、拡張演算プロセッサ１２にて実行される演算終了制御命令Ｔ１１０のデータ構造について説明する。
【００７３】
図４は、本実施の形態１における演算終了制御命令Ｔ１１０のフォーマットであり、オペコード３０１、第１のオペランド３０２、第２のオペランド３０３とから構成されている。
【００７４】
オペコード３０１は、実行中の自スレッド（拡張演算プロセッサ１２）を完了させるとともに、自スレッド（拡張演算プロセッサ１２）のレジスタファイル内のデータを他スレッド（要求元のスレッド）のレジスタファイル内へ転送するようプロセッサに指示するコードである。
【００７５】
第１のオペランド３０２は、自スレッド（拡張演算プロセッサ）が使用するレジスタファイルのレジスタをデータ転送ソースとして指定するものである。
【００７６】
第２のオペランド３０３は、他スレッド（要求元のスレッド）が使用するレジスタファイルのレジスタをデータ転送デスティネーションとして指定するものである。なお、ここでは、第２のオペランド３０３は、レジスタをレジスタ番号で示すものとしている。
【００７７】
要求元のスレッドがアクティブ状態である場合には、プロセッサ制御部１６２の制御により、第１のオペランド３０２にて示されるレジスタに記憶されているデータ（値）が、第２のオペランド３０３にて示される、論理プロセッサ内のレジスタファイルのレジスタへ書き込まれる。
【００７８】
要求元のスレッドがアクティブ状態である場合には、プロセッサ制御部１６２の制御により、先ず、スレッド情報テーブルＴ１００を用いて、取得したスレッドＩＤが含まれるエントリから要求元のスレッドに対応付けられたベースアドレスが特定される。特定されたベースアドレスと第２のオペランド３０３にて示される値（Ｒｄ）とから、コンテキストメモリ１１２内において書き込むべきアドレスが特定される。例えば、ベースアドレスが４バイトで記憶されており、レジスタのサイズが各４バイトであった場合、数式"ベースアドレス＋（第２のオペランド×４）"で特定される。第１のオペランド３０２にて示されるレジスタに記憶されているデータ（値）は、特定されたコンテキストメモリ１１２上のアドレスにて示されるレジスタへ書き込まれる。
【００７９】
図５及び図６は、本実施の形態１における演算終了制御命令Ｔ１１０が実行（発行）された場合の動作である。なお、ここでは、説明の都合上、マルチスレッドプロセッサ１１は、レジスタファイル１０６、１０７の２つのみ有しており、スレッド１が拡張演算プロセッサ１２へ処理依頼を行い、処理依頼時点では、スレッド１及びスレッド２それぞれが、レジスタファイル１０６、１０７それぞれに割り付けられているものとする。
【００８０】
拡張演算プロセッサ１２においてスレッド完了命令が発行されると  結果を反映すべきスレッド（ここでは、スレッド１）、つまり拡張演算プロセッサ１２に処理依頼を行ったスレッド１がアクティブであった場合、図５にて示すように、第１のオペランド３０２で指定された、レジスタファイル１１６内のレジスタＲｓ４０２に記憶された値は、プロセッサ制御部１６２の制御により、処理依頼を行ったスレッド１が占有するレジスタファイル１０６内の、第２のオペランド３０３で指定されたレジスタＲｄ４０４へ転送される（書き込まれる）。
【００８１】
また、結果を反映すべきスレッド（ここでは、スレッド１）が、マルチスレッドプロセッサ１１上で非アクティブである場合、例えば、レジスタファイル１０６はスレッド３に、レジスタファイル１０７はスレッド２に、それぞれ占有されている場合、図６にて示すように、プロセッサ制御部１６２の制御により、処理依頼を行ったスレッド１に対応付けられたコンテキストメモリ１１２内のベースアドレスと、第２のオペランド３０３で指定されたレジスタＲｄ４０４とから上述した数式によりコンテキストメモリ１１２上の格納先のアドレスが特定され、第１のオペランド３０２で指定された、レジスタファイル１１６内のレジスタＲｓ４０２に記憶された値は特定されたアドレスへ転送される（書き込まれる）。
【００８２】
（１−８）コンテキストメモリ１１２
コンテキストメモリ１１２は、非アクティブな状態にあるスレッドのレジスタセットの内容を退避するメモリであり、各スレッドそれぞれに対して異なる領域が割り当てられている。
【００８３】
ここでは、各スレッドそれぞれに対して、異なるアドレスをベースアドレスとして対応付けることで、領域の割り当てを実現している。
【００８４】
（２）拡張演算プロセッサ１２の構成
拡張演算プロセッサ１２は、図１にて示すように、命令メモリ１１３と、命令デコーダ１１４と、命令バッファ１１５と、レジスタファイル１１６と、演算器群１１７と、ライトバックバス１１８と、スレッド情報記憶部１１９を備えている。
【００８５】
（２−１）命令メモリ１１３
命令メモリ１１３は、拡張演算プロセッサ１２において実行される命令を保持するメモリである。
【００８６】
（２−２）命令デコーダ１１４
命令デコーダ１１４は、命令メモリ１１３から命令を読み出し、デコードを行い、命令バッファ１１５に書き込む処理部である。
【００８７】
命令デコーダ１１４は、デコードにより、演算終了制御命令Ｔ１１０を発行（実行）すると、発行した演算終了制御命令Ｔ１１０を命令バッファ１１５に書き込むとともに、マルチスレッドプロセッサ１１のプロセッサ制御部１６２へ書込要求を通知する。
【００８８】
（２−３）命令バッファ１１５
命令バッファ１１５は、命令デコーダ１１４から命令を受け取り、保持する記憶部である。
【００８９】
レジスタファイル１１６は、命令バッファ１１５に保持された命令が実行される際に、読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
【００９０】
なお、レジスタファイル１１６の先頭アドレスは０番から始まるものとする。
【００９１】
（２−４）演算器群１１７
演算器群１１７は、加算器や乗算器などの複数の演算器を含む処理部であり、命令バッファ１１５に保持されている命令を実行する。
【００９２】
演算器群１１７は、演算終了制御命令Ｔ１１０を命令バッファ１１５から読み出すと、読み出した演算終了制御命令Ｔ１１０に含まれる第１オペランド３０２にて示されるレジスタＲｓの値を読み出し、読み出した値と、当該値を第２オペランド３０２にて示されるレジスタＲｄへ書き込む旨の指示とをマルチスレッドプロセッサ１１へライトバックバス１１８を介して出力する。なお、ライトバックバス１１８については後述する。
【００９３】
このとき、マルチスレッドプロセッサ１１のプロセッサ制御部１６２は、拡張演算プロセッサ１２からこれら情報が出力されると、先に行っている判断結果に基づいて書込先のアドレスを用いて特定された書き込み先へ、出力された値を書き込むよう制御する。
【００９４】
（２−５）ライトバックバス１１８
ライトバックバス１１８は、演算器群１１７からの出力をレジスタファイル１１６、第１レジスタファイル１０６〜第Ｎレジスタファイル１０８に書き戻すため、及びレジスタファイル１１６の内容を第１レジスタファイル１０６〜第Ｎレジスタファイル１０８若しくはコンテキストメモリ１１２へ書き込むためのバスである。
【００９５】
（２−６）スレッド情報記憶部１１９
スレッド情報記憶部１１９は、処理依頼の要求のあったスレッドを識別するスレッドＩＤを格納する領域を有している。
【００９６】
当該スレッド情報記憶部１１９への書き込みは、マルチスレッドプロセッサ１１のプロセッサ制御部１６２にて行われる。
【００９７】
１．２  動作
ここでは、演算終了制御命令Ｔ１１０が実行された際のマルチプロセッサシステム１０の動作について、図７にて示す流れ図を用いて説明する。
【００９８】
拡張演算プロセッサ１２にて演算終了制御命令Ｔ１１０が発行されると、マルチスレッドプロセッサ１１のプロセッサ制御部１６２は、反映すべきスレッドのＩＤ、つまり処理要求元のスレッドＩＤを、スレッド情報記憶部１１９から取得する（ステップＳ１０５）。
【００９９】
プロセッサ制御部１６２は、スレッド情報テーブルＴ１００の反映すべきスレッドＩＤの情報が記録されたエントリを読み出す（ステップＳ１１０）。
【０１００】
プロセッサ制御部１６２は、読み出したエントリに含まれるバリッドフラグ２０２の内容が１かどうかを判定する（ステップＳ１１５）。
【０１０１】
１でないと判断する場合（ステップＳ１１５における「ＮＯ」、マルチプロセッサシステム１０はエラー処理を行い（ステップＳ１４０）、処理を終了する。ここで、エラー処理は、例えば、レジスタファイル１１６に格納されている内容、命令バッファに保持されている命令、及び現在拡張演算プロセッサにて実行中の命令を破棄するものである。
【０１０２】
１であると判断する場合（ステップＳ１１５における「ＹＥＳ」）、プロセッサ制御部１６２は、読み出したエントリに含まれるスレッド状態フラグ２０４の内容が０１かどうかを判定する（ステップＳ１２０）。
【０１０３】
０１であると判定する場合（ステップＳ１２０における「ＹＥＳ」）、プロセッサ制御部１６２は、読み出したエントリに含まれる論理プロセッサＩＤ２０３の内容が示す論理プロセッサが有するレジスタファイル中の、第２のオペランド３０３で示されたレジスタＲｄに、拡張演算プロセッサのレジスタファイル１１６中の、第１のオペランド３０２で示されたレジスタＲｓの内容を書き込むよう制御する（ステップＳ１２５）。
【０１０４】
スレッド状態フラグ２０４の内容が０１でないと判定する場合（ステップＳ１２５における「ＮＯ」）、プロセッサ制御部１６２は、スレッド状態フラグ２０４の内容が００かどうかを判定する（ステップＳ１３０）。
【０１０５】
００であると判定する場合（ステップＳ１３０における「ＹＥＳ」）、プロセッサ制御部１６２は、読み出したエントリに含まれるベースアドレス２０５と、第２のオペランド３０３にて示されるレジスタＲｄとに基づいて算出されるコンテキストメモリ１１２上のアドレスに、拡張演算プロセッサのレジスタファイル１１６中の、第１のオペランド３０２で示されたレジスタＲｓの内容を転送し、スレッド完了命令の実行を完了する。
【０１０６】
スレッド状態フラグ２０４の内容が００でないと判定する場合（ステップＳ１３０における「ＮＯ」）、処理は、ステップＳ１２０に戻り、スレッドの状態が更新されるのを待つ。
【０１０７】
１．３  実施の形態１のまとめ
図８は、本発明の実施の形態１における、複数のスレッド動作の様子である。なお、ここでは、論理プロセッサの個数を２つとしている。
【０１０８】
時間ｔ０時点において、第１論理プロセッサ１５１ではスレッド２が、第２論理プロセッサ１５２ではスレッド１が、それぞれ実行されている（ステップＳ２０１、Ｓ２０２）。
【０１０９】
時間ｔ１において、スレッド１は拡張演算プロセッサ１２へ処理依頼を行い、処理依頼を受けた拡張演算プロセッサ１２は、スレッド１に対する処理を行う（ステップＳ２０３）。
【０１１０】
時間ｔ２において、スレッド１が非アクティブとなり、スレッド３が第２論理プロセッサ１５１上で実行され（ステップＳ２０４）、スレッド３の実行中の時間ｔ３において拡張演算プロセッサ１２の処理が終了すると、スレッド１は非アクティブの状態であるので処理結果はコンテキストメモリへ書き込まれる。
【０１１１】
その後、スレッド３の実行中の時間ｔ４において、スレッド２にて拡張演算プロセッサ１２へ処理依頼が行われると、拡張演算プロセッサ１２は、スレッド１の処理から解放されている、つまりスレッド１に占有されていないので、拡張演算プロセッサ１２はスレッド２に対する処理を行う（ステップＳ２０５）。
【０１１２】
スレッド３の終了後の時間ｔ５において、再度、スレッド１がアクティブになると、コンテキストメモリ１１２に拡張演算プロセッサ１２による処理結果が反映されているので、スレッド１はコンテキストメモリ１１２内の保持されたデータを用いることで、処理を続行する（ステップＳ２０６）。
【０１１３】
このように、本実施の形態１におけるマルチプロセッサシステム１０は、スレッド１からの処理要求による拡張演算プロセッサ１２での処理が終了した際、データの反映先となるスレッド１がアクティブでない場合でも、前述の演算終了制御命令Ｔ１１０によりコンテキストメモリ１１２上のスレッド１に対応付けられた領域に処理結果（データ）を反映し、即座に処理を完了させることができる。そのため、不要な待ち時間を発生させることなく、演算リソースを有効に使用することができる。
【０１１４】
本実施の形態のマルチプロセッサによると、拡張演算プロセッサ１２によるスレッドを終了させるとともに処理結果であるデータを他スレッド（依頼元のスレッド）に転送する際、当該他スレッドの状態に応じて、つまりデータ受け取り側のスレッドがアクティブであるか否かに応じて、データ転送先を適切に選択するので、スレッド間のデータの受け渡しを効率的に行うことができる。
【０１１５】
２．実施の形態２
実施の形態２は、演算終了制御命令フィールドのデータ構造が実施の形態１のものとは異なる。
【０１１６】
以下で命令フィールドの構成及び、動作フローチャートにおいて異なる点を説明する。なお、実施の形態１と同一の構成要素については、同一の符号を用いる。
【０１１７】
２．１  演算終了制御命令Ｔ１２０について
図９は、本発明の実施の形態２における演算終了制御命令Ｔ１２０のフォーマットであり、オペコード９０１、第１のオペランド９０２、第２のオペランド９０３及び第３のオペランド９０４から構成されている。
【０１１８】
オペコード９０１、第１のオペランド９０２、第２のオペランド９０３は、実施の形態１のオペコード３０１、第１のオペランド３０２、第２のオペランド３０３と同様であるので、ここでの説明は省略する。
【０１１９】
第３のオペランド９０４は、第２オペランド９０３で指定されるレジスタを持つスレッドＩＤ、つまり処理要求を行ったスレッドのスレッドＩＤを指定するものである。
【０１２０】
２．２  構成
実施の形態２におけるマルチプロセッサシステム１０００について説明する。
【０１２１】
マルチプロセッサシステム１０００は、図１０にて示すように、マルチスレッドプロセッサ１１ａと拡張演算プロセッサ１２ａとから構成されている。
【０１２２】
実施の形態２では、命令デコーダ及びプロセッサ制御部が実施の形態１のものとは異なる。以下、図１０にて示す実施の形態２における命令デコーダ１１４ａ及びプロセッサ制御部１６２ａについて説明する。実施の形態１と同様の符号が付された構成要素については、実施の形態１にて説明しているので、ここでの説明は省略する。なお、図１０にて示す第１論理プロセッサ１５１は、図示していないが実施の形態１と同様に、第１命令バッファ１０３及び第１レジスタファイル１０６を有している。また、第２論理プロセッサ１５２及び第Ｎ論理プロセッサ１５３も同様に、実施の形態１にて示す命令バッファ及びレジスタファイルを有している。スレッド制御部１６０についても、図示していないが実施の形態１と同様に、退避部１６５及び復元部１６６を有している。
【０１２３】
（１）命令デコーダ１１４ａ
命令デコーダ１１４ａは、デコードにより、演算終了制御命令Ｔ１２０を発行すると、第３のオペランドからスレッドＩＤを取得する。命令デコーダ１１４ａは、発行した演算終了制御命令Ｔ１２０を命令バッファ１１５に書き込むとともに、マルチスレッドプロセッサ１１のプロセッサ制御部１６２ａへ取得したスレッドＩＤを含む書込要求を通知する。
【０１２４】
（２）プロセッサ制御部１６２ａ
プロセッサ制御部１６２ａは、実施の形態１と同様に、実行対象である一のスレッドの命令により、拡張演算プロセッサ１２へ処理依頼、及び処理依頼したスレッドのスレッドＩＤを拡張演算プロセッサ１２へ通知する。このとき、スレッドＩＤは、スレッド情報記憶部１１９に書き込まれる。
【０１２５】
その後、プロセッサ制御部１６２ａは、拡張演算プロセッサ１２からスレッドＩＤを含む書込要求を拡張演算プロセッサ１２から受け取ると、受け取った書込要求に含まれるスレッドＩＤを含むエントリ内のスレッド状態フラグを参照して、当該スレッドＩＤに対応するスレッドが実行対象として論理プロセッサが割り付けられているか否かを、つまりアクティブ状態であるか、非アクティブ状態であるかを判断する。以降の動作については、実施の形態１と同様であるので、ここでの説明は省略する。
【０１２６】
２．３  動作
以下、演算終了制御命令Ｔ１２０が実行された場合のマルチプロセッサシステム１０の動作について、図７の変更点のみ説明する。
【０１２７】
変更点は、ステップＳ１０５の動作を以下のように変更する。
【０１２８】
拡張演算プロセッサ１２にて演算終了制御命令Ｔ１２０が実行されると、演算終了制御命令Ｔ１２０に含まれるスレッドＩＤを取得するの取得は、第３のオペランド９０４から取得する。
【０１２９】
以降の動作は、図７にて示すステップＳ１１０からＳ１４０までの動作と同様であるので、ここでの説明は省略する。
【０１３０】
２．４  実施の形態２のまとめ
実施の形態２では、アクティブであるか否かの判断対象となるスレッドを示すスレッドＩＤの取得方法が、実施の形態１とは異なるものであり、得られる効果は同様である。
【０１３１】
３．実施の形態３
ここでは、実施の形態１にて示すマルチプロセッサシステム１０を適用したシステムの具体例として、映像のデコード、エンコード処理に適用した場合について説明する。
【０１３２】
図１１は、マルチプロセッサシステム１０をデコード処理を行うデコーダ１０Ａに適用した場合を示すものである。
【０１３３】
図１２は、マルチプロセッサシステム１０をエンコード処理を行うエンコーダ１０Ｂに適用した場合を示すものである。
【０１３４】
３．１  デコード処理に適用した場合
デコーダ１０Ａは、図１１に示すように、可変長復号部５００、逆量子化・直交逆変換部５０１、動き補償部５０２、加算部５０３、スイッチ５０４及び参照画像バッファ５０５から構成されている。
【０１３５】
これら構成要素は、既知のものであるので、ここでの詳細な説明は省略し、これらの概略のみ説明する。
【０１３６】
可変長復号部５００は、可変長符号化された信号を復号（デコード）するものである。
【０１３７】
逆量子化・直交逆変換部５０１は、可変長復号部５００にて得られた量子化ＤＣＴ係数に対して逆量子化及び逆周波数変換を行うものである。
【０１３８】
動き補償部５０２は、動きベクトルを用いた画像データの生成を行うものである。
【０１３９】
加算部５０３は、動き補償部５０２で得られた画像データと、逆量子化・直交逆変換部５０１で得られた画像のデータとを加算して、出力すべき画像データを生成するものである。
【０１４０】
スイッチ５０４は、可変長復号部５００にて得られた復号対象のピクチャの種別（Ｐ、Ｉ、Ｂピクチャ）に応じて、逆量子化・直交逆変換部５０１との接続、若しくは加算部５０３とのｓ接続を切り替えるものである。
【０１４１】
参照画像バッファ５０５は、参照画像を保持するためのものである。
【０１４２】
ここで、図１１にて示すように、実施の形態１にて示すマルチスレッドプロセッサ１１が可変長復号部５００とスイッチに係る処理を行い、拡張演算プロセッサ１２が逆量子化・直交逆変換部５０１、動き補償部５０２及び加算部５０３に係る処理を行うように適用することで、デコード処理を行うデコーダに、実施の形態１にて示すマルチプロセッサシステム１０を適用することができる。
【０１４３】
３．３  エンコード処理に適用した場合
エンコーダ１０Ｂは、図１２に示すように、減算部６００、直交変換・量子化部６０１、可変長符号化部６０２、逆量子化・直交逆変換部６０３、加算部６０４、動き補償部６０５、動き検索部６０６及び参照画像バッファ６０７から構成されている。
【０１４４】
これら構成要素は、既知のものであるので、ここでの詳細な説明は省略し、これらの概略のみ説明する。
【０１４５】
減算部６００は、符号化対象の画像データに対する予測誤差を算出するものである。
【０１４６】
直交変換・量子化部６０１は、予測誤差に対して周波数変換及び量子化を行うものである。
【０１４７】
可変長符号化部６０２は、量子化ＤＣＴ係数及び動きベクトルを可変長符号化するものである。
【０１４８】
逆量子化・直交逆変換部６０３は、動き補償予測に用いるために量子化ＤＣＴ係数に対して逆量子化及び逆周波数変換を行うものである。
【０１４９】
加算部６０４は、動き補償部５０２で得られた画像データと、逆量子化・直交逆変換部５０１とから得られた画像のデータとの加算、及び加算結果の画像データに対してでブロッキングフィルタによりデブロッキングフィルタ処理を施して、参照画像として参照画像バッファ６０７で保持するための画像データを生成するものである。
【０１５０】
動き補償部６０５は、動きベクトルを用いた画像データの生成を行うものである。
【０１５１】
動き検索部６０６は、動き補償予測を行い動きベクトルを検出するものである。
【０１５２】
参照画像バッファ６０７は、参照画像を保持するためのものである。
【０１５３】
ここで、図１２にて示すように、実施の形態１にて示すマルチスレッドプロセッサ１１が可変長符号化部６０２に係る処理を行い、拡張演算プロセッサ１２が減算部６００、直交変換・量子化部６０１、逆量子化・直交逆変換部６０３、加算部６０４、動き補償部６０５及び動き検索部６０６に係る処理を行うように適用することで、エンコーダ１０Ｂに、実施の形態１にて示すマルチプロセッサシステム１０を適用することができる。
【０１５４】
３．３  実施の形態３のまとめ
Ｈ．２６４等の規格を用いて圧縮された映像信号をデコードするには、上述したように、ビットストリームの解析、可変長符号化された信号のデコード処理、逆量子化、逆周波数変換、動き補償、デブロックフィルタ処理が必要となる。
【０１５５】
これらの処理のうち、ビットストリームの解析、可変長符号化された信号のデコード処理といった逐次系処理は一般的なプロセッサ（マルチスレッドプロセッサ）において、現実的な動作周波数での処理が可能である。一方、画素系処理である逆量子化、逆周波数変換、動き補償、デブロックフィルタ処理に関しては、複数の画素に対して同時に演算を行うデータ並列型のプロセッサ（拡張演算プロセッサ）が適している。
【０１５６】
データ並列型のプロセッサは、レジスタセットや演算器により幅広いデータ幅を必要とするので、独立した拡張演算プロセッサとすることで、逐次系処理を行うプロセッサのリソースを増加させずに効率的なプロセッサを実装することができる。
【０１５７】
本実施例では、逐次系処理をマルチスレッドプロセッサ、画素系処理を前記拡張演算プロセッサとすることで、回路規模の増加を抑えつつ、拡張演算プロセッサの使用効率を向上させたリアルタイム映像処理システムを構築することができる。
【０１５８】
４．変形例
上記に説明した各実施の形態は、本発明の実施の一例であり、本発明はこの実施の形態に何ら限定されるものではなく、その旨を逸脱しない範囲において種々なる態様で実施し得るものである。例えば、以下のような場合も本発明に含まれる。
【０１５９】
（１）上記実施の形態において、拡張演算プロセッサ１２の各構成要素１１３〜１１７は、マルチスレッドプロセッサ１１の構成要素と共有しても良い。
【０１６０】
（２）上記実施の形態において、拡張演算プロセッサ１２は、マルチスレッドプロセッサ１１とは独立して命令を保持しているとしたが、これに限定されない。
【０１６１】
拡張演算プロセッサ１２は、供給元のスレッド、つまり論理プロセッサによる指示にて動作するようにしても良い。
【０１６２】
（３）上記実施の形態において、書込要求を、命令デコーダ１１４がプロセッサ制御部１６２へ通知するものとしたが、これに限定されない。
【０１６３】
演算器群１１７が、演算終了制御命令Ｔ１１０に基づく処理を行った後、マルチスレッドプロセッサ１１へデータを出力する際に、書込要求をプロセッサ制御部１６２へ通知するとしてもよい。
【０１６４】
また、演算器群１１７が、演算終了制御命令Ｔ１２０に基づく処理を行った場合も同様に、マルチスレッドプロセッサ１１へデータを出力する際に、スレッドＩＤを含む書込要求をプロセッサ制御部１６２へ通知することで実現できる。
【０１６５】
（４）上記実施の形態において、演算終了制御命令Ｔ１１０は、第１のオペランドＲＳと第２のオペランドＲｄとからなる組を１組含むとしたが、これに限定されない。演算終了制御命令Ｔ１１０内に、この組を複数個含むとしてもよい。
【０１６６】
また、演算終了制御命令Ｔ１２０においても同様に、第１のオペランドＲＳと第２のオペランドＲｄとからなる組を複数個含むとしてもよい。
【０１６７】
（５）上記実施の形態において、演算終了制御命令Ｔ１１０が実行された際に、演算器群１１７は、演算終了制御命令Ｔ１１０に含まれる第１オペランドにて示されるレジスタＲｓに格納された値（処理結果）と、当該値を第２オペランドにて示されるレジスタＲｄへ書き込む旨の指示とをマルチスレッドプロセッサ１１へ出力したが、これに限定されない。
【０１６８】
演算器群１１７は、演算終了制御命令Ｔ１１０に含まれる第１オペランドにて示されるレジスタＲｓと、当該値を第２オペランドにて示されるレジスタＲｄへ書き込む旨の指示とをマルチスレッドプロセッサ１１へ出力してもよい。
【０１６９】
このとき、プロセッサ制御部１６２は、受け取った指示に含まれるレジスタＲｓにて示されるアドレスに基づいて、レジスタファイル１１６から処理結果を読み出し、読み出した処理結果を、レジスタＲｄを用いて要求元のスレッドの状態に応じた書き込み先を特定する。
【０１７０】
また、実施の形態２においては、上記の指示にさらに、第３のオペランドにて示される要求元のスレッドＩＤを含めることで、実現できる。
【０１７１】
（６）上記実施の形態において、スレッドが初めて論理プロセッサに割り当てられたときに、スレッド制御部１６０が当該スレッドに対応するエントリを追加するとしたが、これに限定されない。
【０１７２】
例えば、各スレッドに割り当てられる論理プロセッサを予め対応付けておいてもよい。この場合、スレッド情報テーブルＴ１００には、スレッド毎のエントリが予め登録されており、エントリに含まれるバリッドフラグ及びスレッド状態フラグそれぞれの初期値を「０」及び「００」とし、対応するスレッドの状態に応じて、スレッド制御部１６０がこれらフラグの値を更新する。
【０１７３】
（８）上記実施の形態において、マルチスレッドプロセッサ１１は、１つのプロセッサであり、当該プロセッサ内において複数の論理プロセッサが構成しているとしたが、これに限定されない。
【０１７４】
マルチスレッドプロセッサ１１内において複数のプロセッサエレメントが構成されているとしてもよい。
【０１７５】
（９）上記実施の形態において、拡張演算プロセッサ１２は、処理要求元のスレッドに対する処理が完了した時点で、書き込みに係る要求をマルチスレッドプロセッサ１１へ通知したが、これに限定されない。
【０１７６】
処理途中において、書き込みに係る要求をマルチスレッドプロセッサ１１へ通知してもよい。
【０１７７】
（１０）上記実施の形態において、レジスタのサイズを４バイトとしたが、これに限定されない。
【０１７８】
レジスタのサイズは他の値であってもよい。例えば、１６バイトである。この場合、上記にて示した数式は、"ベースアドレス＋（第２のオペランド×１６）"と変更される。
【０１７９】
（１１）上記実施の形態において、各論理プロセッサは、並列に実行されるものとしたが、これに限定されない。
【０１８０】
例えば、各論理プロセッサのうち一の論理プロセッサのみに演算器群１０９が割り当てられ、タイムスライスにより、この割り当てを変更するという擬似的な並列による処理であってもよい。
【０１８１】
なお、このような擬似的な並列処理も、本発明における並列処理の概念に含めるものとする。
【０１８２】
（１２）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０１８３】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０１８４】
（１３）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１８５】
本発明に係るマルチプロセッサシステムは、柔軟で高性能な演算処理を実現する機能を有するので、ＤＶＤレコーダやデジタルＴＶ等の映像や音声のメディア処理を行うマルチプロセッサシステムに適用できる。【０１８６】
本発明に係るマルチプロセッサシステムを製造、販売する産業において、経営的、つまり反復的かつ継続的に利用されうる。
【符号の説明】
【０１８７】
１０    マルチプロセッサシステム
１１    マルチスレッドプロセッサ
１２    拡張演算プロセッサ
１０１    命令メモリ
１０２    命令デコーダ
１０３    第１命令バッファ
１０４    第２命令バッファ
１０５    第Ｎ命令バッファ
１０６    第１レジスタファイル
１０７    第２レジスタファイル
１０８    第Ｎレジスタファイル
１０９    演算器群
１１０    ライトバックバス
１１１    制御部
１１２    コンテキストメモリ
１１３    命令メモリ
１１４    命令デコーダ
１１５    命令バッファ
１１６    レジスタファイル
１１７    演算器群
１１８    ライトバックバス
１１９    スレッド情報記憶部
１６０    スレッド制御部
１６１    スレッド情報記憶部
１６２    プロセッサ制御部
１６５    退避部
１６６    復元部
【図１】
2009153977.tif 000003
【図２】
2009153977.tif 000004
【図３】
2009153977.tif 000005
【図４】
2009153977.tif 000006
【図５】
2009153977.tif 000007
【図６】
2009153977.tif 000008
【図７】
2009153977.tif 000009
【図８】
2009153977.tif 000010
【図９】
2009153977.tif 000011
【図１０】
2009153977.tif 000012
【図１１】
2009153977.tif 000013
【図１２】
2009153977.tif 000014
【図１３】
2009153977.tif 000015
【手続補正書】
【提出日】平成22年1月21日(2010.1.21)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドを同時に実行することができる一のプロセッサと、前記一のプロセッサの処理要求に応じた処理を行う他のプロセッサとにおいて、これらプロセッサ間のデータの受け渡しを効率的に行う技術に関する。
【背景技術】
【０００２】
デジタル化された映像データや、音声データなどの圧縮、伸張等を行うメディア処理を行うために、専用ハードウェアや、高性能なＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）などが用いられている。
近年、メディア処理の複雑度は上昇しており、画像サイズ、音声のチャネル数等も増加する傾向にあり、当該メディア処理の演算量は増大の一歩をたどっている。そのため、処理効率の向上が求められている。
【０００３】
そこで、例えば、非特許文献１において、複数のプログラムを同時に実行することにより演算効率を大幅に向上させた、高性能なマルチスレッドプロセッサが開示されている。このマルチスレッドプロセッサを用いることにで、メディア処理の性能向上を図ることができる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】"A Multithreaded Processor Architecture with SimultaneousInstruction Issuing", In Proc. of ISS'91:International Symposium onSupercomputing, Fukuoka, Japan, pp.87-96, November 1991
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、非特許文献１に開示されているマルチスレッドプロセッサを用いてメディア処理を実現する方法では、プロセッサ間でのデータの受け渡し時において問題が存在する。
具体的には、あるアプリケーションを実現するために複数のスレッドをマルチスレッドプロセッサにて実行し、マルチスレッドプロセッサにて実行されている一のスレッドからの処理要求に応じて他のプロセッサが処理を行っている場合、これらプロセッサ間でデータの受け渡しを行う必要性が生じる。この受け渡し動作を行う際、データを受け取る側のスレッド（処理を要求したスレッド）がアクティブでない場合、相手側がアクティブになるのを待つ、あるいは、相手側をアクティブにするための処理が必要となる。その間、データを渡す側の前記他のプロセッサはリソースを使用した状態となり、プロセッサの演算効率を低下させてしまう。
【０００６】
具体例を図１３にて示す。なお、ここでは、２つの論理プロセッサ上において、異なるスレッドが実行され、拡張演算プロセッサは論理プロセッサ上のスレッドの処理依頼により処理を実行し、実行結果を依頼元のスレッドへ返すものとする。
時間ｔ０時点において、第１論理プロセッサではスレッド２が、第２論理プロセッサではスレッド１が、それぞれ実行されている（ステップＳ５００、Ｓ５０１）。
【０００７】
時間ｔ１において、スレッド１は拡張演算プロセッサへ処理依頼を行い、処理依頼を受けた拡張演算プロセッサは、スレッド１に対する処理を行う（ステップＳ５０２）。
時間ｔ２において、スレッド１が非アクティブとなり、スレッド３が第２論理プロセッサ上で実行され（ステップＳ５０３）、スレッド３の実行中の時間ｔ３において拡張演算プロセッサの処理が終了する。この場合、スレッド３が実行されているので、拡張演算プロセッサは処理結果をスレッド１へ反映できないため、第２プロセッサ上の処理対象がスレッド３からスレッド１へと切り替わるまで、待ち状態となる。そのため、時間ｔ４において、スレッド２にて処理依頼が発行されても拡張演算プロセッサは処理依頼を受け付けることができない。
【０００８】
その後、第２論理プロセッサ上で処理対象がスレッド３からスレッド１へと切り替わると（時間ｔ５）、拡張演算プロセッサはステップＳ５０２における処理結果をスレッド１へ反映し、スレッド１の処理から解放される（時間ｔ６）。
時間ｔ６以降において、第２論理プロセッサでは処理結果が反映されたスレッド１が実行される（ステップＳ５０４）。
【０００９】
そして、時間ｔ７において、拡張演算プロセッサは、スレッド２からの処理依頼を受け付け、スレッド２に対する処理を行う。
このように、時間ｔ３からｔ５までの間、スレッド１に対する処理が終了しているにも関わらず、スレッド１が処理対象となっていない、つまり処理結果を反映できる状態になっていないため、拡張演算プロセッサは、スレッド１による占有から解放されないままの状態となっているので、演算効率が低下する。
【００１０】
そこで、本発明は、処理効率を低下させることなく複数のスレッドを処理できるマルチプロセッサ、及び処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記にて示す目的を達成するために、本発明は、複数のスレッドのうち実行対象となる所定個のスレッドそれぞれに異なるレジスタファイルを割り付けて、割り付けられた各スレッドの処理を並列に行う第１プロセッサと、前記第１プロセッサの指示に応じた処理を行う第２プロセッサとからなるマルチプロセッサであって、前記第２プロセッサは、前記第１プロセッサから処理依頼がなされると、前記第１プロセッサの指示に応じた処理を行い、当該処理結果の値の書き込み要求を前記第１プロセッサへ通知し、前記第１プロセッサは、前記複数のスレッド毎に割り当てられた領域を有する記憶手段と、実行対象である各スレッドについて、当該スレッドが実行対象から非実行対象となる場合に当該スレッドに割り付けられたレジスタファイル内の値を前記記憶手段において割り当てられた領域に保存する第１の制御手段と、実行対象の一のスレッドに含まれる命令に応じて前記第２プロセッサに処理依頼をし、前記第２プロセッサから当該スレッドに対する処理結果の値の書き込み要求を受け付けると、現時点で当該スレッドが実行対象であるか否かを判断し、実行対象でないと判断する場合には前記記憶手段において当該スレッドに割り当てられた領域の一部に前記処理結果の値を書き込むよう制御する第２の制御手段と、スレッドが非実行対象から再度実行対象となる場合に、当該スレッドに割り当てられた領域内の値を再度割り付けられたレジスタファイルへ復元する第３の制御手段とを備えることを特徴とする。
【発明の効果】
【００１２】
この構成によると、マルチプロセッサの第１プロセッサは、第２プロセッサからの書き込み要求を受け付けた時点で第２プロセッサへ処理を依頼したスレッドが実行対象外である場合には、処理結果の値を記憶手段に書き込むので、処理を依頼したスレッドに対する第２プロセッサの処理を終了させることができる。これにより、第１プロセッサは、次なる処理依頼を第２プロセッサへ依頼することができるので、マルチプロセッサは処理効率を低下させることなく複数のスレッドを処理することができる。
【００１３】
ここで、前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、前記第２プロセッサは、前記スレッド識別子を、前記第１プロセッサから受け取って記憶し、前記第２の制御手段は、前記書き込み要求を受け付けると、前記第２プロセッサにて記憶されている前記スレッド識別子を取得し、取得したスレッド識別子に基づいて前記判断の対象となるスレッドを特定するとしてもよい。
【００１４】
この構成によると、マルチプロセッサの第１プロセッサは、前記書き込み要求を受け付けると、第２プロセッサから処理依頼したスレッドを識別するスレッド識別子を取得するので、判断対象のスレッドを確実に特定できる。
ここで、前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、前記第２プロセッサは、前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドとを含む命令を実行すると、前記書き込み要求を前記第１プロセッサへ通知し、前記第２の制御手段は、前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御し、前記判断により前記スレッド識別子にて示されるスレッドが実行対象であると判断する場合には、対応するレジスタ識別子が示すレジスタファイルにおいて前記第２のオペランドにて示されるレジスタへ、前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御するとしてもよい。
【００１５】
この構成によると、第２プロセッサが前記命令を実行することで、第２プロセッサ内における処理結果の値の格納位置、及び処理依頼したスレッドに対する書き込み位置が確実に特定される。
ここで、前記第２の制御手段は、前記複数のスレッドそれぞれに対して、当該スレッドが実行対象であるか非実行対象であるかを示すフラグと、当該スレッドが実行対象となる場合において割り付けられるレジスタファイルを識別するレジスタ識別子とを対応付けて記憶し、前記判断により前記スレッド識別子にて示されるスレッドに対応するフラグを用いて前記判断を行うとしてもよい。
【００１６】
この構成によると、第１プロセッサは、前記フラグを用いることで、判断対象のスレッドが実行対象であるか否かを確実に判断することができる。
ここで、前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、前記第２プロセッサは、前記第１プロセッサから受け取って記憶し、前記書き込み要求を通知する際に、前記スレッド識別子を前記書き込み要求に含めて前記第１プロセッサへ通知し、前記第２の制御手段は、前記書き込み要求を受け付けると、受け取った前記書き込み要求に含まれるスレッド識別子に基づいて前記判断の対象となるスレッドを特定するとしてもよい。
【００１７】
この構成によると、マルチプロセッサの第１プロセッサは、処理依頼したスレッドを識別するスレッド識別子を含む前記書き込み要求を受け付けるので、判断対象のスレッドを確実に特定できる。
ここで、前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、前記第２プロセッサは、前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドと、処理を要求したスレッドを識別するスレッド識別子とを含む命令を実行すると、前記スレッド識別子を含む前記書き込み要求を前記第１プロセッサへ通知し、前記第２の制御手段は、前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御するとしてもよい。
【００１８】
この構成によると、第２プロセッサが前記命令を実行することで、第２プロセッサ内における処理結果の値の格納位置、処理依頼したスレッドに対する書き込み位置、及び処理依頼したスレッドが確実に特定される。
ここで、前記マルチプロセッサは、映像のデコード処理を実行する処理システムであって、前記第１プロセッサにて処理される各スレッドは、前記デコード処理のうち可変長符号化された信号のデコードを行い、前記第２プロセッサにて行われる前記指示に応じた処理は、前記デコード処理のうち逆量子化、逆周波数変換、動き補償及び画像データの加算に係る処理であるとしてもよい。
【００１９】
この構成によると、マルチプロセッサによるデコード処理は、処理効率を低下させることなく複数のスレッドを処理することができる。
ここで、前記マルチプロセッサは、映像のエンコード処理を実行する処理システムであって、前記第１プロセッサにて処理される各スレッドは、前記エンコード処理のうち画像データに対する可変長符号化に係る処理を行い、前記第２プロセッサにて行われる前記指示に応じた処理は、前記エンコード処理のうち符号化対象の画像データに対する予測誤差、量子化、周波数変換、動き補償、動き検索、逆量子化、逆周波数変換及び画像データの加算に係る処理であるとしてもよい。
【００２０】
この構成によると、マルチプロセッサによるエンコード処理は、処理効率を低下させることなく複数のスレッドを処理することができる。
【図面の簡単な説明】
【００２１】
【図１】マルチプロセッサシステム１０の構成を示す図である。
【図２】制御部１１１の構成を示す図である。
【図３】スレッド情報テーブルＴ１００のデータ構造の一例を示す図である。
【図４】演算終了制御命令Ｔ１１０のデータ構造の一例を示す図である。
【図５】反映対象スレッドがアクティブな場合のデータの反映先を示す図である。
【図６】反映対象スレッドが非アクティブな場合のデータの反映先を示す図である。
【図７】演算終了制御命令Ｔ１１０の実行時における処理の動作を示す流れ図である。
【図８】複数のスレッドが実行される場合の動作の具体例を示す図である。
【図９】演算終了制御命令Ｔ１２０のデータ構造の一例を示す図である。
【図１０】マルチプロセッサシステム１０００の構成を示す図である。
【図１１】マルチプロセッサシステム１０をデコーダ１０Ａに適用した場合の一例を示す図である。
【図１２】マルチプロセッサシステム１０をエンコーダ１０Ｂに適用した場合の一例を示す図である。
【図１３】従来において、複数のスレッドが実行される場合の動作の具体例を示す図である。
【発明を実施するための形態】
【００２２】
１．実施の形態１
以下、本発明の実施の形態１について、図面を参照しながら説明する。
１．１  構成
図１は、本発明の実施の形態１におけるマルチプロセッサシステム１０の構成を示す。
マルチプロセッサシステム１０は、マルチスレッドプロセッサ１１と、拡張演算プロセッサ１２とから構成されている。
【００２３】
マルチスレッドプロセッサ１１は、最大Ｎ（Ｎは２以上の整数）個の命令流（Ｎ個のスレッド）を同時に独立して実行するプロセッサである。
拡張演算プロセッサ１２は、マルチスレッドプロセッサ１１からの制御により起動され、マルチスレッドプロセッサ１１において実行中である１つのスレッドの指示による処理を実行するプロセッサである。
【００２４】
以下、これらプロセッサの構成について説明する。
（１）マルチスレッドプロセッサ１１の構成
マルチスレッドプロセッサ１１は、図１にて示すように、命令メモリ１０１、命令デコーダ１０２、Ｎ個の命令バッファ（第１命令バッファ１０３、第２命令バッファ１０４、…、第Ｎ命令バッファ１０５）、Ｎ個のレジスタファイル（第１レジスタファイル１０６、第２レジスタファイル１０７、…、第Ｎレジスタファイル１０８）、演算器群１０９、ライトバックバス１１０、制御部１１１、及びコンテキストメモリ１１２から構成されている。
【００２５】
ここで、各命令バッファと各レジスタファイルは１対１に対応付けられ、Ｎ個の論理プロセッサを構成する。本実施の形態１においては、第１命令バッファ１０３と第１レジスタファイル１０６とから第１論理プロセッサ１５１が、第２命令バッファ１０４と第２レジスタファイル１０７とから第２論理プロセッサ１５２が、・・・、第Ｎ命令バッファ１０５と第Ｎレジスタファイル１０８とから第Ｎ論理プロセッサ１５３が、それぞれ構成されているものとする。
【００２６】
マルチスレッドプロセッサ１１は、複数のスレッドのうち最大Ｎ個のスレッドそれぞれを、異なる論理プロセッサへ割り付けることで、最大Ｎ個のスレッドが並列に実行すること実現する。
（１−１）命令メモリ１０１
命令メモリ１０１は、Ｎ個の論理プロセッサの何れかにより実行される複数の命令流（スレッド）を保持している。
【００２７】
（１−２）命令デコーダ１０２
命令デコーダ１０２は、命令メモリ１０１から、実行対象である１以上のスレッドに属する命令を読み出し、デコードを行い、当該命令が属するスレッドが割り付けられた論理プロセッサの命令バッファに書き込む。
（１−３）第１命令バッファ１０３〜第Ｎ命令バッファ１０５
第ｉ命令バッファ（ｉは１以上Ｎ以下の整数、以下同じ。）は、第ｉ論理プロセッサに属し、当該第ｉ論理プロセッサに割り付けられたスレッドに属する命令を受け取り、保持するものである。
【００２８】
（１−４）第１レジスタファイル１０６〜第Ｎレジスタファイル１０８
第ｉレジスタファイルは、第ｉ論理プロセッサに属し、第ｉ命令バッファに保持された命令が実行される際に、読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
なお、レジスタファイルそれぞれの先頭アドレスは、０番から始まるものとする。
【００２９】
（１−５）演算器群１０９
演算器群１０９は、加算器や乗算器などの複数の演算器を含む処理部であり、各論理プロセッサの処理を並列に行う。
（１−６）ライトバックバス１１０
ライトバックバス１１０は、演算器群１０９からの出力を第１レジスタファイル１０６〜第Ｎレジスタファイル１０８に書き戻すためのバスである。
【００３０】
（１−７）制御部１１１
制御部１１１は、図２にて示すように、スレッド制御部１６０と、スレッド情報記憶部１６１と、プロセッサ制御部１６２とから構成されている。
（１−７−１）スレッド制御部１６０
スレッド制御部１６０は、各スレッドのアクティブ化と非アクティブ化を管理するものである。ここで、アクティブなスレッドとは、第ｉ論理プロセッサ、つまり第ｉ命令バッファと第ｉレジスタファイルとを占有するリソースとして確保され、当該第ｉ論理プロセッサ上で即座に実行できる状態にあるスレッドのことを指す。非アクティブなスレッドとは、どの論理プロセッサのいずれも占有するリソースとして確保されていないスレッドのことを指す。
【００３１】
スレッド制御部１６０は、スレッド切り替えの要因に基づいて、スレッドの非アクティブ化とアクティブ化を行う。ここで、スレッド切り替えの要因としては、アクティブなスレッドの実行時間が一定値に達したことを示す信号の受け取りや、他のハードウェアから入力されるイベント発生信号の受け取りや、特定の命令の実行が挙げられる。
スレッド制御部１６０は、図２にて示すように、退避部１６５及び復元部１６６を有しており、退避部１６５にてスレッドの非アクティブ化を行い、復元部１６６にてスレッドのアクティブ化を行う。
【００３２】
スレッド制御部１６０は、例えば、アクティブなスレッドの実行時間が一定値に達したことを示す信号を受け取ると、当該スレッドを非アクティブ化にする。具体的には、退避部１６５が、非アクティブ化対象と定められたスレッド（例えば、第２論理プロセッサ上で実行されていたスレッドとする）の命令メモリ１０１からの命令読み出しと、第２命令バッファ１０４からの命令発行を停止する。そして、退避部１６５は、第２レジスタファイル１０７の内容を、コンテキストメモリ１１２の定められた領域に退避する。
【００３３】
スレッド制御部１６０は、非アクティブ状態であるスレッドが再度実行対象となる場合、当該スレッドのアクティブ化を行う。具体的には、復元部１６６が、アクティブ化対象と定められたスレッド（ここでは第２論理プロセッサに割り付けられたスレッドとする）が使用するデータ（値）をコンテキストメモリ１１２から読み出し、第２レジスタファイル１０７に復帰する。その後、命令メモリ１０１からの対応する命令を読み出し、及び実行が開始される。コンテキストメモリ１１２上のデータの管理方法については後述する。
【００３４】
スレッド制御部１６０は、スレッドをアクティブ化及び非アクティブ化する際に、後述するスレッド情報テーブルＴ１００の更新を行う。
（１−７−２）スレッド情報記憶部１６１
スレッド情報記憶部１６１は、個々のスレッドそれぞれの状態を管理するものであり、図３にて示すように、スレッド情報テーブルＴ１００を有している。
【００３５】
スレッド情報テーブルＴ１００は、スレッドＩＤ２０１、バリッド（Ｖａｌｉｄ）フラグ２０２、論理プロセッサＩＤ２０３、スレッド状態フラグ２０４、及びベースアドレス２０５とからなる組（エントリ）を複数個（スレッドの個数分）記憶するための領域を有している。
スレッドＩＤ２０１は、各エントリに保持されるスレッドの情報が、どのスレッドに対応するものかを示すＩＤ番号である。
【００３６】
バリッドフラグ２０２は、各エントリに保持されるスレッドの情報が有効なものであるかどうかを示すバリッドビットであり、"０"が無効な情報、"１"が有効な情報であることを示す。
論理プロセッサＩＤ２０３は、各エントリに保持されるスレッドの情報が、いずれの論理プロセッサ上で実行されているかを示すＩＤ番号である。例えば、論理プロセッサＩＤの値「００」は第１論理プロセッサ１５１を示し、「０１」は第２論理プロセッサ１５２を示している。
【００３７】
スレッド状態フラグ２０４は、各エントリに保持されるスレッド状態を示す情報である。"００"が非アクティブ状態、"０１"がアクティブ状態、"１０"または"１１"が、アクティブ化または非アクティブ化のプロセス途中であることを示す。なお、スレッド状態フラグ２０４は、スレッド制御部１６０においてスレッドのアクティブから非アクティブへの状態変更、又は非アクティブからアクティブへの状態変更が行われる際に、スレッド制御部１６０にて更新される。例えば、スレッドのアクティブから非アクティブへの状態変更は退避部１６５が行い、非アクティブからアクティブへの状態変更は復元部１６６が行う。
【００３８】
ベースアドレス２０５は、コンテキストメモリ１１２内のアドレスを示し、当該アドレスを先頭位置として、エントリに保持されているスレッドＩＤに対応するスレッドに対するレジスタ値が格納されている
エントリ２０６は、スレッドＩＤが「００００１」であるスレッド１が、有効なものであり、現在論理プロセッサＩＤ「００」とスレッド状態フラグにより第１論理プロセッサ１５１上で実行されていることを示している。
【００３９】
また、エントリ２０８は、スレッドＩＤが「０００１１」であるスレッド３が、有効なものであり、現在非アクティブな状態にあることを示している。
なお、上述したように、スレッド情報テーブルＴ１００は、スレッド制御部１６０により更新される。例えば、スレッド１がアクティブから非アクティブへと切り替わる場合、退避部１６５が、スレッド１、つまりスレッドＩＤ「００００１」に対応するスレッド状態フラグが「００」からスレッド状態の切替中である旨を示す値「１０」へ更新し、切替が完了するとスレッド状態フラグが「１０」から非アクティブ状態である旨を示す値「０１」へと更新される。また、逆に、非アクティブからアクティブへと切り替わる場合、復元部１６６が、スレッド１のスレッド状態フラグを「０１」からスレッド状態の切替中である旨を示す値「１１」へと更新し、スレッド状態の切替中である旨を示し、切替が完了するとスレッド状態フラグを「１１」から「００」へと更新する。
【００４０】
さらには、例えば、スレッド３が初めて論理プロセッサに割り当てられたとき（ここでは、第１論理プロセッサとする）、スレッド制御部１６０は、スレッド３に対応するエントリを追加する。この場合、エントリには、スレッドＩＤ「０００１１」、バリッドフラグ「１」、論理プロセッサＩＤ「００」、スレッド状態フラグ「０１」、及びベースアドレス「０ｘ４００００００」が含まれる。
【００４１】
（１−７−３）プロセッサ制御部１６２
プロセッサ制御部１６２は、実行対象である一のスレッドの命令により、拡張演算プロセッサ１２へ処理依頼する。具体的には、プロセッサ制御部１６２は、演算器群１０９のうち、１の論理プロセッサに割り付けられたスレッドの命令を実行している演算器により実行された命令に従って、拡張演算プロセッサ１２へ処理依頼する。また、プロセッサ制御部１６２は、処理を要求した当該一のスレッドを識別するスレッドＩＤをスレッド情報テーブルＴ１００より取得して、取得したスレッドＩＤを拡張演算プロセッサへ出力する。
【００４２】
その後、プロセッサ制御部１６２は、拡張演算プロセッサ１２へ処理を要求したスレッドへの書き込みに係る書込要求を拡張演算プロセッサ１２から受け取ると、拡張演算プロセッサ１２から処理の依頼元であるスレッドのスレッドＩＤを取得する。ここで、書込要求とは、拡張演算プロセッサ１２にて演算終了制御命令Ｔ１１０が実行されると、プロセッサ制御部１６２へ通知されるものである。なお、演算終了制御命令Ｔ１１０の詳細は後述する。
【００４３】
プロセッサ制御部１６２は、スレッド情報テーブルＴ１００を用いて、取得したスレッドＩＤを含むエントリ内のスレッド状態フラグを参照して、当該スレッドＩＤに対応するスレッドが実行対象として論理プロセッサが割り付けられているか否かを、つまりアクティブ状態であるか、非アクティブ状態であるかを判断する。
非アクティブ状態であると判断する場合には、プロセッサ制御部１６２は、拡張演算プロセッサ１２から出力された書き込み対象のデータを、当該エントリ内のベースアドレスと拡張演算プロセッサ１２にて指定されたレジスタとから特定されるコンテキストメモリ１１２内のアドレスへ書き込むよう制御する。なお、コンテキストメモリ１１２内への書き込みは、現時点でアクティブなスレッドの実行に影響を与えることなく、並列してハードウェアの処理により実現するものとする。このような動作により、アクティブなスレッドの実行の実行時間をうばって処理効率を低下させることを防ぐことができる。
【００４４】
アクティブ状態であると判断する場合には、プロセッサ制御部１６２は、当該スレッドＩＤに対応するスレッドが割り付けられた論理プロセッサのレジスタファイルに、拡張演算プロセッサ１２から出力された書き込み対象のデータを、拡張演算プロセッサ１２にて指定されたアドレスへ書き込むよう制御する。
ここで、拡張演算プロセッサ１２にて実行される演算終了制御命令Ｔ１１０のデータ構造について説明する。
【００４５】
図４は、本実施の形態１における演算終了制御命令Ｔ１１０のフォーマットであり、オペコード３０１、第１のオペランド３０２、第２のオペランド３０３とから構成されている。
オペコード３０１は、実行中の自スレッド（拡張演算プロセッサ１２）を完了させるとともに、自スレッド（拡張演算プロセッサ１２）のレジスタファイル内のデータを他スレッド（要求元のスレッド）のレジスタファイル内へ転送するようプロセッサに指示するコードである。
【００４６】
第１のオペランド３０２は、自スレッド（拡張演算プロセッサ）が使用するレジスタファイルのレジスタをデータ転送ソースとして指定するものである。
第２のオペランド３０３は、他スレッド（要求元のスレッド）が使用するレジスタファイルのレジスタをデータ転送デスティネーションとして指定するものである。なお、ここでは、第２のオペランド３０３は、レジスタをレジスタ番号で示すものとしている。
【００４７】
要求元のスレッドがアクティブ状態である場合には、プロセッサ制御部１６２の制御により、第１のオペランド３０２にて示されるレジスタに記憶されているデータ（値）が、第２のオペランド３０３にて示される、論理プロセッサ内のレジスタファイルのレジスタへ書き込まれる。
要求元のスレッドがアクティブ状態である場合には、プロセッサ制御部１６２の制御により、先ず、スレッド情報テーブルＴ１００を用いて、取得したスレッドＩＤが含まれるエントリから要求元のスレッドに対応付けられたベースアドレスが特定される。特定されたベースアドレスと第２のオペランド３０３にて示される値（Ｒｄ）とから、コンテキストメモリ１１２内において書き込むべきアドレスが特定される。例えば、ベースアドレスが４バイトで記憶されており、レジスタのサイズが各４バイトであった場合、数式"ベースアドレス＋（第２のオペランド×４）"で特定される。第１のオペランド３０２にて示されるレジスタに記憶されているデータ（値）は、特定されたコンテキストメモリ１１２上のアドレスにて示されるレジスタへ書き込まれる。
【００４８】
図５及び図６は、本実施の形態１における演算終了制御命令Ｔ１１０が実行（発行）された場合の動作である。なお、ここでは、説明の都合上、マルチスレッドプロセッサ１１は、レジスタファイル１０６、１０７の２つのみ有しており、スレッド１が拡張演算プロセッサ１２へ処理依頼を行い、処理依頼時点では、スレッド１及びスレッド２それぞれが、レジスタファイル１０６、１０７それぞれに割り付けられているものとする。
【００４９】
拡張演算プロセッサ１２においてスレッド完了命令が発行されると  結果を反映すべきスレッド（ここでは、スレッド１）、つまり拡張演算プロセッサ１２に処理依頼を行ったスレッド１がアクティブであった場合、図５にて示すように、第１のオペランド３０２で指定された、レジスタファイル１１６内のレジスタＲｓ４０２に記憶された値は、プロセッサ制御部１６２の制御により、処理依頼を行ったスレッド１が占有するレジスタファイル１０６内の、第２のオペランド３０３で指定されたレジスタＲｄ４０４へ転送される（書き込まれる）。
【００５０】
また、結果を反映すべきスレッド（ここでは、スレッド１）が、マルチスレッドプロセッサ１１上で非アクティブである場合、例えば、レジスタファイル１０６はスレッド３に、レジスタファイル１０７はスレッド２に、それぞれ占有されている場合、図６にて示すように、プロセッサ制御部１６２の制御により、処理依頼を行ったスレッド１に対応付けられたコンテキストメモリ１１２内のベースアドレスと、第２のオペランド３０３で指定されたレジスタＲｄ４０４とから上述した数式によりコンテキストメモリ１１２上の格納先のアドレスが特定され、第１のオペランド３０２で指定された、レジスタファイル１１６内のレジスタＲｓ４０２に記憶された値は特定されたアドレスへ転送される（書き込まれる）。
【００５１】
（１−８）コンテキストメモリ１１２
コンテキストメモリ１１２は、非アクティブな状態にあるスレッドのレジスタセットの内容を退避するメモリであり、各スレッドそれぞれに対して異なる領域が割り当てられている。
ここでは、各スレッドそれぞれに対して、異なるアドレスをベースアドレスとして対応付けることで、領域の割り当てを実現している。
【００５２】
（２）拡張演算プロセッサ１２の構成
拡張演算プロセッサ１２は、図１にて示すように、命令メモリ１１３と、命令デコーダ１１４と、命令バッファ１１５と、レジスタファイル１１６と、演算器群１１７と、ライトバックバス１１８と、スレッド情報記憶部１１９を備えている。
（２−１）命令メモリ１１３
命令メモリ１１３は、拡張演算プロセッサ１２において実行される命令を保持するメモリである。
【００５３】
（２−２）命令デコーダ１１４
命令デコーダ１１４は、命令メモリ１１３から命令を読み出し、デコードを行い、命令バッファ１１５に書き込む処理部である。
命令デコーダ１１４は、デコードにより、演算終了制御命令Ｔ１１０を発行（実行）すると、発行した演算終了制御命令Ｔ１１０を命令バッファ１１５に書き込むとともに、マルチスレッドプロセッサ１１のプロセッサ制御部１６２へ書込要求を通知する。
【００５４】
（２−３）命令バッファ１１５
命令バッファ１１５は、命令デコーダ１１４から命令を受け取り、保持する記憶部である。
レジスタファイル１１６は、命令バッファ１１５に保持された命令が実行される際に、読み出し及び書き込みの対象とされるデータを保持するレジスタ群である。
【００５５】
なお、レジスタファイル１１６の先頭アドレスは０番から始まるものとする。
（２−４）演算器群１１７
演算器群１１７は、加算器や乗算器などの複数の演算器を含む処理部であり、命令バッファ１１５に保持されている命令を実行する。
演算器群１１７は、演算終了制御命令Ｔ１１０を命令バッファ１１５から読み出すと、読み出した演算終了制御命令Ｔ１１０に含まれる第１オペランド３０２にて示されるレジスタＲｓの値を読み出し、読み出した値と、当該値を第２オペランド３０２にて示されるレジスタＲｄへ書き込む旨の指示とをマルチスレッドプロセッサ１１へライトバックバス１１８を介して出力する。なお、ライトバックバス１１８については後述する。
【００５６】
このとき、マルチスレッドプロセッサ１１のプロセッサ制御部１６２は、拡張演算プロセッサ１２からこれら情報が出力されると、先に行っている判断結果に基づいて書込先のアドレスを用いて特定された書き込み先へ、出力された値を書き込むよう制御する。
（２−５）ライトバックバス１１８
ライトバックバス１１８は、演算器群１１７からの出力をレジスタファイル１１６、第１レジスタファイル１０６〜第Ｎレジスタファイル１０８に書き戻すため、及びレジスタファイル１１６の内容を第１レジスタファイル１０６〜第Ｎレジスタファイル１０８若しくはコンテキストメモリ１１２へ書き込むためのバスである。
【００５７】
（２−６）スレッド情報記憶部１１９
スレッド情報記憶部１１９は、処理依頼の要求のあったスレッドを識別するスレッドＩＤを格納する領域を有している。
当該スレッド情報記憶部１１９への書き込みは、マルチスレッドプロセッサ１１のプロセッサ制御部１６２にて行われる。
【００５８】
１．２  動作
ここでは、演算終了制御命令Ｔ１１０が実行された際のマルチプロセッサシステム１０の動作について、図７にて示す流れ図を用いて説明する。
拡張演算プロセッサ１２にて演算終了制御命令Ｔ１１０が発行されると、マルチスレッドプロセッサ１１のプロセッサ制御部１６２は、反映すべきスレッドのＩＤ、つまり処理要求元のスレッドＩＤを、スレッド情報記憶部１１９から取得する（ステップＳ１０５）。
【００５９】
プロセッサ制御部１６２は、スレッド情報テーブルＴ１００の反映すべきスレッドＩＤの情報が記録されたエントリを読み出す（ステップＳ１１０）。
プロセッサ制御部１６２は、読み出したエントリに含まれるバリッドフラグ２０２の内容が１かどうかを判定する（ステップＳ１１５）。
１でないと判断する場合（ステップＳ１１５における「ＮＯ」、マルチプロセッサシステム１０はエラー処理を行い（ステップＳ１４０）、処理を終了する。ここで、エラー処理は、例えば、レジスタファイル１１６に格納されている内容、命令バッファに保持されている命令、及び現在拡張演算プロセッサにて実行中の命令を破棄するものである。
【００６０】
１であると判断する場合（ステップＳ１１５における「ＹＥＳ」）、プロセッサ制御部１６２は、読み出したエントリに含まれるスレッド状態フラグ２０４の内容が０１かどうかを判定する（ステップＳ１２０）。
０１であると判定する場合（ステップＳ１２０における「ＹＥＳ」）、プロセッサ制御部１６２は、読み出したエントリに含まれる論理プロセッサＩＤ２０３の内容が示す論理プロセッサが有するレジスタファイル中の、第２のオペランド３０３で示されたレジスタＲｄに、拡張演算プロセッサのレジスタファイル１１６中の、第１のオペランド３０２で示されたレジスタＲｓの内容を書き込むよう制御する（ステップＳ１２５）。
【００６１】
スレッド状態フラグ２０４の内容が０１でないと判定する場合（ステップＳ１２５における「ＮＯ」）、プロセッサ制御部１６２は、スレッド状態フラグ２０４の内容が００かどうかを判定する（ステップＳ１３０）。
００であると判定する場合（ステップＳ１３０における「ＹＥＳ」）、プロセッサ制御部１６２は、読み出したエントリに含まれるベースアドレス２０５と、第２のオペランド３０３にて示されるレジスタＲｄとに基づいて算出されるコンテキストメモリ１１２上のアドレスに、拡張演算プロセッサのレジスタファイル１１６中の、第１のオペランド３０２で示されたレジスタＲｓの内容を転送し、スレッド完了命令の実行を完了する。
【００６２】
スレッド状態フラグ２０４の内容が００でないと判定する場合（ステップＳ１３０における「ＮＯ」）、処理は、ステップＳ１２０に戻り、スレッドの状態が更新されるのを待つ。
１．３  実施の形態１のまとめ
図８は、本発明の実施の形態１における、複数のスレッド動作の様子である。なお、ここでは、論理プロセッサの個数を２つとしている。
【００６３】
時間ｔ０時点において、第１論理プロセッサ１５１ではスレッド２が、第２論理プロセッサ１５２ではスレッド１が、それぞれ実行されている（ステップＳ２０１、Ｓ２０２）。
時間ｔ１において、スレッド１は拡張演算プロセッサ１２へ処理依頼を行い、処理依頼を受けた拡張演算プロセッサ１２は、スレッド１に対する処理を行う（ステップＳ２０３）。
【００６４】
時間ｔ２において、スレッド１が非アクティブとなり、スレッド３が第２論理プロセッサ１５１上で実行され（ステップＳ２０４）、スレッド３の実行中の時間ｔ３において拡張演算プロセッサ１２の処理が終了すると、スレッド１は非アクティブの状態であるので処理結果はコンテキストメモリへ書き込まれる。
その後、スレッド３の実行中の時間ｔ４において、スレッド２にて拡張演算プロセッサ１２へ処理依頼が行われると、拡張演算プロセッサ１２は、スレッド１の処理から解放されている、つまりスレッド１に占有されていないので、拡張演算プロセッサ１２はスレッド２に対する処理を行う（ステップＳ２０５）。
【００６５】
スレッド３の終了後の時間ｔ５において、再度、スレッド１がアクティブになると、コンテキストメモリ１１２に拡張演算プロセッサ１２による処理結果が反映されているので、スレッド１はコンテキストメモリ１１２内の保持されたデータを用いることで、処理を続行する（ステップＳ２０６）。
このように、本実施の形態１におけるマルチプロセッサシステム１０は、スレッド１からの処理要求による拡張演算プロセッサ１２での処理が終了した際、データの反映先となるスレッド１がアクティブでない場合でも、前述の演算終了制御命令Ｔ１１０によりコンテキストメモリ１１２上のスレッド１に対応付けられた領域に処理結果（データ）を反映し、即座に処理を完了させることができる。そのため、不要な待ち時間を発生させることなく、演算リソースを有効に使用することができる。
【００６６】
本実施の形態のマルチプロセッサによると、拡張演算プロセッサ１２によるスレッドを終了させるとともに処理結果であるデータを他スレッド（依頼元のスレッド）に転送する際、当該他スレッドの状態に応じて、つまりデータ受け取り側のスレッドがアクティブであるか否かに応じて、データ転送先を適切に選択するので、スレッド間のデータの受け渡しを効率的に行うことができる。
【００６７】
２．実施の形態２
実施の形態２は、演算終了制御命令フィールドのデータ構造が実施の形態１のものとは異なる。
以下で命令フィールドの構成及び、動作フローチャートにおいて異なる点を説明する。なお、実施の形態１と同一の構成要素については、同一の符号を用いる。
【００６８】
２．１  演算終了制御命令Ｔ１２０について
図９は、本発明の実施の形態２における演算終了制御命令Ｔ１２０のフォーマットであり、オペコード９０１、第１のオペランド９０２、第２のオペランド９０３及び第３のオペランド９０４から構成されている。
オペコード９０１、第１のオペランド９０２、第２のオペランド９０３は、実施の形態１のオペコード３０１、第１のオペランド３０２、第２のオペランド３０３と同様であるので、ここでの説明は省略する。
【００６９】
第３のオペランド９０４は、第２オペランド９０３で指定されるレジスタを持つスレッドＩＤ、つまり処理要求を行ったスレッドのスレッドＩＤを指定するものである。
２．２  構成
実施の形態２におけるマルチプロセッサシステム１０００について説明する。
マルチプロセッサシステム１０００は、図１０にて示すように、マルチスレッドプロセッサ１１ａと拡張演算プロセッサ１２ａとから構成されている。
【００７０】
実施の形態２では、命令デコーダ及びプロセッサ制御部が実施の形態１のものとは異なる。以下、図１０にて示す実施の形態２における命令デコーダ１１４ａ及びプロセッサ制御部１６２ａについて説明する。実施の形態１と同様の符号が付された構成要素については、実施の形態１にて説明しているので、ここでの説明は省略する。なお、図１０にて示す第１論理プロセッサ１５１は、図示していないが実施の形態１と同様に、第１命令バッファ１０３及び第１レジスタファイル１０６を有している。また、第２論理プロセッサ１５２及び第Ｎ論理プロセッサ１５３も同様に、実施の形態１にて示す命令バッファ及びレジスタファイルを有している。スレッド制御部１６０についても、図示していないが実施の形態１と同様に、退避部１６５及び復元部１６６を有している。
【００７１】
（１）命令デコーダ１１４ａ
命令デコーダ１１４ａは、デコードにより、演算終了制御命令Ｔ１２０を発行すると、第３のオペランドからスレッドＩＤを取得する。命令デコーダ１１４ａは、発行した演算終了制御命令Ｔ１２０を命令バッファ１１５に書き込むとともに、マルチスレッドプロセッサ１１のプロセッサ制御部１６２ａへ取得したスレッドＩＤを含む書込要求を通知する。
【００７２】
（２）プロセッサ制御部１６２ａ
プロセッサ制御部１６２ａは、実施の形態１と同様に、実行対象である一のスレッドの命令により、拡張演算プロセッサ１２へ処理依頼、及び処理依頼したスレッドのスレッドＩＤを拡張演算プロセッサ１２へ通知する。このとき、スレッドＩＤは、スレッド情報記憶部１１９に書き込まれる。
【００７３】
その後、プロセッサ制御部１６２ａは、拡張演算プロセッサ１２からスレッドＩＤを含む書込要求を拡張演算プロセッサ１２から受け取ると、受け取った書込要求に含まれるスレッドＩＤを含むエントリ内のスレッド状態フラグを参照して、当該スレッドＩＤに対応するスレッドが実行対象として論理プロセッサが割り付けられているか否かを、つまりアクティブ状態であるか、非アクティブ状態であるかを判断する。以降の動作については、実施の形態１と同様であるので、ここでの説明は省略する。
【００７４】
２．３  動作
以下、演算終了制御命令Ｔ１２０が実行された場合のマルチプロセッサシステム１０の動作について、図７の変更点のみ説明する。
変更点は、ステップＳ１０５の動作を以下のように変更する。
拡張演算プロセッサ１２にて演算終了制御命令Ｔ１２０が実行されると、演算終了制御命令Ｔ１２０に含まれるスレッドＩＤを取得するの取得は、第３のオペランド９０４から取得する。
【００７５】
以降の動作は、図７にて示すステップＳ１１０からＳ１４０までの動作と同様であるので、ここでの説明は省略する。
２．４  実施の形態２のまとめ
実施の形態２では、アクティブであるか否かの判断対象となるスレッドを示すスレッドＩＤの取得方法が、実施の形態１とは異なるものであり、得られる効果は同様である。
【００７６】
３．実施の形態３
ここでは、実施の形態１にて示すマルチプロセッサシステム１０を適用したシステムの具体例として、映像のデコード、エンコード処理に適用した場合について説明する。
図１１は、マルチプロセッサシステム１０をデコード処理を行うデコーダ１０Ａに適用した場合を示すものである。
【００７７】
図１２は、マルチプロセッサシステム１０をエンコード処理を行うエンコーダ１０Ｂに適用した場合を示すものである。
３．１  デコード処理に適用した場合
デコーダ１０Ａは、図１１に示すように、可変長復号部５００、逆量子化・直交逆変換部５０１、動き補償部５０２、加算部５０３、スイッチ５０４及び参照画像バッファ５０５から構成されている。
【００７８】
これら構成要素は、既知のものであるので、ここでの詳細な説明は省略し、これらの概略のみ説明する。
可変長復号部５００は、可変長符号化された信号を復号（デコード）するものである。
逆量子化・直交逆変換部５０１は、可変長復号部５００にて得られた量子化ＤＣＴ係数に対して逆量子化及び逆周波数変換を行うものである。
【００７９】
動き補償部５０２は、動きベクトルを用いた画像データの生成を行うものである。
加算部５０３は、動き補償部５０２で得られた画像データと、逆量子化・直交逆変換部５０１で得られた画像のデータとを加算して、出力すべき画像データを生成するものである。
スイッチ５０４は、可変長復号部５００にて得られた復号対象のピクチャの種別（Ｐ、Ｉ、Ｂピクチャ）に応じて、逆量子化・直交逆変換部５０１との接続、若しくは加算部５０３とのｓ接続を切り替えるものである。
【００８０】
参照画像バッファ５０５は、参照画像を保持するためのものである。
ここで、図１１にて示すように、実施の形態１にて示すマルチスレッドプロセッサ１１が可変長復号部５００とスイッチに係る処理を行い、拡張演算プロセッサ１２が逆量子化・直交逆変換部５０１、動き補償部５０２及び加算部５０３に係る処理を行うように適用することで、デコード処理を行うデコーダに、実施の形態１にて示すマルチプロセッサシステム１０を適用することができる。
【００８１】
３．２  エンコード処理に適用した場合
エンコーダ１０Ｂは、図１２に示すように、減算部６００、直交変換・量子化部６０１、可変長符号化部６０２、逆量子化・直交逆変換部６０３、加算部６０４、動き補償部６０５、動き検索部６０６及び参照画像バッファ６０７から構成されている。
これら構成要素は、既知のものであるので、ここでの詳細な説明は省略し、これらの概略のみ説明する。
【００８２】
減算部６００は、符号化対象の画像データに対する予測誤差を算出するものである。
直交変換・量子化部６０１は、予測誤差に対して周波数変換及び量子化を行うものである。
可変長符号化部６０２は、量子化ＤＣＴ係数及び動きベクトルを可変長符号化するものである。
【００８３】
逆量子化・直交逆変換部６０３は、動き補償予測に用いるために量子化ＤＣＴ係数に対して逆量子化及び逆周波数変換を行うものである。
加算部６０４は、動き補償部５０２で得られた画像データと、逆量子化・直交逆変換部５０１とから得られた画像のデータとの加算、及び加算結果の画像データに対してでブロッキングフィルタによりデブロッキングフィルタ処理を施して、参照画像として参照画像バッファ６０７で保持するための画像データを生成するものである。
【００８４】
動き補償部６０５は、動きベクトルを用いた画像データの生成を行うものである。
動き検索部６０６は、動き補償予測を行い動きベクトルを検出するものである。
参照画像バッファ６０７は、参照画像を保持するためのものである。
ここで、図１２にて示すように、実施の形態１にて示すマルチスレッドプロセッサ１１が可変長符号化部６０２に係る処理を行い、拡張演算プロセッサ１２が減算部６００、直交変換・量子化部６０１、逆量子化・直交逆変換部６０３、加算部６０４、動き補償部６０５及び動き検索部６０６に係る処理を行うように適用することで、エンコーダ１０Ｂに、実施の形態１にて示すマルチプロセッサシステム１０を適用することができる。
【００８５】
３．３  実施の形態３のまとめ
Ｈ．２６４等の規格を用いて圧縮された映像信号をデコードするには、上述したように、ビットストリームの解析、可変長符号化された信号のデコード処理、逆量子化、逆周波数変換、動き補償、デブロックフィルタ処理が必要となる。
これらの処理のうち、ビットストリームの解析、可変長符号化された信号のデコード処理といった逐次系処理は一般的なプロセッサ（マルチスレッドプロセッサ）において、現実的な動作周波数での処理が可能である。一方、画素系処理である逆量子化、逆周波数変換、動き補償、デブロックフィルタ処理に関しては、複数の画素に対して同時に演算を行うデータ並列型のプロセッサ（拡張演算プロセッサ）が適している。
【００８６】
データ並列型のプロセッサは、レジスタセットや演算器により幅広いデータ幅を必要とするので、独立した拡張演算プロセッサとすることで、逐次系処理を行うプロセッサのリソースを増加させずに効率的なプロセッサを実装することができる。
本実施例では、逐次系処理をマルチスレッドプロセッサ、画素系処理を前記拡張演算プロセッサとすることで、回路規模の増加を抑えつつ、拡張演算プロセッサの使用効率を向上させたリアルタイム映像処理システムを構築することができる。
【００８７】
４．変形例
上記に説明した各実施の形態は、本発明の実施の一例であり、本発明はこの実施の形態に何ら限定されるものではなく、その旨を逸脱しない範囲において種々なる態様で実施し得るものである。例えば、以下のような場合も本発明に含まれる。
（１）上記実施の形態において、拡張演算プロセッサ１２の各構成要素１１３〜１１７は、マルチスレッドプロセッサ１１の構成要素と共有しても良い。
【００８８】
（２）上記実施の形態において、拡張演算プロセッサ１２は、マルチスレッドプロセッサ１１とは独立して命令を保持しているとしたが、これに限定されない。
拡張演算プロセッサ１２は、供給元のスレッド、つまり論理プロセッサによる指示にて動作するようにしても良い。
（３）上記実施の形態において、書込要求を、命令デコーダ１１４がプロセッサ制御部１６２へ通知するものとしたが、これに限定されない。
【００８９】
演算器群１１７が、演算終了制御命令Ｔ１１０に基づく処理を行った後、マルチスレッドプロセッサ１１へデータを出力する際に、書込要求をプロセッサ制御部１６２へ通知するとしてもよい。
また、演算器群１１７が、演算終了制御命令Ｔ１２０に基づく処理を行った場合も同様に、マルチスレッドプロセッサ１１へデータを出力する際に、スレッドＩＤを含む書込要求をプロセッサ制御部１６２へ通知することで実現できる。
【００９０】
（４）上記実施の形態において、演算終了制御命令Ｔ１１０は、第１のオペランドＲＳと第２のオペランドＲｄとからなる組を１組含むとしたが、これに限定されない。演算終了制御命令Ｔ１１０内に、この組を複数個含むとしてもよい。
また、演算終了制御命令Ｔ１２０においても同様に、第１のオペランドＲＳと第２のオペランドＲｄとからなる組を複数個含むとしてもよい。
【００９１】
（５）上記実施の形態において、演算終了制御命令Ｔ１１０が実行された際に、演算器群１１７は、演算終了制御命令Ｔ１１０に含まれる第１オペランドにて示されるレジスタＲｓに格納された値（処理結果）と、当該値を第２オペランドにて示されるレジスタＲｄへ書き込む旨の指示とをマルチスレッドプロセッサ１１へ出力したが、これに限定されない。
【００９２】
演算器群１１７は、演算終了制御命令Ｔ１１０に含まれる第１オペランドにて示されるレジスタＲｓと、当該値を第２オペランドにて示されるレジスタＲｄへ書き込む旨の指示とをマルチスレッドプロセッサ１１へ出力してもよい。
このとき、プロセッサ制御部１６２は、受け取った指示に含まれるレジスタＲｓにて示されるアドレスに基づいて、レジスタファイル１１６から処理結果を読み出し、読み出した処理結果を、レジスタＲｄを用いて要求元のスレッドの状態に応じた書き込み先を特定する。
【００９３】
また、実施の形態２においては、上記の指示にさらに、第３のオペランドにて示される要求元のスレッドＩＤを含めることで、実現できる。
（６）上記実施の形態において、スレッドが初めて論理プロセッサに割り当てられたときに、スレッド制御部１６０が当該スレッドに対応するエントリを追加するとしたが、これに限定されない。
【００９４】
例えば、各スレッドに割り当てられる論理プロセッサを予め対応付けておいてもよい。この場合、スレッド情報テーブルＴ１００には、スレッド毎のエントリが予め登録されており、エントリに含まれるバリッドフラグ及びスレッド状態フラグそれぞれの初期値を「０」及び「００」とし、対応するスレッドの状態に応じて、スレッド制御部１６０がこれらフラグの値を更新する。
【００９５】
（８）上記実施の形態において、マルチスレッドプロセッサ１１は、１つのプロセッサであり、当該プロセッサ内において複数の論理プロセッサが構成しているとしたが、これに限定されない。
マルチスレッドプロセッサ１１内において複数のプロセッサエレメントが構成されているとしてもよい。
【００９６】
（９）上記実施の形態において、拡張演算プロセッサ１２は、処理要求元のスレッドに対する処理が完了した時点で、書き込みに係る要求をマルチスレッドプロセッサ１１へ通知したが、これに限定されない。
処理途中において、書き込みに係る要求をマルチスレッドプロセッサ１１へ通知してもよい。
【００９７】
（１０）上記実施の形態において、レジスタのサイズを４バイトとしたが、これに限定されない。
レジスタのサイズは他の値であってもよい。例えば、１６バイトである。この場合、上記にて示した数式は、"ベースアドレス＋（第２のオペランド×１６）"と変更される。
（１１）上記実施の形態において、各論理プロセッサは、並列に実行されるものとしたが、これに限定されない。
【００９８】
例えば、各論理プロセッサのうち一の論理プロセッサのみに演算器群１０９が割り当てられ、タイムスライスにより、この割り当てを変更するという擬似的な並列による処理であってもよい。
なお、このような擬似的な並列処理も、本発明における並列処理の概念に含めるものとする。
【００９９】
（１２）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０１００】
（１３）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１０１】
本発明に係るマルチプロセッサシステムは、柔軟で高性能な演算処理を実現する機能を有するので、ＤＶＤレコーダやデジタルＴＶ等の映像や音声のメディア処理を行うマルチプロセッサシステムに適用できる。
本発明に係るマルチプロセッサシステムを製造、販売する産業において、経営的、つまり反復的かつ継続的に利用されうる。
【符号の説明】
【０１０２】
１０    マルチプロセッサシステム
１１    マルチスレッドプロセッサ
１２    拡張演算プロセッサ
１０１    命令メモリ
１０２    命令デコーダ
１０３    第１命令バッファ
１０４    第２命令バッファ
１０５    第Ｎ命令バッファ
１０６    第１レジスタファイル
１０７    第２レジスタファイル
１０８    第Ｎレジスタファイル
１０９    演算器群
１１０    ライトバックバス
１１１    制御部
１１２    コンテキストメモリ
１１３    命令メモリ
１１４    命令デコーダ
１１５    命令バッファ
１１６    レジスタファイル
１１７    演算器群
１１８    ライトバックバス
１１９    スレッド情報記憶部
１６０    スレッド制御部
１６１    スレッド情報記憶部
１６２    プロセッサ制御部
１６５    退避部
１６６    復元部
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のスレッドのうち実行対象となる所定個のスレッドそれぞれに異なるレジスタファイルを割り付けて、割り付けられた各スレッドの処理を並列に行う第１プロセッサと、前記第１プロセッサの指示に応じた処理を行う第２プロセッサとからなるマルチプロセッサであって、
前記第２プロセッサは、前記第１プロセッサから処理依頼がなされると、前記第１プロセッサの指示に応じた処理を行い、当該処理結果の値の書き込み要求を前記第１プロセッサへ通知し、
前記第１プロセッサは、
前記複数のスレッド毎に割り当てられた領域を有する記憶手段と、
実行対象である各スレッドについて、当該スレッドが実行対象から非実行対象となる場合に当該スレッドに割り付けられたレジスタファイル内の値を前記記憶手段において割り当てられた領域に保存する第１の制御手段と、
実行対象の一のスレッドに含まれる命令に応じて前記第２プロセッサに処理依頼をし、前記第２プロセッサから当該スレッドに対する処理結果の値の書き込み要求を受け付けると、現時点で当該スレッドが実行対象であるか否かを判断し、実行対象でないと判断する場合には前記記憶手段において当該スレッドに割り当てられた領域の一部に前記処理結果の値を書き込むよう制御する第２の制御手段と、
スレッドが非実行対象から再度実行対象となる場合に、当該スレッドに割り当てられた領域内の値を再度割り付けられたレジスタファイルへ復元する第３の制御手段とを備える
ことを特徴とするマルチプロセッサ。
【請求項２】
前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、
前記第２プロセッサは、前記スレッド識別子を、前記第１プロセッサから受け取って記憶し、
前記第２の制御手段は、前記書き込み要求を受け付けると、前記第２プロセッサにて記憶されている前記スレッド識別子を取得し、取得したスレッド識別子に基づいて前記判断の対象となるスレッドを特定する
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項３】
前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、
前記第２プロセッサは、
前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドとを含む命令を実行すると、前記書き込み要求を前記第１プロセッサへ通知し、
前記第２の制御手段は、
前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御し、
前記判断により前記スレッド識別子にて示されるスレッドが実行対象であると判断する場合には、対応するレジスタ識別子が示すレジスタファイルにおいて前記第２のオペランドにて示されるレジスタへ、前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御する
ことを特徴とする請求項２に記載のマルチプロセッサ。
【請求項４】
前記第２の制御手段は、
前記複数のスレッドそれぞれに対して、当該スレッドが実行対象であるか非実行対象であるかを示すフラグと、当該スレッドが実行対象となる場合において割り付けられるレジスタファイルを識別するレジスタ識別子とを対応付けて記憶し、
前記判断により前記スレッド識別子にて示されるスレッドに対応するフラグを用いて前記判断を行う
ことを特徴とする請求項３に記載のマルチプロセッサ。
【請求項５】
前記第２の制御手段は、前記第２プロセッサへの処理依頼時において、前記一のスレッドを識別するスレッド識別子を前記第２プロセッサへ出力し、
前記第２プロセッサは、前記第１プロセッサから受け取って記憶し、前記書き込み要求を通知する際に、前記スレッド識別子を前記書き込み要求に含めて前記第１プロセッサへ通知し、
前記第２の制御手段は、前記書き込み要求を受け付けると、受け取った前記書き込み要求に含まれるスレッド識別子に基づいて前記判断の対象となるスレッドを特定する
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項６】
前記第２の制御手段は、前記記憶手段において各スレッドに割り当てられた領域それぞれの先頭アドレスを記憶しており、
前記第２プロセッサは、前記処理結果の値を転送する旨を指示するオペコードと、前記処理結果の値が格納されている第２プロセッサ内のレジスタファイル内のレジスタを指定する第１のオペランドと、転送先のレジスタファイル内のレジスタを指定する第２のオペランドと、処理を要求したスレッドを識別するスレッド識別子とを含む命令を実行すると、前記スレッド識別子を含む前記書き込み要求を前記第１プロセッサへ通知し、
前記第２の制御手段は、
前記判断により前記スレッド識別子にて示されるスレッドが非実行対象であると判断する場合には、前記スレッド識別子にて示されるスレッドに割り当てられた領域の先頭アドレスと前記第２プロセッサにて実行された命令に含まれる前記第２のオペランドにて示されるレジスタとから前記記憶手段における書き込み位置を特定し、特定した位置に前記第２プロセッサにて実行された命令に含まれる前記第１のオペランドにて示されるレジスタに格納されている前記処理結果の値を書き込むよう制御する
ことを特徴とする請求項５に記載のマルチプロセッサ。
【請求項７】
前記マルチプロセッサは、映像のデコード処理を実行する処理システムであって、
前記第１プロセッサにて処理される各スレッドは、前記デコード処理のうち可変長符号化された信号のデコードを行い、
前記第２プロセッサにて行われる前記指示に応じた処理は、前記デコード処理のうち逆量子化、逆周波数変換、動き補償及び画像データの加算に係る処理である
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項８】
前記マルチプロセッサは、映像のエンコード処理を実行する処理システムであって、
前記第１プロセッサにて処理される各スレッドは、前記エンコード処理のうち画像データに対する可変長符号化に係る処理を行い、
前記第２プロセッサにて行われる前記指示に応じた処理は、前記エンコード処理のうち符号化対象の画像データに対する予測誤差、量子化、周波数変換、動き補償、動き検索、逆量子化、逆周波数変換及び画像データの加算に係る処理である
ことを特徴とする請求項１に記載のマルチプロセッサ。
【請求項９】
複数のスレッドのうち実行対象となる所定個のスレッドそれぞれに異なるレジスタファイルを割り付けて、割り付けられた各スレッドの処理を並列に行う第１プロセッサと、前記第１プロセッサの指示に応じた処理を行う第２プロセッサとからなるマルチプロセッサで用いられる処理方法であって、
前記第２プロセッサは、前記第１プロセッサから処理依頼がなされると、前記第１プロセッサの指示に応じた処理を行い、当該処理結果の値の書き込み要求を前記第１プロセッサへ通知し、
前記第１プロセッサは、前記複数のスレッド毎に割り当てられた領域を有する記憶手段を備え、
前記処理方法は、
実行対象である各スレッドについて、当該スレッドが実行対象から非実行対象となる場合に当該スレッドに割り付けられたレジスタファイル内の値を前記記憶手段において割り当てられた領域に保存する第１の制御ステップと、
実行対象の一のスレッドに含まれる命令に応じて前記第２プロセッサに処理依頼をし、前記第２プロセッサから当該スレッドに対する処理結果の値の書き込み要求を受け付けると、現時点で当該スレッドが実行対象であるか否かを判断し、実行対象でないと判断する場合には前記記憶手段において当該スレッドに割り当てられた領域の一部に前記処理結果の値を書き込むよう制御する第２の制御ステップと、
スレッドが非実行対象から再度実行対象となる場合に、当該スレッドに割り当てられた領域内の値を再度割り付けられたレジスタファイルへ復元する第３の制御ステップとを含む
ことを特徴とする処理方法。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2009153977.tif 000016
【図２】
2009153977.tif 000017
【図３】
2009153977.tif 000018
【図４】
2009153977.tif 000019
【図５】
2009153977.tif 000020
【図６】
2009153977.tif 000021
【図７】
2009153977.tif 000022
【図８】
2009153977.tif 000023
【図９】
2009153977.tif 000024
【図１０】
2009153977.tif 000025
【図１１】
2009153977.tif 000026
【図１２】
2009153977.tif 000027
【図１３】
2009153977.tif 000028
【国際調査報告】
2009153977.tif 000029
2009153977.tif 000030
2009153977.tif 000031
2009153977.tif 000032