(57)【要約】  本発明に係るプロセッサは、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶し、順次、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる。
2007060932.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、
順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御手段と
を備えることを特徴とするプロセッサ。
【請求項２】
前記プロセッサは、更に、各スレッドの演算セルの演算結果を、それぞれ別の領域に記憶する演算結果記憶手段を備え、
前記制御手段は、同時に実行させている現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を前記演算結果記憶手段の現スレッドの領域に記憶させ、同時に実行させている次スレッドの領域に記憶されている演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させる
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記プロセッサは、更に、スレッドに割当てられた時間での最後の演算を終了した演算セルであって、当該スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を記憶する演算結果記憶手段を備え、
前記制御手段は、現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果に基づいて、次の繰り返しの最初に実行する演算セルを実行させ、スレッドを切り替える際には、次スレッドに対して前回割当てられた時間に前記演算結果記憶手段に記憶した演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させる
ことを特徴とする請求項１記載のプロセッサ。
【請求項４】
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路を備え、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサで用いられる実行方法であって、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成ステップと、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報をメモリに記憶する構成情報記憶ステップと、
順次、前記再構成ステップで、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶ステップでメモリに記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御ステップと
を備えることを特徴とする実行方法。
【請求項５】
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路を備え、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサに実行処理を行わせるコンピュータプログラムであって、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成ステップと、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報をメモリに記憶する構成情報記憶ステップと、
順次、前記再構成ステップで、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶ステップでメモリに記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御ステップと
を備えることを特徴とするコンピュータプログラム。
【請求項６】
複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、
順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、現スレッドで実行する最後の演算セルの演算終了後、次スレッドの構成の演算セルを実行させる制御手段と
を備えることを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、再構成可能な論理回路を有するマルチスレッドプロセッサに関し、特に、スレッドの切り替え技術に関する。
【背景技術】
【０００２】
近年のプロセッサ、例えば、デジタル信号を用いた映像、音響機器に搭載されるプロセッサは、複数の処理を並行して行う必要性から、マルチスレッド処理に対応している。
一方、プログラムにより論理構成を変更できるデバイス、例えば、ＦＰＧＡ（Field Programmable Gate Array）やＰＬＤ（Programmable Logic Device）が開発され、更に、その構成の変更を高速に行うことが出来る動的再構成論理回路が提案されている。【０００３】
このようなソフトウェア処理の柔軟性とハードウェア処理の高速性の両立を目指して開発された動的再構成論理回路を利用して、マルチスレッド処理を行う技術が開発されている（特許文献１参照）。
この技術を、図３３を用いて簡単に説明する。
マルチスレッドプロセッサ１０と動的再構成演算回路２０とは協調してマルチスレッド処理を実現する。【０００４】
スレッド切り替えを指示するマルチスレッドプロセッサ１０からの割り込みにより、動的再構成演算回路２０の構成、具体的には、アレイ状に配した演算セル２１の構成と演算セル間の接続構成とを、次に実行するスレッド用に再構成を行い、次のスレッドを実行する。
このスレッド切り替えの際、各演算セル２１は、現在実行しているスレッドの演算内容を各演算セル２１内の中間演算データ格納レジスタ２１１に退避した後、再構成を行う。【０００５】
この技術により、スレッド切り替え時に、各演算セルの演算内容を破棄したり、全ての演算セルの演算が終了するまでマルチスレッドプロセッサ１０が待つことをせずとも、全演算セルを次のスレッド用に再構成をすることができるので、マルチスレッドプロセッサ１０が次のスレッドの実行を開始するまでの時間を短くでき、全体として演算性能の低下を抑制できるという利点がある。
【特許文献１】特開２００５−１６５９６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、このような動的再構成演算回路は、各演算セル内に、実行するスレッド数分の格納レジスタが必要となることから、演算セルの個数やスレッド数が多くなればなるほど動的再構成演算回路の面積が大きくならざるを得ない。
また、動的再構成演算回路の面積を大きくしない為に、動的再構成演算回路内に格納レジスタを持たないで外部のメモリ等に退避することとすると、全演算セルのデータの退避を同時に行う必要があることから入出力ポートが大量に必要となり、動的再構成演算回路内のレジスタによる面積は増えないが、入出力ポート分の面積が増えることとなる。【０００７】
そこで、本発明は、スレッド切り替え時の再構成による性能劣化を抑制しつつ、回路面積の増加をも抑えることができる、動的再構成論理回路を備えるマルチスレッド対応のプロセッサの提供を目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決する為に、本発明に係るプロセッサは、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御手段とを備えることを特徴とする。
【発明の効果】
【０００９】
本発明に係るプロセッサは、上述の構成を備えることにより、スレッドを切り替える際に、現在実行しているスレッド（以下、「現スレッド」という。）の演算を終了した演算セルから順に、次に実行するスレッド（以下、「次スレッド」という。）の構成に再構成していき、現スレッドの実行と並行して再構成した演算セルを用いて次スレッドの演算を行うので、スレッド切り替え時の時間を必要最小限とすることができる。且つ、退避用のレジスタや入出力ポートを必要とせず、回路面積をも必要最小限とすることができる。【００１０】
すなわち、動的再構成演算回路を、一度に、現スレッド用の構成から次スレッド様の構成に再構成する場合には、現スレッド終了時から次スレッド開始時までの間に、少なくとも再構成の時間が必要となる。しかし、本発明では、その時間さえも不要であり、スレッド切り替えの際には、現スレッドの実行と次スレッドの実行とが同時に行われるので、切替時間が短くなるだけでなく、全体として実行時間が短くなるという優れた効果を奏することができる。【００１１】
また、前記プロセッサは、更に、各スレッドの演算セルの演算結果を、それぞれ別の領域に記憶する演算結果記憶手段を備え、前記制御手段は、同時に実行させている現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を前記演算結果記憶手段の現スレッドの領域に記憶させ、同時に実行させている次スレッドの領域に記憶されている演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させることとしてもよい。【００１２】
これにより、動的再構成演算回路の演算結果のみを記憶することになるので、各演算セルの中間演算データを格納する必要がなく、演算セル内部のレジスタは当該演算セルの実行に必要な量でよく、また、全ての演算セルの演算結果データを一度に演算結果記憶部に出力する必要はないので、最小限の入出力ポートでよい。従って、中間演算データを記憶するためのレジスタや、ポート分の面積を抑制することができ、プロセッサ全体の面積を小さくすることが可能となる。【００１３】
また、前記プロセッサは、更に、スレッドに割当てられた時間での最後の演算を終了した演算セルであって、当該スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を記憶する演算結果記憶手段を備え、前記制御手段は、現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果に基づいて、次の繰り返しの最初に実行する演算セルを実行させ、スレッドを切り替える際には、次スレッドに対して前回割当てられた時間に前記演算結果記憶手段に記憶した演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させることとしてもよい。【００１４】
これにより、動的再構成演算回路からの演算結果データを、直接マルチスレッドプロセッサが取得できるので、演算結果記憶部への書き込みと読み出しの時間が不要となり、スレッドの実行効率が良くなる。言い換えれば、与えられた時間内で行うことが出来るスレッドの処理が増えることになる。
また、本発明に係るプロセッサは、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、現スレッドで実行する最後の演算セルの演算終了後、次スレッドの構成の演算セルを実行させる制御手段とを備えることを特徴とする。【００１５】
この構成を備えることにより、本発明に係るプロセッサは、スレッド切り替えに際して、現スレッド終了時には、動的再構成演算回路の構成を次スレッド用の構成とすることができるので、現スレッド終了後すぐに次スレッドの実行を開始することが出来るようになる。
【図面の簡単な説明】
【００１６】
【図１】プロセッサ１００の構成例を表す図である。
【図２】動的再構成演算回路２０００の構成を示す概略図である。
【図３】１つの演算セルと、関連する動的再構成接続部とを示す図である。
【図４】演算セルと演算データ選択器、出力データ選択器に構成情報と制御信号とを供給する信号線を示す図である。
【図５】演算セルに演算データを供給する信号線を示す図である。
【図６】スレッドＡのデータの流れを示す図である。
【図７】スレッドＢのデータの流れを示す図である。
【図８】スレッドＣのデータの流れを示す図である。
【図９】図９（ａ）は、演算セル段数テーブルの構成及び内容例を示し、図９（ｂ）は、スレッド段数テーブルの構成及び内容例を示す。
【図１０】演算セル構成情報テーブル３１００の構成及び内容例を示し、このデータは、構成情報記憶部３０００が予め記憶しているデータである。
【図１１】従来のスレッドの切り替えを示す図である。
【図１２】スレッドに割当てられた時間の最後のサイクルに実行される演算セル２１００を示した図である。
【図１３】本発明のスレッドの切り替えを示す図である。
【図１４】図１４は、スレッド切り替え時のマルチスレッドプロセッサ１０００と構成切替部４０００との処理を示すフローチャートである。
【図１５】待ちサイクル数の算出処理を示すフローチャートである。
【図１６】演算セル、演算ソース選択器の再構成処理を示すフローチャートである。
【図１７】スレッドＡからスレッドＢへの切り替え時の動的再構成演算回路の遷移図である。
【図１８】スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。
【図１９】これら制御信号と出力データ選択器２２５０の処理との関係を表すタイムチャートである。
【図２０】これらの制御信号と演算結果記憶部５０００の処理との関係を表すタイムチャートである。
【図２１】演算結果記憶部５０００内の各スレッドの領域を表す図である。
【図２２】スレッドＣからスレッドＡへの切り替え時の動的再構成演算回路の遷移図である。
【図２３】スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。
【図２４】スレッドの切替スケジュールを表したタイムチャートである。
【図２５】演算結果記憶部５０００に関する命令例等である。
【図２６】図２６（ａ）は、マルチスレッドプロセッサ１０００からの動的再構成演算回路２０００への演算命令例であり、図２６（ｂ）は、演算結果記憶部５０００に対する演算結果読み出し命令例である。
【図２７】図２７（ａ）は、スレッドＡでのＲｃｎ＿ｅｘｅ命令と、Ｒｃｎ＿ｒｄ命令のみのプログラム例であり、図２７（ｂ）は、Ｒｃｎ＿ｅｘｅ命令、Ｒｃｎ＿ｒｄ命令の間に４サイクル分の演算用命令を挿入してあるプログラム例である。
【図２８】待ちサイクル期間が生じないスレッド切り替えのスケジュールを示したタイムチャートである。
【図２９】命令仕様書のＲｃｎ＿ｅｘｅ命令の記載例である。
【図３０】本発明の実施形態３における動的再構成論理回路装置２００の構成を示す機能ブロック図である。
【図３１】本発明の実施形態４における動的再構成論理回路装置３００の構成を示す機能ブロック図である。
【図３２】本発明のプロセッサが搭載された移動体通信装置を示す図である。
【図３３】動的再構成演算回路を備える、マルチスレッドプロセッサの従来例である。
【符号の説明】
【００１７】
１００  ２００  ３００    プロセッサ
１０  １０００    マルチスレッドプロセッサ
２０  ２０００    動的再構成演算回路
２１  ２１００    演算セル
２２００    動的再構成接続部
２２１０    演算ソース選択器
２２５０    出力データ選択器
３０００    構成情報記憶部
３１００    演算セル構成情報テーブル
４０００    構成切替部
４１００    演算セル段数テーブル
４２００    スレッド段数テーブル
５０００    演算結果記憶部
６０００    演算結果選択器
７０００    演算ソース記憶部
１００００  移動通信装置
【発明を実施するための最良の形態】
【００１８】
＜実施形態１＞
＜概要＞
本発明に係るプロセッサは、動的再構成演算回路を備えるマルチスレッド処理に対応したプロセッサであり、スレッドを実行する毎に、動的再構成演算回路を当該スレッド用の構成に再構成するものである。この動的再構成演算回路は、複数の演算セル等を備えており、この演算セル等の構成を再構成することで動的再構成演算回路を再構成する。【００１９】
本発明に係るプロセッサでは、そのスレッド切り替えの際に、全ての演算セルを同時に次スレッド用に再構成するのではなく、演算の終了した演算セルを順次再構成して実行していくものである。
従って、スレッド切り替え時には、切り替え前のスレッドである現スレッドの処理を行っている演算セルと、切り替え後のスレッドである次スレッドの処理を行っている演算セルとが混在し、現スレッドと次スレッドが同時に実行されることとなる。【００２０】
このように、現スレッドの処理が終了する前に次スレッドの処理を開始するので、演算セルが遊んでしまう時間を最小限度にすることができ、スレッド切り替えによる性能低下を抑制し、全体の実行時間を短縮することが可能となる。
以下、本発明の実施形態のプロセッサについて説明する。
本実施形態のプロセッサは、マルチスレッドプロセッサであり、マルチスレッドを実現するための方法として、各タスクを一定時間ずつ順番に実行していくラウンドロビン方式を取るものとする。【００２１】
尚、イベントドリブン方式として、データ転送コントローラＤＭＡＣ（Direct Memory Access Controller）のデータ転送完了信号や、他のプロセッサやハードワイヤードロジックの演算終了信号などを要因として、タスクを切り替えても良い。
スレッドは、動的再構成演算回路にデータを入力し、特定数の演算セルを決められた順に実行しその結果を出力する、という一連の処理（以下、「ループ」ともいうものとする。）を繰り返し行う。この一連の処理で必要な演算セルの個数を演算段数というものとする。【００２２】
出力した結果は、演算結果記憶部を介してマルチスレッドプロセッサによって読み込まれ、新たなデータが動的再構成演算回路に入力される。
本実施形態のスレッドは、それぞれ演算段数が異なるものとする。従って、動的再構成演算回路を構成する演算セルの個数に応じて、各スレッドで並列に実行できるループの最大数が異なる。尚、実際に実行するループ数は、スレッドの処理内容に依存する。【００２３】
＜構成＞
以下、図１を用いて、本発明にかかるプロセッサ１００の構成を説明する。
図１は、プロセッサ１００の構成例を表す図である。
プロセッサ１００は、マルチスレッドプロセッサ１０００、動的再構成演算回路２０００、構成情報記憶部３０００、構成切替部４０００及び演算結果記憶部５０００で構成される。【００２４】
ここで、実線矢印は演算結果等のデータの流れ、点線矢印は制御の信号等の流れ、二重線矢印は構成情報の流れをそれぞれ表すものとする（図２、図３等も同様）。
マルチスレッドプロセッサ１０００は、複数の異なる処理を時分割で実行することができる、いわゆるマルチスレッドプロセッサである。動的再構成演算回路２０００と協調して演算を行い、スレッドの処理を実行していく。【００２５】
具体的にマルチスレッドプロセッサ１０００は、あるスレッドの処理を行う場合は、そのスレッド用に動的再構成演算回路を構成し、演算段数分の演算セルの処理を繰り返し行わせる。
また、本マルチスレッドプロセッサ１０００は、次に実行するスレッドを決定し、実行する機能を有する。具体的には、スレッドに割当てた時間の終了を知らせるタイマ割り込みによって、スレッドの切替時を検出し、次スレッド用に動的再構成演算回路２０００の再構成を行うよう構成切替部４０００に指示を出す。この際、現スレッドと次スレッドを通知する。【００２６】
尚、スレッドの切替時の検出には、データ転送コントローラＤＭＡＣ（Direct Memory Access Controller）のデータ転送完了信号や、他のプロセッサやハードワイアードロジックの演算終了信号などを要因として、検出するものであっても良い。この場合も、以下、スレッドに割当てられた時間として説明する。
次に、動的再構成演算回路２０００は、アレイ状に配置された複数の演算セル２１００を含み、各演算セルの構成及び各演算セル間の接続構成を変更することが可能な演算回路である。すなわち、各演算セルの構成を所定の演算を行うように再構成し、接続構成を各演算セルが所定のデータを入力するように再構成することで、動的再構成演算回路２０００を所望の処理を行う回路に再構成する。詳細は、図２〜図５を用いて後で説明する。【００２７】
構成情報記憶部３０００は、動的再構成演算回路２０００を所望の回路に再構成する為の構成情報を記憶する機能を有する。また、構成切替部４０００からの指示を受けて、順次必要な構成情報を読み出し、動的再構成演算回路２０００に対して供給する機能を有する。
本実施形態における構成情報は、スレッド毎に記憶され、各演算セル毎に記憶されているものとする。詳細は、図１０を用いて後で説明する。【００２８】
構成切替部４０００は、マルチスレッドプロセッサ１０００からの指示を受けて、次スレッド用に、順次、動的再構成演算回路２０００の再構成を行う機能を有する。再構成は、本構成切替部４０００が、演算結果記憶部５０００、動的再構成演算回路２０００、構成情報記憶部３０００を制御することで行う。
演算結果記憶部５０００は、動的再構成演算回路２０００が出力する演算結果を記憶する機能を有する。【００２９】
この演算結果は、スレッド毎に記憶されており、このスレッド毎の演算結果は、各スレッドの１ループの結果であり、マルチスレッドプロセッサ１０００により読み出される。
本実施形態では、ループの都度、書き込まれ、マルチスレッドプロセッサ１０００によって読み出される。また、該当スレッドに時間が再び割当てられてスレッド処理を続行するときに、読み出されて利用される。【００３０】
この演算結果記憶部５０００は、構成切替手段４０００から、現スレッドと次スレッドを通知され、動的再構成演算回路２０００からの書き込み領域及び、マルチスレッドプロセッサ１０００からの読み出し領域を変更する。
次に、図２〜図５を用いて、動的再構成演算回路２０００の詳細について説明する。
＜動的再構成演算回路２０００の詳細＞
まず、図２は、動的再構成演算回路２０００の構成を示す概略図である。【００３１】
動的再構成演算回路２０００は、複数の演算セル（２１００ａ〜２１００ｐ）と、演算セルを接続する動的再構成接続部２２００とで構成される。
以下、演算セル２１００ａは「演算セルａ」、演算セル２１００ｂは「演算セルｂ」等というものとし、図４等でも同様とする。また、演算セル２１００という場合は、１つの演算セルを指すものとする。【００３２】
各演算セル２１００には、構成切替部４０００と構成情報記憶部３０００とからそれぞれ信号線が引かれ、構成切替部４０００からは制御信号（点線矢印）が送られ、構成情報記憶部３０００からは構成情報（二重線矢印）が送られる。
また、マルチスレッドプロセッサ１０００から動的再構成接続部２２００を介して、演算セル２１００等に必要な演算データが渡される。【００３３】
演算セル２１００は、乗算、シフト、加算、論理演算が可能であり、設定された構成情報での演算を行う。動的再構成演算セル２１００の１回の演算に要する期間は、プロセッサの１サイクルとする。また、再構成に要する期間も、同様に、プロセッサの１サイクルとする。
以下、動的再構成接続部２２００の構成を図３を用いて説明する。【００３４】
＜動的再構成演算接続部２２００について＞
図３は、１つの演算セルと、関連する動的再構成接続部２２００とを示す図である。
本図では、１対の演算セル２１００と演算ソース選択器２２１０、出力データ選択器２２５０を示している。
動的再構成接続部２２００は、演算セル２１００と対となる演算ソース選択器２２１０、すなわち、演算セル２１００と同数の演算ソース選択器２２１０と、１つの出力データ選択器２２５０と、マルチスレッドプロセッサ１０００からのデータの配線及び演算セル間の配線とで構成される。【００３５】
演算セル２１００、演算ソース選択器２２１０及び出力データ選択器２２５０には、それぞれ構成切替部４０００から制御信号が、構成情報記憶部３０００から構成情報が入力される。これにより、各演算セル２１００等は、別々のタイミングでの構成切り替えが可能となる。
演算ソース選択器２２１０は、他の演算セル２１００の演算結果である演算データを入力し、そのうちから１つの演算データを選択し、対となる演算セル２１００に出力する。尚、１段目の演算セルａ〜演算セルｄは、他の演算セル２１００からの演算データとマルチスレッドプロセッサ１０００からの演算データのうち１つの演算データを選択する。【００３６】
演算ソース選択器２２１０の構成の切り替えは、対である演算セル２１００と同時に行う。そのため、構成切替手段４０００からの切り替え信号線は、演算セル２１００に接続されたものが同じく接続されている。
また、演算セル２１００は、演算結果の演算データを他の演算セル２１００の演算ソース選択器２２１０に出力する。尚、最下段の演算セルｍ〜演算セルｐは、他の演算セル２１００と出力データ選択器２２５０に演算データを出力する。【００３７】
出力データ選択器２２５０は、演算セルから入力された演算データから必要な演算データを選択して演算結果記憶部５０００に出力する。
この出力データ選択器２２５０の構成の切り替えは、演算セル２１００と同じく、構成切替手段４０００から構成切り替えの信号線及び構成情報記憶部３０００からの構成情報転送用の信号線が接続されており、構成切り替えの信号を受けると、そのときの構成情報記憶部３０００からの構成情報に切り替える。【００３８】
＜構成情報、制御信号、演算データの流れについて＞
図４は、演算セルと演算データ選択器と出力データ選択器とに、構成情報と制御信号とを供給する信号線を示す図であり、図５は、演算データを供給する信号線を示す図である。
図４において、構成切替部４０００からは制御信号が、演算セルａ〜演算セルｐ、演算ソース選択器ａ〜演算ソース選択器ｐ及び出力データ選択器２２５０にそれぞれ出力され、構成情報記憶部３０００からは構成情報が出力される。【００３９】
対となる演算セル２１００と演算ソース選択器２２１０には、同じ制御信号と同じ構成情報が入力される。また、全ての演算セル２１００等には、同時に、構成情報記憶部３０００から同じ構成情報が送出される。
各演算セル２１００、各演算ソース選択器２２１０、出力データ選択器２２５０は、構成切替部４０００から送られる制御信号に応じて、構成情報を読み込み、再構成を行う。【００４０】
すなわち、構成切替部４０００は、構成情報記憶部３０００に構成を変更しようとする演算セルの構成情報を出力させ、同時に、構成を変更しようとする演算セルに対してのみ再構成を指示する命令を送出する。再構成の指示を受けた演算セルは、構成情報を読み取り再構成を行う。
演算ソース選択器２２１０、出力データ選択器２２５０も同様である。【００４１】
図５は、演算データの流れを示し、各演算セル２１００は、演算結果である演算データを、次の段の演算セルの演算ソース選択器２２１０と、隣の演算セルの演算ソース選択器２２１０とに出力する。例えば、演算セルｂは、演算データを演算ソース選択器ｆと演算ソース選択器ａと演算ソース選択器ｃとに出力する。
演算ソース選択器２２１０は、入力される複数の演算データの１つを選択して、対である演算セルに出力する。例えば、演算ソース選択器ｆは、演算セルｂと演算セルｅと演算セルｇとから送られる演算データのうちの１つを選択して、演算セルｆに出力する。演算セルｆは、演算ソース選択器ｆから出力された演算データを基に演算を行う。【００４２】
演算ソース選択器２２１０が、どの演算データを選択するかは、演算ソース選択器２２１０の構成に依存する。例えば、演算ソース選択器ｆが、演算セルｇからの演算データを選択する構成となっている場合は、常に、演算セルｇからの演算データを選択し、再構成が成されれば、その構成に応じて演算セルｂや演算セルｅからの演算データを選択することになる。【００４３】
また、出力データ選択器２２５０も、入力した演算データのうち、いずれを演算結果記憶部５０００に出力するかは、その構成に依存する。すなわち、演算結果記憶部５０００に出力する演算データは、１つとは限らず、スレッドの処理に応じた出力データ選択器２２５０の構成に依存する。
尚、本実施形態では、演算データを下段と左右の演算セルの演算ソース選択器に送ることとしているが、これに限られず、他の演算セルの演算ソース選択器に送信する構成としてももちろんよい。【００４４】
＜データ＞
以下、プロセッサ１００が、スレッドの切り替えを行う際に使用するデータについて、図９と図１０とを用いて説明する。
データを説明する前に、本実施形態での説明で使用するスレッドについて図６〜図８を用いて説明する。【００４５】
＜スレッドについて＞
本実施形態では、スレッドＡ、スレッドＢ、スレッドＣの３つのスレッドを巡回的に実行するものとする。
図６〜図８は、各スレッドのデータの流れを示す図である。説明の便宜上、演算ソース選択器２２１０及び出力データ選択器２２５０は記載せずに、演算データの流れのみ示すものとする。【００４６】
まず、図６は、スレッドＡのデータの流れを示す図である。スレッドＡの演算段数は「４」であり、動的再構成演算回路２０００の演算セルが１６個であることから、４つの演算処理を並行して行うものとする。
すなわち、マルチスレッドプロセッサ１０００から演算セルａに演算ソースが渡され、演算セルａの演算結果を演算セルｅに送り、演算セルｅは演算セルａから受け取った演算データを基に演算を行い演算結果を演算セルｉに送る。演算セルｉは、演算セルｅから受け取った演算データを基に演算を行う。というように順に演算結果を送り演算セルｍまで演算を実行する。同様に、マルチスレッドプロセッサ１０００から演算セルｂ、演算セルｃ、演算セルｄに演算データが渡され、それぞれ並行して処理を行う。【００４７】
演算セルｍ、演算セルｎ、演算セルｏ、演算セルｐの演算結果が演算結果記憶部５０００に記憶される。
この記憶された演算結果は、マルチスレッドプロセッサ１０００によって読み出され、マルチスレッドプロセッサ１０００内での演算等に使用される。尚、演算セルａ等に供給されてもよい。マルチスレッドプロセッサ１０００は、演算データを読み出し、演算するというループを繰り返すことでスレッドＡを実行する。演算セルに供給するデータは、読み出した演算データそのまま又は何らかの処理が成されたもの、他のデータ等であってもよく、スレッドの処理に依存する。このループは、スレッドＢ、スレッドＣにおいても同様である。【００４８】
図７は、スレッドＢのデータの流れを示す図である。スレッドＢの演算段数は「８」であり、２つの演算処理を並行して行う。
マルチスレッドプロセッサ１０００から、演算セルａに演算ソースが渡され、演算セルａ→演算セルｂ→演算セルｆ→演算セルｅ→演算セルｉ→演算セルｊ→演算セルｎ→演算セルｍの順に演算データを送って処理を行う。同様に、マルチスレッドプロセッサ１０００から演算セルｃに演算データが渡され、演算セルｏまで処理を行う。【００４９】
演算セルｍと演算セルｏの演算結果が演算結果記憶部５０００に記憶される。
図８は、スレッドＣのデータの流れを示す図である。スレッドＢの演算段数は「１６」であり、１つの演算処理を行う。
マルチスレッドプロセッサ１０００から、演算セルａに演算ソースが渡され、演算セルａ→演算セルｂ→演算セルｃ→演算セルｄ→演算セルｈ→演算セルｇ→演算セルｆ→演算セルｅ→演算セルｉ→演算セルｊ→演算セルｋ→演算セルｌ→演算セルｐ→演算セルｏ→演算セルｎ→演算セルｍの順に演算データを送って処理を行う。【００５０】
演算セルｏの演算結果が演算結果記憶部５０００に記憶される。
＜スレッド切り替えに使用するデータについて＞
以下、これらのスレッドＡ、スレッドＢ、スレッドＣを巡回的に実行する場合のスレッドの切り替えに際し使用するデータについて、図９と図１０とを用いて説明する。
図９（ａ）は、演算セル段数テーブルの構成及び内容例を示し、図９（ｂ）は、スレッド段数テーブルの構成及び内容例を示す。【００５１】
これらのデータは、構成切替部４０００が予め記憶しているデータである。
まず、図９（ａ）の演算セル段数テーブル４１００について説明する。
演算セル段数テーブル４１００は、スレッドＩＤ４１１０と演算セルＩＤ４１２０とで構成され、スレッドごとの各演算セルの段数目４１３０を示す。
スレッドＩＤ４１１０は、本プロセッサで実行するスレッドの識別子をいい、本実施形態では「スレッドＡ」、「スレッドＢ」及び「スレッドＣ」である。【００５２】
演算セルＩＤ４１２０は、本プロセッサの動的再構成演算回路２０００を構成する演算セル２１００それぞれの識別子をいい、本実施形態では「演算セルａ」〜「演算セルｐ」の１６個である。
スレッドごとの各演算セルの段数目４１３０とは、該当スレッドの１ループの処理において、該当演算セルが何番目に実行されるかを示すものである。ここでの番数は、「０」〜「１５」で表すものとし、「０」段数目の演算セルが最初に実行されるものとする。【００５３】
例えば、スレッドＩＤ４１１０「スレッドＡ」の演算セルＩＤ４１２０「演算セルｂ」の演算段数目４１３０は「０」であることから、スレッドＡでは最初に実行される演算セルである（図６参照）。また、スレッドＩＤ４１１０「スレッドＢ」の演算セルＩＤ４１２０「演算セルｂ」の演算段数目４１３０は「１」であり、スレッドＢでは２番目に実行される演算セルである（図７参照）。【００５４】
次に、図９（ｂ）のスレッド段数テーブル４２００は、スレッドＩＤ４２１０と演算段数４２２０とで構成される。
スレッドＩＤ４２１０は、図９（ａ）のスレッドＩＤ４１１０と同様である。
また、演算段数４２２０は、各スレッドの演算段数を示す。例えば、スレッドＩＤ４２１０「スレッドＡ」は、演算段数４２２０「４」であり４個の演算セルを順に用いて行い、スレッドＩＤ４２１０「スレッドＣ」は、演算段数４２２０「１６」であり１６個の演算セルを順に用いて行う。この順は、演算セル段数テーブル４１００に示されるとおりである（図９（ａ）参照）。【００５５】
次に、図１０は、演算セル構成情報テーブル３１００の構成及び内容例を示し、このデータは、構成情報記憶部３０００が予め記憶しているデータである。
演算セル構成情報テーブル３１００は、スレッドＩＤ３１１０と演算セルＩＤ３１２０とで構成され、スレッドごとの各演算セルの構成情報を特定する構成情報名３１３０を示している。すなわち、構成情報名３１３０は、構成情報の識別子である。【００５６】
演算セルＩＤ３１２０が「演算セルａ」〜「演算セルｐ」の構成情報名３１３０で特定れる構成情報は、演算セルと、対となる演算ソース選択器とを再構成するための情報である。
また、演算セル構成情報テーブル３１００には、更に、スレッド毎の出力データ選択器２２５０の構成情報を特定する構成情報名３１３０も記憶されている。【００５７】
構成情報記憶部３０００には、構成情報名３１３０で示される構成情報は全て記憶されているものとする。
例えば、スレッドＩＤ３１１０「スレッドＡ」の演算セルＩＤ３１２０「演算セルａ」の構成情報名３１３０は「構成情報Ａ０」であることから、スレッドＡ実行時の演算セルａと演算ソース選択器ａとは、「構成情報Ａ０」で示される構成情報で再構成されたものである。【００５８】
構成情報記憶部３０００は、構成切替部４０００からの指示を受け、この演算セル構成情報データ３１００を基に、該当する構成情報名３１３０で示される構成情報を動的再構成演算回路２０００に送出する。
＜動作＞
次に、図１１〜図２７を用いて、本発明に係るプロセッサの動作を説明する。【００５９】
まず、図１１〜図１３を用いて、従来と本発明とを比較して、スレッドの切り替えについて簡単に説明する。
その後、本発明の、スレッドの演算段数４２２０（図９（ｂ）参照）が異なるスレッドへの切り替えについて説明する。この切り替えについては、現在実行している現スレッドの演算段数より大きい演算段数のスレッドに切り替える場合と、現スレッドの演算段数より小さい演算段数のスレッドに切り替える場合とに分けて説明する。【００６０】
尚、動的再構成演算回路２１００の各演算セル２１００は、演算、再構成ともに、プロセッサの１サイクルで行う。
＜従来と本発明とのスレッド切り替えについて＞
図１１は、従来のスレッドの切り替えを示す図である。
プロセッサ１００がスレッドＡ、スレッドＢ、スレッドＣを巡回的に実行し、それぞれのスレッド実行時の動的再構成演算回路２０００を示している。【００６１】
動的再構成演算回路２０００Ａは、スレッドＡ実行時の動的再構成演算回路２１００であり、同様に、動的再構成演算回路２０００Ｂ、動的再構成演算回路２０００Ｃは、それぞれスレッドＢ、スレッドＣ実行時の動的再構成演算回路２１００である。
動的再構成演算回路２０００の各演算セル２１００が、どのスレッド用の構成であるかを示している。例えば、動的再構成演算回路２０００Ａの「演算セルａ」の下に記載している「スレッドＡ」は、スレッドＡ用の構成であることを示している。【００６２】
従来は、スレッドＡの実行が終了すると、動的再構成演算回路２０００Ａから動的再構成演算回路２０００Ｂに再構成し、スレッドＢの実行を開始していた。従って、動的再構成演算回路２０００Ａから動的再構成演算回路２０００Ｂに再構成している間、スレッドを実行は行うことが出来ない。
次に、図１２は、スレッドに割当てられた時間の最後のサイクルに実行される演算セル２１００を示した図である。すなわち、図１１における各スレッドの再構成直前の動的再構成演算回路２０００の図である。【００６３】
動的再構成演算回路２０００Ａのハッチングが掛けられている演算セル２１００が、スレッドＡに割当てられた時間の最後のサイクルに実行される演算セル２１００であり、同様に、動的再構成演算回路２０００Ｂ、動的再構成演算回路２０００Ｃは、それぞれにスレッドＢ、スレッドＣのものを示す。
すなわち、ハッチングが掛けられていない演算セル２１００、スレッドＡでは１２個、スレッドＢでは１４個、スレッドＣでは１５個の演算セルは、遊んでいることになる。【００６４】
本図では、スレッドに割当てられた時間の最後のサイクルについて説明しているが、スレッドに割当てられた時間の最後のループでの演算を終了した演算セルは、当該スレッドが終了するまで遊んでいることになる。例えば、動的再構成演算回路２０００Ａの演算セルａは、最後の演算を行い演算結果を演算セルｅに渡すと、以後、演算セルｍの演算が終了するまで何も行わない。【００６５】
本発明は、スレッド切り替え時に遊んでしまっている演算セルを、次スレッド用に再構成して次スレッドの処理を行わせようとするものである。
図１３は、本発明のスレッドの切り替えを示す図である。
スレッドＡの実行が終了した演算セルから順にスレッドＢ用に再構成を行いスレッドＢの演算を行う。【００６６】
従って、動的再構成演算回路２０００Ａから動的再構成演算回路２０００Ｂのように、全ての演算セル２１００がスレッドＢ用になる間に、動的再構成演算回路２０００ＡＢに示すように、スレッドＡ用の演算セルとスレッドＢ用の演算セルとが混在する期間が存在する。すなわち、スレッドＡとスレッドＢとが並行して実行されていることになる。
同様に、スレッドＢからスレッドＣに切り替わる際にも、動的再構成演算回路２０００ＢＣに示すように、スレッドＢ用の演算セルとスレッドＢＣの演算セルとが混在する期間が存在することになる。【００６７】
このように並行に処理することで、スレッドの切り替えの際に必要な演算セル２１００の再構成の時間をなくすことができ、スレッドの実行の一部を並行に行うことで、より無駄をなくすことが可能となる。
具体的には、図１１における再構成に必要なスレッド間の時間は不要となり、さらには、現スレッド処理の終わりと次スレッド処理の開始とが重なるため、より全体としてのスレッド実行時間を短くすることが可能となる。【００６８】
＜現スレッドの演算段数より大きい演算段数のスレッドに切り替える場合＞
図１４〜図１６のフローチャートを用いて、本プロセッサの動作を説明する。この説明の際、図１７〜図２１を参照する。
ここでは、現スレッドをスレッドＡ、次スレッドをスレッドＢとする。すなわち、演算段数「４」のスレッドＡから、演算段数「８」のスレッドＢに切り替える処理を例に取り説明する。【００６９】
図１７は、スレッドＡからスレッドＢへの切り替え時の動的再構成演算回路の遷移図である。本図では、スレッド切り替えの際の、サイクル１〜サイクル１１までの動的再構成演算回路の遷移を表す。動的再構成演算回路Ｃ１は、サイクル１の回路を表し、動的再構成演算回路Ｃ２は、サイクル２の回路を表すものとする。演算セル内の「Ａ」はスレッドＡ用の構成、「Ｂ」はスレッドＢ用の構成、「Ｃ」はスレッドＣ用の構成であることを表し、ハッチングは実行していることを表す。また、「再構成」は次スレッド用に再構成していることを表す。【００７０】
図１８は、スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。本図では、１６個の演算セル２１００のうち、説明の便宜上、演算セルａ、演算セルｂ、演算セルｆの処理のみを表している。
図１９は、これら制御信号と出力データ選択器２２５０の処理との関係を表すタイムチャートであり、また、図２０は、これらの制御信号と演算結果記憶部５０００の処理との関係を表すタイムチャートである。【００７１】
尚、図１８〜図２０のタイムチャートのサイクルは、図１７のサイクルと同じタイミングのサイクルである。すなわち、図１７と図１８のサイクルＣ１は、同じタイミングのサイクルである。
図２１は、演算結果記憶部５０００内の各スレッドの領域を表す図である。
本実施形態では、スレッドＡ用の領域を0x00〜0x3F番地、スレッドＢ用の領域を0x0040〜0x5F番地、スレッドＣ用の領域を0x60〜0x6F番地とする。【００７２】
以下、図１４のフローチャートに沿って、切り替え処理を説明する。
図１４は、スレッド切り替え時のマルチスレッドプロセッサ１０００と構成切替部４０００との処理を示すフローチャートである。
まず、マルチスレッドプロセッサ１０００は、動的再構成演算回路Ｃ１（図１７参照）を動作させながら現スレッドであるスレッドＡを実行する（ステップＳ１００）。【００７３】
具体的には、マルチスレッドプロセッサ１０００は、演算データを演算セルａ、演算セルｂ、演算セルｃ、演算セルｄに供給する。
演算データを入力した各演算セルは、順に下段の演算セルに演算結果を渡していき、最後に演算結果記憶部５０００に演算結果を記憶する。
マルチスレッドプロセッサ１０００は、次のループの開始時にこれらの記憶されている演算データを読み出し、所定の処理を施し、演算セルに供給することを繰り返すことでスレッドＡを実行する（図６参照）。【００７４】
マルチスレッドプロセッサ１０００は、この繰り返しであるループの最後のループである場合、すなわち、スレッドＡに与えた時間のうちの最後のループであるか否かを判断し（ステップＳ１１０）、最後のループであってプロセッサ１００の処理を終了しないと判断した場合（ステップＳ１１０：Ｙ、ステップＳ１２０：Ｎ）には、スレッドの切り替えを開始する。【００７５】
最後のループではないと判断した場合（ステップＳ１１０：Ｎ）には、現スレッドのループを繰り返す。また、プロセッサ１０の処理を終了すると判断した場合（ステップＳ１２０：Ｙ）には、終了処理を行う。
スレッドの切り替えを開始すると判断したマルチスレッドプロセッサ１０００は、次スレッドを選択し（ステップＳ１３０）、構成切替部４０００に切り替えの指示を出す（ステップＳ１４０）。この指示に際し、マルチスレッドプロセッサ１０００は、現スレッドのＩＤと次スレッドＩＤとを渡す（ステップＳ１４１）。【００７６】
その後、マルチスレッドプロセッサ１０００は、次スレッドの処理を開始する（ステップＳ１００）。但し、構成切替部４０００からの、処理の停止信号の発行（ステップＳ２２１）があった場合は、次スレッドの処理を開始しない。
切り替え指示を受けた構成切替部４０００は（ステップＳ２００）、待ちサイクル数を算出する（ステップＳ２１０）。スレッドＡからスレッドＢへの切り替えでは、待ちサイクル数は「０（ゼロ）」となる。待ちサイクル数の算出処理の詳細は、図１５を用いて後で説明する。【００７７】
待ちサイクル数を算出した構成切替部４０００は、算出したサイクル数待つ（ステップＳ２２０）。待ちの間は、マルチスレッドプロセッサ１０００に対して、停止信号を発行する（ステップＳ２２１）。
その後、演算結果記憶部５０００の読み込み領域を、次スレッド用に切り替え（ステップＳ２３０）、演算セル及び演算ソース選択器の再構成を行う（ステップＳ２４０）。【００７８】
この構成切替部４０００が行う演算セル及び演算ソース選択器の再構成は、一度に行われるのではなく、図１７の動的再構成演算回路Ｃ２〜動的再構成演算回路Ｃ９で示されるように、順を追って行われる。この演算セル及び演算ソース選択器の再構成処理は、図１６を用いて後で説明する。
構成切替部４０００は、全ての演算セル２１００及び演算ソース選択器２２１０の再構成が終了すると、出力データ選択器２２５０の再構成を行う（ステップＳ２５０、図１７：動的再構成演算回路Ｃ１０）。この出力データ選択器の再構成処理のタイミングについては、図１９を用いて後で説明する。【００７９】
出力データ選択器２２５０の再構成が行われると、全てスレッドＢ用の構成となる（図１７：動的再構成演算回路Ｃ１１）。
その後、演算結果記憶部５０００の書き込み領域を、次スレッド用に切り替える（ステップＳ２６０）。
一方、構成切替部４０００からの停止信号を受信したマルチスレッドプロセッサ１０００は、次スレッドの実行の開始を停止し、停止信号が切れた場合には、１サイクル待って、次スレッドの演算データの供給を開始する（ステップＳ１００）。この１サイクルは、最初の演算セルが再構成されるサイクルである。【００８０】
このスレッドの切り替え処理の際、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００から次スレッド用の演算データを読み込むが、同時に、現スレッドの演算結果が演算結果記憶部５０００に書き込まれている。この演算結果記憶部の領域変更処理（ステップＳ２３０、ステップＳ２６０）のタイミングは、図２０を用いて後で説明する。
＜待ちサイクル数の算出処理＞
図１５は、待ちサイクル数の算出処理を示すフローチャートである。【００８１】
待ちサイクル数とは、スレッドを切り替える場合に、次スレッドが滞りなく実行できるように、切り替え処理の開始を遅らせるサイクル数である。
現スレッドの演算段数と次スレッドの演算段数が異なる場合には、現スレッドの演算が終了した演算セルを、即、次スレッド用に書き換えたとしても、その演算結果を渡す演算セルが現スレッドの演算を行っていて、次スレッド用への書き換えが出来ない場合等があるからである。【００８２】
このような場合、次スレッドの実行制御が煩雑となるため、本実施形態では、スレッド切り替え処理の演算セル等の再構成の開始を遅らせることで、次スレッドの実行をスムーズに行うことを可能としている。
構成切替部４０００は、マルチスレッドプロセッサ１０００から切り替えの指示を受けた際に（図１４：ステップＳ２００参照）受け取った現スレッドＩＤと次スレッドＩＤとの演算段数から、待ちスレッド数を算出する。【００８３】
スレッドの演算段数は、スレッド段数テーブル４２００を参照して求める（図９（ｂ）参照）。
例えば、現スレッドのスレッドＩＤ４２１０が「スレッドＡ」の場合、演算段数４２２０は「４」である。
まず、現スレッドの演算段数を「Ｍ」、次スレッドの演算段数を「Ｎ」とすると、ＭからＮを減算し「Ｄ」を求める（ステップＳ３００）。【００８４】
「Ｄ」が０（ゼロ）より大きい場合は、待ちサイクル数をＤとし（ステップＳ３２０）、「Ｄ」が０（ゼロ）以下の場合は、待ちサイクル数を０（ゼロ）とする（ステップＳ３３０）。
すなわち、スレッドの演算段数が、同じ又は大きなスレッドへの切り替えの場合には、待ちサイクル数は０（ゼロ）となり、演算段数がより小さいスレッドへの切り替えの場合には、その差の段数分が待ちサイクル数となる。【００８５】
例えば、スレッドＡからスレッドＢに切り替わる場合は、演算段数「４」から「８」であるため、待ちスレッド数は０（ゼロ）となり、スレッドＣからスレッドＡに切り替わる場合は、演算段数「１６」から「４」であるため、待ちスレッド数は１２となる。
従って、スレッドＡからスレッドＢへの切り替えの場合には、サイクルの待ちは無く、演算セルの再構成が開始される。図１７に示すように、動的再構成演算回路Ｃ１の次のサイクルでは、動的再構成演算回路Ｃ２のように再構成が行われる。【００８６】
＜演算セル及び演算ソース選択器の再構成処理＞
図１６は、演算セル、演算ソース選択器の再構成処理を示すフローチャートである。
まず、構成切替部４０００は、再構成する演算セル２１００と演算ソース選択器２２１０とを選択する（ステップＳ４００）。ここでの演算ソース選択器は、演算セルと対となるものである。【００８７】
最初に選択される演算セル２１００は、次スレッドの演算段数目４１３０が「０（ゼロ）」の演算セルである。演算段数目は、演算セル段数テーブル４１００を参照する（図９（ａ）参照）。
例えば、次スレッドがスレッドＢの場合、最初に選択される演算セルは、演算セルａ、演算セルｃの２つである。【００８８】
次に、構成切替部４０００は、構成情報記憶部３０００に対し、選択した演算セルと演算ソース選択器の構成情報を送出を依頼する（ステップＳ４１０）。この際、スレッドＩＤと演算セルＩＤとを通知する（ステップＳ４１１）。
依頼を受けた構成情報記憶部３０００は（ステップＳ５００）、通知されたスレッドＩＤと演算セルＩＤから構成情報名３１３０を求め、その名で特定できる構成情報を選択し（ステップＳ５１０）、送出する（ステップＳ５２０、ステップＳ５２１）。【００８９】
例えば、選択された演算セルが演算セルａと演算ソース選択器ａの場合は、演算セルａと演算ソース選択器ａの構成情報が送出される（図１８：サイクルＣ２の構成情報記憶部からの信号）。
また、同時に、構成切替部４０００は、選択した演算セルと演算ソース選択器に対して、再構成を指示する（ステップＳ４２０、ステップＳ４２１）。【００９０】
再構成の指示を受けた演算セルと演算ソース選択器は（ステップＳ６００）、構成情報を受信し（ステップＳ６１０）、再構成を行う（ステップＳ６２０）。
例えば、選択された演算セル等が演算セルａと演算ソース選択器ａの場合は、構成情報の信号線から構成情報を取得し、再構成する（図１８：サイクルＣ２の演算セルａと演算ソース選択器ａの処理、図１７：動的再構成演算回路Ｃ２）。【００９１】
再構成を行った演算セルと演算ソース選択器は、演算を行う（ステップＳ６３０）。
例えば、再構成された演算セルａと演算ソース選択器ａは、スレッドＢの演算を行う（図１８：サイクルＣ３の演算セルａと演算ソース選択器ａの処理）。このとき、マルチスレッドプロセッサ１０００は、スレッドＢ用の演算データを演算ソース選択器に提供する。【００９２】
構成情報記憶部３０００と、選択した演算セル及び演算ソース選択器とに対して指示を出した構成切替部４０００は、全ての演算段数の演算セルの再構成を行っていない場合は（ステップＳ４３０：Ｎ）、次の段数の再構成を行う（ステップＳ４００）。全ての演算セル段数の再構成を行った場合（ステップＳ４３０：Ｙ）は、終了する。
例えば、次スレッドがスレッドＢの場合には、２段目の演算セル、すなわち、演算セル段数テーブル４１００で演算セル段数４１３０が「１」の演算セル、演算セルｂと演算セルｄが選択され、再構成される（図１８：サイクルＣ３参照、図１７：動的再構成演算回路Ｃ３）。【００９３】
次スレッドがスレッドＢの場合は、演算段数４２２０が「８」であるため、演算セル段数４１３０が「０」〜「７」までを繰り返すことになる（図１７：動的再構成演算回路Ｃ２〜Ｃ９）。
＜出力データ選択器の再構成処理＞
図１９は、制御信号と出力データ選択器２２５０の処理との関係を表すタイムチャートである。【００９４】
出力データ選択器２２５０は、演算セルが全て次スレッド用に切り替わったら、次スレッド用に再構成される（図１９：サイクルＣ１０、図１４：ステップＳ２４０）。
再構成の手順は、図１６に示す演算セルの再構成と同様である。以下、簡単に説明する。
次スレッド用に全演算セルが再構成されたと判断した構成切替部４０００は（図１６：ステップＳ４３０：Ｙ）、構成情報記憶部３０００に次スレッドの出力データ選択器２２５０の構成情報を送出するよう依頼する。同時に、出力データ選択器２２５０に、再構成を指示する。【００９５】
次スレッドの出力データ選択器２２５０の構成情報を送出するよう依頼を受けた構成情報記憶部３０００は、演算セル構成情報データ３１００を参照し、該当する構成情報を送出する。再構成指示を受けた出力データ選択器２２５０は、構成情報を入力し、再構成を行う。
例えば、次スレッドがスレッドＢの場合、スレッドＢの演算段数「８」の処理が終了したら、構成情報記憶部３０００は構成情報を送出し、出力データ選択器２２５０は、構成情報を入力し、再構成を行う（図１９：サイクルＣ１０、図１７：動的再構成演算回路Ｃ１０）。【００９６】
尚、図１９の出力データ選択器２２５０の「スレッドＡ用の構成」を示す図における点線で示す期間（サイクルＣ５〜サイクルＣ９）は、出力データ選択器２２５０が処理を行わない期間であることを示している。スレッドＡの実行が終了し、出力データ選択器２２５０に演算結果データが出力されないからである。
＜演算結果記憶部の領域変更処理＞
図２０は、制御信号と演算結果記憶部５０００の処理との関係を表すタイムチャートである。【００９７】
演算結果記憶部５０００は、図２１に示すようにスレッド毎に領域が確保されており、出力データ選択器２２５０からの出力を記憶し、マルチスレッドプロセッサ１０００によって読み出される。
通常は、同一スレッドの領域に対して読み書きが行われるが、スレッド切り替えの際には、記憶する演算データのスレッドと、読み出される演算データのスレッドが異なる場合が生じ、アクセスする領域が異なる。【００９８】
例えば、現スレッドがスレッドＡで、次スレッドがスレッドＢの場合には、スレッドＡ用の領域に演算データを書き込み、スレッドＢ用の領域から演算データを読み込む必要がある。
構成切替部４０００は、次スレッドの最初の段数の演算セルを再構成するタイミングで、読み出し領域を次スレッド用に切り替える指示を演算結果記憶部５０００に出す（図２０：サイクルＣ２）。最初の演算セルの再構成のサイクルの次のサイクルで、マルチスレッドプロセッサ１０００から読み出されるからである。【００９９】
また、次スレッド用に演算セルの全てを再構成したタイミングで、書き込み領域を次スレッド用に切り替える指示を演算結果記憶部５０００に出す（図２０：サイクルＣ１０）。最後の演算セルの再構成が行われる次のサイクルで、演算データが書き込まれるからである。
尚、図２０の演算結果記憶分５０００の「スレッドＡ用の書き込み」期間を示す図における点線で示す期間（サイクルＣ５〜サイクルＣ９）は、スレッドＡによる書き込みは行われない期間であることを示している。【０１００】
＜現スレッドの演算段数より小さい演算段数のスレッドに切り替える場合＞
演算段数がより小さいスレッドへの切り替える場合について、図２２及び図２３を用いて説明する。
ここでは、演算段数が「１６」のスレッドＣから、演算段数が「４」のスレッドＡに切り替わる場合を説明する。【０１０１】
図２２は、スレッドＣからスレッドＡへの切り替え時の動的再構成演算回路の遷移図である。本図では、スレッド切り替えの際の、サイクル１〜サイクル１９までの動的再構成演算回路の遷移を表す。動的再構成演算回路Ｃ１は、サイクル１の回路を表し、動的再構成演算回路Ｃ２は、サイクル２の回路を表すものとする。
図２３は、スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。本図では、１６個の演算セル２１００のうち、説明の便宜上、演算セルａ、演算セルｅ、演算セルｉの処理のみを表している。【０１０２】
切り替え処理の流れは、図１４〜図１６のフローチャートと同様である。ここでは、上述した演算段数がより大きいスレッドへの切り替えの場合との相違点について説明する。
相違点は、演算セル等の再構成の開始タイミングが異なる点である。
すなわち、上述した演算段数がより大きいスレッドへの切り替えの場合には、構成切替部４０００は、マルチスレッドプロセッサ１０００からの切り替え指示後、すぐに演算セルの再構成処理を開始した。待ちサイクル数が０（ゼロ）だったからである。【０１０３】
一方、演算段数がより小さいスレッドへの切り替えの場合には、必要なサイクル数待ってから演算セルの再構成処理を行う点が異なる。この場合、現スレッドの演算が終了した演算セルを、即、次スレッド用に書き換えて演算を実行したとしても、その演算結果を渡す演算セルが現スレッドの演算を行っていて、次スレッド用への書き換えが出来ない場合等があるからである。【０１０４】
現スレッドであるスレッドＣの演算段数（Ｍ＝１６）から、次スレッドであるスレッドＡの演算段数（Ｎ＝４）を減算したサイクル数（Ｄ）は、１６−４＝１２となり（図１４：ステップ２１０、図１５：ステップＳ３００）、０（ゼロ）より大きいことから（ステップＳ３１０：Ｙ）、待ちサイクル数は１２サイクルとなる（ステップＳ３２０）。
構成切替部４０００は、この１２サイクルを待って（図１４：ステップＳ２２０、図２３：サイクルＣ２〜サイクルＣ１３）、演算セル等の再構成を開始する（図１４：ステップＳ２４０、図２３：サイクルＣ１４）。図２２に示す動的再構成演算回路Ｃ１４〜動的再構成演算回路Ｃ１７で、再構成を行う。【０１０５】
待っている間、すなわち、動的再構成演算回路Ｃ２〜動的再構成演算回路Ｃ１３までのサイクルＣ２〜サイクルＣ１３間は、スレッドＣの処理のみ進んでいる。
その後、サイクルＣ１４でスレッドＡの最初の段の演算セルから再構成を行う。図２２に示す動的再構成演算回路Ｃ１４である。
一方、マルチスレッドプロセッサ１０００は、このサイクルＣ２〜サイクルＣ１４の間は、次スレッドであるスレッドＡの実行開始を待っている状態である（図２３：サイクルＣ２〜サイクルＣ１４）。【０１０６】
ここで、スレッドの切り替え処理のスケジュールをまとめると、図２４のようになる。図２４は、スレッドの切替スケジュールを表したタイムチャートである。
ここでは、スレッドＡ→スレッドＢ→スレッドＣ→スレッドＡとスレッドを切り替える場合を示している。
マルチスレッドプロセッサ１０００の期間９０００は、マルチスレッドプロセッサ１０００のスレッドＡの処理期間を、期間９００１はスレッドＢの処理期間を、期間９００２はスレッドＣの処理期間を表す。期間９００８は、動的再構成演算回路２０００内の演算処理終了待ちのバブル期間、すなわち、マルチスレッドプロセッサ１０００による現スレッドへの演算データの供給が終了し、次スレッドの演算データの供給が始まるまでの期間である（図２２：動的再構成演算回路Ｃ２〜Ｃ１４）。【０１０７】
期間９１００ａは演算セルａのスレッドＡの処理期間を、期間９１０１ａはスレッドＢの処理期間を、期間９１０２ａはスレッドＣの処理期間を表す。期間９１０８ａは、動的再構成演算回路２０００内の演算処理終了待ちのバブル期間である（図２２：動的再構成演算回路Ｃ２〜Ｃ１４）。
期間９１００ｍは演算セルｍのスレッドＡの処理期間を、期間９１０１ｍはスレッドＢの処理期間を、期間９１０２ｍはスレッドＣの処理期間を表す。期間９１０９ｍは、前段の演算セル２１００の構成切り替え待ちのバブル期間である。スレッドＡからスレッドＢへの切り替え時の期間９１０９ｍは、図１７に示す動的再構成演算回路Ｃ５〜Ｃ９の期間である。【０１０８】
期間９２００は出力データ選択器２２５０のスレッドＡの処理期間を、期間９２０１はスレッドＢの処理期間を、期間９２０２はスレッドＣの処理期間を表す。期間９２０９は、演算セル２１００の構成切り替え待ちのバブル期間である。スレッドＡからスレッドＢへの切り替え時の期間９２０９は、図１７に示す動的再構成演算回路Ｃ５〜Ｃ１０の期間である（図１９：サイクルＣ５〜サイクルＣ１０参照）。【０１０９】
＜プログラム例＞
以下、本実施形態のプロセッサで実行する各種命令例、プログラム例を説明する。
まず、図２５は、演算結果記憶部５０００に関する命令例等である。
図２５（ａ）は、演算結果記憶部５０００内のスレッド占有領域の設定命令例であり、図２５（ｂ）は、各スレッド領域の設定プログラム例であり、図２５（ｃ）は、スレッド実行時の設定値である。【０１１０】
図２５（ａ）の「DMset」命令では、「St_Adr」番地から「Ed_Adr」番地までを、スレッド番号「The_num」のスレッドが使用することを指定する。
図２５（ｂ）のプログラムは、スレッドＡは、「0x00」番地から「0x3F」番地までを使用し、スレッドＢでは、「0x40」番地から「0x5F」番地を、スレッドＣでは、「0x60」番地から「0x6F」番地までを使用する旨を指定している（図２１参照）。【０１１１】
図２５（ｃ）は、プロセッサ１００がスレッドＡ等の処理を開始するときに、演算結果記憶部５０００に記憶されている内容例である。
図２５（ｃ）に示すように、演算結果記憶部５０００内に、各スレッドでＦＩＦＯの読み出しアドレス（ＤＭＲＡ）と、書き込みアドレス（ＤＭＷＡ）とが記憶される。マルチスレッドプロセッサ１０００からの読み出し番地は、実行中のスレッドのＤＭＲＡとなり、動的再構成演算回路２０００からの書き込み番地は、実行中のスレッドのＤＭＷＡとなる。ＤＭＲＡ、ＤＭＷＡの初期値は、図５（ｂ）のプログラムの実行時に、各スレッド用領域の開始番地として設定される。【０１１２】
例えば、スレッドＡのＤＭＲＡをＤＭＲＡ＿Ａ、ＤＭＷＡをＤＭＷＡ＿Ａ、スレッドＢのＤＭＲＡをＤＭＲＡ＿Ｂ、ＤＭＷＡをＤＭＷＡ＿Ｂ、スレッドＣのＤＭＲＡをＤＭＲＡ＿Ｃ、ＤＭＷＡをＤＭＷＡ＿Ｃとする。図２５（ｂ）のプログラムの実行により、それぞれスレッド領域の開始番地は、図２５（ｃ）のように設定がなされる。
この設定後、マルチスレッドプロセッサ１０００及び、動的再構成演算回路２０００にて、各スレッドの処理が行われる。動的再構成演算回路２０００より、演算結果が演算結果記憶部５０００に書き込まれれば、各スレッドのＤＭＷＡをインクリメントすればよい。【０１１３】
例えば、ＤＭＷＡの単位がワードであり、書き込まれるデータが１ワードである場合には、「ＤＭＷＡ＝ＤＭＷＡ＋０ｘ０１」のように、実行中のスレッドのＤＭＷＡのみがインクリメントされる。
なお、演算データがＷ個の場合、ＤＭＷＡには、Ｗが加算される。
また、マルチスレッドプロセッサ１０００から、演算結果記憶部５０００内の演算結果データが読み出されると、ＤＭＲＡをインクリメントすればよい。【０１１４】
「ＤＭＲＡ＝ＤＭＲＡ＋０ｘ０１」のように、実行中のスレッドのＤＭＲＡのみがインクリメントされる。
なお、演算データがＷ個の場合、ＤＭＲＡには、Ｗが加算される。
各ＤＭＷＡ、ＤＭＲＡが図２５（ｂ）のプログラムで設定された、各スレッド領域の終了番地Ｅｄ＿Ａｄｒを超えた場合には、Ｓｔ＿Ａｄｒが設定される。【０１１５】
この構成により、各スレッドの領域をＦＩＦＯとして管理できる。
次に、図２６（ａ）は、マルチスレッドプロセッサ１０００からの動的再構成演算回路２０００への演算命令例であり、図２６（ｂ）は、演算結果記憶部５０００に対する演算結果読み出し命令例である。
図２６（ａ）の「Rcn_exe」命令は、動的再構成演算回路２０００での演算命令であり、「srcA」と「srcB」は、マルチスレッドプロセッサ１０００内のレジスタ番号を指定する。【０１１６】
この命令で、スレッドの１ループが実行される。
図２６（ｂ）の「Rcn_rd」命令は、動的再構成演算回路２０００の演算結果を読み出す命令であり、「dstA」は、マルチスレッドプロセッサ１０００内のレジスタ番号であり、当該レジスタに演算結果データを格納する。
簡単に動作を説明すると、「Rcn_exe」命令により、実行中のスレッドでの構成にて、動的再構成演算回路２０００内の演算が実行される。この演算の演算データとして、「Rcn_exe」命令で指定したレジスタ番号のデータを使用する。動的再構成演算回路２０００の演算結果データは、演算結果記憶部５０００の該当スレッドのＤＭＷＡの指すアドレスに格納される。【０１１７】
「Rcn_rd」命令は、演算結果記憶部５０００に格納されている演算データを、マルチスレッドプロセッサ１０００に読み出す命令であり、該当スレッドのＤＭＲＡの指すアドレスの演算データが、「Rcn_rd」命令で指定したレジスタに転送される。
尚、演算結果記憶部５０００内に該当スレッドのデータが格納されていない場合、演算結果記憶部５０００は、マルチスレッドプロセッサ１０００に対して、演算停止信号を発行する。演算データが無いことの判定は、該当スレッドのＤＭＲＡとＤＭＷＡが同じ場合であることを検出すればよい。【０１１８】
演算結果記憶部５０００内に該当スレッドのデータが格納されていない場合は、マルチスレッドプロセッサ１０００が動的再構成演算回路２０００に演算データを供給せずに、演算結果を読み出した場合に生ずる。この場合、マルチスレッドプロセッサ１０００は、演算結果記憶部からの読み込み処理を停止し、動的再構成演算回路には別の演算データを供給するなど、スレッドの処理に応じた動作を行うものとする。【０１１９】
動的再構成演算回路２０００より、演算結果記憶部５０００に演算結果データが格納された後、演算停止信号が解除される。その後、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００に格納された演算結果データを読み出す。
以上の構成により、演算結果データは、スレッド毎にＦＩＦＯでの管理を実現でき、動的再構成演算回路２０００の構成の切り替えに左右されることなく演算結果記憶部５０００内の各スレッドの所定領域に格納される。【０１２０】
このようにすることにより、マルチスレッドプロセッサ１０００では、動的再構成演算回路２０００のスレッドの切り替えによる演算結果格納の順番を意識する必要がないため、所望のスレッドでの演算結果データの管理が容易となる。
具体的には、Ｒｃｎ＿ｅｘｅ命令の演算結果を取得する、Ｒｃｎ＿ｒｄ命令は、動的再構成演算回路２０００の演算段数分のサイクル＋１サイクル後に発行可能となる。動的再構成演算回路２０００内での演算のために、演算段数分のサイクルを要し、更に演算結果記憶部５０００への書き込みのために、１サイクル要する。【０１２１】
Ｒｃｎ＿ｅｘｅ命令と、Ｒｃｎ＿ｒｄ命令の発行を、具体的にプログラム図２７（ａ）と図２７（ｂ）とを用いて説明する。
図２７（ａ）は、スレッドＡでのＲｃｎ＿ｅｘｅ命令と、Ｒｃｎ＿ｒｄ命令のみのプログラムである。このプログラムの実行前には、演算結果記憶部５０００には、スレッドＡ用の演算結果データは格納されていないものとする。【０１２２】
例えば、スレッドＡは、引数を変えつつＲｃｎ＿ｅｘｅ命令とＲｃｎ＿ｒｄ命令とを繰り返し実行することで処理を行う。
図２７（ａ）のＲｃｎ＿ｅｘｅ命令が発行されると、マルチスレッドプロセッサ１０００内のレジスタＲ１、Ｒ２のデータが動的再構成演算回路２０００に伝達され、動的再構成演算回路２０００内での演算が開始される。【０１２３】
次のサイクルで、マルチスレッドプロセッサ１０００は、Ｒｃｎ＿ｒｄ命令を発行する。このサイクルでは、演算結果記憶手段５０００内に演算結果データは格納されていない（ＤＭＷＡ＿ＡとＤＭＲＡ＿Ａが同じ値である）。そのため、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００より、演算停止信号を受け、処理を停止する。
Ｒｃｎ＿ｅｘｅ命令発行から４サイクル後（Ｒｃｎ＿ｒｄ命令発行から３サイクル後）、動的再構成演算回路２０００内の演算が完了する。【０１２４】
次のサイクルで、演算結果記憶手段５０００に演算結果データが格納され、ＤＭＷＡ＿Ａの値が増え、ＤＭＷＡ＿ＡがＤＭＲＡ＿Ａと異なる値になり、演算結果記憶部５０００からマルチスレッドプロセッサ１０００への演算停止信号が解除される。この後、Ｒｃｎ＿ｒｄ命令の実行が再開され、演算結果記憶部５０００からの演算結果データの読み出し処理が行われる。【０１２５】
以上のプログラムにより、Ｒｃｎ＿ｅｘｅ命令、Ｒｃｎ＿ｒｄ命令での動的再構成演算回路２０００の演算指示及び、演算結果読み出しを実現できる。
図２７（ａ）のプログラムでは、マルチスレッドプロセッサ１０００の演算停止が４サイクル発生したが、演算停止を発生させないプログラムを図２７（ｂ）を元に説明する。
図２７（ｂ）のプログラムは、図２７（ａ）のＲｃｎ＿ｅｘｅ命令、Ｒｃｎ＿ｒｄ命令の間に４サイクル分の演算用命令を挿入してある。Ａｄｄ命令は、マルチスレッドプロセッサ１０００内のレジスタを演算ソースとし、加算を行い、演算結果データをマルチスレッドプロセッサ１０００内のレジスタに書き込む命令である。演算リソースは、マルチスレッドプロセッサ１０００内で閉じており、動的再構成演算回路２０００を使用しない。Ａｄｄ命令の演算には１サイクル必要である。【０１２６】
このＡｄｄ命令が４サイクル分あるため、Ｒｃｎ＿ｒｄ命令の発行は、Ｒｃｎ＿ｅｘｅ命令の発行から５サイクル経過しているため、動的再構成演算回路２０００での演算が終了し、ＤＭＷＡ＿ＡがＤＭＲＡ＿Ａと異なる値になっており、マルチスレッドプロセッサ１０００は演算の停止をしない。
以上説明した構成により、動的再構成演算回路２０００内の構成切り替え時の性能劣化を抑制できる。また、一度に読み出し書き込みを必要とする中間演算データを退避する必要が無く、順次読み出し書き込みが発生する演算結果データだけを格納すればよい。このため、記憶手段を少ない入出力ポートのメモリで実現でき、回路の面積を抑制できる。【０１２７】
また、この記憶領域に格納された演算結果データは、ＦＩＦＯでスレッド毎に管理される。このため、マルチスレッドプロセッサ１０００で実行するプログラムでは、特に構成切り替え時の演算順番を意識せずに済み、スレッド毎の管理で良いため、読み出しのプログラムを容易に作成できる。
＜実施形態２＞
実施形態１では、演算段数がより小さいスレッドに切り替える際には、マルチスレッドプロセッサ１０００の待ちサイクルが生じていた（図２４：期間９００８参照）。【０１２８】
実施形態１では、スレッドのスムーズな切替のために、この待ちサイクルを構成切替部４０００で意識して、マルチスレッドプロセッサ１０００を停止させていた。本実施形態では、この待ちサイクルを構成切替部４０００ではなく、プログラム側で意識するものである。
従って、本実施形態では、マルチスレッドプロセッサ１０００において、この待ちサイクル期間は生じないことになる。【０１２９】
図２８は、待ちサイクル期間が生じないスレッド切り替えのスケジュールを示したタイムチャートである。図２４のスケジュールと比べ、期間９００８が生じていない以外は、図２４と同様である。従って、待ちサイクルを算出し、マルチスレッドプロセッサに停止信号を発行すること以外は、実施形態１と同様である。
この待ちサイクル期間をなくしたことにより、本実施形態では、プログラム側で待ちサイクル期間を意識してスレッドを実行することになる。【０１３０】
＜概要＞
図２９は、命令仕様書のＲｃｎ＿ｅｘｅ命令の記載例である。
本図では、動的再構成演算回路２０００への演算指示命令と演算結果記憶部５０００へのデータ読み出し命令、及び、それぞれの解説例を示す。
実施形態１では、スレッド切り替え時に、マルチスレッドプロセッサ１０００に、スレッドＣからスレッドＡでの処理切り替えにおいて、期間９００８の演算停止期間が発生した（図２４参照）。これは、動的再構成演算回路２０００の演算段数が多い構成から、少ない構成に変更する場合、構成の切り替え期間、動的再構成演算回路２０００への新たな演算命令の発行を停止するためである。この制御は、構成切り替え手段４０００より、図１４のステップＳ２１０等の処理により行われていた。【０１３１】
実施の形態２では、図１４のステップＳ２１０等の、構成切り替え部４０００からマルチスレッドプロセッサ１０００への演算停止制御のみを省く（ステップＳ２１０とステップＳ２２０のＤサイクル待機する処理は残る）。その他の構成切り替え部４０００の制御フローは、実施の形態１と同じである。
マルチスレッドプロセッサ１０００への演算停止制御を省くことにより、期間９００８の演算停止期間が発生せず、命令を発行できる期間が増加する。期間９００８の演算停止期間が発生しない動作スケジューリングが図２８となる。【０１３２】
ただし、期間９００８の間、動的再構成演算回路２０００へのＲｅｃ＿ｅｘｅ命令は保証されない。プログラマーにより、期間９００８の間（Ｄサイクル）、Ｒｅｃ＿ｅｘｅ命令の発行しないように、保証されなければならない。
そのため、命令仕様書などに、Ｒｃｎ＿ｅｘｅ命令は、Ｄサイクル期間発行してはいけないと、記述されることが望ましい。
＜実施形態３＞
実施形態１では、動的再構成演算回路２０００から出力された演算データは、一旦、演算結果記憶部５０００に記憶され、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００から演算データを読み出していた。本実施形態では、最低限記憶しておかなければならない演算データ、すなわち、スレッドに割当てられた時間が終了する時の演算結果データ以外は、演算結果記憶部５０００に記憶せずに、直接マルチスレッドプロセッサ１０００に渡すものである。【０１３３】
＜概要＞
実施形態３が実施形態１と異なる点は、図１の演算結果記憶部５０００から、マルチスレッドプロセッサ１０００へ出力される処理および構成であり、演算結果選択器６０００が追加されている点である。
図３０は、本発明の実施形態３における動的再構成論理回路装置２００の構成を示す機能ブロック図である。本図において、図１と同じ構成要素については同じ符号を用い、説明を省略する。【０１３４】
この演算結果選択器６０００は、動的再構成演算回路２０００と演算結果記憶部５０００からの演算結果データを選択し、マルチスレッドプロセッサ１０００に伝達する。制御は、演算結果記憶部５０００より行われる。
実施形態１では、演算結果データは、演算結果記憶手段５０００からのみ、マルチスレッドプロセッサ１０００に伝達されていた。この構成では、必ず演算結果記憶手段５０００を経由するため、記憶手段５０００での書き込み、読み出しのサイクル分だけ、遅延が発生する。【０１３５】
すなわち、動的再構成演算回路２０００演算結果データを、演算直後に、マルチスレッドプロセッサ１０００の演算データとする場合には、この遅延により演算性能が劣化する。
実施の形態３では、この問題を解決する。
演算結果記憶手段５０００内に演算データが格納されている（ＤＭＷＡとＤＭＲＡが異なる値）場合は、演算結果選択器６０００は、演算結果記憶部５０００からのデータを選択し、実施形態１で説明した処理が行われる。【０１３６】
一方、演算結果記憶手段５０００内に演算データが格納されていない（ＤＭＷＡとＤＭＲＡが同じ値）場合は、演算結果記憶部５０００は、マルチスレッドプロセッサ１０００に対して、演算停止信号を発行する。
その後、動的再構成演算回路２０００が演算結果データを演算結果記憶部５０００に格納するサイクルにて、演算結果記憶部５０００は以下の制御を行う。【０１３７】
演算結果選択器６０００に対して、動的再構成演算回路２０００からのデータを選択するように制御する。また、マルチスレッドプロセッサ１０００に対する演算停止を解除する。
この処理により、動的再構成演算回路２０００の演算結果データは、演算結果記憶部５０００に格納されず、マルチスレッドプロセッサ１０００に直接渡される。該当スレッドのＤＭＷＡ、ＤＭＲＡのアドレスはインクリメントされない。【０１３８】
この構成および制御により、演算結果記憶部５０００での書き込み、読み出し処理分のレイテンシを抑制できる。これにより、動的再構成論理回路装置１００の演算性能を向上が可能となる。
＜実施形態４＞
図３１は、本発明の実施形態４における動的再構成論理回路装置３００の構成を示す機能ブロック図である。図３１において、図１と同じ構成要素については同じ符号を用い、説明を省略する。【０１３９】
実施形態１と異なるのは、図１のマルチスレッドプロセッサ１０００が存在せず、演算ソース記憶部７０００が追加されていることである。
すなわち、本実施形態は、処理は全て動的再構成演算回路２０００で行うことが出来るスレッドを実行する場合である。
＜概要＞
実施形態４では、マルチスレッドプロセッサ１０００が行っていた、動的再構成演算回路２０００への演算データ供給を演算ソース記憶部７０００が行い、動的再構成演算回路２０００への演算指示を構成切り替え手段４０００が行い、演算結果記憶部５０００からの演算結果データ読み出しを図示しないデータ転送コントローラＤＭＡＣが行う。【０１４０】
演算ソース記憶部７０００は、動的再構成演算回路２０００の演算ソースデータが格納され、図示しないデータ転送コントローラＤＭＡＣより演算ソースデータが供給される。
演算ソース記憶部７０００は、構成切替部４０００より制御され、書き込み、読み出しのアドレスはスレッド毎に管理される。
この演算ソース記憶部７０００の読み出し・書き込みアドレスの管理は、実施形態１の演算結果記憶部５０００と同じとなる。但し、読み出し要求は構成切替手段４０００により行われ、書き込みデータはデータ転送コントローラＤＭＡＣから、読み出しデータは動的再構成演算回路２０００に転送される。【０１４１】
以上説明した構成により、プロセッサを構成要素としなくとも、動的再構成演算回路２０００内の構成切り替え時の性能劣化を抑制できる。
また、一度に読み出し書き込みを必要とする中間演算データを退避する必要が無く、順次読み出し書き込みが発生する演算結果データだけを格納すればよい。このため、記憶手段を少ない入出力ポートのメモリで実現でき、回路の面積を抑制できる。【０１４２】
また、演算ソース記憶部７０００、演算結果記憶部５０００内の記憶領域に格納された演算結果データは、ＦＩＦＯでスレッド毎に管理される。このため、プロセッサ３００で実行するプログラムでは、特に構成切り替え時の演算順番を意識せずに済み、スレッド毎の管理で良いため、データ転送コントローラＤＭＡＣでは、スレッド毎の演算結果データの読み出しを容易に行える。【０１４３】
＜応用例＞
本発明のプロセッサは、例えば、移動体通信装置等に搭載することが可能である。図３２は、本発明のプロセッサが搭載された移動体通信装置を示す図である。
移動通信装置１００００は、ディスプレイ１１０００、撮像手段１２０００、音出力手段１３０００、音入力手段１４０００、コマンド入力手段１５０００、アンテナ１６０００及び、内部に本発明であるプロセッサ１００（図１参照）を備える。【０１４４】
プロセッサ１００は、ディスプレイ１１０００と、ビデオフレームバッファを介して接続される。プロセッサ１００は、ＪＰＥＧなどの静止画デコード処理、ＭＰＥＧなどの動画デコード処理、ゲームなどの３次元グラフィックス処理、テキスト描画処理を行い、またそれぞれの映像の重ね合わせ処理を行う。ディスプレイ１１０００は、プロセッサ１００で処理された映像を表示する。【０１４５】
また、プロセッサ１００は、撮像手段１２０００と、ビデオフレームバッファを介して接続される。プロセッサ１００は、撮像手段１２０００より入力された映像に対して、ＪＰＥＧなどの静止画エンコード処理、ＭＰＥＧなどの動画エンコード処理を行う。
さらに、プロセッサ１００は、音出力手段１３０００と、オーディオフレームバッファを介して接続される。プロセッサ１００は、ＭＰＥＧなどの音声デコード処理を行う。音出力手段１３０００は、プロセッサ１００で処理された音声を出力する。【０１４６】
また、プロセッサ１００は、音入力手段１４０００と、オーディオフレームバッファを介して接続される。プロセッサ１００は、音入力手段１４０００より入力された音声に対して、ＭＰＥＧなどの音声エンコード処理を行う。
ＪＰＥＧ、ＭＰＥＧなどの、ビデオ処理規格、音声処理規格は、様々な種類があり、それぞれ処理の内容が異なる。この処理が異なり、マルチスレッドプロセッサ１０００では負荷の重い部分を、動的再構成演算回路２０００にて処理させることで、複数の規格の処理に柔軟に対応可能となる。【０１４７】
プロセッサ１００は、アンテナ１６０００と図示しない無線周波数回路ブロックと接続され、プロセッサ１００により通信処理が行われることにより、無線ネットワークを構成する。また、プロセッサ１００は、送受信データの暗復号処理も行う。
通信規格、暗号規格は、様々な種類があり、それぞれ処理の内容が異なる。この処理が異なり、マルチスレッドプロセッサ１０００では負荷の重い部分を、動的再構成演算回路２０００にて処理させることで、複数の規格の処理に柔軟に対応可能となる。【０１４８】
移動通信装置１００００は、コマンド入力手段１５０００より、移動通信装置１００００への操作を、針や指を用いて入力することが可能である。
通信システム、映像処理システム、セキュリティー処理システムの多くは、複数の規格に対応するため、本発明の効果を受ける。説明を行った、移動通信装置だけでなく、ＴＶ・ＤＶＤプレイヤー・カーナビなどの映像表示装置、ＤＶＤレコーダ・ビデオカメラ・ＤＳＣ・セキュリティーカメラ・などの映像記録装置、オーディオプレイヤーなどの装置、通信装置内の、通信システム、セキュリティー処理システムに有益である。【０１４９】
＜補足＞
以上、本発明に係るプロセッサについて実施形態に基づいて説明したが、このプロセッサを部分的に変形することもでき、本発明は上述の実施形態に限られないことは勿論である。即ち、
（１）実施形態では、動的再構成演算回路２０００の演算セルは４ｘ４の行列形式に配置していたが、例えば、１０ｘ４での矩形行列形式でも良い。また、ライン単位で配置されていてもよく、配置の構成を問わない。【０１５０】
また、演算セル２１００は、乗算、シフト、加算、論理演算を行えるとしたが、更に除算や減算、ローテート演算など演算の種類が増えても、また演算の種類が少なくても良い。
更にこの演算セル２１００は、全て同じ構成としていたが、特定の演算セルのみ除算ができるなど、構成が違う演算セル２１００があってもよい。【０１５１】
なお、演算セル２１００の構成の切り替わりは、同時に複数個構成が切り替わっても良い。
全ての演算セル２１００及び動的再構成接続器２２００は、構成の切り替え可能としたが、一部構成が切り替わらない演算セル２１００及び、動的再構成接続器２２００があってもよい。【０１５２】
演算セル２１００は１入力１出力であったが、３入力２出力など、入出力の個数は変わっても良い。その場合は、演算ソース選択器２２１０の入力個数および、選択する個数を増やし、出力データ選択器２２５０の入力個数も増やすことにより、対応する。
構成切替手段４０００から、演算セル２１００への構成切り替え信号線は、演算セル２１００毎に個別に引いていたが、必ず同時に切り替わる演算セル２１００同士は、同じ切り替え信号線を引いても良い。【０１５３】
なお、演算セル２１００は、同じクロックで動作させていたが、複数のクロックラインを配し、演算セル毎に演算動作クロックを変えても良い。
動的再構成演算回路２０００は、マルチスレッドプロセッサ１０００で実行中のスレッドと同期して構成を変更していたが、プロセッサの処理スレッドを変更せずに、動的再構成演算回路２０００のみを適宜構成変更してもよい。
（２）実施形態１、２では、マルチスレッドプロセッサ１０００で動作するスレッドＡ、Ｂ、Ｃは、全て動的再構成演算回路２０００で演算が行っていたが、動的再構成演算回路２０００を用いないスレッドがあってもよい。その場合は、次に動的再構成演算回路２０００を使用するスレッドの構成に切り替わっていても良い。【０１５４】
また、マルチスレッドプロセッサ１０００と動的再構成演算回路２０００は、同じクロックで動作していたが、複数のクロックラインを配し、演算動作クロックを変えても良い。
さらに、マルチスレッドプロセッサ１０００は、複数スレッドをサポートしないプロセッサであってもよく、複数のコアを集積したマルチコアの構成でもよく、また、内部構成が再構成可能演算回路であっても良い。
（３）実施形態１、２では、演算結果記憶手段５０００への、マルチスレッドプロセッサ１０００からの読み出し用の命令では、マルチスレッドプロセッサ１０００で処理中のスレッドでの動的再構成演算回路２０００の演算結果データのみ、読み出せていたが、これを他スレッドの演算結果も読み出せるようにしても良い。【０１５５】
その場合は、読み出し命令にスレッド番号を指定するオペランドを追加し、読み出し時に、マルチスレッドプロセッサ１０００から演算結果記憶部５０００にスレッド番号を与えるようにする。この時、演算結果記憶部５０００は、与えられたスレッド番号のＤＭＲＡに切り替える。これにより、他のスレッドの演算結果の読み出しを実現できる。
更に、マルチスレッドプロセッサ１０００は読み出し用命令をサポートしなくても良い。代わりに動的再構成演算回路２０００への演算指示命令のオペランドに、マルチスレッドプロセッサ１０００内のレジスタをデスティネーションとして指定できるようにし、動的再構成演算回路２０００での演算が終わると、そのレジスタに演算結果データが書き込まれるようにしてもよい。【０１５６】
また、演算用命令のソースデータ個数を２、読み出し用命令のデータ個数を１としたが、この個数を変更しても良い。動的再構成演算回路２０００への演算ソースデータ個数の増加に対応するためには、マルチスレッドプロセッサ１０００から動的再構成演算回路２０００へのデータ配線を増加し、マルチスレッドプロセッサ１０００からの出力ポート個数、動的再構成演算回路２０００への入力ポートを増加すればよい。【０１５７】
演算結果記憶部５０００からの読み出しデータ個数の増加は、演算結果記憶部５０００からマルチスレッドプロセッサ１０００への配線を増やし、マルチスレッドプロセッサ１０００の入力ポート個数、演算結果記憶部５０００の出力ポートを増加すればよい。
更に、演算結果記憶部５０００へのスレッド毎の領域アドレスを設定する命令にて、領域の終了アドレスも設定していたが、このオペランドが無くてもよい。全スレッドの領域開始アドレスが設定されれば、他のスレッド領域開始アドレスまでを、各スレッドの領域と判定すればよい。【０１５８】
なお、マルチスレッドプロセッサ１０００の処理切り替えを１サイクルとしたが、複数サイクル要しても良い。この場合は、構成切り替え手段４０００により動的再構成演算回路２０００及び、演算結果記憶手段５０００に対し、そのマルチスレッドプロセッサ１０００の切り替え処理のサイクル数だけ、処理停止制御をすればよい。
（４）実施形態１、２、３では、演算結果記憶部５０００にて、各スレッド用領域をＦＩＦＯで管理していたが、ＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）形式など、他の形式で管理しても良い。【０１５９】
また、演算結果記憶部５０００にて管理されるＤＭＷＡ、ＤＭＲＡの管理を、マルチスレッドプロセッサ１０００や構成切替部４０００にて行っても良い。
（５）実施の形態４では、演算ソース記憶部７０００にて、各スレッドＦＩＦＯで管理していたが、ＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）形式など、他の形式で管理しても良い。【０１６０】
また、演算ソース記憶部７０００にて管理される書き込み、読み出しアドレスの管理を、構成切替部４０００にて行っても良い。
（６）実施形態１、２．３では、構成情報記憶部３０００内に、各スレッドの構成情報を保存していたが、これはなくても良い。代わりに、各演算セル、演算ソース選択器、出力データ選択器内に、全スレッドの構成情報を予め保持する記憶手段を設け、構成切り替わり時に、スレッド番号と切り替わり指示を構成切替部４０００から受け、所望の構成に切り替わっても良い。【０１６１】
この場合、構成情報記憶部３０００からの配線を削除できるが、全スレッドの構成情報を予め保持する記憶部はレジスタでの構成となる。構成情報記憶部３０００は入出力ポートの少ないメモリで構成できるため、記憶手段分の面積が増加する。
（７）実施形態では、各演算セルの再構成のタイミングを、構成切替部４０００からの指示によって行うこととしているが（図１６：ステップＳ４００〜ステップＳ４２０参照）、それぞれの演算セルで再構成のタイミングを判断することとしても良い。【０１６２】
例えば、全演算セル２１００が、以下の判定を並列に行う。
構成切替部４０００から待ちサイクルが経過し、再構成の指示があったら、各演算セル２１００は、待機サイクルＥを判定し、そのサイクルだけ切り替え制御を待機する。Ｅは、次スレッドでの、該当演算セルより前にある、演算セル２１００の個数（演算段数）を表す。各演算セルＥの値は、演算セル段数テーブル４１００（図９（ａ）参照）を参照する。【０１６３】
例えば、各スレッドにおいて、演算セルａは、前の演算段数は、０であるから、再構成指示があれば、すぐに構成変更の処理が行われる。一方、演算セルｍは、スレッドＡでは３サイクル、スレッドＢでは７サイクル、スレッドＣでは１５サイクル待たされることになる。
この待機サイクルＥの算出が終わると、構成切替部４０００は、構成情報記憶部３０００に指示し、該当演算セル２１００の次スレッドでの構成情報及び、その演算セル２１００に対応する演算ソース選択器２２１０の次スレッドでの構成情報の読み出し処理を行う。この構成情報は、構成情報転送用のバスを通して、該当演算セル２１００及び該当演算ソース選択器２２１０に供給される。【０１６４】
次に、該当演算セル２１００及び該当演算ソース選択器２２１０に対して、構成切り替え信号を生成し、該当演算セル２１００及び該当演算ソース選択器２２１０は、この信号を受けて、構成情報転送用のバスに供給されている構成情報を読み込み、次スレッドの構成に切り替わる。
構成切替部４０００は、全演算セルが次スレッド用に再構成されるサイクルをスレッド段数テーブル４２００（図９（ｂ））を参照して求め、出力データ演算器２２５０の再構成を開始する。
（８）実施形態では、スレッド切り替え時に、現スレッドの演算セルと次スレッドの演算セルとを、同時に動作させることとしているが、現スレッドの処理が終了したら、すぐに次のサイクルで、次スレッドの実行を開始することとしても良い。現スレッド実行中に、演算の終了した演算セルから順に次スレッド用に再構成しているので、再構成の時間が不要だからである。
（９）実施形態で示したプロセッサの各機能を実現させる為の各制御処理（図１４等参照）をＣＰＵに実行させる為のプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ、フラッシュメモリ等がある。流通、頒布されたプログラムは、機器におけるＣＰＵで読み取り可能なメモリ等に格納されることにより利用に供され、そのＣＰＵがそのプログラムを実行することにより実施形態で示したプロセッサの各機能が実現される。
【産業上の利用可能性】
【０１６５】
本発明にかかるマルチスレッド対応プロセッサ１００は、動的再構成演算回路２０００内の構成切り替え時の性能劣化を抑制できる。
また、一度に読み出し書き込みを必要とする中間演算データを退避する必要が無く、順次読み出し書き込みが発生する演算結果データだけを格納すればよい。このため、記憶手段を少ない入出力ポートのメモリで実現でき、回路の面積を抑制できる。【０１６６】
更に、この記憶領域に格納された演算結果データは、ＦＩＦＯでスレッド毎に管理される。このため、マルチスレッドプロセッサ１０００で実行するプログラムでは、特に構成切り替え時の演算順番を意識せずに済み、スレッド毎の管理で良いため、読み出しのプログラムを容易に作成できる。
この構成により、時分割多重処理が必要となるメディア処理装置として有用である。また通信やセキュリティー等の用途にも応用できる。
【図１】
2007060932.tif 000003
【図２】
2007060932.tif 000004
【図３】
2007060932.tif 000005
【図４】
2007060932.tif 000006
【図５】
2007060932.tif 000007
【図６】
2007060932.tif 000008
【図７】
2007060932.tif 000009
【図８】
2007060932.tif 000010
【図９】
2007060932.tif 000011
【図１０】
2007060932.tif 000012
【図１１】
2007060932.tif 000013
【図１２】
2007060932.tif 000014
【図１３】
2007060932.tif 000015
【図１４】
2007060932.tif 000016
【図１５】
2007060932.tif 000017
【図１６】
2007060932.tif 000018
【図１７】
2007060932.tif 000019
【図１８】
2007060932.tif 000020
【図１９】
2007060932.tif 000021
【図２０】
2007060932.tif 000022
【図２１】
2007060932.tif 000023
【図２２】
2007060932.tif 000024
【図２３】
2007060932.tif 000025
【図２４】
2007060932.tif 000026
【図２５】
2007060932.tif 000027
【図２６】
2007060932.tif 000028
【図２７】
2007060932.tif 000029
【図２８】
2007060932.tif 000030
【図２９】
2007060932.tif 000031
【図３０】
2007060932.tif 000032
【図３１】
2007060932.tif 000033
【図３２】
2007060932.tif 000034
【図３３】
2007060932.tif 000035
【手続補正書】
【提出日】平成20年5月7日(2008.5.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、
順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御手段と
を備えることを特徴とするプロセッサ。
【請求項２】
前記プロセッサは、更に、各スレッドの演算セルの演算結果を、それぞれ別の領域に記憶する演算結果記憶手段を備え、
前記制御手段は、同時に実行させている現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を前記演算結果記憶手段の現スレッドの領域に記憶させ、同時に実行させている次スレッドの領域に記憶されている演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させる
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記プロセッサは、更に、スレッドに割当てられた時間での最後の演算を終了した演算セルであって、当該スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を記憶する演算結果記憶手段を備え、
前記制御手段は、現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果に基づいて、次の繰り返しの最初に実行する演算セルを実行させ、スレッドを切り替える際には、次スレッドに対して前回割当てられた時間に前記演算結果記憶手段に記憶した演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させる
ことを特徴とする請求項１記載のプロセッサ。
【請求項４】
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路を備え、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサで用いられる実行方法であって、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成ステップと、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報をメモリに記憶する構成情報記憶ステップと、
順次、前記再構成ステップで、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶ステップでメモリに記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御ステップと
を備えることを特徴とする実行方法。
【請求項５】
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路を備え、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサに実行処理を行わせるコンピュータプログラムであって、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成ステップと、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報をメモリに記憶する構成情報記憶ステップと、
順次、前記再構成ステップで、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶ステップでメモリに記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御ステップと
を備えることを特徴とするコンピュータプログラム。
【請求項６】
複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、
複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、
演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、
各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、
順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、現スレッドで実行する最後の演算セルの演算終了後、次スレッドの構成の演算セルを実行させる制御手段と
を備えることを特徴とするプロセッサ。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、再構成可能な論理回路を有するマルチスレッドプロセッサに関し、特に、スレッドの切り替え技術に関する。
【背景技術】
【０００２】
近年のプロセッサ、例えば、デジタル信号を用いた映像、音響機器に搭載されるプロセッサは、複数の処理を並行して行う必要性から、マルチスレッド処理に対応している。
一方、プログラムにより論理構成を変更できるデバイス、例えば、ＦＰＧＡ（Field Programmable Gate Array）やＰＬＤ（ProgrammableLogic Device）が開発され、更に、その構成の変更を高速に行うことが出来る動的再構成論理回路が提案されている。
このようなソフトウェア処理の柔軟性とハードウェア処理の高速性の両立を目指して開発された動的再構成論理回路を利用して、マルチスレッド処理を行う技術が開発されている（特許文献１参照）。
【０００３】
この技術を、図３３を用いて簡単に説明する。
マルチスレッドプロセッサ１０と動的再構成演算回路２０とは協調してマルチスレッド処理を実現する。
スレッド切り替えを指示するマルチスレッドプロセッサ１０からの割り込みにより、動的再構成演算回路２０の構成、具体的には、アレイ状に配した演算セル２１の構成と演算セル間の接続構成とを、次に実行するスレッド用に再構成を行い、次のスレッドを実行する。
【０００４】
このスレッド切り替えの際、各演算セル２１は、現在実行しているスレッドの演算内容を各演算セル２１内の中間演算データ格納レジスタ２１１に退避した後、再構成を行う。
この技術により、スレッド切り替え時に、各演算セルの演算内容を破棄したり、全ての演算セルの演算が終了するまでマルチスレッドプロセッサ１０が待つことをせずとも、全演算セルを次のスレッド用に再構成をすることができるので、マルチスレッドプロセッサ１０が次のスレッドの実行を開始するまでの時間を短くでき、全体として演算性能の低下を抑制できるという利点がある。
【特許文献１】特開２００５−１６５９６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、このような動的再構成演算回路は、各演算セル内に、実行するスレッド数分の格納レジスタが必要となることから、演算セルの個数やスレッド数が多くなればなるほど動的再構成演算回路の面積が大きくならざるを得ない。
また、動的再構成演算回路の面積を大きくしない為に、動的再構成演算回路内に格納レジスタを持たないで外部のメモリ等に退避することとすると、全演算セルのデータの退避を同時に行う必要があることから入出力ポートが大量に必要となり、動的再構成演算回路内のレジスタによる面積は増えないが、入出力ポート分の面積が増えることとなる。
【０００６】
そこで、本発明は、スレッド切り替え時の再構成による性能劣化を抑制しつつ、回路面積の増加をも抑えることができる、動的再構成論理回路を備えるマルチスレッド対応のプロセッサの提供を目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決する為に、本発明に係るプロセッサは、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、次スレッドに対応する構成の演算セルと現スレッドの構成に対応する演算セルとをそれぞれ同時に実行させる制御手段とを備えることを特徴とする。
【発明の効果】
【０００８】
本発明に係るプロセッサは、上述の構成を備えることにより、スレッドを切り替える際に、現在実行しているスレッド（以下、「現スレッド」という。）の演算を終了した演算セルから順に、次に実行するスレッド（以下、「次スレッド」という。）の構成に再構成していき、現スレッドの実行と並行して再構成した演算セルを用いて次スレッドの演算を行うので、スレッド切り替え時の時間を必要最小限とすることができる。且つ、退避用のレジスタや入出力ポートを必要とせず、回路面積をも必要最小限とすることができる。
【０００９】
すなわち、動的再構成演算回路を、一度に、現スレッド用の構成から次スレッド様の構成に再構成する場合には、現スレッド終了時から次スレッド開始時までの間に、少なくとも再構成の時間が必要となる。しかし、本発明では、その時間さえも不要であり、スレッド切り替えの際には、現スレッドの実行と次スレッドの実行とが同時に行われるので、切替時間が短くなるだけでなく、全体として実行時間が短くなるという優れた効果を奏することができる。
【００１０】
また、前記プロセッサは、更に、各スレッドの演算セルの演算結果を、それぞれ別の領域に記憶する演算結果記憶手段を備え、前記制御手段は、同時に実行させている現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を前記演算結果記憶手段の現スレッドの領域に記憶させ、同時に実行させている次スレッドの領域に記憶されている演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させることとしてもよい。
【００１１】
これにより、動的再構成演算回路の演算結果のみを記憶することになるので、各演算セルの中間演算データを格納する必要がなく、演算セル内部のレジスタは当該演算セルの実行に必要な量でよく、また、全ての演算セルの演算結果データを一度に演算結果記憶部に出力する必要はないので、最小限の入出力ポートでよい。従って、中間演算データを記憶するためのレジスタや、ポート分の面積を抑制することができ、プロセッサ全体の面積を小さくすることが可能となる。
【００１２】
また、前記プロセッサは、更に、スレッドに割当てられた時間での最後の演算を終了した演算セルであって、当該スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果を記憶する演算結果記憶手段を備え、前記制御手段は、現スレッドで順番に繰り返し実行する演算セルのうちの最後の演算セルの演算結果に基づいて、次の繰り返しの最初に実行する演算セルを実行させ、スレッドを切り替える際には、次スレッドに対して前回割当てられた時間に前記演算結果記憶手段に記憶した演算結果を、次スレッドの最初に実行する演算セルに参照させて演算を実行させることとしてもよい。
【００１３】
これにより、動的再構成演算回路からの演算結果データを、直接マルチスレッドプロセッサが取得できるので、演算結果記憶部への書き込みと読み出しの時間が不要となり、スレッドの実行効率が良くなる。言い換えれば、与えられた時間内で行うことが出来るスレッドの処理が増えることになる。
また、本発明に係るプロセッサは、複数のスレッドを巡回的に、各スレッドに割当てられた時間ずつ実行するプロセッサであって、複数の演算セルを含み、当該演算セルの構成と各演算セル間の接続とを再構成可能な演算回路と、演算セルの構成及び当該演算セルと他の演算セルとの接続を、セル構成情報に基づいて、再構成する再構成手段と、各々異なる特定数の演算セルを順番に繰り返し実行する複数のスレッド各々に対応する、各演算セルのセル構成情報を記憶する構成情報記憶手段と、順次、前記再構成手段に、現スレッドに割当てられた時間での最後の演算を終了した演算セルを、前記構成情報記憶手段に記憶している次スレッドに対応する当該演算セルのセル構成情報に基づき再構成させ、現スレッドで実行する最後の演算セルの演算終了後、次スレッドの構成の演算セルを実行させる制御手段とを備えることを特徴とする。
【００１４】
この構成を備えることにより、本発明に係るプロセッサは、スレッド切り替えに際して、現スレッド終了時には、動的再構成演算回路の構成を次スレッド用の構成とすることができるので、現スレッド終了後すぐに次スレッドの実行を開始することが出来るようになる。
【発明を実施するための最良の形態】
【００１５】
＜実施形態１＞
＜概要＞
本発明に係るプロセッサは、動的再構成演算回路を備えるマルチスレッド処理に対応したプロセッサであり、スレッドを実行する毎に、動的再構成演算回路を当該スレッド用の構成に再構成するものである。この動的再構成演算回路は、複数の演算セル等を備えており、この演算セル等の構成を再構成することで動的再構成演算回路を再構成する。
【００１６】
本発明に係るプロセッサでは、そのスレッド切り替えの際に、全ての演算セルを同時に次スレッド用に再構成するのではなく、演算の終了した演算セルを順次再構成して実行していくものである。
従って、スレッド切り替え時には、切り替え前のスレッドである現スレッドの処理を行っている演算セルと、切り替え後のスレッドである次スレッドの処理を行っている演算セルとが混在し、現スレッドと次スレッドが同時に実行されることとなる。
【００１７】
このように、現スレッドの処理が終了する前に次スレッドの処理を開始するので、演算セルが遊んでしまう時間を最小限度にすることができ、スレッド切り替えによる性能低下を抑制し、全体の実行時間を短縮することが可能となる。
以下、本発明の実施形態のプロセッサについて説明する。
本実施形態のプロセッサは、マルチスレッドプロセッサであり、マルチスレッドを実現するための方法として、各タスクを一定時間ずつ順番に実行していくラウンドロビン方式を取るものとする。
【００１８】
尚、イベントドリブン方式として、データ転送コントローラＤＭＡＣ（Direct Memory Access Controller）のデータ転送完了信号や、他のプロセッサやハードワイヤードロジックの演算終了信号などを要因として、タスクを切り替えても良い。
スレッドは、動的再構成演算回路にデータを入力し、特定数の演算セルを決められた順に実行しその結果を出力する、という一連の処理（以下、「ループ」ともいうものとする。）を繰り返し行う。この一連の処理で必要な演算セルの個数を演算段数というものとする。
【００１９】
出力した結果は、演算結果記憶部を介してマルチスレッドプロセッサによって読み込まれ、新たなデータが動的再構成演算回路に入力される。
本実施形態のスレッドは、それぞれ演算段数が異なるものとする。従って、動的再構成演算回路を構成する演算セルの個数に応じて、各スレッドで並列に実行できるループの最大数が異なる。尚、実際に実行するループ数は、スレッドの処理内容に依存する。
【００２０】
＜構成＞
以下、図１を用いて、本発明にかかるプロセッサ１００の構成を説明する。
図１は、プロセッサ１００の構成例を表す図である。
プロセッサ１００は、マルチスレッドプロセッサ１０００、動的再構成演算回路２０００、構成情報記憶部３０００、構成切替部４０００及び演算結果記憶部５０００で構成される。
【００２１】
ここで、実線矢印は演算結果等のデータの流れ、点線矢印は制御の信号等の流れ、二重線矢印は構成情報の流れをそれぞれ表すものとする（図２、図３等も同様）。
マルチスレッドプロセッサ１０００は、複数の異なる処理を時分割で実行することができる、いわゆるマルチスレッドプロセッサである。動的再構成演算回路２０００と協調して演算を行い、スレッドの処理を実行していく。
【００２２】
具体的にマルチスレッドプロセッサ１０００は、あるスレッドの処理を行う場合は、そのスレッド用に動的再構成演算回路を構成し、演算段数分の演算セルの処理を繰り返し行わせる。
また、本マルチスレッドプロセッサ１０００は、次に実行するスレッドを決定し、実行する機能を有する。具体的には、スレッドに割当てた時間の終了を知らせるタイマ割り込みによって、スレッドの切替時を検出し、次スレッド用に動的再構成演算回路２０００の再構成を行うよう構成切替部４０００に指示を出す。この際、現スレッドと次スレッドを通知する。
【００２３】
尚、スレッドの切替時の検出には、データ転送コントローラＤＭＡＣ（Direct Memory Access Controller）のデータ転送完了信号や、他のプロセッサやハードワイアードロジックの演算終了信号などを要因として、検出するものであっても良い。この場合も、以下、スレッドに割当てられた時間として説明する。
次に、動的再構成演算回路２０００は、アレイ状に配置された複数の演算セル２１００を含み、各演算セルの構成及び各演算セル間の接続構成を変更することが可能な演算回路である。すなわち、各演算セルの構成を所定の演算を行うように再構成し、接続構成を各演算セルが所定のデータを入力するように再構成することで、動的再構成演算回路２０００を所望の処理を行う回路に再構成する。詳細は、図２〜図５を用いて後で説明する。
【００２４】
構成情報記憶部３０００は、動的再構成演算回路２０００を所望の回路に再構成する為の構成情報を記憶する機能を有する。また、構成切替部４０００からの指示を受けて、順次必要な構成情報を読み出し、動的再構成演算回路２０００に対して供給する機能を有する。
本実施形態における構成情報は、スレッド毎に記憶され、各演算セル毎に記憶されているものとする。詳細は、図１０を用いて後で説明する。
【００２５】
構成切替部４０００は、マルチスレッドプロセッサ１０００からの指示を受けて、次スレッド用に、順次、動的再構成演算回路２０００の再構成を行う機能を有する。再構成は、本構成切替部４０００が、演算結果記憶部５０００、動的再構成演算回路２０００、構成情報記憶部３０００を制御することで行う。
演算結果記憶部５０００は、動的再構成演算回路２０００が出力する演算結果を記憶する機能を有する。
【００２６】
この演算結果は、スレッド毎に記憶されており、このスレッド毎の演算結果は、各スレッドの１ループの結果であり、マルチスレッドプロセッサ１０００により読み出される。
本実施形態では、ループの都度、書き込まれ、マルチスレッドプロセッサ１０００によって読み出される。また、該当スレッドに時間が再び割当てられてスレッド処理を続行するときに、読み出されて利用される。
【００２７】
この演算結果記憶部５０００は、構成切替手段４０００から、現スレッドと次スレッドを通知され、動的再構成演算回路２０００からの書き込み領域及び、マルチスレッドプロセッサ１０００からの読み出し領域を変更する。
次に、図２〜図５を用いて、動的再構成演算回路２０００の詳細について説明する。
＜動的再構成演算回路２０００の詳細＞
まず、図２は、動的再構成演算回路２０００の構成を示す概略図である。
【００２８】
動的再構成演算回路２０００は、複数の演算セル（２１００ａ〜２１００ｐ）と、演算セルを接続する動的再構成接続部２２００とで構成される。
以下、演算セル２１００ａは「演算セルａ」、演算セル２１００ｂは「演算セルｂ」等というものとし、図４等でも同様とする。また、演算セル２１００という場合は、１つの演算セルを指すものとする。
【００２９】
各演算セル２１００には、構成切替部４０００と構成情報記憶部３０００とからそれぞれ信号線が引かれ、構成切替部４０００からは制御信号（点線矢印）が送られ、構成情報記憶部３０００からは構成情報（二重線矢印）が送られる。
また、マルチスレッドプロセッサ１０００から動的再構成接続部２２００を介して、演算セル２１００等に必要な演算データが渡される。
【００３０】
演算セル２１００は、乗算、シフト、加算、論理演算が可能であり、設定された構成情報での演算を行う。動的再構成演算セル２１００の１回の演算に要する期間は、プロセッサの１サイクルとする。また、再構成に要する期間も、同様に、プロセッサの１サイクルとする。
以下、動的再構成接続部２２００の構成を図３を用いて説明する。
【００３１】
＜動的再構成演算接続部２２００について＞
図３は、１つの演算セルと、関連する動的再構成接続部２２００とを示す図である。
本図では、１対の演算セル２１００と演算ソース選択器２２１０、出力データ選択器２２５０を示している。
動的再構成接続部２２００は、演算セル２１００と対となる演算ソース選択器２２１０、すなわち、演算セル２１００と同数の演算ソース選択器２２１０と、１つの出力データ選択器２２５０と、マルチスレッドプロセッサ１０００からのデータの配線及び演算セル間の配線とで構成される。
【００３２】
演算セル２１００、演算ソース選択器２２１０及び出力データ選択器２２５０には、それぞれ構成切替部４０００から制御信号が、構成情報記憶部３０００から構成情報が入力される。これにより、各演算セル２１００等は、別々のタイミングでの構成切り替えが可能となる。
演算ソース選択器２２１０は、他の演算セル２１００の演算結果である演算データを入力し、そのうちから１つの演算データを選択し、対となる演算セル２１００に出力する。尚、１段目の演算セルａ〜演算セルｄは、他の演算セル２１００からの演算データとマルチスレッドプロセッサ１０００からの演算データのうち１つの演算データを選択する。
【００３３】
演算ソース選択器２２１０の構成の切り替えは、対である演算セル２１００と同時に行う。そのため、構成切替手段４０００からの切り替え信号線は、演算セル２１００に接続されたものが同じく接続されている。
また、演算セル２１００は、演算結果の演算データを他の演算セル２１００の演算ソース選択器２２１０に出力する。尚、最下段の演算セルｍ〜演算セルｐは、他の演算セル２１００と出力データ選択器２２５０に演算データを出力する。
【００３４】
出力データ選択器２２５０は、演算セルから入力された演算データから必要な演算データを選択して演算結果記憶部５０００に出力する。
この出力データ選択器２２５０の構成の切り替えは、演算セル２１００と同じく、構成切替手段４０００から構成切り替えの信号線及び構成情報記憶部３０００からの構成情報転送用の信号線が接続されており、構成切り替えの信号を受けると、そのときの構成情報記憶部３０００からの構成情報に切り替える。
【００３５】
＜構成情報、制御信号、演算データの流れについて＞
図４は、演算セルと演算データ選択器と出力データ選択器とに、構成情報と制御信号とを供給する信号線を示す図であり、図５は、演算データを供給する信号線を示す図である。
図４において、構成切替部４０００からは制御信号が、演算セルａ〜演算セルｐ、演算ソース選択器ａ〜演算ソース選択器ｐ及び出力データ選択器２２５０にそれぞれ出力され、構成情報記憶部３０００からは構成情報が出力される。
【００３６】
対となる演算セル２１００と演算ソース選択器２２１０には、同じ制御信号と同じ構成情報が入力される。また、全ての演算セル２１００等には、同時に、構成情報記憶部３０００から同じ構成情報が送出される。
各演算セル２１００、各演算ソース選択器２２１０、出力データ選択器２２５０は、構成切替部４０００から送られる制御信号に応じて、構成情報を読み込み、再構成を行う。
【００３７】
すなわち、構成切替部４０００は、構成情報記憶部３０００に構成を変更しようとする演算セルの構成情報を出力させ、同時に、構成を変更しようとする演算セルに対してのみ再構成を指示する命令を送出する。再構成の指示を受けた演算セルは、構成情報を読み取り再構成を行う。
演算ソース選択器２２１０、出力データ選択器２２５０も同様である。
【００３８】
図５は、演算データの流れを示し、各演算セル２１００は、演算結果である演算データを、次の段の演算セルの演算ソース選択器２２１０と、隣の演算セルの演算ソース選択器２２１０とに出力する。例えば、演算セルｂは、演算データを演算ソース選択器ｆと演算ソース選択器ａと演算ソース選択器ｃとに出力する。
演算ソース選択器２２１０は、入力される複数の演算データの１つを選択して、対である演算セルに出力する。例えば、演算ソース選択器ｆは、演算セルｂと演算セルｅと演算セルｇとから送られる演算データのうちの１つを選択して、演算セルｆに出力する。演算セルｆは、演算ソース選択器ｆから出力された演算データを基に演算を行う。
【００３９】
演算ソース選択器２２１０が、どの演算データを選択するかは、演算ソース選択器２２１０の構成に依存する。例えば、演算ソース選択器ｆが、演算セルｇからの演算データを選択する構成となっている場合は、常に、演算セルｇからの演算データを選択し、再構成が成されれば、その構成に応じて演算セルｂや演算セルｅからの演算データを選択することになる。
【００４０】
また、出力データ選択器２２５０も、入力した演算データのうち、いずれを演算結果記憶部５０００に出力するかは、その構成に依存する。すなわち、演算結果記憶部５０００に出力する演算データは、１つとは限らず、スレッドの処理に応じた出力データ選択器２２５０の構成に依存する。
尚、本実施形態では、演算データを下段と左右の演算セルの演算ソース選択器に送ることとしているが、これに限られず、他の演算セルの演算ソース選択器に送信する構成としてももちろんよい。
【００４１】
＜データ＞
以下、プロセッサ１００が、スレッドの切り替えを行う際に使用するデータについて、図９と図１０とを用いて説明する。
データを説明する前に、本実施形態での説明で使用するスレッドについて図６〜図８を用いて説明する。
【００４２】
＜スレッドについて＞
本実施形態では、スレッドＡ、スレッドＢ、スレッドＣの３つのスレッドを巡回的に実行するものとする。
図６〜図８は、各スレッドのデータの流れを示す図である。説明の便宜上、演算ソース選択器２２１０及び出力データ選択器２２５０は記載せずに、演算データの流れのみ示すものとする。
【００４３】
まず、図６は、スレッドＡのデータの流れを示す図である。スレッドＡの演算段数は「４」であり、動的再構成演算回路２０００の演算セルが１６個であることから、４つの演算処理を並行して行うものとする。
すなわち、マルチスレッドプロセッサ１０００から演算セルａに演算ソースが渡され、演算セルａの演算結果を演算セルｅに送り、演算セルｅは演算セルａから受け取った演算データを基に演算を行い演算結果を演算セルｉに送る。演算セルｉは、演算セルｅから受け取った演算データを基に演算を行う。というように順に演算結果を送り演算セルｍまで演算を実行する。同様に、マルチスレッドプロセッサ１０００から演算セルｂ、演算セルｃ、演算セルｄに演算データが渡され、それぞれ並行して処理を行う。
【００４４】
演算セルｍ、演算セルｎ、演算セルｏ、演算セルｐの演算結果が演算結果記憶部５０００に記憶される。
この記憶された演算結果は、マルチスレッドプロセッサ１０００によって読み出され、マルチスレッドプロセッサ１０００内での演算等に使用される。尚、演算セルａ等に供給されてもよい。マルチスレッドプロセッサ１０００は、演算データを読み出し、演算するというループを繰り返すことでスレッドＡを実行する。演算セルに供給するデータは、読み出した演算データそのまま又は何らかの処理が成されたもの、他のデータ等であってもよく、スレッドの処理に依存する。このループは、スレッドＢ、スレッドＣにおいても同様である。
【００４５】
図７は、スレッドＢのデータの流れを示す図である。スレッドＢの演算段数は「８」であり、２つの演算処理を並行して行う。
マルチスレッドプロセッサ１０００から、演算セルａに演算ソースが渡され、演算セルａ→演算セルｂ→演算セルｆ→演算セルｅ→演算セルｉ→演算セルｊ→演算セルｎ→演算セルｍの順に演算データを送って処理を行う。同様に、マルチスレッドプロセッサ１０００から演算セルｃに演算データが渡され、演算セルｏまで処理を行う。
【００４６】
演算セルｍと演算セルｏの演算結果が演算結果記憶部５０００に記憶される。
図８は、スレッドＣのデータの流れを示す図である。スレッドＢの演算段数は「１６」であり、１つの演算処理を行う。
マルチスレッドプロセッサ１０００から、演算セルａに演算ソースが渡され、演算セルａ→演算セルｂ→演算セルｃ→演算セルｄ→演算セルｈ→演算セルｇ→演算セルｆ→演算セルｅ→演算セルｉ→演算セルｊ→演算セルｋ→演算セルｌ→演算セルｐ→演算セルｏ→演算セルｎ→演算セルｍの順に演算データを送って処理を行う。
【００４７】
演算セルｏの演算結果が演算結果記憶部５０００に記憶される。
＜スレッド切り替えに使用するデータについて＞
以下、これらのスレッドＡ、スレッドＢ、スレッドＣを巡回的に実行する場合のスレッドの切り替えに際し使用するデータについて、図９と図１０とを用いて説明する。
図９（ａ）は、演算セル段数テーブルの構成及び内容例を示し、図９（ｂ）は、スレッド段数テーブルの構成及び内容例を示す。
【００４８】
これらのデータは、構成切替部４０００が予め記憶しているデータである。
まず、図９（ａ）の演算セル段数テーブル４１００について説明する。
演算セル段数テーブル４１００は、スレッドＩＤ４１１０と演算セルＩＤ４１２０とで構成され、スレッドごとの各演算セルの段数目４１３０を示す。
スレッドＩＤ４１１０は、本プロセッサで実行するスレッドの識別子をいい、本実施形態では「スレッドＡ」、「スレッドＢ」及び「スレッドＣ」である。
【００４９】
演算セルＩＤ４１２０は、本プロセッサの動的再構成演算回路２０００を構成する演算セル２１００それぞれの識別子をいい、本実施形態では「演算セルａ」〜「演算セルｐ」の１６個である。
スレッドごとの各演算セルの段数目４１３０とは、該当スレッドの１ループの処理において、該当演算セルが何番目に実行されるかを示すものである。ここでの番数は、「０」〜「１５」で表すものとし、「０」段数目の演算セルが最初に実行されるものとする。
【００５０】
例えば、スレッドＩＤ４１１０「スレッドＡ」の演算セルＩＤ４１２０「演算セルｂ」の演算段数目４１３０は「０」であることから、スレッドＡでは最初に実行される演算セルである（図６参照）。また、スレッドＩＤ４１１０「スレッドＢ」の演算セルＩＤ４１２０「演算セルｂ」の演算段数目４１３０は「１」であり、スレッドＢでは２番目に実行される演算セルである（図７参照）。
【００５１】
次に、図９（ｂ）のスレッド段数テーブル４２００は、スレッドＩＤ４２１０と演算段数４２２０とで構成される。
スレッドＩＤ４２１０は、図９（ａ）のスレッドＩＤ４１１０と同様である。
また、演算段数４２２０は、各スレッドの演算段数を示す。例えば、スレッドＩＤ４２１０「スレッドＡ」は、演算段数４２２０「４」であり４個の演算セルを順に用いて行い、スレッドＩＤ４２１０「スレッドＣ」は、演算段数４２２０「１６」であり１６個の演算セルを順に用いて行う。この順は、演算セル段数テーブル４１００に示されるとおりである（図９（ａ）参照）。
【００５２】
次に、図１０は、演算セル構成情報テーブル３１００の構成及び内容例を示し、このデータは、構成情報記憶部３０００が予め記憶しているデータである。
演算セル構成情報テーブル３１００は、スレッドＩＤ３１１０と演算セルＩＤ３１２０とで構成され、スレッドごとの各演算セルの構成情報を特定する構成情報名３１３０を示している。すなわち、構成情報名３１３０は、構成情報の識別子である。
【００５３】
演算セルＩＤ３１２０が「演算セルａ」〜「演算セルｐ」の構成情報名３１３０で特定れる構成情報は、演算セルと、対となる演算ソース選択器とを再構成するための情報である。
また、演算セル構成情報テーブル３１００には、更に、スレッド毎の出力データ選択器２２５０の構成情報を特定する構成情報名３１３０も記憶されている。
【００５４】
構成情報記憶部３０００には、構成情報名３１３０で示される構成情報は全て記憶されているものとする。
例えば、スレッドＩＤ３１１０「スレッドＡ」の演算セルＩＤ３１２０「演算セルａ」の構成情報名３１３０は「構成情報Ａ０」であることから、スレッドＡ実行時の演算セルａと演算ソース選択器ａとは、「構成情報Ａ０」で示される構成情報で再構成されたものである。
【００５５】
構成情報記憶部３０００は、構成切替部４０００からの指示を受け、この演算セル構成情報データ３１００を基に、該当する構成情報名３１３０で示される構成情報を動的再構成演算回路２０００に送出する。
＜動作＞
次に、図１１〜図２７を用いて、本発明に係るプロセッサの動作を説明する。
【００５６】
まず、図１１〜図１３を用いて、従来と本発明とを比較して、スレッドの切り替えについて簡単に説明する。
その後、本発明の、スレッドの演算段数４２２０（図９（ｂ）参照）が異なるスレッドへの切り替えについて説明する。この切り替えについては、現在実行している現スレッドの演算段数より大きい演算段数のスレッドに切り替える場合と、現スレッドの演算段数より小さい演算段数のスレッドに切り替える場合とに分けて説明する。
【００５７】
尚、動的再構成演算回路２１００の各演算セル２１００は、演算、再構成ともに、プロセッサの１サイクルで行う。
＜従来と本発明とのスレッド切り替えについて＞
図１１は、従来のスレッドの切り替えを示す図である。
プロセッサ１００がスレッドＡ、スレッドＢ、スレッドＣを巡回的に実行し、それぞれのスレッド実行時の動的再構成演算回路２０００を示している。
【００５８】
動的再構成演算回路２０００Ａは、スレッドＡ実行時の動的再構成演算回路２１００であり、同様に、動的再構成演算回路２０００Ｂ、動的再構成演算回路２０００Ｃは、それぞれスレッドＢ、スレッドＣ実行時の動的再構成演算回路２１００である。
動的再構成演算回路２０００の各演算セル２１００が、どのスレッド用の構成であるかを示している。例えば、動的再構成演算回路２０００Ａの「演算セルａ」の下に記載している「スレッドＡ」は、スレッドＡ用の構成であることを示している。
【００５９】
従来は、スレッドＡの実行が終了すると、動的再構成演算回路２０００Ａから動的再構成演算回路２０００Ｂに再構成し、スレッドＢの実行を開始していた。従って、動的再構成演算回路２０００Ａから動的再構成演算回路２０００Ｂに再構成している間、スレッドを実行は行うことが出来ない。
次に、図１２は、スレッドに割当てられた時間の最後のサイクルに実行される演算セル２１００を示した図である。すなわち、図１１における各スレッドの再構成直前の動的再構成演算回路２０００の図である。
【００６０】
動的再構成演算回路２０００Ａのハッチングが掛けられている演算セル２１００が、スレッドＡに割当てられた時間の最後のサイクルに実行される演算セル２１００であり、同様に、動的再構成演算回路２０００Ｂ、動的再構成演算回路２０００Ｃは、それぞれにスレッドＢ、スレッドＣのものを示す。
すなわち、ハッチングが掛けられていない演算セル２１００、スレッドＡでは１２個、スレッドＢでは１４個、スレッドＣでは１５個の演算セルは、遊んでいることになる。
【００６１】
本図では、スレッドに割当てられた時間の最後のサイクルについて説明しているが、スレッドに割当てられた時間の最後のループでの演算を終了した演算セルは、当該スレッドが終了するまで遊んでいることになる。例えば、動的再構成演算回路２０００Ａの演算セルａは、最後の演算を行い演算結果を演算セルｅに渡すと、以後、演算セルｍの演算が終了するまで何も行わない。
【００６２】
本発明は、スレッド切り替え時に遊んでしまっている演算セルを、次スレッド用に再構成して次スレッドの処理を行わせようとするものである。
図１３は、本発明のスレッドの切り替えを示す図である。
スレッドＡの実行が終了した演算セルから順にスレッドＢ用に再構成を行いスレッドＢの演算を行う。
【００６３】
従って、動的再構成演算回路２０００Ａから動的再構成演算回路２０００Ｂのように、全ての演算セル２１００がスレッドＢ用になる間に、動的再構成演算回路２０００ＡＢに示すように、スレッドＡ用の演算セルとスレッドＢ用の演算セルとが混在する期間が存在する。すなわち、スレッドＡとスレッドＢとが並行して実行されていることになる。
同様に、スレッドＢからスレッドＣに切り替わる際にも、動的再構成演算回路２０００ＢＣに示すように、スレッドＢ用の演算セルとスレッドＢＣの演算セルとが混在する期間が存在することになる。
【００６４】
このように並行に処理することで、スレッドの切り替えの際に必要な演算セル２１００の再構成の時間をなくすことができ、スレッドの実行の一部を並行に行うことで、より無駄をなくすことが可能となる。
具体的には、図１１における再構成に必要なスレッド間の時間は不要となり、さらには、現スレッド処理の終わりと次スレッド処理の開始とが重なるため、より全体としてのスレッド実行時間を短くすることが可能となる。
【００６５】
＜現スレッドの演算段数より大きい演算段数のスレッドに切り替える場合＞
図１４〜図１６のフローチャートを用いて、本プロセッサの動作を説明する。この説明の際、図１７〜図２１を参照する。
ここでは、現スレッドをスレッドＡ、次スレッドをスレッドＢとする。すなわち、演算段数「４」のスレッドＡから、演算段数「８」のスレッドＢに切り替える処理を例に取り説明する。
【００６６】
図１７は、スレッドＡからスレッドＢへの切り替え時の動的再構成演算回路の遷移図である。本図では、スレッド切り替えの際の、サイクル１〜サイクル１１までの動的再構成演算回路の遷移を表す。動的再構成演算回路Ｃ１は、サイクル１の回路を表し、動的再構成演算回路Ｃ２は、サイクル２の回路を表すものとする。演算セル内の「Ａ」はスレッドＡ用の構成、「Ｂ」はスレッドＢ用の構成、「Ｃ」はスレッドＣ用の構成であることを表し、ハッチングは実行していることを表す。また、「再構成」は次スレッド用に再構成していることを表す。
【００６７】
図１８は、スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。本図では、１６個の演算セル２１００のうち、説明の便宜上、演算セルａ、演算セルｂ、演算セルｆの処理のみを表している。
図１９は、これら制御信号と出力データ選択器２２５０の処理との関係を表すタイムチャートであり、また、図２０は、これらの制御信号と演算結果記憶部５０００の処理との関係を表すタイムチャートである。
【００６８】
尚、図１８〜図２０のタイムチャートのサイクルは、図１７のサイクルと同じタイミングのサイクルである。すなわち、図１７と図１８のサイクルＣ１は、同じタイミングのサイクルである。
図２１は、演算結果記憶部５０００内の各スレッドの領域を表す図である。
本実施形態では、スレッドＡ用の領域を0x00〜0x3F番地、スレッドＢ用の領域を0x0040〜0x5F番地、スレッドＣ用の領域を0x60〜0x6F番地とする。
【００６９】
以下、図１４のフローチャートに沿って、切り替え処理を説明する。
図１４は、スレッド切り替え時のマルチスレッドプロセッサ１０００と構成切替部４０００との処理を示すフローチャートである。
まず、マルチスレッドプロセッサ１０００は、動的再構成演算回路Ｃ１（図１７参照）を動作させながら現スレッドであるスレッドＡを実行する（ステップＳ１００）。
【００７０】
具体的には、マルチスレッドプロセッサ１０００は、演算データを演算セルａ、演算セルｂ、演算セルｃ、演算セルｄに供給する。
演算データを入力した各演算セルは、順に下段の演算セルに演算結果を渡していき、最後に演算結果記憶部５０００に演算結果を記憶する。
マルチスレッドプロセッサ１０００は、次のループの開始時にこれらの記憶されている演算データを読み出し、所定の処理を施し、演算セルに供給することを繰り返すことでスレッドＡを実行する（図６参照）。
【００７１】
マルチスレッドプロセッサ１０００は、この繰り返しであるループの最後のループである場合、すなわち、スレッドＡに与えた時間のうちの最後のループであるか否かを判断し（ステップＳ１１０）、最後のループであってプロセッサ１００の処理を終了しないと判断した場合（ステップＳ１１０：Ｙ、ステップＳ１２０：Ｎ）には、スレッドの切り替えを開始する。
【００７２】
最後のループではないと判断した場合（ステップＳ１１０：Ｎ）には、現スレッドのループを繰り返す。また、プロセッサ１０の処理を終了すると判断した場合（ステップＳ１２０：Ｙ）には、終了処理を行う。
スレッドの切り替えを開始すると判断したマルチスレッドプロセッサ１０００は、次スレッドを選択し（ステップＳ１３０）、構成切替部４０００に切り替えの指示を出す（ステップＳ１４０）。この指示に際し、マルチスレッドプロセッサ１０００は、現スレッドのＩＤと次スレッドＩＤとを渡す（ステップＳ１４１）。
【００７３】
その後、マルチスレッドプロセッサ１０００は、次スレッドの処理を開始する（ステップＳ１００）。但し、構成切替部４０００からの、処理の停止信号の発行（ステップＳ２２１）があった場合は、次スレッドの処理を開始しない。
切り替え指示を受けた構成切替部４０００は（ステップＳ２００）、待ちサイクル数を算出する（ステップＳ２１０）。スレッドＡからスレッドＢへの切り替えでは、待ちサイクル数は「０（ゼロ）」となる。待ちサイクル数の算出処理の詳細は、図１５を用いて後で説明する。
【００７４】
待ちサイクル数を算出した構成切替部４０００は、算出したサイクル数待つ（ステップＳ２２０）。待ちの間は、マルチスレッドプロセッサ１０００に対して、停止信号を発行する（ステップＳ２２１）。
その後、演算結果記憶部５０００の読み込み領域を、次スレッド用に切り替え（ステップＳ２３０）、演算セル及び演算ソース選択器の再構成を行う（ステップＳ２４０）。
【００７５】
この構成切替部４０００が行う演算セル及び演算ソース選択器の再構成は、一度に行われるのではなく、図１７の動的再構成演算回路Ｃ２〜動的再構成演算回路Ｃ９で示されるように、順を追って行われる。この演算セル及び演算ソース選択器の再構成処理は、図１６を用いて後で説明する。
構成切替部４０００は、全ての演算セル２１００及び演算ソース選択器２２１０の再構成が終了すると、出力データ選択器２２５０の再構成を行う（ステップＳ２５０、図１７：動的再構成演算回路Ｃ１０）。この出力データ選択器の再構成処理のタイミングについては、図１９を用いて後で説明する。
【００７６】
出力データ選択器２２５０の再構成が行われると、全てスレッドＢ用の構成となる（図１７：動的再構成演算回路Ｃ１１）。
その後、演算結果記憶部５０００の書き込み領域を、次スレッド用に切り替える（ステップＳ２６０）。
一方、構成切替部４０００からの停止信号を受信したマルチスレッドプロセッサ１０００は、次スレッドの実行の開始を停止し、停止信号が切れた場合には、１サイクル待って、次スレッドの演算データの供給を開始する（ステップＳ１００）。この１サイクルは、最初の演算セルが再構成されるサイクルである。
【００７７】
このスレッドの切り替え処理の際、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００から次スレッド用の演算データを読み込むが、同時に、現スレッドの演算結果が演算結果記憶部５０００に書き込まれている。この演算結果記憶部の領域変更処理（ステップＳ２３０、ステップＳ２６０）のタイミングは、図２０を用いて後で説明する。
＜待ちサイクル数の算出処理＞
図１５は、待ちサイクル数の算出処理を示すフローチャートである。
【００７８】
待ちサイクル数とは、スレッドを切り替える場合に、次スレッドが滞りなく実行できるように、切り替え処理の開始を遅らせるサイクル数である。
現スレッドの演算段数と次スレッドの演算段数が異なる場合には、現スレッドの演算が終了した演算セルを、即、次スレッド用に書き換えたとしても、その演算結果を渡す演算セルが現スレッドの演算を行っていて、次スレッド用への書き換えが出来ない場合等があるからである。
【００７９】
このような場合、次スレッドの実行制御が煩雑となるため、本実施形態では、スレッド切り替え処理の演算セル等の再構成の開始を遅らせることで、次スレッドの実行をスムーズに行うことを可能としている。
構成切替部４０００は、マルチスレッドプロセッサ１０００から切り替えの指示を受けた際に（図１４：ステップＳ２００参照）受け取った現スレッドＩＤと次スレッドＩＤとの演算段数から、待ちスレッド数を算出する。
【００８０】
スレッドの演算段数は、スレッド段数テーブル４２００を参照して求める（図９（ｂ）参照）。
例えば、現スレッドのスレッドＩＤ４２１０が「スレッドＡ」の場合、演算段数４２２０は「４」である。
まず、現スレッドの演算段数を「Ｍ」、次スレッドの演算段数を「Ｎ」とすると、ＭからＮを減算し「Ｄ」を求める（ステップＳ３００）。
【００８１】
「Ｄ」が０（ゼロ）より大きい場合は、待ちサイクル数をＤとし（ステップＳ３２０）、「Ｄ」が０（ゼロ）以下の場合は、待ちサイクル数を０（ゼロ）とする（ステップＳ３３０）。
すなわち、スレッドの演算段数が、同じ又は大きなスレッドへの切り替えの場合には、待ちサイクル数は０（ゼロ）となり、演算段数がより小さいスレッドへの切り替えの場合には、その差の段数分が待ちサイクル数となる。
【００８２】
例えば、スレッドＡからスレッドＢに切り替わる場合は、演算段数「４」から「８」であるため、待ちスレッド数は０（ゼロ）となり、スレッドＣからスレッドＡに切り替わる場合は、演算段数「１６」から「４」であるため、待ちスレッド数は１２となる。
従って、スレッドＡからスレッドＢへの切り替えの場合には、サイクルの待ちは無く、演算セルの再構成が開始される。図１７に示すように、動的再構成演算回路Ｃ１の次のサイクルでは、動的再構成演算回路Ｃ２のように再構成が行われる。
【００８３】
＜演算セル及び演算ソース選択器の再構成処理＞
図１６は、演算セル、演算ソース選択器の再構成処理を示すフローチャートである。
まず、構成切替部４０００は、再構成する演算セル２１００と演算ソース選択器２２１０とを選択する（ステップＳ４００）。ここでの演算ソース選択器は、演算セルと対となるものである。
【００８４】
最初に選択される演算セル２１００は、次スレッドの演算段数目４１３０が「０（ゼロ）」の演算セルである。演算段数目は、演算セル段数テーブル４１００を参照する（図９（ａ）参照）。
例えば、次スレッドがスレッドＢの場合、最初に選択される演算セルは、演算セルａ、演算セルｃの２つである。
【００８５】
次に、構成切替部４０００は、構成情報記憶部３０００に対し、選択した演算セルと演算ソース選択器の構成情報を送出を依頼する（ステップＳ４１０）。この際、スレッドＩＤと演算セルＩＤとを通知する（ステップＳ４１１）。
依頼を受けた構成情報記憶部３０００は（ステップＳ５００）、通知されたスレッドＩＤと演算セルＩＤから構成情報名３１３０を求め、その名で特定できる構成情報を選択し（ステップＳ５１０）、送出する（ステップＳ５２０、ステップＳ５２１）。
【００８６】
例えば、選択された演算セルが演算セルａと演算ソース選択器ａの場合は、演算セルａと演算ソース選択器ａの構成情報が送出される（図１８：サイクルＣ２の構成情報記憶部からの信号）。
また、同時に、構成切替部４０００は、選択した演算セルと演算ソース選択器に対して、再構成を指示する（ステップＳ４２０、ステップＳ４２１）。
【００８７】
再構成の指示を受けた演算セルと演算ソース選択器は（ステップＳ６００）、構成情報を受信し（ステップＳ６１０）、再構成を行う（ステップＳ６２０）。
例えば、選択された演算セル等が演算セルａと演算ソース選択器ａの場合は、構成情報の信号線から構成情報を取得し、再構成する（図１８：サイクルＣ２の演算セルａと演算ソース選択器ａの処理、図１７：動的再構成演算回路Ｃ２）。
【００８８】
再構成を行った演算セルと演算ソース選択器は、演算を行う（ステップＳ６３０）。
例えば、再構成された演算セルａと演算ソース選択器ａは、スレッドＢの演算を行う（図１８：サイクルＣ３の演算セルａと演算ソース選択器ａの処理）。このとき、マルチスレッドプロセッサ１０００は、スレッドＢ用の演算データを演算ソース選択器に提供する。
【００８９】
構成情報記憶部３０００と、選択した演算セル及び演算ソース選択器とに対して指示を出した構成切替部４０００は、全ての演算段数の演算セルの再構成を行っていない場合は（ステップＳ４３０：Ｎ）、次の段数の再構成を行う（ステップＳ４００）。全ての演算セル段数の再構成を行った場合（ステップＳ４３０：Ｙ）は、終了する。
例えば、次スレッドがスレッドＢの場合には、２段目の演算セル、すなわち、演算セル段数テーブル４１００で演算セル段数４１３０が「１」の演算セル、演算セルｂと演算セルｄが選択され、再構成される（図１８：サイクルＣ３参照、図１７：動的再構成演算回路Ｃ３）。
【００９０】
次スレッドがスレッドＢの場合は、演算段数４２２０が「８」であるため、演算セル段数４１３０が「０」〜「７」までを繰り返すことになる（図１７：動的再構成演算回路Ｃ２〜Ｃ９）。
＜出力データ選択器の再構成処理＞
図１９は、制御信号と出力データ選択器２２５０の処理との関係を表すタイムチャートである。
【００９１】
出力データ選択器２２５０は、演算セルが全て次スレッド用に切り替わったら、次スレッド用に再構成される（図１９：サイクルＣ１０、図１４：ステップＳ２４０）。
再構成の手順は、図１６に示す演算セルの再構成と同様である。以下、簡単に説明する。
次スレッド用に全演算セルが再構成されたと判断した構成切替部４０００は（図１６：ステップＳ４３０：Ｙ）、構成情報記憶部３０００に次スレッドの出力データ選択器２２５０の構成情報を送出するよう依頼する。同時に、出力データ選択器２２５０に、再構成を指示する。
【００９２】
次スレッドの出力データ選択器２２５０の構成情報を送出するよう依頼を受けた構成情報記憶部３０００は、演算セル構成情報データ３１００を参照し、該当する構成情報を送出する。再構成指示を受けた出力データ選択器２２５０は、構成情報を入力し、再構成を行う。
例えば、次スレッドがスレッドＢの場合、スレッドＢの演算段数「８」の処理が終了したら、構成情報記憶部３０００は構成情報を送出し、出力データ選択器２２５０は、構成情報を入力し、再構成を行う（図１９：サイクルＣ１０、図１７：動的再構成演算回路Ｃ１０）。
【００９３】
尚、図１９の出力データ選択器２２５０の「スレッドＡ用の構成」を示す図における点線で示す期間（サイクルＣ５〜サイクルＣ９）は、出力データ選択器２２５０が処理を行わない期間であることを示している。スレッドＡの実行が終了し、出力データ選択器２２５０に演算結果データが出力されないからである。
＜演算結果記憶部の領域変更処理＞
図２０は、制御信号と演算結果記憶部５０００の処理との関係を表すタイムチャートである。
【００９４】
演算結果記憶部５０００は、図２１に示すようにスレッド毎に領域が確保されており、出力データ選択器２２５０からの出力を記憶し、マルチスレッドプロセッサ１０００によって読み出される。
通常は、同一スレッドの領域に対して読み書きが行われるが、スレッド切り替えの際には、記憶する演算データのスレッドと、読み出される演算データのスレッドが異なる場合が生じ、アクセスする領域が異なる。
【００９５】
例えば、現スレッドがスレッドＡで、次スレッドがスレッドＢの場合には、スレッドＡ用の領域に演算データを書き込み、スレッドＢ用の領域から演算データを読み込む必要がある。
構成切替部４０００は、次スレッドの最初の段数の演算セルを再構成するタイミングで、読み出し領域を次スレッド用に切り替える指示を演算結果記憶部５０００に出す（図２０：サイクルＣ２）。最初の演算セルの再構成のサイクルの次のサイクルで、マルチスレッドプロセッサ１０００から読み出されるからである。
【００９６】
また、次スレッド用に演算セルの全てを再構成したタイミングで、書き込み領域を次スレッド用に切り替える指示を演算結果記憶部５０００に出す（図２０：サイクルＣ１０）。最後の演算セルの再構成が行われる次のサイクルで、演算データが書き込まれるからである。
尚、図２０の演算結果記憶分５０００の「スレッドＡ用の書き込み」期間を示す図における点線で示す期間（サイクルＣ５〜サイクルＣ９）は、スレッドＡによる書き込みは行われない期間であることを示している。
【００９７】
＜現スレッドの演算段数より小さい演算段数のスレッドに切り替える場合＞
演算段数がより小さいスレッドへの切り替える場合について、図２２及び図２３を用いて説明する。
ここでは、演算段数が「１６」のスレッドＣから、演算段数が「４」のスレッドＡに切り替わる場合を説明する。
【００９８】
図２２は、スレッドＣからスレッドＡへの切り替え時の動的再構成演算回路の遷移図である。本図では、スレッド切り替えの際の、サイクル１〜サイクル１９までの動的再構成演算回路の遷移を表す。動的再構成演算回路Ｃ１は、サイクル１の回路を表し、動的再構成演算回路Ｃ２は、サイクル２の回路を表すものとする。
図２３は、スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。本図では、１６個の演算セル２１００のうち、説明の便宜上、演算セルａ、演算セルｅ、演算セルｉの処理のみを表している。
【００９９】
切り替え処理の流れは、図１４〜図１６のフローチャートと同様である。ここでは、上述した演算段数がより大きいスレッドへの切り替えの場合との相違点について説明する。
相違点は、演算セル等の再構成の開始タイミングが異なる点である。
すなわち、上述した演算段数がより大きいスレッドへの切り替えの場合には、構成切替部４０００は、マルチスレッドプロセッサ１０００からの切り替え指示後、すぐに演算セルの再構成処理を開始した。待ちサイクル数が０（ゼロ）だったからである。
【０１００】
一方、演算段数がより小さいスレッドへの切り替えの場合には、必要なサイクル数待ってから演算セルの再構成処理を行う点が異なる。この場合、現スレッドの演算が終了した演算セルを、即、次スレッド用に書き換えて演算を実行したとしても、その演算結果を渡す演算セルが現スレッドの演算を行っていて、次スレッド用への書き換えが出来ない場合等があるからである。
【０１０１】
現スレッドであるスレッドＣの演算段数（Ｍ＝１６）から、次スレッドであるスレッドＡの演算段数（Ｎ＝４）を減算したサイクル数（Ｄ）は、１６−４＝１２となり（図１４：ステップ２１０、図１５：ステップＳ３００）、０（ゼロ）より大きいことから（ステップＳ３１０：Ｙ）、待ちサイクル数は１２サイクルとなる（ステップＳ３２０）。
構成切替部４０００は、この１２サイクルを待って（図１４：ステップＳ２２０、図２３：サイクルＣ２〜サイクルＣ１３）、演算セル等の再構成を開始する（図１４：ステップＳ２４０、図２３：サイクルＣ１４）。図２２に示す動的再構成演算回路Ｃ１４〜動的再構成演算回路Ｃ１７で、再構成を行う。
【０１０２】
待っている間、すなわち、動的再構成演算回路Ｃ２〜動的再構成演算回路Ｃ１３までのサイクルＣ２〜サイクルＣ１３間は、スレッドＣの処理のみ進んでいる。
その後、サイクルＣ１４でスレッドＡの最初の段の演算セルから再構成を行う。図２２に示す動的再構成演算回路Ｃ１４である。
一方、マルチスレッドプロセッサ１０００は、このサイクルＣ２〜サイクルＣ１４の間は、次スレッドであるスレッドＡの実行開始を待っている状態である（図２３：サイクルＣ２〜サイクルＣ１４）。
【０１０３】
ここで、スレッドの切り替え処理のスケジュールをまとめると、図２４のようになる。図２４は、スレッドの切替スケジュールを表したタイムチャートである。
ここでは、スレッドＡ→スレッドＢ→スレッドＣ→スレッドＡとスレッドを切り替える場合を示している。
マルチスレッドプロセッサ１０００の期間９０００は、マルチスレッドプロセッサ１０００のスレッドＡの処理期間を、期間９００１はスレッドＢの処理期間を、期間９００２はスレッドＣの処理期間を表す。期間９００８は、動的再構成演算回路２０００内の演算処理終了待ちのバブル期間、すなわち、マルチスレッドプロセッサ１０００による現スレッドへの演算データの供給が終了し、次スレッドの演算データの供給が始まるまでの期間である（図２２：動的再構成演算回路Ｃ２〜Ｃ１４）。
【０１０４】
期間９１００ａは演算セルａのスレッドＡの処理期間を、期間９１０１ａはスレッドＢの処理期間を、期間９１０２ａはスレッドＣの処理期間を表す。期間９１０８ａは、動的再構成演算回路２０００内の演算処理終了待ちのバブル期間である（図２２：動的再構成演算回路Ｃ２〜Ｃ１４）。
期間９１００ｍは演算セルｍのスレッドＡの処理期間を、期間９１０１ｍはスレッドＢの処理期間を、期間９１０２ｍはスレッドＣの処理期間を表す。期間９１０９ｍは、前段の演算セル２１００の構成切り替え待ちのバブル期間である。スレッドＡからスレッドＢへの切り替え時の期間９１０９ｍは、図１７に示す動的再構成演算回路Ｃ５〜Ｃ９の期間である。
【０１０５】
期間９２００は出力データ選択器２２５０のスレッドＡの処理期間を、期間９２０１はスレッドＢの処理期間を、期間９２０２はスレッドＣの処理期間を表す。期間９２０９は、演算セル２１００の構成切り替え待ちのバブル期間である。スレッドＡからスレッドＢへの切り替え時の期間９２０９は、図１７に示す動的再構成演算回路Ｃ５〜Ｃ１０の期間である（図１９：サイクルＣ５〜サイクルＣ１０参照）。
【０１０６】
＜プログラム例＞
以下、本実施形態のプロセッサで実行する各種命令例、プログラム例を説明する。
まず、図２５は、演算結果記憶部５０００に関する命令例等である。
図２５（ａ）は、演算結果記憶部５０００内のスレッド占有領域の設定命令例であり、図２５（ｂ）は、各スレッド領域の設定プログラム例であり、図２５（ｃ）は、スレッド実行時の設定値である。
【０１０７】
図２５（ａ）の「DMset」命令では、「St_Adr」番地から「Ed_Adr」番地までを、スレッド番号「The_num」のスレッドが使用することを指定する。
図２５（ｂ）のプログラムは、スレッドＡは、「0x00」番地から「0x3F」番地までを使用し、スレッドＢでは、「0x40」番地から「0x5F」番地を、スレッドＣでは、「0x60」番地から「0x6F」番地までを使用する旨を指定している（図２１参照）。
【０１０８】
図２５（ｃ）は、プロセッサ１００がスレッドＡ等の処理を開始するときに、演算結果記憶部５０００に記憶されている内容例である。
図２５（ｃ）に示すように、演算結果記憶部５０００内に、各スレッドでＦＩＦＯの読み出しアドレス（ＤＭＲＡ）と、書き込みアドレス（ＤＭＷＡ）とが記憶される。マルチスレッドプロセッサ１０００からの読み出し番地は、実行中のスレッドのＤＭＲＡとなり、動的再構成演算回路２０００からの書き込み番地は、実行中のスレッドのＤＭＷＡとなる。ＤＭＲＡ、ＤＭＷＡの初期値は、図５（ｂ）のプログラムの実行時に、各スレッド用領域の開始番地として設定される。
【０１０９】
例えば、スレッドＡのＤＭＲＡをＤＭＲＡ＿Ａ、ＤＭＷＡをＤＭＷＡ＿Ａ、スレッドＢのＤＭＲＡをＤＭＲＡ＿Ｂ、ＤＭＷＡをＤＭＷＡ＿Ｂ、スレッドＣのＤＭＲＡをＤＭＲＡ＿Ｃ、ＤＭＷＡをＤＭＷＡ＿Ｃとする。図２５（ｂ）のプログラムの実行により、それぞれスレッド領域の開始番地は、図２５（ｃ）のように設定がなされる。
この設定後、マルチスレッドプロセッサ１０００及び、動的再構成演算回路２０００にて、各スレッドの処理が行われる。動的再構成演算回路２０００より、演算結果が演算結果記憶部５０００に書き込まれれば、各スレッドのＤＭＷＡをインクリメントすればよい。
【０１１０】
例えば、ＤＭＷＡの単位がワードであり、書き込まれるデータが１ワードである場合には、「ＤＭＷＡ＝ＤＭＷＡ＋０ｘ０１」のように、実行中のスレッドのＤＭＷＡのみがインクリメントされる。
なお、演算データがＷ個の場合、ＤＭＷＡには、Ｗが加算される。
また、マルチスレッドプロセッサ１０００から、演算結果記憶部５０００内の演算結果データが読み出されると、ＤＭＲＡをインクリメントすればよい。
【０１１１】
「ＤＭＲＡ＝ＤＭＲＡ＋０ｘ０１」のように、実行中のスレッドのＤＭＲＡのみがインクリメントされる。
なお、演算データがＷ個の場合、ＤＭＲＡには、Ｗが加算される。
各ＤＭＷＡ、ＤＭＲＡが図２５（ｂ）のプログラムで設定された、各スレッド領域の終了番地Ｅｄ＿Ａｄｒを超えた場合には、Ｓｔ＿Ａｄｒが設定される。
【０１１２】
この構成により、各スレッドの領域をＦＩＦＯとして管理できる。
次に、図２６（ａ）は、マルチスレッドプロセッサ１０００からの動的再構成演算回路２０００への演算命令例であり、図２６（ｂ）は、演算結果記憶部５０００に対する演算結果読み出し命令例である。
図２６（ａ）の「Rcn_exe」命令は、動的再構成演算回路２０００での演算命令であり、「srcA」と「srcB」は、マルチスレッドプロセッサ１０００内のレジスタ番号を指定する。
【０１１３】
この命令で、スレッドの１ループが実行される。
図２６（ｂ）の「Rcn_rd」命令は、動的再構成演算回路２０００の演算結果を読み出す命令であり、「dstA」は、マルチスレッドプロセッサ１０００内のレジスタ番号であり、当該レジスタに演算結果データを格納する。
簡単に動作を説明すると、「Rcn_exe」命令により、実行中のスレッドでの構成にて、動的再構成演算回路２０００内の演算が実行される。この演算の演算データとして、「Rcn_exe」命令で指定したレジスタ番号のデータを使用する。動的再構成演算回路２０００の演算結果データは、演算結果記憶部５０００の該当スレッドのＤＭＷＡの指すアドレスに格納される。
【０１１４】
「Rcn_rd」命令は、演算結果記憶部５０００に格納されている演算データを、マルチスレッドプロセッサ１０００に読み出す命令であり、該当スレッドのＤＭＲＡの指すアドレスの演算データが、「Rcn_rd」命令で指定したレジスタに転送される。
尚、演算結果記憶部５０００内に該当スレッドのデータが格納されていない場合、演算結果記憶部５０００は、マルチスレッドプロセッサ１０００に対して、演算停止信号を発行する。演算データが無いことの判定は、該当スレッドのＤＭＲＡとＤＭＷＡが同じ場合であることを検出すればよい。
【０１１５】
演算結果記憶部５０００内に該当スレッドのデータが格納されていない場合は、マルチスレッドプロセッサ１０００が動的再構成演算回路２０００に演算データを供給せずに、演算結果を読み出した場合に生ずる。この場合、マルチスレッドプロセッサ１０００は、演算結果記憶部からの読み込み処理を停止し、動的再構成演算回路には別の演算データを供給するなど、スレッドの処理に応じた動作を行うものとする。
【０１１６】
動的再構成演算回路２０００より、演算結果記憶部５０００に演算結果データが格納された後、演算停止信号が解除される。その後、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００に格納された演算結果データを読み出す。
以上の構成により、演算結果データは、スレッド毎にＦＩＦＯでの管理を実現でき、動的再構成演算回路２０００の構成の切り替えに左右されることなく演算結果記憶部５０００内の各スレッドの所定領域に格納される。
【０１１７】
このようにすることにより、マルチスレッドプロセッサ１０００では、動的再構成演算回路２０００のスレッドの切り替えによる演算結果格納の順番を意識する必要がないため、所望のスレッドでの演算結果データの管理が容易となる。
具体的には、Ｒｃｎ＿ｅｘｅ命令の演算結果を取得する、Ｒｃｎ＿ｒｄ命令は、動的再構成演算回路２０００の演算段数分のサイクル＋１サイクル後に発行可能となる。動的再構成演算回路２０００内での演算のために、演算段数分のサイクルを要し、更に演算結果記憶部５０００への書き込みのために、１サイクル要する。
【０１１８】
Ｒｃｎ＿ｅｘｅ命令と、Ｒｃｎ＿ｒｄ命令の発行を、具体的にプログラム図２７（ａ）と図２７（ｂ）とを用いて説明する。
図２７（ａ）は、スレッドＡでのＲｃｎ＿ｅｘｅ命令と、Ｒｃｎ＿ｒｄ命令のみのプログラムである。このプログラムの実行前には、演算結果記憶部５０００には、スレッドＡ用の演算結果データは格納されていないものとする。
【０１１９】
例えば、スレッドＡは、引数を変えつつＲｃｎ＿ｅｘｅ命令とＲｃｎ＿ｒｄ命令とを繰り返し実行することで処理を行う。
図２７（ａ）のＲｃｎ＿ｅｘｅ命令が発行されると、マルチスレッドプロセッサ１０００内のレジスタＲ１、Ｒ２のデータが動的再構成演算回路２０００に伝達され、動的再構成演算回路２０００内での演算が開始される。
【０１２０】
次のサイクルで、マルチスレッドプロセッサ１０００は、Ｒｃｎ＿ｒｄ命令を発行する。このサイクルでは、演算結果記憶手段５０００内に演算結果データは格納されていない（ＤＭＷＡ＿ＡとＤＭＲＡ＿Ａが同じ値である）。そのため、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００より、演算停止信号を受け、処理を停止する。
Ｒｃｎ＿ｅｘｅ命令発行から４サイクル後（Ｒｃｎ＿ｒｄ命令発行から３サイクル後）、動的再構成演算回路２０００内の演算が完了する。
【０１２１】
次のサイクルで、演算結果記憶手段５０００に演算結果データが格納され、ＤＭＷＡ＿Ａの値が増え、ＤＭＷＡ＿ＡがＤＭＲＡ＿Ａと異なる値になり、演算結果記憶部５０００からマルチスレッドプロセッサ１０００への演算停止信号が解除される。この後、Ｒｃｎ＿ｒｄ命令の実行が再開され、演算結果記憶部５０００からの演算結果データの読み出し処理が行われる。
【０１２２】
以上のプログラムにより、Ｒｃｎ＿ｅｘｅ命令、Ｒｃｎ＿ｒｄ命令での動的再構成演算回路２０００の演算指示及び、演算結果読み出しを実現できる。
図２７（ａ）のプログラムでは、マルチスレッドプロセッサ１０００の演算停止が４サイクル発生したが、演算停止を発生させないプログラムを図２７（ｂ）を元に説明する。
図２７（ｂ）のプログラムは、図２７（ａ）のＲｃｎ＿ｅｘｅ命令、Ｒｃｎ＿ｒｄ命令の間に４サイクル分の演算用命令を挿入してある。Ａｄｄ命令は、マルチスレッドプロセッサ１０００内のレジスタを演算ソースとし、加算を行い、演算結果データをマルチスレッドプロセッサ１０００内のレジスタに書き込む命令である。演算リソースは、マルチスレッドプロセッサ１０００内で閉じており、動的再構成演算回路２０００を使用しない。Ａｄｄ命令の演算には１サイクル必要である。
【０１２３】
このＡｄｄ命令が４サイクル分あるため、Ｒｃｎ＿ｒｄ命令の発行は、Ｒｃｎ＿ｅｘｅ命令の発行から５サイクル経過しているため、動的再構成演算回路２０００での演算が終了し、ＤＭＷＡ＿ＡがＤＭＲＡ＿Ａと異なる値になっており、マルチスレッドプロセッサ１０００は演算の停止をしない。
以上説明した構成により、動的再構成演算回路２０００内の構成切り替え時の性能劣化を抑制できる。また、一度に読み出し書き込みを必要とする中間演算データを退避する必要が無く、順次読み出し書き込みが発生する演算結果データだけを格納すればよい。このため、記憶手段を少ない入出力ポートのメモリで実現でき、回路の面積を抑制できる。
【０１２４】
また、この記憶領域に格納された演算結果データは、ＦＩＦＯでスレッド毎に管理される。このため、マルチスレッドプロセッサ１０００で実行するプログラムでは、特に構成切り替え時の演算順番を意識せずに済み、スレッド毎の管理で良いため、読み出しのプログラムを容易に作成できる。
＜実施形態２＞
実施形態１では、演算段数がより小さいスレッドに切り替える際には、マルチスレッドプロセッサ１０００の待ちサイクルが生じていた（図２４：期間９００８参照）。
【０１２５】
実施形態１では、スレッドのスムーズな切替のために、この待ちサイクルを構成切替部４０００で意識して、マルチスレッドプロセッサ１０００を停止させていた。本実施形態では、この待ちサイクルを構成切替部４０００ではなく、プログラム側で意識するものである。
従って、本実施形態では、マルチスレッドプロセッサ１０００において、この待ちサイクル期間は生じないことになる。
【０１２６】
図２８は、待ちサイクル期間が生じないスレッド切り替えのスケジュールを示したタイムチャートである。図２４のスケジュールと比べ、期間９００８が生じていない以外は、図２４と同様である。従って、待ちサイクルを算出し、マルチスレッドプロセッサに停止信号を発行すること以外は、実施形態１と同様である。
この待ちサイクル期間をなくしたことにより、本実施形態では、プログラム側で待ちサイクル期間を意識してスレッドを実行することになる。
【０１２７】
＜概要＞
図２９は、命令仕様書のＲｃｎ＿ｅｘｅ命令の記載例である。
本図では、動的再構成演算回路２０００への演算指示命令と演算結果記憶部５０００へのデータ読み出し命令、及び、それぞれの解説例を示す。
実施形態１では、スレッド切り替え時に、マルチスレッドプロセッサ１０００に、スレッドＣからスレッドＡでの処理切り替えにおいて、期間９００８の演算停止期間が発生した（図２４参照）。これは、動的再構成演算回路２０００の演算段数が多い構成から、少ない構成に変更する場合、構成の切り替え期間、動的再構成演算回路２０００への新たな演算命令の発行を停止するためである。この制御は、構成切り替え手段４０００より、図１４のステップＳ２１０等の処理により行われていた。
【０１２８】
実施の形態２では、図１４のステップＳ２１０等の、構成切り替え部４０００からマルチスレッドプロセッサ１０００への演算停止制御のみを省く（ステップＳ２１０とステップＳ２２０のＤサイクル待機する処理は残る）。その他の構成切り替え部４０００の制御フローは、実施の形態１と同じである。
マルチスレッドプロセッサ１０００への演算停止制御を省くことにより、期間９００８の演算停止期間が発生せず、命令を発行できる期間が増加する。期間９００８の演算停止期間が発生しない動作スケジューリングが図２８となる。
【０１２９】
ただし、期間９００８の間、動的再構成演算回路２０００へのＲｅｃ＿ｅｘｅ命令は保証されない。プログラマーにより、期間９００８の間（Ｄサイクル）、Ｒｅｃ＿ｅｘｅ命令の発行しないように、保証されなければならない。
そのため、命令仕様書などに、Ｒｃｎ＿ｅｘｅ命令は、Ｄサイクル期間発行してはいけないと、記述されることが望ましい。
＜実施形態３＞
実施形態１では、動的再構成演算回路２０００から出力された演算データは、一旦、演算結果記憶部５０００に記憶され、マルチスレッドプロセッサ１０００は、演算結果記憶部５０００から演算データを読み出していた。本実施形態では、最低限記憶しておかなければならない演算データ、すなわち、スレッドに割当てられた時間が終了する時の演算結果データ以外は、演算結果記憶部５０００に記憶せずに、直接マルチスレッドプロセッサ１０００に渡すものである。
【０１３０】
＜概要＞
実施形態３が実施形態１と異なる点は、図１の演算結果記憶部５０００から、マルチスレッドプロセッサ１０００へ出力される処理および構成であり、演算結果選択器６０００が追加されている点である。
図３０は、本発明の実施形態３における動的再構成論理回路装置２００の構成を示す機能ブロック図である。本図において、図１と同じ構成要素については同じ符号を用い、説明を省略する。
【０１３１】
この演算結果選択器６０００は、動的再構成演算回路２０００と演算結果記憶部５０００からの演算結果データを選択し、マルチスレッドプロセッサ１０００に伝達する。制御は、演算結果記憶部５０００より行われる。
実施形態１では、演算結果データは、演算結果記憶手段５０００からのみ、マルチスレッドプロセッサ１０００に伝達されていた。この構成では、必ず演算結果記憶手段５０００を経由するため、記憶手段５０００での書き込み、読み出しのサイクル分だけ、遅延が発生する。
【０１３２】
すなわち、動的再構成演算回路２０００演算結果データを、演算直後に、マルチスレッドプロセッサ１０００の演算データとする場合には、この遅延により演算性能が劣化する。
実施の形態３では、この問題を解決する。
演算結果記憶手段５０００内に演算データが格納されている（ＤＭＷＡとＤＭＲＡが異なる値）場合は、演算結果選択器６０００は、演算結果記憶部５０００からのデータを選択し、実施形態１で説明した処理が行われる。
【０１３３】
一方、演算結果記憶手段５０００内に演算データが格納されていない（ＤＭＷＡとＤＭＲＡが同じ値）場合は、演算結果記憶部５０００は、マルチスレッドプロセッサ１０００に対して、演算停止信号を発行する。
その後、動的再構成演算回路２０００が演算結果データを演算結果記憶部５０００に格納するサイクルにて、演算結果記憶部５０００は以下の制御を行う。
【０１３４】
演算結果選択器６０００に対して、動的再構成演算回路２０００からのデータを選択するように制御する。また、マルチスレッドプロセッサ１０００に対する演算停止を解除する。
この処理により、動的再構成演算回路２０００の演算結果データは、演算結果記憶部５０００に格納されず、マルチスレッドプロセッサ１０００に直接渡される。該当スレッドのＤＭＷＡ、ＤＭＲＡのアドレスはインクリメントされない。
【０１３５】
この構成および制御により、演算結果記憶部５０００での書き込み、読み出し処理分のレイテンシを抑制できる。これにより、動的再構成論理回路装置１００の演算性能を向上が可能となる。
＜実施形態４＞
図３１は、本発明の実施形態４における動的再構成論理回路装置３００の構成を示す機能ブロック図である。図３１において、図１と同じ構成要素については同じ符号を用い、説明を省略する。
【０１３６】
実施形態１と異なるのは、図１のマルチスレッドプロセッサ１０００が存在せず、演算ソース記憶部７０００が追加されていることである。
すなわち、本実施形態は、処理は全て動的再構成演算回路２０００で行うことが出来るスレッドを実行する場合である。
＜概要＞
実施形態４では、マルチスレッドプロセッサ１０００が行っていた、動的再構成演算回路２０００への演算データ供給を演算ソース記憶部７０００が行い、動的再構成演算回路２０００への演算指示を構成切り替え手段４０００が行い、演算結果記憶部５０００からの演算結果データ読み出しを図示しないデータ転送コントローラＤＭＡＣが行う。
【０１３７】
演算ソース記憶部７０００は、動的再構成演算回路２０００の演算ソースデータが格納され、図示しないデータ転送コントローラＤＭＡＣより演算ソースデータが供給される。
演算ソース記憶部７０００は、構成切替部４０００より制御され、書き込み、読み出しのアドレスはスレッド毎に管理される。
この演算ソース記憶部７０００の読み出し・書き込みアドレスの管理は、実施形態１の演算結果記憶部５０００と同じとなる。但し、読み出し要求は構成切替手段４０００により行われ、書き込みデータはデータ転送コントローラＤＭＡＣから、読み出しデータは動的再構成演算回路２０００に転送される。
【０１３８】
以上説明した構成により、プロセッサを構成要素としなくとも、動的再構成演算回路２０００内の構成切り替え時の性能劣化を抑制できる。
また、一度に読み出し書き込みを必要とする中間演算データを退避する必要が無く、順次読み出し書き込みが発生する演算結果データだけを格納すればよい。このため、記憶手段を少ない入出力ポートのメモリで実現でき、回路の面積を抑制できる。
【０１３９】
また、演算ソース記憶部７０００、演算結果記憶部５０００内の記憶領域に格納された演算結果データは、ＦＩＦＯでスレッド毎に管理される。このため、プロセッサ３００で実行するプログラムでは、特に構成切り替え時の演算順番を意識せずに済み、スレッド毎の管理で良いため、データ転送コントローラＤＭＡＣでは、スレッド毎の演算結果データの読み出しを容易に行える。
【０１４０】
＜応用例＞
本発明のプロセッサは、例えば、移動体通信装置等に搭載することが可能である。図３２は、本発明のプロセッサが搭載された移動体通信装置を示す図である。
移動通信装置１００００は、ディスプレイ１１０００、撮像手段１２０００、音出力手段１３０００、音入力手段１４０００、コマンド入力手段１５０００、アンテナ１６０００及び、内部に本発明であるプロセッサ１００（図１参照）を備える。
【０１４１】
プロセッサ１００は、ディスプレイ１１０００と、ビデオフレームバッファを介して接続される。プロセッサ１００は、ＪＰＥＧなどの静止画デコード処理、ＭＰＥＧなどの動画デコード処理、ゲームなどの３次元グラフィックス処理、テキスト描画処理を行い、またそれぞれの映像の重ね合わせ処理を行う。ディスプレイ１１０００は、プロセッサ１００で処理された映像を表示する。
【０１４２】
また、プロセッサ１００は、撮像手段１２０００と、ビデオフレームバッファを介して接続される。プロセッサ１００は、撮像手段１２０００より入力された映像に対して、ＪＰＥＧなどの静止画エンコード処理、ＭＰＥＧなどの動画エンコード処理を行う。
さらに、プロセッサ１００は、音出力手段１３０００と、オーディオフレームバッファを介して接続される。プロセッサ１００は、ＭＰＥＧなどの音声デコード処理を行う。音出力手段１３０００は、プロセッサ１００で処理された音声を出力する。
【０１４３】
また、プロセッサ１００は、音入力手段１４０００と、オーディオフレームバッファを介して接続される。プロセッサ１００は、音入力手段１４０００より入力された音声に対して、ＭＰＥＧなどの音声エンコード処理を行う。
ＪＰＥＧ、ＭＰＥＧなどの、ビデオ処理規格、音声処理規格は、様々な種類があり、それぞれ処理の内容が異なる。この処理が異なり、マルチスレッドプロセッサ１０００では負荷の重い部分を、動的再構成演算回路２０００にて処理させることで、複数の規格の処理に柔軟に対応可能となる。
【０１４４】
プロセッサ１００は、アンテナ１６０００と図示しない無線周波数回路ブロックと接続され、プロセッサ１００により通信処理が行われることにより、無線ネットワークを構成する。また、プロセッサ１００は、送受信データの暗復号処理も行う。
通信規格、暗号規格は、様々な種類があり、それぞれ処理の内容が異なる。この処理が異なり、マルチスレッドプロセッサ１０００では負荷の重い部分を、動的再構成演算回路２０００にて処理させることで、複数の規格の処理に柔軟に対応可能となる。
【０１４５】
移動通信装置１００００は、コマンド入力手段１５０００より、移動通信装置１００００への操作を、針や指を用いて入力することが可能である。
通信システム、映像処理システム、セキュリティー処理システムの多くは、複数の規格に対応するため、本発明の効果を受ける。説明を行った、移動通信装置だけでなく、ＴＶ・ＤＶＤプレイヤー・カーナビなどの映像表示装置、ＤＶＤレコーダ・ビデオカメラ・ＤＳＣ・セキュリティーカメラ・などの映像記録装置、オーディオプレイヤーなどの装置、通信装置内の、通信システム、セキュリティー処理システムに有益である。
【０１４６】
＜補足＞
以上、本発明に係るプロセッサについて実施形態に基づいて説明したが、このプロセッサを部分的に変形することもでき、本発明は上述の実施形態に限られないことは勿論である。即ち、
（１）実施形態では、動的再構成演算回路２０００の演算セルは４ｘ４の行列形式に配置していたが、例えば、１０ｘ４での矩形行列形式でも良い。また、ライン単位で配置されていてもよく、配置の構成を問わない。
【０１４７】
また、演算セル２１００は、乗算、シフト、加算、論理演算を行えるとしたが、更に除算や減算、ローテート演算など演算の種類が増えても、また演算の種類が少なくても良い。
更にこの演算セル２１００は、全て同じ構成としていたが、特定の演算セルのみ除算ができるなど、構成が違う演算セル２１００があってもよい。
【０１４８】
なお、演算セル２１００の構成の切り替わりは、同時に複数個構成が切り替わっても良い。
全ての演算セル２１００及び動的再構成接続器２２００は、構成の切り替え可能としたが、一部構成が切り替わらない演算セル２１００及び、動的再構成接続器２２００があってもよい。
【０１４９】
演算セル２１００は１入力１出力であったが、３入力２出力など、入出力の個数は変わっても良い。その場合は、演算ソース選択器２２１０の入力個数および、選択する個数を増やし、出力データ選択器２２５０の入力個数も増やすことにより、対応する。
構成切替手段４０００から、演算セル２１００への構成切り替え信号線は、演算セル２１００毎に個別に引いていたが、必ず同時に切り替わる演算セル２１００同士は、同じ切り替え信号線を引いても良い。
【０１５０】
なお、演算セル２１００は、同じクロックで動作させていたが、複数のクロックラインを配し、演算セル毎に演算動作クロックを変えても良い。
動的再構成演算回路２０００は、マルチスレッドプロセッサ１０００で実行中のスレッドと同期して構成を変更していたが、プロセッサの処理スレッドを変更せずに、動的再構成演算回路２０００のみを適宜構成変更してもよい。
（２）実施形態１、２では、マルチスレッドプロセッサ１０００で動作するスレッドＡ、Ｂ、Ｃは、全て動的再構成演算回路２０００で演算が行っていたが、動的再構成演算回路２０００を用いないスレッドがあってもよい。その場合は、次に動的再構成演算回路２０００を使用するスレッドの構成に切り替わっていても良い。
【０１５１】
また、マルチスレッドプロセッサ１０００と動的再構成演算回路２０００は、同じクロックで動作していたが、複数のクロックラインを配し、演算動作クロックを変えても良い。
さらに、マルチスレッドプロセッサ１０００は、複数スレッドをサポートしないプロセッサであってもよく、複数のコアを集積したマルチコアの構成でもよく、また、内部構成が再構成可能演算回路であっても良い。
（３）実施形態１、２では、演算結果記憶手段５０００への、マルチスレッドプロセッサ１０００からの読み出し用の命令では、マルチスレッドプロセッサ１０００で処理中のスレッドでの動的再構成演算回路２０００の演算結果データのみ、読み出せていたが、これを他スレッドの演算結果も読み出せるようにしても良い。
【０１５２】
その場合は、読み出し命令にスレッド番号を指定するオペランドを追加し、読み出し時に、マルチスレッドプロセッサ１０００から演算結果記憶部５０００にスレッド番号を与えるようにする。この時、演算結果記憶部５０００は、与えられたスレッド番号のＤＭＲＡに切り替える。これにより、他のスレッドの演算結果の読み出しを実現できる。
更に、マルチスレッドプロセッサ１０００は読み出し用命令をサポートしなくても良い。代わりに動的再構成演算回路２０００への演算指示命令のオペランドに、マルチスレッドプロセッサ１０００内のレジスタをデスティネーションとして指定できるようにし、動的再構成演算回路２０００での演算が終わると、そのレジスタに演算結果データが書き込まれるようにしてもよい。
【０１５３】
また、演算用命令のソースデータ個数を２、読み出し用命令のデータ個数を１としたが、この個数を変更しても良い。動的再構成演算回路２０００への演算ソースデータ個数の増加に対応するためには、マルチスレッドプロセッサ１０００から動的再構成演算回路２０００へのデータ配線を増加し、マルチスレッドプロセッサ１０００からの出力ポート個数、動的再構成演算回路２０００への入力ポートを増加すればよい。
【０１５４】
演算結果記憶部５０００からの読み出しデータ個数の増加は、演算結果記憶部５０００からマルチスレッドプロセッサ１０００への配線を増やし、マルチスレッドプロセッサ１０００の入力ポート個数、演算結果記憶部５０００の出力ポートを増加すればよい。
更に、演算結果記憶部５０００へのスレッド毎の領域アドレスを設定する命令にて、領域の終了アドレスも設定していたが、このオペランドが無くてもよい。全スレッドの領域開始アドレスが設定されれば、他のスレッド領域開始アドレスまでを、各スレッドの領域と判定すればよい。
【０１５５】
なお、マルチスレッドプロセッサ１０００の処理切り替えを１サイクルとしたが、複数サイクル要しても良い。この場合は、構成切り替え手段４０００により動的再構成演算回路２０００及び、演算結果記憶手段５０００に対し、そのマルチスレッドプロセッサ１０００の切り替え処理のサイクル数だけ、処理停止制御をすればよい。
（４）実施形態１、２、３では、演算結果記憶部５０００にて、各スレッド用領域をＦＩＦＯで管理していたが、ＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）形式など、他の形式で管理しても良い。
【０１５６】
また、演算結果記憶部５０００にて管理されるＤＭＷＡ、ＤＭＲＡの管理を、マルチスレッドプロセッサ１０００や構成切替部４０００にて行っても良い。
（５）実施の形態４では、演算ソース記憶部７０００にて、各スレッドＦＩＦＯで管理していたが、ＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）形式など、他の形式で管理しても良い。
【０１５７】
また、演算ソース記憶部７０００にて管理される書き込み、読み出しアドレスの管理を、構成切替部４０００にて行っても良い。
（６）実施形態１、２．３では、構成情報記憶部３０００内に、各スレッドの構成情報を保存していたが、これはなくても良い。代わりに、各演算セル、演算ソース選択器、出力データ選択器内に、全スレッドの構成情報を予め保持する記憶手段を設け、構成切り替わり時に、スレッド番号と切り替わり指示を構成切替部４０００から受け、所望の構成に切り替わっても良い。
【０１５８】
この場合、構成情報記憶部３０００からの配線を削除できるが、全スレッドの構成情報を予め保持する記憶部はレジスタでの構成となる。構成情報記憶部３０００は入出力ポートの少ないメモリで構成できるため、記憶手段分の面積が増加する。
（７）実施形態では、各演算セルの再構成のタイミングを、構成切替部４０００からの指示によって行うこととしているが（図１６：ステップＳ４００〜ステップＳ４２０参照）、それぞれの演算セルで再構成のタイミングを判断することとしても良い。
【０１５９】
例えば、全演算セル２１００が、以下の判定を並列に行う。
構成切替部４０００から待ちサイクルが経過し、再構成の指示があったら、各演算セル２１００は、待機サイクルＥを判定し、そのサイクルだけ切り替え制御を待機する。Ｅは、次スレッドでの、該当演算セルより前にある、演算セル２１００の個数（演算段数）を表す。各演算セルＥの値は、演算セル段数テーブル４１００（図９（ａ）参照）を参照する。
【０１６０】
例えば、各スレッドにおいて、演算セルａは、前の演算段数は、０であるから、再構成指示があれば、すぐに構成変更の処理が行われる。一方、演算セルｍは、スレッドＡでは３サイクル、スレッドＢでは７サイクル、スレッドＣでは１５サイクル待たされることになる。
この待機サイクルＥの算出が終わると、構成切替部４０００は、構成情報記憶部３０００に指示し、該当演算セル２１００の次スレッドでの構成情報及び、その演算セル２１００に対応する演算ソース選択器２２１０の次スレッドでの構成情報の読み出し処理を行う。この構成情報は、構成情報転送用のバスを通して、該当演算セル２１００及び該当演算ソース選択器２２１０に供給される。
【０１６１】
次に、該当演算セル２１００及び該当演算ソース選択器２２１０に対して、構成切り替え信号を生成し、該当演算セル２１００及び該当演算ソース選択器２２１０は、この信号を受けて、構成情報転送用のバスに供給されている構成情報を読み込み、次スレッドの構成に切り替わる。
構成切替部４０００は、全演算セルが次スレッド用に再構成されるサイクルをスレッド段数テーブル４２００（図９（ｂ））を参照して求め、出力データ演算器２２５０の再構成を開始する。
（８）実施形態では、スレッド切り替え時に、現スレッドの演算セルと次スレッドの演算セルとを、同時に動作させることとしているが、現スレッドの処理が終了したら、すぐに次のサイクルで、次スレッドの実行を開始することとしても良い。現スレッド実行中に、演算の終了した演算セルから順に次スレッド用に再構成しているので、再構成の時間が不要だからである。
（９）実施形態で示したプロセッサの各機能を実現させる為の各制御処理（図１４等参照）をＣＰＵに実行させる為のプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ、フラッシュメモリ等がある。流通、頒布されたプログラムは、機器におけるＣＰＵで読み取り可能なメモリ等に格納されることにより利用に供され、そのＣＰＵがそのプログラムを実行することにより実施形態で示したプロセッサの各機能が実現される。
【産業上の利用可能性】
【０１６２】
本発明にかかるマルチスレッド対応プロセッサ１００は、動的再構成演算回路２０００内の構成切り替え時の性能劣化を抑制できる。
また、一度に読み出し書き込みを必要とする中間演算データを退避する必要が無く、順次読み出し書き込みが発生する演算結果データだけを格納すればよい。このため、記憶手段を少ない入出力ポートのメモリで実現でき、回路の面積を抑制できる。
【０１６３】
更に、この記憶領域に格納された演算結果データは、ＦＩＦＯでスレッド毎に管理される。このため、マルチスレッドプロセッサ１０００で実行するプログラムでは、特に構成切り替え時の演算順番を意識せずに済み、スレッド毎の管理で良いため、読み出しのプログラムを容易に作成できる。
この構成により、時分割多重処理が必要となるメディア処理装置として有用である。また通信やセキュリティー等の用途にも応用できる。
【図面の簡単な説明】
【０１６４】
【図１】プロセッサ１００の構成例を表す図である。
【図２】動的再構成演算回路２０００の構成を示す概略図である。
【図３】１つの演算セルと、関連する動的再構成接続部とを示す図である。
【図４】演算セルと演算データ選択器、出力データ選択器に構成情報と制御信号とを供給する信号線を示す図である。
【図５】演算セルに演算データを供給する信号線を示す図である。
【図６】スレッドＡのデータの流れを示す図である。
【図７】スレッドＢのデータの流れを示す図である。
【図８】スレッドＣのデータの流れを示す図である。
【図９】図９（ａ）は、演算セル段数テーブルの構成及び内容例を示し、図９（ｂ）は、スレッド段数テーブルの構成及び内容例を示す。
【図１０】演算セル構成情報テーブル３１００の構成及び内容例を示し、このデータは、構成情報記憶部３０００が予め記憶しているデータである。
【図１１】従来のスレッドの切り替えを示す図である。
【図１２】スレッドに割当てられた時間の最後のサイクルに実行される演算セル２１００を示した図である。
【図１３】本発明のスレッドの切り替えを示す図である。
【図１４】図１４は、スレッド切り替え時のマルチスレッドプロセッサ１０００と構成切替部４０００との処理を示すフローチャートである。
【図１５】待ちサイクル数の算出処理を示すフローチャートである。
【図１６】演算セル、演算ソース選択器の再構成処理を示すフローチャートである。
【図１７】スレッドＡからスレッドＢへの切り替え時の動的再構成演算回路の遷移図である。
【図１８】スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。
【図１９】これら制御信号と出力データ選択器２２５０の処理との関係を表すタイムチャートである。
【図２０】これらの制御信号と演算結果記憶部５０００の処理との関係を表すタイムチャートである。
【図２１】演算結果記憶部５０００内の各スレッドの領域を表す図である。
【図２２】スレッドＣからスレッドＡへの切り替え時の動的再構成演算回路の遷移図である。
【図２３】スレッド切り替えの際の、マルチスレッドプロセッサ１０００等からの制御信号と演算セル等の処理との関係を表すタイムチャートである。
【図２４】スレッドの切替スケジュールを表したタイムチャートである。
【図２５】演算結果記憶部５０００に関する命令例等である。
【図２６】図２６（ａ）は、マルチスレッドプロセッサ１０００からの動的再構成演算回路２０００への演算命令例であり、図２６（ｂ）は、演算結果記憶部５０００に対する演算結果読み出し命令例である。
【図２７】図２７（ａ）は、スレッドＡでのＲｃｎ＿ｅｘｅ命令と、Ｒｃｎ＿ｒｄ命令のみのプログラム例であり、図２７（ｂ）は、Ｒｃｎ＿ｅｘｅ命令、Ｒｃｎ＿ｒｄ命令の間に４サイクル分の演算用命令を挿入してあるプログラム例である。
【図２８】待ちサイクル期間が生じないスレッド切り替えのスケジュールを示したタイムチャートである。
【図２９】命令仕様書のＲｃｎ＿ｅｘｅ命令の記載例である。
【図３０】本発明の実施形態３における動的再構成論理回路装置２００の構成を示す機能ブロック図である。
【図３１】本発明の実施形態４における動的再構成論理回路装置３００の構成を示す機能ブロック図である。
【図３２】本発明のプロセッサが搭載された移動体通信装置を示す図である。
【図３３】動的再構成演算回路を備える、マルチスレッドプロセッサの従来例である。
【符号の説明】
【０１６５】
１００  ２００  ３００    プロセッサ
１０  １０００    マルチスレッドプロセッサ
２０  ２０００    動的再構成演算回路
２１  ２１００    演算セル
２２００    動的再構成接続部
２２１０    演算ソース選択器
２２５０    出力データ選択器
３０００    構成情報記憶部
３１００    演算セル構成情報テーブル
４０００    構成切替部
４１００    演算セル段数テーブル
４２００    スレッド段数テーブル
５０００    演算結果記憶部
６０００    演算結果選択器
７０００    演算ソース記憶部
１００００  移動通信装置
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2007060932.tif 000036
【図２】
2007060932.tif 000037
【図３】
2007060932.tif 000038
【図４】
2007060932.tif 000039
【図５】
2007060932.tif 000040
【図６】
2007060932.tif 000041
【図７】
2007060932.tif 000042
【図８】
2007060932.tif 000043
【図９】
2007060932.tif 000044
【図１０】
2007060932.tif 000045
【図１１】
2007060932.tif 000046
【図１２】
2007060932.tif 000047
【図１３】
2007060932.tif 000048
【図１４】
2007060932.tif 000049
【図１５】
2007060932.tif 000050
【図１６】
2007060932.tif 000051
【図１７】
2007060932.tif 000052
【図１８】
2007060932.tif 000053
【図１９】
2007060932.tif 000054
【図２０】
2007060932.tif 000055
【図２１】
2007060932.tif 000056
【図２２】
2007060932.tif 000057
【図２３】
2007060932.tif 000058
【図２４】
2007060932.tif 000059
【図２５】
2007060932.tif 000060
【図２６】
2007060932.tif 000061
【図２７】
2007060932.tif 000062
【図２８】
2007060932.tif 000063
【図２９】
2007060932.tif 000064
【図３０】
2007060932.tif 000065
【図３１】
2007060932.tif 000066
【図３２】
2007060932.tif 000067
【図３３】
2007060932.tif 000068
【国際調査報告】
2007060932.tif 000069
2007060932.tif 000070
2007060932.tif 000071