(57)【特許請求の範囲】
【請求項１】
それぞれのプロセスをそれぞれ実行し、前記プロセスの一部をＦＰＧＡ回路に処理させる複数のプロセッサを有し、
前記複数のプロセッサのうち第１のプロセッサは、実行中の第１のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼して前記ＦＰＧＡ回路の処理完了待ち状態に推移し、第２のプロセスの実行に推移する場合、移動先プロセッサ情報を前記ＦＰＧＡ回路に送ると共に、前記移動先プロセッサに前記ＦＰＧＡ回路での前記一部の処理完了後の前記第１のプロセス継続処理のための環境設定情報を送り、
前記移動先プロセッサは、前記ＦＰＧＡ回路が前記一部の処理を実行中に、前記環境設定情報の設定を行い、前記ＦＰＧＡ回路からの処理完了通知に応答して前記第１のプロセスの処理を継続する、並列処理装置。
【請求項２】
さらに、少なくとも一つの前記複数のプロセッサが実行するプロセスの一部を処理する前記ＦＰＧＡ回路を有する、請求項１に記載の並列処理装置。
【請求項３】
前記ＦＰＧＡ回路は、前記移動先プロセッサ情報の移動先プロセッサに、前記処理完了通知を送る、請求項２に記載の並列処理装置。
【請求項４】
さらに、前記ＦＰＧＡ回路と前記複数のプロセッサそれぞれとの間に、前記処理完了通知を送信する複数の処理完了通知信号線を有し、
前記ＦＰＧＡ回路は、前記処理完了通知を前記複数の処理完了通知信号線のいずれかを介して送信する、請求項２に記載の並列処理装置。
【請求項５】
前記複数のプロセッサは、実行中のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼する場合、依頼元プロセッサの情報を前記ＦＰＧＡ回路に送り、
前記複数のプロセッサは、第２のプロセスの実行に推移する場合、前記ＦＰＧＡ回路からの処理完了通知を前記移動先プロセッサに転送する、請求項４に記載の並列処理装置。
【請求項６】
前記複数のプロセッサは、前記第１のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼する場合、依頼元プロセッサの情報を前記ＦＰＧＡ回路に送り、前記ＦＰＧＡ回路の処理完了待ち状態を第１の所定期間継続する、請求項１に記載の並列処理装置。
【請求項７】
前記環境設定情報は、前記第１のプロセッサ内のレジスタに設定されたレジスタ設定データを有する、請求項１に記載の並列処理装置。
【請求項８】
前記複数のプロセッサのそれぞれは、任意のプロセスを実行中に割込信号を受信すると、実行中のプロセスより優先度が高い他のプロセスを起動及び実行し、実行中のプロセスの実行を停止する、請求項１に記載の並列処理装置。
【請求項９】
前記移動先プロセッサは、前記環境設定情報の設定を完了後、前記ＦＰＧＡ回路の処理完了待ち状態に推移する、請求項１に記載の並列処理装置。
【請求項１０】
それぞれのプロセスをそれぞれ実行し、前記プロセスの一部をＦＰＧＡ回路に処理させる複数のプロセッサを有する並列処理装置の並列処理方法であって、
前記複数のプロセッサのうち第１のプロセッサが、実行中の第１のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼して前記ＦＰＧＡ回路の処理完了待ち状態に推移し、第２のプロセスの実行に推移する場合、移動先プロセッサ情報を前記ＦＰＧＡ回路に送ると共に、前記移動先プロセッサに前記ＦＰＧＡ回路での前記一部の処理完了後の前記第１のプロセス継続処理のための環境設定情報を送る工程と、
前記移動先プロセッサが、前記ＦＰＧＡ回路が前記一部の処理を実行中に、前記環境設定情報の設定を行い、前記ＦＰＧＡ回路からの処理完了通知に応答して前記第１のプロセスの処理を継続する工程とを有する、並列処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置及び並列処理方法に関する。
【背景技術】
【０００２】
近年の演算処理装置（ＣＰＵ：Central Processing Unit）は、複数のＣＰＵ（またはＣＰＵコア、プロセッサ）が、マルチメディアデータなどの大きなデータを並列処理することで、処理性能を向上させている。従来のＣＰＵやメモリの動作周波数を増大させることは、消費電力が増大しチップの発熱量が増大するため、好ましくない。
【０００３】
そして、さらなる性能改善方式として、ハードウエア回路を再構成可能なリコンフィギュラブル回路（Reconfigurable Circuit）の一つであるＦＰＧＡ回路（Field Programmable Gate Array Circuit）に、実行中のプロセスの一部の処理を実行させることが提案されている。ＦＰＧＡ回路は、回路定義データ（またはコンフィグレーションデータ）に基づいて処理に適した演算回路を構築する。また、ＦＰＧＡ回路は複数の演算回路を有するので、コンフィグレーションデータによって複数の演算回路を構築し、演算処理を並列に行うこともできる。そして、将来的には、演算処理装置が、複数のプロセッサ（またはＣＰＵ，ＣＰＵコア）に加えて、ＦＰＧＡ回路を内蔵し、プロセッサが実行中のプロセスの一部の処理をＦＰＧＡ回路に処理させることが予測される。
【０００４】
以下の特許文献１には、リコンフィギュラブル回路を利用するものではないが、複数のプロセッサが周辺ハードウエアにタスクを依頼することが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２６０３７７号公報
【特許文献２】特開２００６−１１９８０２号公報
【特許文献３】特開２００７−１４８７４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、マルチプロセッサは、複数のプロセッサが複数のプロセスをラウンドロビン方式で交互にそして並列して処理し、さらに割込発生時に実行中のプロセスの実行を停止し、より高い優先度の割込プロセスを実行する。そのため、プロセッサが実行中のプロセスの一部の処理をＦＰＡＧ回路に依頼した後で且つ未だＦＰＧＡ回路の処理が完了する前に、そのプロセスの実行が他のプロセッサに移動する場合が想定される。
【０００７】
この場合、他のプロセッサは、ＦＰＧＡ回路の処理が完了すると、元のプロセスを起動してその動作環境を再構築し、元のプロセスの実行を再開する。動作環境の再構築は、例えば、プロセッサの内部レジスタのコンテキストデータの再設定などである。そのため、元のプロセスを起動するためのオーバーヘッド時間が、ＦＰＧＡ回路での処理時間よりも大きくなる場合があり、演算処理回路の処理能力を低下させる。ＦＰＧＡ回路での処理時間が短いことに加えてＦＰＧＡ回路に処理させる回数が増大すると、より大きな処理能力の低下を招く。
【０００８】
そこで、実施の形態の第１の側面の目的は、処理能力の低下を抑制した並列処理装置及び並列処理方法を提供することにある。
【課題を解決するための手段】
【０００９】
本実施の形態の第１の側面は、それぞれのプロセスをそれぞれ実行し、前記プロセスの一部をＦＰＧＡ回路に処理させる複数のプロセッサを有し、
前記複数のプロセッサのうち第１のプロセッサは、実行中の第１のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼して前記ＦＰＧＡ回路の処理完了待ち状態に推移し、第２のプロセスの実行に推移する場合、移動先プロセッサ情報を前記ＦＰＧＡ回路に送ると共に、前記移動先プロセッサに前記ＦＰＧＡ回路での前記一部の処理完了後の前記第１のプロセス継続処理のための環境設定情報を送り、
前記移動先プロセッサは、前記ＦＰＧＡ回路が前記一部の処理を実行中に、前記環境設定情報の設定を行い、前記ＦＰＧＡ回路からの処理完了通知に応答して前記第１のプロセスの処理を継続する、並列処理装置である。
【発明の効果】
【００１０】
第１の側面によれば、処理能力の低下を抑制することができる。
【図面の簡単な説明】
【００１１】
【図１】並列処理装置の一例を示す図である。
【図２】マルチプロセッサによるラウンドロビン方式での複数プロセスの並列処理を示す図である。
【図３】マルチプロセッサによる割込処理を説明する図である。
【図４】マルチプロセッサのあるプロセッサが、実行中のプロセスの一部の処理をＦＰＧＡ回路に依頼した場合の動作例を示す図である。
【図５】第１の実施の形態における並列処理装置（または演算処理装置）の構成例を示す図である。
【図６】ＦＰＧＡ回路の詳細構成を示す図である。
【図７】プロセスの移動元のプロセッサの動作を示すフローチャート図である。
【図８】プロセスの移動先のプロセッサの動作を示すフローチャート図である。
【図９】ＦＰＧＡ回路の動作を示すフローチャート図である。
【図１０】演算処理装置の第１の動作を示すシーケンス図である。
【図１１】演算処理装置の第２の動作を示すシーケンス図である。
【図１２】演算処理装置の第３の動作を示すシーケンス図である。
【図１３】並列処理装置（演算処理装置）の適用例である携帯端末の構成を示す図である。
【図１４】第２の実施の形態における並列処理装置（演算処理装置）の構成例を示す図である。
【発明を実施するための形態】
【００１２】
図１は、並列処理装置の一例を示す図である。並列処理装置１は、複数のＣＰＵ（またはＣＰＵコア、プロセッサ、以下代表してプロセッサと称する。）を有する演算処理装置であり、システムＬＳＩチップである。以下、並列処理装置を演算処理装置と称する。
【００１３】
この演算処理装置１は、４つのプロセッサ10_1〜10_4を有するプロセッサ群１０と、内部メモリ１２と、バスＢＵＳと、周辺回路群１６とを有する。周辺回路群１６には、例えば、ＤＲＡＭなどで構成される高速アクセス可能なメインメモリ２０と、フラッシュメモリやハードディスクなどの大容量で不揮発性の補助メモリ２２などが接続される。演算処理装置１は、リコンフィギュラブル回路の一つであるＦＰＧＡ回路１４を内部に有する。ＦＰＧＡ回路１４は、チップの外側に設けられても良く、その場合も、周辺回路群１６を介してプロセッサに接続される。
【００１４】
補助メモリ２２内には、図示しないＯＳ（Operating System）や複数のアプリケーションプログラム、その他データなどが格納されている。そして、ＯＳやアプリケーションプログラムは、メインメモリ内に展開され、各プロセッサにより実行される。
【００１５】
演算処理装置１内の複数のプロセッサ10_1〜10_4は、複数のアプリケーションプログラムのプロセスを順番に、そして並列に実行する。複数のプロセッサそれぞれは、複数のプロセスのうち任意のプロセスを所定期間だけ実行し、所定期間経過後は異なるプロセスを実行する。これにより、複数のプロセッサは、複数のプロセスをラウンドロビン方式で順次実行する。この複数のプロセッサによるラウンドロビン方式による複数プロセスの処理は、各プロセッサがプロセスと共に実行するＯＳが制御する。
【００１６】
さらに、複数のプロセッサそれぞれは、あるプロセス実行中に割込が発生すると、ＯＳの割込ハンドラの制御により、実行中のプロセスを一旦停止し、優先度が高い割込処理の実行を開始する。そして、割込ハンドラは、アイドル状態（または空き状態）の他のプロセッサを検索し、検出された他のプロセッサに元のプロセスを実行させる。
【００１７】
また、複数のプロセッサそれぞれは、実行中のプロセスの一部の処理をＦＰＧＡ回路に依頼する。そのために、プロセッサは、ＦＰＧＡ回路にコンフィグレーションデータを設定し、一部の処理を実行できる演算回路をＦＰＧＡ回路内に構築する。そして、プロセッサは、処理対象の入力データをＦＰＧＡ回路に出力し、ＦＰＧＡ回路内に構築された演算回路が、入力データを演算し、演算結果を依頼元のプロセッサに返信する。
【００１８】
図２は、マルチプロセッサによるラウンドロビン方式での複数プロセスの並列処理を示す図である。ここでは、５つのプロセスPR_0〜PR_4が処理対象であり、それを４つのプロセッサCPU_1〜CPU_4が順番に交代して並列処理する。
【００１９】
まず、プロセッサCPU_1はプロセスPR_0を実行する。CPU_1は、まず、ＯＳを実行して、プロセスPR_0を起動し、プロセッサ内の各種レジスタ、メモリ制御のためのレジスタなどに初期値データを設定する動作環境設定を行う。その後、CPU_1はプロセスPR_0の実行を開始する。プロセッサCPU_2〜CPU_4も同様に、プロセスPR_1、PR_2、PR_3を起動してそれらの動作環境を設定し、各プロセスを実行する。
【００２０】
各プロセッサCPU_1〜CPU_4は、所定期間T1、各プロセスを実行すると、そのプロセスの実行を中断し、プロセッサ内のレジスタのコンテキストデータなどの環境設定情報を内部メモリやメインメモリまたは補助メモリなどに退避し、実行待ち状態にある他のプロセスの起動、実行に遷移する。図２の例では、プロセッサCPU_1は、プロセスPR_0の実行を中断し、他のプロセスPR_4を起動して動作環境設定後、プロセスPR_4の実行を開始している。同様に、プロセッサCPU_2は、プロセスPR_1の実行を中断し、コンテキストデータをメモリに退避し、他のプロセスPR_0を起動、実行する。プロセッサCPU_3は、プロセスPR_2の実行を中断し、他のプロセスPR_1を起動、実行し、プロセッサCPU_4は、プロセスPR_3の実行を中断し、他のプロセスPR_2を起動、実行する。
【００２１】
このように、ラウンドロビン方式で複数のプロセスを並列処理するために、各プロセッサは、所定期間T1毎に、実行対象のプロセスが変更される。そのため、各プロセッサのＯＳが、各プロセスの実行時間を監視し、所定期間毎に、プロセスの実行を中断して環境設定情報を退避し、実行待ち状態のプロセスから選択した別のプロセスを起動、実行する。また、例えば、実行を中断されたプロセスは、他にアイドル状態のプロセッサがあればそこで起動、実行されるが、他にアイドル状態のプロセッサがない場合は、実行待ち状態のプロセスに加えられる。
【００２２】
図３は、マルチプロセッサによる割込処理を説明する図である。ここでは、プロセッサCPU_2がプロセスPR_0を実行中に割込が発生し、プロセスPR_0より高い優先度のプロセスPR_1が起動、実行する例である。図３において、プロセッサCPU_2がプロセスPR_0の動作環境設定後プロセスPR_0実行中に、プロセッサCPU_2に割込が発生している(S1)。これに応答して、プロセッサCPU_2のＯＳは、プロセスPR_0の実行を中断しそのコンテキストデータなどをメモリに退避する（S2）。
【００２３】
そして、プロセッサCPU_2のＯＳは、アイドル中の他のプロセッサを探索し、プロセッサCPU_3がアイドル中であることを検出し、プロセッサCPU_3にプロセッサ間メッセージの一つであるプロセス起動メッセージを、プロセッサCPU_3に送信する（S3）。プロセス起動メッセージには、メッセージ種別情報に加えて、起動対象プロセスPR_0の識別情報と、そのプロセスPR_0の実行中断時に退避したデータの格納先アドレスなどが含まれる。これに応答して、プロセッサCPU_3は、プロセスPR_0の起動処理で退避データを設定して動作環境を構築し、プロセスPR_0の実行を再開する。
【００２４】
アイドル中の他のプロセッサが検出できない場合、中断したプロセスPR_0は、実行待ち状態のプロセス群の待ち行列内に加えられ、やがていずれかのプロセッサにより起動、実行される。
【００２５】
一方、プロセッサCPU_2のＯＳは、割込処理であるプロセスPR_1を起動する（S4）。起動処理により、プロセッサCPU_2のＯＳは、プロセスPR_1のコンテキストデータなどをレジスタに設定して動作環境を設定し、プロセスPR_1の実行を開始する。
【００２６】
図４は、マルチプロセッサのあるプロセッサが、実行中のプロセスの一部の処理をＦＰＧＡ回路に依頼した場合の動作例を示す図である。図４の例では、プロセッサCPU_2がプロセスPR_0を実行中に、プロセスPR_0の一部の処理をＦＰＧＡ回路に依頼する(S10)。この一部の処理の実行依頼には演算回路構築のためのコンフィグレーションデータが添付される。その結果、ＦＰＧＡ回路は依頼された処理に対応した演算回路を構築してプロセスPR_0の一部の処理を実行する。一方、プロセッサCPU_2では、プロセスPR_0のＦＰＧＡ処理完了待ち状態になる。
【００２７】
ところが、その後、プロセッサCPU_2に割込が発生し、プロセスPR_0が中断し、優先度が高い別のプロセスPR_1が起動し実行される（S11）。やがて、ＦＰＧＡ回路がプロセスPR_0から依頼された処理を完了し、依頼元のプロセッサCPU_2に処理完了通知を割り込み信号として送信する（S12）。
【００２８】
この時点で、プロセッサCPU_2のＯＳは、アイドル状態のプロセッサCPU_3を検出し(S13)、プロセッサCPU_3にプロセスPR_0を起動するメッセージを送信する（S14）。これに応答して、プロセッサCPU_3はプロセスPR_0を起動して実行するための動作環境を設定し、ＦＰＧＡ回路による処理に続くプロセスPR_0の処理の実行を再開する（S15）。また、例えば、プロセッサCPU_2は、プロセスPR_1の実行を再開する（S16）。
【００２９】
上記の動作例では、ＦＰＧＡ回路での処理を呼び出した元のプロセスPR_0は、ＦＰＧＡ回路での処理完了時に、元のプロセッサCPU_2ではなく、その時点でアイドル状態の別のプロセッサCPU_3で起動される。その場合、プロセッサCPU_3は、プロセスPR_0を起動してその実行を再開するための動作環境を設定する処理を行う。この動作環境設定処理するためのオーバーヘッド時間が、ＦＰＧＡ回路での処理時間より長くなると、演算処理装置の処理能力の低下を招く。特に、ＦＰＧＡ回路の起動回数が頻繁に発生すると、このオーバーヘッド時間による処理能力の低下は大きくなる。また、携帯端末が演算処理装置を搭載する場合は、動作周波数が低いためオーバーヘッド時間はより長くなる。
【００３０】
さらに、ＦＰＧＡ回路の処理完了後に、アイドル状態のプロセッサがない場合、ＦＰＧＡ回路を呼び出した元のプロセスPR_0は実行待ち状態になり、実行再開まで一定の時間待たされるため、オーバーヘッド時間は更に長くなり、処理能力の低下は更に大きくなる。一般に、ＦＰＧＡ回路は、汎用性を高めるために、簡単で汎用性の高い演算処理を行う回路を内蔵している。したがって、上記のオーバーヘッド時間に対してＦＰＧＡ回路の処理時間が短くなる傾向があり、処理能力の低下は避けられない。
【００３１】
［第１の実施の形態］
図５は、第１の実施の形態における並列処理装置（または演算処理装置）の構成例を示す図である。図５の演算処理装置１は、図１と同様に、複数のプロセッサ10_1〜10_4を有するシステムＬＳＩチップである。
【００３２】
この演算処理装置１は、４つのプロセッサ10_1〜10_4を有するプロセッサ群１０と、内部メモリ１２と、バスＢＵＳと、周辺回路群１６とを有する。周辺回路群１６には、高速アクセス可能なメインメモリ２０と、大容量で不揮発性の補助メモリ２２などが接続される。演算処理装置１は、リコンフィギュラブル回路の一つであるＦＰＧＡ回路１４を内部に有する。但し、ＦＰＧＡ回路１４は、チップの外側に設けられても良く、その場合は、周辺回路群１６を介してプロセッサに接続される。
【００３３】
補助メモリ２２内には、図示しないＯＳ（Operating System）や複数のアプリケーションプログラム、その他データなどが格納されている。そして、ＯＳやアプリケーションプログラムは、メインメモリ内に展開され、各プロセッサにより実行される。
【００３４】
ＯＳによるマルチプロセッサへのプロセス割当制御の方法は、図１の例と同様であり、複数のプロセッサに複数のプロセスをラウンドロビン方式で順番に且つ並行して実行させる。また、ＯＳは、プロセッサに割込が発生すると、実行中のプロセスを中断し、実行中のプロセスの優先度を引き下げて、割込したプロセスを起動、実行する。そして、ＯＳは、中断されるプロセスについて、アイドル状態のプロセッサがあれば、そのプロセッサに起動、実行させ、アイドル状態のプロセッサがなければ、待機中のプロセスに加えて、次に実行されるまで待機させる。
【００３５】
また、本実施の形態のＯＳは、プロセッサが実行中のプロセスの一部の処理をＦＰＧＡ回路に依頼すると、一定時間だけそのプロセスをＦＰＧＡ回路の処理完了待機状態に制御する。短時間である処理完了待機状態中にＦＰＧＡ回路の処理が完了すれば、ＯＳはプロセスの実行を再開する。この場合、プロセスの起動処理（環境設定処理）が不要であるため、プロセッサは即座にプロセスの実行を再開する。
【００３６】
しかし、ＦＰＧＡ回路の処理が完了しないまま処理完了待機状態の一定時間が経過すると、アイドル状態の他のプロセッサを検索し、検出した他のプロセッサに待機状態のプロセスの起動を依頼する。これに応答して、検出された他のプロセッサは、ＦＰＧＡ回路が処理実行中にプロセスを起動し、プロセス実行のための動作環境の設定処理を行う。したがって、その後ＦＰＧＡ回路が処理完了したとき、その処理完了通知に応答して、他のプロセッサは、プロセスの起動処理済みであるため、即座にプロセスの実行を再開する。その結果、図４で説明したオーバーヘッド時間はなくなるかまたは短くなる。
【００３７】
図５に示したＦＰＧＡ回路１４は、コンフィグレーションデータに基づいて演算回路を構築する演算回路１４１と、ＦＰＧＡ回路１４と各プロセッサ10_1〜10_4との間にそれぞれ設けられた４本の処理完了通知信号線15_1〜15_4と、処理完了通知信号を割込信号として出力する処理完了通知信号送信回路１４２とを有する。送信回路１４２は、演算回路１４１が出力する処理完了通知信号Itrを、処理完了通知信号線15_1〜15_4のいずれかを介してプロセッサに送信する。
【００３８】
さらに、ＦＰＧＡ回路１４は、選択レジスタ１４３と、ＦＰＧＡ回路に処理を依頼した依頼元のプロセッサのＩＤが格納されるプロセッサＩＤレジスタ１４５と、ＦＰＧＡ回路を呼び出したプロセスのＩＤが格納されるプロセスＩＤレジスタ１４４とを有する。選択レジスタ１４３は、依頼元プロセッサに対応する選択ビットを格納し、処理完了通知信号送信回路１４２は、選択レジスタ１４３内の選択ビットに基づいて依頼元のプロセッサに対応する処理完了通知信号線１５を選択し、処理完了通知信号Itrを出力する。
【００３９】
図６は、ＦＰＧＡ回路の詳細構成を示す図である。リコンフィギュラブル回路の一つであるＦＰＧＡ回路１４は、演算回路１４１と、プロセッサＩＤレジスタ１４５と、プロセスＩＤレジスタ１４４と、処理完了通知信号送信回路１４２とを有する。
【００４０】
処理完了通知信号送信回路１４２は、図示されるとおり、処理完了通知信号Itrが出力される信号線を、処理完了通知信号線１５のいずれかに接続するスイッチ群ＳＷを有し、選択レジスタ１４３内の選択ビットによりスイッチ群ＳＷの各スイッチが制御される。
【００４１】
演算回路１４１は、バスＢＵＳと接続されたバススイッチ３０と、演算回路の再構築と処理実行及び処理完了を制御するシーケンス制御回路３１とを有する。さらに、演算回路１４１は、ＣＰＵからバスＢＵＳを経由して供給されるコンフィグレーションデータを格納するコンフィグレーションメモリ３２を有する。また、演算回路１４１は、複数の演算器やカウンタ及びＲＡＭや汎用メモリを有する演算部３５、及び、演算部３５内の演算器やカウンタなどを相互に接続するネットワーク回路３４を有するリコンフィグ演算部３３を有する。
【００４２】
プロセスを実行中のプロセッサは、プロセス内のＦＰＧＡ回路に処理を依頼する命令コードを実行して、バスＢＵＳを介して、コンフィグレーションデータと処理データとを有する処理実行依頼信号をＦＰＧＡ回路に送信する。ＦＰＧＡ回路は、図６に示すとおり、バススイッチ３０を介してコンフィグレーションデータをシーケンス制御回路３１に入力し、シーケンス制御回路３１はそのコンフィグレーションデータをコンフィグレーションメモリ３２に記憶する。また、ＦＰＧＡ回路は、バススイッチ３０を介して処理入力データをリコンフィグ演算部３３に供給する。
【００４３】
シーケンス制御回路３１のシーケンス制御により、リコンフィグ演算部３３は、コンフィグレーションデータに基づいて依頼処理を実行する演算回路を構築し、処理データをリコンフィグされた演算回路に入力し処理する。
【００４４】
また、シーケンス制御回路３１は、処理実行依頼信号に含まれる依頼元のプロセッサのＩＤとＦＰＧＡを呼び出した呼び出し元プロセスのＩＤとを、プロセッサＩＤレジスタ１４５と、プロセスＩＤレジスタ１４４とに格納する。また、シーケンス制御回路３１は、処理実行依頼信号に含まれる割込通知先ＣＰＵ情報に基づいて、選択レジスタ１４３に選択ビットを設定する。そして、シーケンス制御回路は、リコンフィグ演算部３３による処理が完了した時に処理完了通知信号Itrを生成し、処理完了通知信号送信回路１４２は、選択レジスタ１４３内の選択ビットに対応して導通状態に制御された１つのスイッチＳＷを介して、選択された処理完了通知信号線１５に処理完了通知信号Itrを出力する。
【００４５】
図７は、プロセスの移動元のプロセッサの動作を示すフローチャート図である。図７では、一例として移動元のプロセッサCPU_2の動作を示す。プロセッサCPU_2では、ＯＳがプロセスPR_0を起動する（S20）。ＯＳによるプロセスの起動処理には、プロセスを実行するための環境設定情報を設定する処理が含まれる。環境設定情報の設定には、プロセッサ内のレジスタの初期値やその他の設定値などのコンテキストデータの設定や、プロセスの命令コードをプリフェッチしてプロセッサCPU_2内の命令キャッシュメモリに格納することなどが含まれる。
【００４６】
次に、プロセスPR_0の起動処理後、プロセッサCPU_2はプロセスPR_0を実行する（S21）。プロセスPR_0の処理が完了するとプロセッサによる処理は終了する。一方、プロセスの実行中に、ＦＰＧＡ回路へ処理を依頼する命令コードがあると、プロセッサCPU_2は、ＦＰＧＡ回路にコンフィグレーションデータと共に処理実行依頼信号を送信する(S22)。処理実行依頼信号には、依頼する処理に対応する演算回路の定義データであるコンフィグレーションデータと、ＦＰＧＡ回路内のリコンフィグレートされた演算器に入力する処理データと、依頼元のプロセッサＩＤと、呼び出し元のプロセスＩＤが含まれる。処理実行依頼信号には、更に、前述の選択レジスタ１４３に選択ビットを設定するための割込通知先ＣＰＵ情報が含まれてもよい。ＦＰＧＡ回路は、後述するとおり、コンフィグレーションデータに基づいて処理を実行する演算回路を構築する。
【００４７】
そして、プロセッサCPU_2のプロセスPR_0は、ＦＰＧＡ回路の処理完了待ち状態になる（S23）。但し、プロセスPR_0はプロセッサCPU_2を占有した状態を継続する。処理完了待ち状態は、予め決められた一定時間継続する。
【００４８】
この処理完了待ち状態の間に、ＦＰＧＡ回路による処理が完了すると（S24のYES）、プロセッサCPU_2は、ＦＰＧＡ回路から処理完了通知信号を受信し、処理完了待ち状態であったプロセスPR_0の実行を再開する（S25）。この場合、プロセッサCPU_2はプロセスPR_0の環境設定状態であるので、即座に、プロセスPR_0の実行を再開することができる。また、処理完了信号を受信したプロセッサは、ＦＰＧＡ回路内のレジスタのプロセッサIDとプロセスIDを取得し、プロセッサCPU_2自身がプロセッサIDと一致することを確認し、プロセスIDが処理完了待ち状態のプロセスPR_0と一致することを確認してもよい。
【００４９】
一方、処理完了待ち状態の間に、ＦＰＧＡ回路による処理が完了せず（S24のNO）、一定時間経過するか（S26のYES）、または割込信号により優先度が高いプロセスの割込が発生すると（S26のYES）、プロセッサCPU_2のＯＳは、割込ハンドラを実行する。ＯＳの割り込みハンドラは、プロセスPR_0のコンテキストデータをメモリに退避し（S27）、アイドル状態の他のプロセッサを検索する（S28）。もしアイドル状態の他のプロセッサ（例えばCPU_3）が見つかれば、プロセッサCPU_2は、他のプロセッサCPU_3にプロセスPR_0の起動を依頼するプロセス起動メッセージを送信する（S29）。このプロセス起動メッセージには、退避したコンテキストデータなどの環境設定情報のアドレスや処理結果などが含まれる。このプロセス起動メッセージに応答して、他のプロセッサCPU_3は、プロセスPR_0の起動処理を実行する。もしアイドル状態の他のプロセッサが見つからなければ、プロセッサCPU_2は、中断したプロセスPR_0を起動待ちプロセス群に加えて、アイドル状態の他のプロセッサが見つかるまで待機させる。
【００５０】
さらに、プロセッサCPU_2のＯＳは、先に処理を依頼したＦＰＧＡ回路に、プロセスPR_0の移動先のプロセッサID（CPU_ID）と、呼び出し元のプロセスID(PR_ID)と、割込通知先CPU情報を送信する(S36)。これに応答して、ＦＰＧＡ回路はそれらの情報をレジスタに設定する。
【００５１】
ここで、もし、他のプロセッサCPU_3で起動中に、ＦＰＧＡの処理が完了した場合、プロセッサCPU_2は、ＦＰＧＡから処理完了通知信号を受信する。つまり、プロセスCPU_2によるＦＰＧＡへの移動先プロセッサIDや割込通知先CPU情報の通知と、ＦＰＧＡによる処理完了通知信号の送出とがほぼ同時に発生し、ＦＰＧＡによる移動先のプロセッサIDや割込通知先CPU情報の設定より先にＦＰＧＡが処理完了通知を送出した場合、ＦＰＧＡからの処理完了通知信号は、移動元のプロセッサCPU_2に通知される。そこで、移動元のプロセッサCPU_2は、処理完了通知信号を受信すると、移動先のプロセッサCPU_3に処理完了メッセージを送信する（S31）。つまり、プロセッサCPU_2は処理完了通知を移動先プロセッサCPU_3に転送する。
【００５２】
そして、プロセッサCPU_2は、割込による優先度が高いプロセスがある場合、そのプロセスを起動する（S32）。
【００５３】
図８は、プロセスの移動先のプロセッサの動作を示すフローチャート図である。図８では、図７で説明したプロセスPR_0がプロセッサCPU_2からプロセッサCPU_3に移動したときの動作を示す。移動先のプロセッサCPU_3は、プロセッサCPU_2からプロセスPR_0の起動メッセージを受信すると、起動メッセージに含まれる環境設定情報の退避先のアドレスにしたがい、メモリから環境設定情報を読み出し（S40）、プロセスPR_0を起動して動作環境をプロセッサ内に設定する（S41）。これにより、プロセスPR_0の動作環境がプロセッサCPU_3内に復元される。
【００５４】
しかし、プロセスPR_0はＦＰＧＡの処理完了待ち状態であったので、プロセッサCPU_3は、ＦＰＧＡ処理完了待ち状態に遷移する（S42）。そして、ＦＰＧＡ回路から処理完了通知を受信するか、移動元のプロセッサCPU_2から処理完了メッセージを受信すると（S43）、プロセッサCPU_3はプロセスPR_0の実行を再開する。
【００５５】
また、ＦＰＧＡの処理完了通知を受信する前に、優先度の高いプロセスの割込が発生すると、プロセッサCPU_3は、図７のプロセッサCPU_2と同様に、プロセスPR_0のコンテキスト（環境設定情報）をメモリに退避し、空きプロセッサを検索し、見つかればその移動先プロセッサにプロセスを移動し、ＦＰＧＡに移動先プロセッサ情報を通知する（S46）。そして、割込した優先度の高いプロセスを起動する（S47）。
【００５６】
図９は、ＦＰＧＡ回路の動作を示すフローチャート図である。ＦＰＧＡは、プロセッサからコンフィグレーションデータと処理実行依頼を受信すると（S50）、演算処理を実行開始する（S51）。処理実行依頼には処理データが添付されていて、ＦＰＧＡはコンフィグレーションデータにより処理に対応した演算回路を構築し、演算回路が処理データを入力して演算処理を実行する。
【００５７】
そして、ＦＰＧＡは、演算処理実行中に（S52）、処理完了通知先の変更が発生すると（S53）、変更後の割り込み通知先CPU情報をレジスタに設定する(S54)。図６に示したとおり、シーケンス制御回路３１は、処理完了通知先CPUが変更されると、割り込み通知先CPU情報に従って選択レジスタ１４３に設定する選択ビットを出力し、ストローブビットSTBに「１」を設定する。このSTB=1により所定のクロックタイミングで選択レジスタ１４３は選択ビットをラッチし、STB=0に変更する。さらに、ＦＰＧＡのシーケンス制御回路は、演算処理が完了すると（S55）、処理完了通知信号Itrを生成し、送信回路１４２がこの処理完了通知信号を通知先プロセッサに割り込み信号として送出する（S56）。
【００５８】
次に、図７、８、９のフローチャートに基づいて、演算処理装置の３種類の動作について説明する。
【００５９】
図１０は、演算処理装置の第１の動作を示すシーケンス図である。プロセッサCPU_2は、プロセスPR_0を起動して環境設定情報を設定し（S20）、プロセスPR_0を実行する(S21)。プロセスPR_0中にＦＰＧＡによる処理命令があると、プロセッサCPU_2は、ＦＰＧＡに処理実行依頼を出力する（S22）。この処理実行依頼には、コンフィグレーションデータと、処理データと、依頼元プロセッサID（CPU_ID）と、呼び出し元プロセスID(PR_ID)と、割り込み通知先CPU情報（CPU_2）とが添付される。また、プロセッサCPU_2は、プロセスPR_0をＦＰＧＡの処理完了待ち状態にする（S23）。
【００６０】
この処理実行依頼に応答して、ＦＰＧＡ回路は、演算回路を構築し、依頼元プロセッサID（CPU_ID）と、呼び出し元プロセスID(PR_ID)と、割り込み通知先CPU情報（CPU_2）をレジスタに設定し、演算回路が処理データを入力して演算する（S50,51,52）。そして、ＦＰＧＡ回路は、処理が完了すると、処理完了通知を処理完了通知信号線１５を介してプロセッサCPU_2に送信する（S56）。これに応答して、プロセッサCPU_2はプロセスPR_0の実行を再開する（S24,25）。
【００６１】
図１１は、演算処理装置の第２の動作を示すシーケンス図である。第２の動作は、プロセッサCPU_2がＦＰＧＡの処理実行待ち状態中に割込が発生し、プロセスPR_0をプロセッサCPU_3に移動する例である。ＦＰＧＡの処理実行待ち状態中に処理が完了せずラウンドロビン方式の制御でプロセスPR_0を中断させて、他のプロセスを起動し、プロセスPR_0をプロセッサCPU_3に移動する場合も同様である。
【００６２】
最初は、図１０と同様に、プロセッサCPU_2は、プロセスPR_0を起動して環境設定情報を設定し（S20）、プロセスPR_0を実行し(S21)、ＦＰＧＡに処理実行依頼を出力する（S22）。そして、プロセッサCPU_2は、プロセスPR_0をＦＰＧＡの処理完了待ち状態にする（S23）。また、ＦＰＧＡ回路は、演算回路を構築し、依頼元プロセッサID（CPU_ID）などをレジスタに設定し、演算回路が処理データを入力して演算する（S50,51,52）。
【００６３】
次に、プロセッサCPU_2は、ＦＰＧＡの処理完了待ち状態中に割込が発生する（S26）。これに応答して、プロセッサCPU_2のＯＳは、プロセスPR_0の処理完了待ち状態を終了して環境設定情報をメモリに退避し（S27）、アイドル状態のプロセッサを探索する（S28）。
【００６４】
もしアイドル状態のプロセッサCPU_3が見つかれば、プロセッサCPU_2のＯＳは、プロセスPR_0の起動メッセージをプロセッサCPU_3に送信し（S29）、これに応答してプロセッサCPU_3は、ＦＰＧＡによる処理実行中にプロセスPR_0を起動して環境設定情報を設定する(S40,41)。そして、プロセッサCPU_3では、プロセスPR_0がＦＰＧＡの処理完了待ち状態になる（S42）。
【００６５】
また、プロセッサCPU_2のＯＳは、ＦＰＧＡに移動先プロセッサ情報（CPU_ID,CPU_3）とプロセス情報（PR_ID,PR_0）と移動先CPU情報とを通知する（S30）。そして、ＦＰＧＡはこれらの情報をレジスタに設定する(S53,54)。
【００６６】
最後に、ＦＰＧＡ回路は処理を完了し、処理完了通知を移動先のプロセッサCPU_3に送信する（S56）。これに応答して、プロセッサCPU_3は、処理待ち状態を終了し、プロセスPR_0の実行を再開する（S44）。移動先のプロセッサCPU_3は、ＦＰＧＡが処理中にプロセスPR_0を起動してその環境設定情報を設定済みであるので、ＦＰＧＡから処理完了通知を受信すると、即座にプロセスPR_0の実行を再開できる。これにより、プロセッサの移動に伴ってオーバーヘッド時間が長くなることを抑制できる。
【００６７】
図１２は、演算処理装置の第３の動作を示すシーケンス図である。第３の動作では、図１１の第２の動作において、プロセッサCPU_2がＦＰＧＡの処理完了待ち状態で割込が発生した時に、プロセッサCPU_2によるＦＰＧＡへの移動先プロセッサ情報等の通知（S30）と、ＦＰＧＡによるプロセッサCPU_2への処理完了の通知（S56）が、ほぼ同時に発生している。
【００６８】
そのため、移動元のプロセッサCPU_2のＯＳは、移動先プロセッサCPU_3に処理完了メッセージを送信する（S31）。これに応答して、移動先プロセッサCPU_3はプロセスPR_0の実行を再開する（S44）。
【００６９】
[第２の実施の形態]
図１３は、並列処理装置（演算処理装置）の適用例である携帯端末の構成を示す図である。携帯端末は、スマートホンやパッド端末などのスマートでバスである。携帯端末は、無線制御回路４１とアプリ実行部４４とを有するシステムLSIチップ４０と、アンテナ５１および無線回路５０と、ディスプレイ２４と、タッチパネル２５とを有する。さらに、ブルーツースやWiFi用のLSI２３と、DRAMなど高速アクセスのメインメモリ２０と、フラッシュメモリやハードディスクなど大容量の不揮発性の補助メモリ２２とを有する。
【００７０】
無線制御回路４１は、ベースバンド信号の各種処理を行うベースバンド回路４３と、各種信号処理を行う信号処理プロセッサ４２とを有する。
【００７１】
アプリ実行部４４は、本実施の形態の並列処理装置（演算処理装置）であり、複数のCPUまたはCPUコア（プロセッサ）と、ＦＰＧＡ回路と、周辺回路群とを有する。複数のプロセッサが並列して複数のアプリケーションそれぞれのプロセスを実行する。
【００７２】
図１４は、第２の実施の形態における並列処理装置（演算処理装置）の構成例を示す図である。図１４の構成で図５と異なる構成は、複数のプロセッサの構成と、周辺回路群１６にディスプレイ２４とタッチパネル２５が接続されていることである。
【００７３】
図１４において、複数のプロセッサは、４個のプロセッサCPU_1〜CPU_4を有する第１のプロセッサ群２０と、４個のプロセッサCPU_5〜CPU_8を有する第２のプロセッサ群２１とで構成される。プロセッサの数は一例である。携帯端末のプロセスには、待機状態でのプロセスと、実行中でのプロセスとがある。待機状態でのプロセスは定期的に通信を行うなど処理量が少なく、したがって、第１のプロセッサ群２０には低周波数のクロックが供給される。また、実行中のプロセスは処理量が多く、第２のプロセッサ群２１は高周波数のクロックが供給される。
【００７４】
ＦＰＧＡ回路と８つのプロセッサそれぞれとの間に、処理完了通知信号線１５が設けられている。ＦＰＧＡ回路の処理完了通知信号送信回路１４２は、処理完了通知信号を、処理依頼元のプロセッサに、そのプロセッサに対応する信号線１５を介して送信する。
【００７５】
周辺回路群１６は、通信LSI２３、メインメモリ２０、補助メモリ２２、ディスプレイ２４、タッチパネル２５それぞれに接続されるドライバ回路、入出力回路などを有する。
【００７６】
第２の実施の形態における演算処理装置では、第１の実施の形態と同様に、複数のプロセッサが複数のプロセスを並列に処理する。また、プロセッサは、プロセス内のＦＰＧＡ回路による処理を要求する命令コードを実行して、ＦＰＧＡ回路に処理を依頼する。複数のプロセッサへのプロセスの割当方法や、ＦＰＧＡ回路への処理依頼方法や、ＦＰＧＡ回路が処理中にプロセスが異なるプロセッサに移動した際の制御方法などは、第１の実施の形態と同様である。
【００７７】
以上のとおり、本実施の形態によれば、複数のプロセッサが複数のプロセスを並列処理する並列処理装置において、ＦＰＧＡ回路がプロセスの処理の一部を実行中に、そのプロセスが他のプロセッサに移動した場合、ＦＰＧＡが処理中に、移動先の他のプロセッサでプロセスを起動して動作環境設定情報を設定する。それにより、ＦＰＧＡが処理完了したとき、移動先の他のプロセッサが、即座にプロセスの実行を再開できる。したがって、オーバーヘッド時間を短縮できる。
【００７８】
以上の実施の形態をまとめると、次の付記のとおりである。
【００７９】
（付記１）
それぞれのプロセスをそれぞれ実行し、前記プロセスの一部をＦＰＧＡ回路に処理させる複数のプロセッサを有し、
前記複数のプロセッサのうち第１のプロセッサは、実行中の第１のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼して前記ＦＰＧＡ回路の処理完了待ち状態に推移し、第２のプロセスの実行に推移する場合、移動先プロセッサ情報を前記ＦＰＧＡ回路に送ると共に、前記移動先プロセッサに前記ＦＰＧＡ回路での前記一部の処理完了後の前記第１のプロセス継続処理のための環境設定情報を送り、
前記移動先プロセッサは、前記ＦＰＧＡ回路が前記一部の処理を実行中に、前記環境設定情報の設定を行い、前記ＦＰＧＡ回路からの処理完了通知に応答して前記第１のプロセスの処理を継続する、並列処理装置。
【００８０】
（付記２）
さらに、少なくとも一つの前記複数のプロセッサが実行するプロセスの一部を処理する前記ＦＰＧＡ回路を有する、付記１に記載の並列処理装置。
【００８１】
（付記３）
前記ＦＰＧＡ回路は、前記移動先プロセッサ情報の移動先プロセッサに、前記処理完了通知を送る、付記２に記載の並列処理装置。
【００８２】
（付記４）
さらに、前記ＦＰＧＡ回路と前記複数のプロセッサそれぞれとの間に、前記処理完了通知を送信する複数の処理完了通知信号線を有し、
前記ＦＰＧＡ回路は、前記処理完了通知を前記複数の処理完了通知信号線のいずれかを介して送信する、付記２に記載の並列処理装置。
【００８３】
（付記５）
前記複数のプロセッサは、実行中のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼する場合、依頼元プロセッサの情報を前記ＦＰＧＡ回路に送り、
前記複数のプロセッサは、第２のプロセスの実行に推移する場合、前記ＦＰＧＡ回路からの処理完了通知を前記移動先プロセッサに転送する、付記４に記載の並列処理装置。
【００８４】
（付記６）
前記複数のプロセッサは、前記第１のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼する場合、依頼元プロセッサの情報を前記ＦＰＧＡ回路に送り、前記ＦＰＧＡ回路の処理完了待ち状態を第１の所定期間継続する、付記１に記載の並列処理装置。
【００８５】
（付記７）
前記複数のプロセッサは、前記第１の所定期間継続中は、前記第２のプロセスの実行には推移しない、付記６に記載の並列処理装置。
【００８６】
（付記８）
前記環境設定情報は、前記第１のプロセッサ内のレジスタに設定されたレジスタ設定データを有する、付記１に記載の並列処理装置。
【００８７】
（付記９）
前記複数のプロセッサのそれぞれは、複数のプロセスのうち一つのプロセスを第２の所定期間実行した後、他のプロセスを前記所定の実行時間の間実行することを繰り返す、付記１に記載の並列処理装置。
【００８８】
（付記１０）
前記複数のプロセッサのそれぞれは、任意のプロセスを実行中に割込信号を受信すると、実行中のプロセスより優先度が高い他のプロセスを起動及び実行し、実行中のプロセスの実行を停止する、付記１に記載の並列処理装置。
【００８９】
（付記１１）
前記移動先プロセッサは、前記環境設定情報の設定を完了後、前記ＦＰＧＡ回路の処理完了待ち状態に推移する、付記１に記載の並列処理装置。
【００９０】
（付記１２）
前記第１のプロセッサは、前記第２のプロセスの実行に推移する場合、前記第１のプロセスの情報を前記ＦＰＧＡ回路に送る、付記１に記載の並列処理装置。
【００９１】
（付記１３）
それぞれのプロセスをそれぞれ実行し、前記プロセスの一部をＦＰＧＡ回路に処理させる複数のプロセッサを有する並列処理装置の並列処理方法であって、
前記複数のプロセッサのうち第１のプロセッサが、実行中の第１のプロセスの一部の処理を前記ＦＰＧＡ回路に依頼して前記ＦＰＧＡ回路の処理完了待ち状態に推移し、第２のプロセスの実行に推移する場合、移動先プロセッサ情報を前記ＦＰＧＡ回路に送ると共に、前記移動先プロセッサに前記ＦＰＧＡ回路での前記一部の処理完了後の前記第１のプロセス継続処理のための環境設定情報を送る工程と、
前記移動先プロセッサが、前記ＦＰＧＡ回路が前記一部の処理を実行中に、前記環境設定情報の設定を行い、前記ＦＰＧＡ回路からの処理完了通知に応答して前記第１のプロセスの処理を継続する工程とを有する、並列処理方法。
【符号の説明】
【００９２】
１：システムＬＳＩチップ、並列処理装置
１０：プロセッサ、ＣＰＵ、ＣＰＵコア
１４：ＦＰＧＡ回路
ＢＵＳ：ＣＰＵバス
【図１】
0006515771.tif 000002
【図２】
0006515771.tif 000003
【図３】
0006515771.tif 000004
【図４】
0006515771.tif 000005
【図５】
0006515771.tif 000006
【図６】
0006515771.tif 000007
【図７】
0006515771.tif 000008
【図８】
0006515771.tif 000009
【図９】
0006515771.tif 000010
【図１０】
0006515771.tif 000011
【図１１】
0006515771.tif 000012
【図１２】
0006515771.tif 000013
【図１３】
0006515771.tif 000014
【図１４】
0006515771.tif 000015