(57)【要約】【課題】負荷を平均化して信頼性寿命を向上出来るプロセッサ及びプロセッサシステムを提供する。【解決手段】サイクル毎に複数の演算命令を発行可能な演算命令発行部１０と、各々が、前記サイクルに応じたパイプライン動作を行う複数の演算ユニット３１と、前記サイクル毎にいずれかの前記演算ユニット３１を選択し、選択した前記演算ユニット３１に対して、前記演算命令発行部１０で発行された前記演算命令を割り当てる演算ユニット選択部２０とを具備し、前記演算ユニット３１は、前記演算ユニット選択部２０によって割り当てられた前記演算命令に応じた演算処理を行い、前記演算ユニット選択部２０は、直前の前記サイクルにおいて非選択であった前記演算ユニット３１を選択する。【選択図】図１
2008225893.tif 000002
【特許請求の範囲】
【請求項１】
サイクル毎に複数の演算命令を発行可能な演算命令発行部と、
各々が、前記サイクルに応じたパイプライン動作を行う複数の演算ユニットと、
前記サイクル毎にいずれかの前記演算ユニットを選択し、選択した前記演算ユニットに対して、前記演算命令発行部で発行された前記演算命令を割り当てる演算ユニット選択部と
を具備し、前記演算ユニットは、前記演算ユニット選択部によって割り当てられた前記演算命令に応じた演算処理を行い、
前記演算ユニット選択部は、直前の前記サイクルにおいて非選択であった前記演算ユニットを選択する
ことを特徴とするプロセッサ。
【請求項２】
前記演算ユニット選択部は、直前に前記演算命令が割り当てられた前記サイクルが古い順に、前記演算ユニットを選択する
ことを特徴とする請求項１記載のプロセッサ。
【請求項３】
サイクル毎に複数の演算命令を発行可能な演算命令発行部と、
前記サイクルに応じたパイプライン動作を行う複数の演算ユニットと、
前記サイクル毎にいずれかの前記演算ユニットを選択し、選択した前記演算ユニットに対して、前記演算命令発行部で発行された前記演算命令を割り当てる演算ユニット選択部と
を具備し、前記演算ユニットは、前記演算ユニット選択部によって割り当てられた前記演算命令に応じた演算処理を行い、
前記演算ユニット選択部は、各々の前記サイクル毎にランダムに前記演算ユニットを選択する
ことを特徴とするプロセッサ。
【請求項４】
互いに独立して動作可能な複数の第１プロセッサと、前記第１プロセッサに対してジョブを割り当てる第２プロセッサとを備えたプロセッサシステムであって、
前記第２プロセッサは、前記第１プロセッサの各々についての、瞬間的な負荷を記録する第１記録部と、
前記第１プロセッサの各々についての、累積的な負荷を算出して記録する第２記録部と、
割り当てるべき前記ジョブの量と予め決定された閾値とを比較し、前記ジョブの量が多い場合には、前記第１記録部を参照して前記瞬間的な負荷の小さい前記第１プロセッサに対して優先的に前記ジョブを割り当て、少ない場合には、前記第２記録部を参照して前記累積的な負荷の小さい前記第１プロセッサに対して優先的に前記ジョブを割り当てるジョブ割り当て部とを具備し、
前記第１プロセッサの各々は、第２プロセッサによって割り当てられた前記ジョブを実行する実行部と、
前記実行部における瞬間的な活性化率を把握して、該活性化率を前記負荷として前記第１記録部に書き込む活性化率書き込み部とを具備する
ことを特徴とするプロセッサシステム。
【請求項５】
前記第１プロセッサの各々における前記実行部は、前記ジョブを実行するための複数の演算命令をサイクル毎に発行可能な演算命令発行部と、
各々が、前記サイクルに応じたパイプライン動作を行う複数の演算ユニットと、
前記サイクル毎にいずれかの前記演算ユニットを選択し、選択した前記演算ユニットに対して、前記演算命令発行部で発行された前記演算命令を割り当てる演算ユニット選択部と
を備え、前記演算ユニットは、前記演算ユニット選択部によって割り当てられた前記演算命令に応じた演算処理を行い、
前記演算ユニット選択部は、直前の前記サイクルにおいて非選択であった前記演算ユニットを選択する
ことを特徴とする請求項４記載のプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセッサ及びプロセッサシステムに関する。例えば、並列処理可能な複数の演算ユニットを備えたプロセッサの構成に関する。
【背景技術】
【０００２】
従来、各々が独立して処理可能な複数のＣＰＵを備えたプロセッサシステムが知られている（例えば特許文献１、２参照）。また、個々のＣＰＵにおいて、並列処理可能な複数の演算ユニットが有する構成が知られている。
【０００３】
上記複数の演算ユニットに対しては、並列的に演算命令が与えられる。この演算命令のトラフィックが大きい場合には、全ての演算ユニットが演算処理を行うことで、処理効率を向上出来る。
【０００４】
しかしながら、演算命令のトラフィックが小さい場合には、ある特定の演算ユニットに集中的に処理がアサインされる。その結果、命令トラフィックが小さい状況が続く場合には、処理を行う演算ユニットと行わない演算ユニットとで活性頻度に大きな差が生じる。そのため、活性頻度の高い演算ユニットの負荷が大きくなり、他の演算ユニットに比べて信頼性寿命が短くなるという問題があった。
【特許文献１】特開平９−１１４６８４号公報
【特許文献２】特開２００２−２７８９４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この発明は、負荷を平均化して信頼性寿命を向上出来るプロセッサ及びプロセッサシステムを提供する。
【課題を解決するための手段】
【０００６】
この発明の一態様に係るプロセッサは、サイクル毎に複数の演算命令を発行可能な演算命令発行部と、各々が、前記サイクルに応じたパイプライン動作を行う複数の演算ユニットと、前記サイクル毎にいずれかの前記演算ユニットを選択し、選択した前記演算ユニットに対して、前記演算命令発行部で発行された前記演算命令を割り当てる演算ユニット選択部とを具備し、前記演算ユニットは、前記演算ユニット選択部によって割り当てられた前記演算命令に応じた演算処理を行い、前記演算ユニット選択部は、直前の前記サイクルにおいて非選択であった前記演算ユニットを選択する。
【０００７】
また、この発明の一態様に係るプロセッサシステムは、互いに独立して動作可能な複数の第１プロセッサと、前記第１プロセッサに対してジョブを割り当てる第２プロセッサとを備えたプロセッサシステムであって、前記第２プロセッサは、前記第１プロセッサの各々についての、瞬間的な負荷を記録する第１記録部と、前記第１プロセッサの各々についての、累積的な負荷を算出して記録する第２記録部と、割り当てるべき前記ジョブの量と予め決定された閾値とを比較し、前記ジョブの量が多い場合には、前記第１記録部を参照して前記瞬間的な負荷の小さい前記第１プロセッサに対して優先的に前記ジョブを割り当て、少ない場合には、前記第２記録部を参照して前記累積的な負荷の小さい前記第１プロセッサに対して優先的に前記ジョブを割り当てるジョブ割り当て部とを具備し、前記第１プロセッサの各々は、第２プロセッサによって割り当てられた前記ジョブを実行する実行部と、前記実行部における瞬間的な活性化率を把握して、該活性化率を前記負荷として前記第１記録部に書き込む活性化率書き込み部とを具備する。
【発明の効果】
【０００８】
この発明によれば、負荷を平均化して信頼性寿命を向上出来るプロセッサ及びプロセッサシステムを提供出来る。
【発明を実施するための最良の形態】
【０００９】
以下、この発明の実施形態を図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【００１０】
［第１の実施形態］  
この発明の第１の実施形態に係るプロセッサについて、図１を用いて説明する。図１は、本実施形態に係るプロセッサのブロック図である。
【００１１】
図示するように、本実施形態に係るプロセッサ（ＣＰＵ）１は、命令発行ユニット１０、ユニット選択回路２０、演算実行部３０、及び演算結果出力部４０を備えている。これらの回路ブロックは、クロックに同期して動作を行う。
【００１２】
命令発行ユニット１０には、外部からジョブ（プロセッサ１において行うべき処理命令）が与えられる。命令発行ユニット１０は、このジョブの内容に基づいて、演算実行部３０において実行させるべき演算命令を発行する。命令発行ユニット１０は、同時に８個の演算命令を発行可能であり、発行した演算命令をそれぞれ命令転送線ＴＬ０〜ＴＬ７に出力する。なお、命令発行ユニット１０が発行可能な演算命令数は８個に限られず、命令転送線は発行可能な演算命令数に応じて設けられる。また、以下では命令転送線ＴＬ０〜ＴＬ７を特に区別しない限りは、単に命令転送線ＴＬと呼ぶことがある。
【００１３】
ユニット選択回路２０は、カウンタ２１及び選択回路２２を備えている。カウンタ２１は、命令発行ユニット１０によって与えられる演算命令数をカウントする。カウンタ２１の最大カウント数は、命令発行ユニット１０において同時発行可能な最大数であり、本実施形態では“０”〜“７”までカウント可能である。選択回路２２は、命令発行ユニットにおいて同時に発行可能な演算命令数と同数設けられた演算ユニット選択線ＳＬ０〜ＳＬ７のいずれかを、カウンタ２１におけるカウント数に応じて選択する。より具体的には、カウント数が“ｉ”（ｉは“０”〜“７”）の場合に、演算ユニット線ＳＬ（ｉ−１）が選択される。すなわち、カウント数が“１”〜“７”のそれぞれの場合、演算ユニット線ＳＬ０〜ＳＬ６のそれぞれが選択される。但し、カウント数が“０”の場合には、演算ユニット選択線ＳＬ７が選択される。すなわち、演算ユニット選択線ＳＬ０〜ＳＬ７の順にシーケンシャルに選択する。そして、選択した演算ユニット選択線ＳＬ０〜ＳＬ７のいずれかに対して、命令転送線ＴＬによって転送された演算命令を出力する。なお、選択回路２２は同時に発行された演算命令数と同数の演算ユニット選択線を選択し、選択した演算ユニット選択線の各々に対して１つの演算命令を出力する。また、以下では演算ユニット選択線ＳＬ０〜ＳＬ７を特に区別しない限りは、単に演算ユニット選択線ＳＬと呼ぶことがある。
【００１４】
演算実行部３０は、演算ユニット選択線ＳＬ０〜ＳＬ７に接続された８個の演算ユニット３１−０〜３１−７を備えている。勿論、演算ユニットの数は一例にすぎず、命令発行ユニット１０において同時に発行可能な演算命令数と同数設けられる。また、以下では演算ユニット３１−０〜３１−７を特に区別しない限り、単に演算ユニット３１と呼ぶことがある。演算ユニット３１−０〜３１−７は、パイプライン動作を行う。そして演算ユニット３１−０〜３１−７はそれぞれ、ユニット選択回路２０から演算ユニット選択線ＳＬ０〜ＳＬ７によって転送された演算命令に応じて、互いに並列的に演算処理を行う。
【００１５】
演算結果出力部４０は、演算ユニット３１における演算結果を出力する。
【００１６】
次に、上記構成のプロセッサ１の動作について、特にユニット選択回路２０に着目して説明する。図２は、本実施形態に係るプロセッサ１の選択回路２２及び演算ユニット３１のブロック図である。
【００１７】
図示するように、あるタイミングにおいて命令発行ユニット１０が２つの演算命令ＩＮＳＴ０、ＩＮＳＴ１を発行したとする。演算命令は、命令転送線ＴＬ０〜ＴＬ７の順で使用されるから、２つの演算命令ＩＮＳＴ０、ＩＮＳＴ１は、命令転送線ＴＬ０、ＴＬ１によって、選択回路２２へ転送される。また図示せぬカウンタ２１が、演算命令数をカウントする。図２の例であると、カウンタ２１は“０”を初期値としてカウントを開始し、そのカウント数は、“０”から“１”→“２”と変化する。すると、選択回路２２はカウンタ２１におけるカウント数“１”、“２”にそれぞれ対応する演算ユニット選択線ＳＬ０、ＳＬ１を選択する。その結果、演算ユニット選択線ＳＬ０、ＳＬ１を介して演算命令ＩＮＳＴ０、ＩＮＳＴ１が演算ユニット３１−０、３１−１に与えられる。そして演算ユニット３１−０、３１−１において演算処理が行われる。この際、演算ユニット３１−２〜３１−７は特に演算処理を行わない。
【００１８】
上記演算ユニット３１−０、３１−１における演算処理が終了した後、続いて命令発行ユニット１０により演算命令ＩＮＳＴ２、ＩＮＳＴ３が発行されたとする。この際の様子を図３に示す。図３は図２と同じように、本実施形態に係るプロセッサ１の選択回路２２及び演算ユニット３１のブロック図である。
【００１９】
図示するように、次のタイミングにおいて命令発行ユニット１０が２つの演算命令ＩＮＳＴ２、ＩＮＳＴ３を発行する。２つの演算命令ＩＮＳＴ２、ＩＮＳＴ３は、命令転送線ＴＬ０、ＴＬ１によって、選択回路２２へ転送される。また図示せぬカウンタ２１が、演算命令数をカウントする。図２の例の際にカウンタ２１のカウント数は“２”であったから、カウント数は“２”から“３”→“４”に変化する。すると、選択回路２２はカウンタ２１におけるカウント数“３”、“４”に対応する演算ユニット選択線ＳＬ２、ＳＬ３を選択する。その結果、演算ユニット選択線ＳＬ２、ＳＬ３を介して演算命令ＩＮＳＴ２、ＩＮＳＴ３が演算ユニット３１−２、３１−３に与えられる。そして演算ユニット３１−２、３１−３において演算処理が行われる。この際、演算ユニット３１−０、３１−１、３１−４〜３１−７は特に演算処理を行わない。
【００２０】
以後、次に演算命令が与えられた場合には、選択回路２２は演算ユニット選択線ＳＬ４から順に選択し、演算ユニット選択線ＳＬ７が選択された後は、再び演算ユニット選択線ＳＬ０から順に選択を行う。
【００２１】
以上の動作の様子を図４のタイムチャートに示す。図４は、プロセッサ１が同期するクロック、カウンタ２１のカウント数、演算命令の割り当てタイミング、及び演算ユニット３１−０〜３１−７における演算処理の内容を示している。図中において、斜線で示した領域が、演算を行っている（活性化されている）ことを示す。命令発行ユニット１０は、あるサイクル単位で演算命令の発行を行う。図４の例では、命令発行ユニット１０における命令発行サイクルは、クロック２つ分に相当する。そして演算ユニット３１のパイプライン動作も、命令発行ユニット１０における演算命令発行サイクルに同期している。つまり、ある演算命令に対応した演算ユニット３１における演算処理は、次の新たな演算命令が発行される時点では終了している。また図４では、説明の簡単化のために、１サイクルにつき２つの演算命令が発行されるものとする。
【００２２】
図示するように、まず時刻ｔ１において命令発行ユニット１０が２つの演算命令ＩＮＳＴ０、ＩＮＳＴ１を発行する。すると、カウンタ２１はカウントを開始して、カウント数は“０”を初期値として、“１”→“２”と変化する。従って、選択回路２２は、カウント数ｉ＝“１”、“２”にそれぞれ対応する演算ユニット選択線ＳＬ０、ＳＬ１を選択して、それぞれに演算命令ＩＮＳＴ０、ＩＮＳＴ１を転送する。その結果、演算ユニット３１−０、３１−１において、演算命令ＩＮＳＴ０、ＩＮＳＴ１に従った演算処理が行われる。これは、上記図２で説明した通りである。
【００２３】
次のサイクルが始まる時刻ｔ２では、上記演算ユニット３１−０、３１−１における演算処理が終了し、命令発行ユニット１０が２つの演算命令ＩＮＳＴ２、ＩＮＳＴ３を発行する。すると、カウンタ２１のカウント数は“２”を初期値として“３”→“４”と変化する。従って、選択回路２２は、カウント数ｉ＝“３”、“４”にそれぞれ対応する演算ユニット選択線ＳＬ２、ＳＬ３を選択して、それぞれに演算命令ＩＮＳＴ２、ＩＮＳＴ３を転送する。その結果、演算ユニット３１−２、３１−３において、演算命令ＩＮＳＴ２、ＩＮＳＴ３に従った演算処理が行われる。これは、上記図３で説明した通りである。
【００２４】
次のサイクルが始まる時刻ｔ３では、上記演算ユニット３１−２、３１−３における演算処理が終了し、命令発行ユニット１０が２つの演算命令ＩＮＳＴ４、ＩＮＳＴ５を発行する。すると、カウンタ２１のカウント数は“４”を初期値として“５”→“６”と変化する。従って、選択回路２２は演算ユニット選択線ＳＬ４、ＳＬ５を選択して、それぞれに演算命令ＩＮＳＴ４、ＩＮＳＴ５を転送する。その結果、演算ユニット３１−４、３１−５において、演算命令ＩＮＳＴ４、ＩＮＳＴ５に従った演算処理が行われる。
【００２５】
次のサイクルが始まる時刻ｔ４では、上記演算ユニット３１−４、３１−５における演算処理が終了し、命令発行ユニット１０が２つの演算命令ＩＮＳＴ６、ＩＮＳＴ７を発行する。すると、カウンタ２１のカウント数は“６”を初期値として“７”→“０”と変化する。カウント数は、最大値の“７”に達すると“０”に初期化される。従って、選択回路２２は、カウント数ｉ＝“７”、“０”にそれぞれ対応する演算ユニット選択線ＳＬ６、ＳＬ７を選択して、それぞれに演算命令ＩＮＳＴ６、ＩＮＳＴ７を転送する。その結果、演算ユニット３１−６、３１−７において、演算命令ＩＮＳＴ６、ＩＮＳＴ７に従った演算処理が行われる。
【００２６】
次のサイクルが始まる時刻ｔ５では、上記演算ユニット３１−６、３１−７における演算処理が終了し、命令発行ユニット１０が２つの演算命令ＩＮＳＴ８、ＩＮＳＴ９を発行する。すると、カウンタ２１のカウント数は“０”を初期値として、再び“１”→“２”と変化する。従って、選択回路２２は演算ユニット選択線ＳＬ０、ＳＬ１を選択して、それぞれに演算命令ＩＮＳＴ８、ＩＮＳＴ９を転送する。その結果、演算ユニット３１−０、３１−１において、演算命令ＩＮＳＴ８、ＩＮＳＴ９に従った演算処理が行われる。
【００２７】
以下、同様にして選択処理が行われる。なお図４の例では１サイクルにつき２つの演算命令が発行される場合について説明したが、勿論、２つに限られるものでは無く、１〜８つのいずれでも良い。つまり、あるサイクルでは１つの演算命令のみが発行され、またあるサイクルでは８つの演算命令が発行されても良い。命令発行ユニット１０によって同時に発行される演算命令の数にかかわらず、選択回路２２は演算ユニット選択線ＳＬ、すなわち演算ユニット３１を、シーケンシャルに選択して、演算命令を行わせる。
【００２８】
上記のように、本実施形態に係るプロセッサであると下記（１）の効果が得られる。  
（１）並列処理を行うプロセッサにおいて、各演算ユニットの負荷を平均化して信頼性寿命を向上出来る（その１）。  
本実施形態に係る構成であると、ユニット選択回路２０は演算ユニット選択線ＳＬ０〜ＳＬ７をシーケンシャルに選択する。すなわち、演算ユニット３１−０〜３１−７には、演算命令がシーケンシャルに入力される。
【００２９】
言い換えれば、ユニット選択回路２０は、直前のサイクルにおいて非選択であった演算ユニット３１のいずれかを選択する。そしてその中でも、各演算ユニット３１において直前に演算命令が割り当てられたサイクルが古いもの順に、演算ユニット３１を選択する。
【００３０】
より具体的には、図４の時刻ｔ５においては、直前のサイクル（時刻ｔ４〜ｔ５のサイクル）において非選択であった演算ユニット３１−０〜３１−５のいずれかを、ユニット選択回路２０は選択する。更にユニット選択回路２０は、直前のサイクルにおいて非選択であった演算ユニット３１−０〜３１−５の中でも、実際に演算処理を行ったサイクルが古いものから順に選択する。すると時刻ｔ５の時点であると、演算処理を行ったサイクルが最も古い演算ユニット３１は、時刻ｔ１〜ｔ２のサイクルで演算処理を行った演算ユニット３１−０、３１−１である。従って、ユニット選択回路２０は時刻ｔ５では演算ユニット３１−０、３１−１を優先的に選択する。仮に、時刻ｔ５において発行された演算命令数が２つ以上であった場合には、演算処理を行ったサイクルが演算ユニット３１−０、３１−１の次に古い演算ユニット３１−２、３１−３から順に選択される。勿論、時刻ｔ５において発行された演算命令数が６つ以上であった場合には、直前のサイクル（時刻ｔ４〜ｔ５のサイクル）で演算処理を行った演算ユニット３１−６、３１−７に対しても演算命令が与えられる。
【００３１】
上記のようにして演算ユニット３１−０〜３１−７をシーケンシャルに活性化させることで、演算命令が各演算ユニット３１−０〜３１−７に対して平均的に振り分けられる。従って、各サイクルで発行される演算命令数が少ない場合、すなわち命令トラフィックが小さい場合であっても、特定の演算ユニット３１に演算処理が集中することを防止出来る。その結果、特定の演算ユニット３１のみの信頼性寿命が特に悪化することを防止し、プロセッサの信頼性を向上出来る。
【００３２】
なお、本実施形態では演算ユニット３１−０〜３１−７をシーケンシャルに活性化（演算処理を行わせる）させるために、カウンタ２１を設けている。そして、選択回路２２はカウンタでカウントされた数に応じた演算ユニット３１を選択する。しかし、勿論、演算ユニット３１−０〜３１−７をシーケンシャルに選択出来る構成であれば、ユニット選択回路２０の構成は図１に示すものに限られない。また、上記実施形態では、カウンタ２１は“０”〜“７”の範囲でカウントを行う場合について説明した。しかし、カウント可能な範囲はこれに限られない。すなわち、“８”以上をカウントする場合であっても、各カウント数と、演算ユニット選択線ＳＬ０〜ＳＬ７との関連付けがなされていれば良い。
【００３３】
［第２の実施形態］  
次に、この発明の第２の実施形態に係るプロセッサについて、図５を用いて説明する。図５は、本実施形態に係るプロセッサのブロック図である。本実施形態は、上記第１の実施形態において、演算ユニット３１の選択方法を、シーケンシャルではなくランダムに行う構成に関するものである。
【００３４】
図示するように、本実施形態に係るプロセッサ１の構成は、上記第１の実施形態で説明した図１の構成において、ユニット選択回路２０内のカウンタ２１を、乱数発生器２３に置き換えたものである。乱数発生器２３はサイクル毎に、例えば“０”〜“７”の範囲の乱数を、命令発行ユニット１０から与えられた演算命令数と同数だけ発生する。そして選択回路２２は、乱数発生器２３で発生された乱数に相当する演算ユニット選択線ＳＬ０〜ＳＬ７を選択する。より具体的には、乱数“０”〜“７”の各々が発生された場合には、演算ユニット選択線ＳＬ０〜ＳＬ７のそれぞれを選択する。その他の構成は上記第１の実施形態で説明した通りであるので、説明は省略する。
【００３５】
次に、上記構成のプロセッサ１の動作について、特にユニット選択回路２０に着目して説明する。図６は、本実施形態に係るプロセッサ１の選択回路２２及び演算ユニット３１のブロック図である。
【００３６】
図示するように、あるサイクルにおいて命令発行ユニット１０が２つの演算命令ＩＮＳＴ０、ＩＮＳＴ１を発行し、２つの演算命令ＩＮＳＴ０、ＩＮＳＴ１が、命令転送線ＴＬ０、ＴＬ１によって選択回路２２へ転送されたとする。また図示せぬ乱数発生器２３が、演算命令数に応じた数の乱数を発生する。ここで発生された乱数は、“０”、“３”であったとする。すると、選択回路２２は発生された乱数“０”、“３”に対応する演算ユニット選択線ＳＬ０、ＳＬ３を選択する。その結果、演算ユニット選択線ＳＬ０、ＳＬ３を介して演算命令ＩＮＳＴ０、ＩＮＳＴ１が演算ユニット３１−０、３１−３に与えられ、演算ユニット３１−０、３１−３において演算処理が行われる。
【００３７】
次のサイクルにおいて、命令発行ユニット１０により演算命令ＩＮＳＴ２、ＩＮＳＴ３が発行されたとする。この際の様子を図７に示す。図７は図６と同じように、本実施形態に係るプロセッサ１の選択回路２２及び演算ユニット３１のブロック図である。
【００３８】
図示するように、演算命令ＩＮＳＴ２、ＩＮＳＴ３を発行された際に、図示せぬ乱数発生器は、乱数として“０”、“６”を発生したとする。すると、選択回路２２は乱数“０”、“６”に対応する演算ユニット選択線ＳＬ０、ＳＬ６を選択する。その結果、演算ユニット選択線ＳＬ０、ＳＬ６を介して演算命令ＩＮＳＴ２、ＩＮＳＴ３が演算ユニット３１−０、３１−６に与えられ、演算ユニット３１−０、３１−６において演算処理が行われる。
【００３９】
以上の動作の様子を図８のタイムチャートに示す。図８は、プロセッサ１が同期するクロック、乱数発生器２３で発生される乱数、演算命令の割り当てタイミング、及び演算ユニット３１−０〜３１−７における演算処理の内容を示している。命令発行ユニット１０の演算命令発行サイクルは、図４の場合と同じくクロック２つ分である。また図８でも、説明の簡単化のために、１サイクルにつき毎回２つの演算命令が発行されるものとする。
【００４０】
図示するように、まず時刻ｔ１において命令発行ユニット１０が２つの演算命令ＩＮＳＴ０、ＩＮＳＴ１を発行する。この際、乱数発生器２３は、２つの乱数“０”、“３”を発生する。従って、選択回路２２は演算ユニット選択線ＳＬ０、ＳＬ３を選択して、それぞれに演算命令ＩＮＳＴ０、ＩＮＳＴ１を転送する。その結果、演算ユニット３１−０、３１−３において、演算命令ＩＮＳＴ０、ＩＮＳＴ１に従った演算処理が行われる。これは、上記図６で説明した通りである。
【００４１】
次のサイクルが始まる時刻ｔ２では、上記演算ユニット３１−０、３１−３における演算処理が終了し、命令発行ユニット１０が２つの演算命令ＩＮＳＴ２、ＩＮＳＴ３を発行する。そして乱数発生器２３が２つの乱数“０”、“６”を発生する。従って、選択回路２２は演算ユニット選択線ＳＬ０、ＳＬ６を選択して、それぞれに演算命令ＩＮＳＴ２、ＩＮＳＴ３を転送する。その結果、演算ユニット３１−０、３１−６において、演算命令ＩＮＳＴ２、ＩＮＳＴ３に従った演算処理が行われる。これは、上記図７で説明した通りである。
【００４２】
次のサイクルが始まる時刻ｔ３では、命令発行ユニット１０が２つの演算命令ＩＮＳＴ４、ＩＮＳＴ５を発行する。すると、乱数発生器２３は２つの乱数“２”、“３”を発生する。従って、選択回路２２は演算ユニット選択線ＳＬ２、ＳＬ３を選択して、それぞれに演算命令ＩＮＳＴ４、ＩＮＳＴ５を転送する。その結果、演算ユニット３１−２、３１−３において、演算命令ＩＮＳＴ４、ＩＮＳＴ５に従った演算処理が行われる。
【００４３】
次のサイクルが始まる時刻ｔ４では、命令発行ユニット１０が２つの演算命令ＩＮＳＴ６、ＩＮＳＴ７を発行する。そして乱数発生器２３が２つの乱数“１”、“５”を発生する。従って、選択回路２２は演算ユニット選択線ＳＬ１、ＳＬ５を選択して、それぞれに演算命令ＩＮＳＴ６、ＩＮＳＴ７を転送する。その結果、演算ユニット３１−１、３１−５において、演算命令ＩＮＳＴ６、ＩＮＳＴ７に従った演算処理が行われる。
【００４４】
以下同様にして、次のサイクルでも乱数に従って、例えば演算ユニット３１−６、３１−７が選択され、更に次のサイクルでは例えば演算ユニット３１−４、３１−７が選択される。
【００４５】
勿論、本実施形態においても、１サイクルにつき発行される演算命令は２つに限らず、１〜７つのいずれでも良い。命令発行ユニット１０によって同時に発行される演算命令の数にかかわらず、選択回路２２は演算ユニット選択線ＳＬ、すなわち演算ユニット３１を、ランダムに選択して、演算命令を行わせる。
【００４６】
上記のように、本実施形態に係るプロセッサであると下記（２）の効果が得られる。  
（２）並列処理を行うプロセッサにおいて、各演算ユニットの負荷を平均化して信頼性寿命を向上出来る（その２）。  
本実施形態に係る構成であると、ユニット選択回路２０は演算ユニット選択線ＳＬ０〜ＳＬ７をランダムに選択する。すなわち、演算ユニット３１−０〜３１−７には、演算命令がランダムに入力される。
【００４７】
従って、演算ユニット３１−０〜３１−７はランダムに活性化されるため、演算命令が各演算ユニット３１−０〜３１−７に対して平均的に振り分けられる。よって、第１の実施形態において説明した（１）の効果と同様に、命令トラフィックが小さい場合であっても、特定の演算ユニット３１に演算処理が集中することを防止出来る。その結果、特定の演算ユニット３１のみの信頼性寿命が特に悪化することを防止し、プロセッサの信頼性を向上出来る。
【００４８】
なお、本実施形態では演算ユニット３１−０〜３１−７をランダムに活性化（演算処理を行わせる）させるために、乱数発生器２３を設けている。そして、選択回路２２は乱数発生器２３で発生された乱数に応じた演算ユニット３１を選択する。しかし、勿論、演算ユニット３１−０〜３１−７をランダムに選択出来る構成であれば、ユニット選択回路２０の構成は図５に示すものに限られない。また、勿論、発生される乱数の範囲は“０”〜“７”に限られない。すなわち、“８”以上の乱数を発生する場合であっても、乱数と演算ユニット選択線ＳＬ０〜ＳＬ７との関連付けがなされていればよい。
【００４９】
［第３の実施形態］  
次に、この発明の第３の実施形態に係るプロセッサシステムについて、図９を用いて説明する。図９は、本実施形態に係るプロセッサシステムのブロック図である。
【００５０】
図示するように、本実施形態に係るプロセッサシステム５０は、複数のプロセッサ（ＣＰＵ）を備えたマルチコアプロセッサシステムである。すなわちシステム５０は、互いに独立して動作可能な（ｎ＋１）個の第１プロセッサ６０−０〜６０−ｎ（ｎは２以上の自然数）と、第２プロセッサ７０とを備えている。第１プロセッサ６０−０〜６０−ｎ及び第２プロセッサ７０は、バスによって互いに通信可能に接続されており、共にクロックに同期して動作する。本構成において、ジョブが外部から第２プロセッサ７０に対して与えられ、第２プロセッサ７０はジョブを第１プロセッサ６０−０〜６０−ｎのいずれかに振り分ける。そしてジョブについての実際の処理は、第１プロセッサ６０−０〜６０−ｎのいずれかにおいて行われる。なお、以下では第１プロセッサ６０−０〜６０−ｎを、特に区別しない限りは単に第１プロセッサ６０と呼ぶことにする。
【００５１】
次に、まず第１プロセッサ６０の構成について説明する。図示するように第１プロセッサ６０の各々は、実行部６１及び活性化率書き込み部６２を備えている。実行部６１は、第２プロセッサ７０から割り当てられたジョブに関する演算処理を行う。活性化率書き込み部６２は、実行部６１のある瞬間における活性化率を測定し、第２プロセッサ７０内のメモリに書き込む。活性化率とは、実行部６１が実効的に処理を行っている際の負荷を示すものであり、例えば一定の周期で測定と書き込みが繰り返される。従って、第１プロセッサ６０が単に電源投入されたのみの状態であり、且つジョブを処理するための演算処理をなんら行っていない場合には、活性化率はほぼ０％である。
【００５２】
次に、第２プロセッサ７０の構成について説明する。第２プロセッサ７０は、ジョブ割り当て部７１、メモリ７２〜７４、及びカウンタ７５を備えている。ジョブ割り当て部７１は、外部から与えられたジョブを、第１プロセッサ６０−０〜６０−ｎのいずれかに振り分ける。ジョブの振り分け方については後に詳述する。
【００５３】
メモリ７２は、例えばＤＲＡＭ等の半導体メモリである。そしてメモリ７２は、予め与えられた閾値データ７６を保持する。この閾値データの詳細は後述する。
【００５４】
メモリ７３も、例えばＤＲＡＭ等の半導体メモリである。そしてメモリ７３は、第１テーブル（瞬間活性化率テーブル）７７を保持する。第１テーブル７７の例を図１０に示す。図示するように、第１テーブル７７は、第１プロセッサ６０−０〜６０−ｎ毎の活性化率Ａ０〜Ａｎ［％］を保持する。この活性化率は、第１プロセッサ６０の活性化率書き込み部６２によって書き込まれ、上記した一定の周期で測定が繰り返される度に書き換えられる。つまり第１テーブル７７は、各第１プロセッサ６０−０〜６０−ｎの使用率を、リアルタイムに示すテーブルである。
【００５５】
メモリ７４は、例えばフラッシュメモリ等の、電気的に書き換え及び消去可能な半導体メモリである。そしてメモリ７４は、第２テーブル（累積活性化率テーブル）７８を保持する。第２テーブル７８の例を図１１に示す。図示するように、第２テーブル７８は、第１プロセッサ６０−０〜６０−ｎ毎の活性化累積時間Ｂ０〜Ｂｎ［sec］を保持する。この活性化累積時間とは、第１プロセッサ６０が過去に活性化された期間を累積的に記録したものである。勿論、この活性化された期間とは、第１プロセッサの実行部６１が実効的に処理を行っている際の期間を示すものであり、単に電源投入されたのみの状態でジョブを処理するための演算処理をなんら行っていない場合には、活性化累積時間は積算されない。活性化累積時間は、ジョブ割り当て部７１によってメモリ７４に書き込まれる。つまり第２テーブル７８は第１テーブル７７と異なり、第１プロセッサ６０についての、ある所定の期間におけるトータルとしての負荷を示すものである。
【００５６】
カウンタ７５は、ジョブ割り当て部７１の命令に従って、クロックに同期してカウントを行う。ジョブ割り当て部７１は、いずれかの第１プロセッサ６０に対してジョブを割り当てた際に、カウンタ７５にカウントを開始させる。そしてジョブが割り当てられた第１プロセッサ６０において演算命令が終了したことを把握すると、カウンタ７５のカウントを停止させる。そして、カウンタ７５におけるカウント数を、当該第１プロセッサ６０の活性化時間とする。更に、得られた活性化時間を、当該第１プロセッサ６０の過去の活性化時間に足すことで、活性化累積時間を算出して、第２テーブル７８を書き換える。
【００５７】
次に、第２プロセッサ７０におけるジョブの振り分け方法について、図１２を用いて説明する。図１２は、ジョブの振り分け方法を示すフローチャートである。  
図示するように、まず外部から第２プロセッサ７０へジョブが投入される（ステップＳ１０）。投入されるジョブの数は１つに限らず、複数の場合もある。
【００５８】
すると第２プロセッサ７０のジョブ割り当て部７１は、当該プロセッサシステム５０で処理すべき処理量を確認する（ステップＳ１１）。この処理量の確認の際に、メモリ７２に保持された閾値データ７６を用いる。すなわち、処理すべき処理量が閾値データの示す処理量よりも多いか否かによって判断を行う。より具体的には、同時に処理を行わせるべき第１プロセッサ６０の数が所定の数（閾値データ）よりも多いか否か、またはジョブを割り当てる時点において活性化されている第１プロセッサ６０の数が所定の数（閾値データ）よりも多いか否か、等によって行われる。更には、例えば第１プロセッサ６０の瞬間活性化率によって決定しても良く、一例としては、全ての第１プロセッサ６０の瞬間活性化率が２０％以下である場合に、処理量が少ないと判断しても良い。この場合には２０％なる値が、閾値データ７６として保持される。これらの閾値データは、例えばジョブの内容や、プロセッサシステムの現在温度等に応じて複数種類設けられても良い。
【００５９】
ステップＳ１１の結果処理量が多いと判断された場合には（ステップＳ１２、ＹＥＳ）、ジョブ割り当て部７１はメモリ７３内の第１テーブル７７を参照する（ステップＳ１３）。そして、ジョブ割り当て部７１は、現在における瞬間活性化率の最も低い第１プロセッサ６０から順に、優先的にジョブを割り当てる（ステップＳ１４）。
【００６０】
逆にステップＳ１１の結果、処理量が少ないと判断された場合には（ステップＳ１２、ＮＯ）、ジョブ割り当て部７１はメモリ７４内の第２テーブル７８を参照する（ステップＳ１５）。そしてジョブ割り当て部７１は、累積活性化時間の最も短い第１プロセッサ６０から順に、優先的にジョブを割り当てる（ステップＳ１６）。
【００６１】
上記のジョブ割り当て方法の具体例について、図１３を用いて説明する。図１３は、プロセッサシステム５０が３つの第１プロセッサ６０−０〜６０−２を有する場合の、各第１プロセッサ６０−０〜６０−２の瞬間活性化率及び累積活性化時間を示すグラフである。
【００６２】
図示するように、第１プロセッサ６０−０では、実行部６１においてほとんど演算処理が行われず、時刻ｔ１０の時点での累積活性化時間は最も短い。第１プロセッサ６０−２では、瞬間活性化率が高い状態が続き、時刻ｔ１０の時点での累積活性化時間が最も長い。第１プロセッサ６０−１の累積活性化率は、第１プロセッサ６０−０、６０−２の中間である。
【００６３】
これに対して時刻ｔ１０の時点での瞬間活性化率は、累積活性化時間とは逆に第１プロセッサ６０−０が最も高く（８０％）、次に第１プロセッサ６０−１が高く（２０％）、第１プロセッサ６０−２が最も低い（０％）。
【００６４】
このような状態で、時刻ｔ１０においてジョブ割り当て部７１がジョブを割り当てる場合を考える。まず図１２のステップＳ１１において、処理量が少ないと判断された場合（ステップＳ１２、ＮＯ）、ジョブ割り当て部７１は第２テーブル７８を参照して、累積活性化時間の最も短い第１プロセッサ６０から順にジョブを割り当てる。すなわち、図１３の例であると、まず第１プロセッサ６０−０、次に第１プロセッサ６０−１、最後に第１プロセッサ６０−２の優先順位で、ジョブの割り当てが行われる。
【００６５】
逆に、図１２のステップＳ１１において、処理量が多いと判断された場合（ステップＳ１２、ＹＥＳ）、ジョブ割り当て部７１は第１テーブル７７を参照して、瞬間活性化率の最も低い第１プロセッサ６０から順にジョブを割り当てる。すなわち、図１３の例であると、まず第１プロセッサ６０−２、次に第１プロセッサ６０−１、最後に第１プロセッサ６０−０の優先順位で、ジョブの割り当てが行われる。
【００６６】
上記のように、本実施形態に係るプロセッサであると下記（３）の効果が得られる。  
（２）並列処理を行う複数のプロセッサを備えたプロセッサシステムにおいて、各プロセッサの負荷を平均化して信頼性寿命を向上出来る。  
本実施形態に係る構成であると、複数の第１プロセッサ６０を備えたマルチコアプロセッサにおいて、各第１プロセッサ６０の累積的な活性化時間を第２プロセッサ７０が保持している。そして、処理量が少ない場合には、累積的な活性化時間の短いものに対して優先的にジョブを割り当てている。
【００６７】
そのため、過去から現在における所定の期間における、各第１プロセッサ６０の使用率を平均化出来る。すなわち、各第１プロセッサ６０に対してかかる負荷を平均化することが出来、特定の第１プロセッサのみの信頼性寿命が悪化することを防止し、プロセッサシステムの信頼性を向上出来る。
【００６８】
但し、処理量が多い場合には、上記割り当て方法では処理効率が低下するおそれがある。そこで本実施形態では、累積的な活性化時間だけでなく、瞬間的な活性化率も考慮する。すなわち、処理量が多い場合には、瞬間的な活性化率が最も低いものに対して、優先的にジョブを割り当てている。これにより、プロセッサシステム５０の処理効率の低下を防止しつつ、信頼性を向上出来る。
【００６９】
なお、本実施形態で説明した第１プロセッサ６０の各々は、上記第１、第２の実施形態で説明した構成を有していても良い。図１４は、第３の実施形態に前述の第２の実施形態に係る構成を組み合わせたプロセッサシステム５０のブロック図である。
【００７０】
図示するように、第１プロセッサ６０の実行部６１は、第２の実施形態で説明した図５の構成を有している。そして、活性化率書き込み部６２は、演算実行部３０における活性化率を測定する。勿論、乱数発生器２３を第１の実施形態で説明したカウンタ２１に置き換えてもよいことは言うまでもない。
【００７１】
上記のように、この発明の第１乃至第３の実施形態に係るプロセッサ及びプロセッサシステムによれば、特定の演算ユニット３１または第１プロセッサ６０に対して処理負荷が集中することを防止し、信頼性寿命の低下を回避出来る。そして、信頼性寿命を延ばすことが出来る結果、ＬＳＩの実働可能時間を延ばすことができ、更に演算ユニット３１や第１プロセッサ６０の劣化によるＬＳＩの誤動作の発生を防止出来る。
【００７２】
なお、上記第１の実施形態では、演算ユニット３１をシーケンシャルに選択する場合について説明したが、これは一例に過ぎず、直前のサイクルで非選択であった演算ユニット３１を優先的に選択出来る構成であれば良い。
【００７３】
また、上記第１、第２の実施形態で説明したプロセッサ１は、例えば画像処理プロセッサなどに適用できる。図１５は、上記第１または第２の実施形態に係るプロセッサを備えた画像描画プロセッサシステムＬＳＩのブロック図である。
【００７４】
図示するようにＬＳＩ８０は、ホストプロセッサ８１、Ｉ／Ｏプロセッサ８２、メインメモリ８３、及びグラフィックプロセッサ８４を備えている。ホストプロセッサ８１とグラフィックプロセッサ８４とは、プロセッサバスＢＵＳによって、相互に通信可能に接続されている。
【００７５】
ホストプロセッサ８１は、メインプロセッサ９０、Ｉ／Ｏ部９１〜９３、及び複数の信号処理部（ＤＳＰ：Digital Signal Processor）９４を備えている。これらの回路ブロックは、ローカルネットワークＬＮ１によって相互に通信可能に接続されている。メインプロセッサ９０は、ホストプロセッサ８１内の各回路ブロックの動作を制御する。Ｉ／Ｏ部９１は、Ｉ／Ｏプロセッサ８２を介してホストプロセッサ８１外部とデータの授受を行う。Ｉ／Ｏ部９２は、メインメモリ８３との間でデータの授受を行う。Ｉ／Ｏ部９３は、プロセッサバスＢＵＳを介してグラフィックプロセッサ８４との間でデータの授受を行う。信号処理部９４は、メインメモリ８３や外部から読み込んだデータに基づいて信号処理を行う。
【００７６】
Ｉ／Ｏプロセッサ８２は、ホストプロセッサ８１と、例えば汎用バス、ＨＤＤやＤＶＤ（Digital Versatile Disc）ドライブ等の周辺機器並びにネットワークとを接続する。この際、ＨＤＤやＤＶＤドライブは、ＬＳＩ８０に搭載されているものでも良いし、またはＬＳＩ８０外部に設けられていても良い。メインメモリ８３は、ホストプロセッサ８１が動作するために必要なプログラムを保持する。このプログラムは、例えば図示せぬＨＤＤ等から読み出されて、メインメモリ８３に格納される。
【００７７】
グラフィックプロセッサ８４は、ＤＭＡＣ（Direct Memory Access Controller）１００、Ｉ／Ｏ部１０１、１０２、及び演算処理部１０３を備えている。ＤＭＡＣ１００は、演算処理部１０３とＩ／Ｏ部１０１との間のデータの授受を司る。Ｉ／Ｏ部１０１は、プロセッサバスＢＵＳを介したホストプロセッサ８１との間の入出力を司る。Ｉ／Ｏ部１０２は、ＰＣＩ等の各種汎用バス、ビデオ及びオーディオ、更に外部メモリ等との入出力を司る。演算処理部１０３は、画像処理演算を行う。
【００７８】
演算処理部１０３はピクセル生成部１０４、複数のピクセルシェーダ（pixel shader）１０５、及びローカルメモリ１０６を備えている。ピクセル生成部１０４は、入力された図形情報に従ってピクセル（pixel）を生成する。ピクセルとは、所定の図形を描画する際に取り扱われる最小単位の領域のことであり、ピクセルの集合によって図形が描画される。生成されたピクセルはピクセルシェーダ１０５へ投入される。ピクセルシェーダ１０５は、ピクセル生成部１０４から投入されたピクセルにつき演算処理を行い、ローカルメモリ１０６上に画像データを生成する。ＤＭＡＣ１００、Ｉ／Ｏ部１０１、１０２、ピクセル生成部１０４、及びローカルメモリ１０６は、ローカルネットワークＬＮ２により相互に通信可能に接続されている。
【００７９】
上記構成において、ピクセル生成部１０４は生成したピクセルを各ピクセルシェーダ１０５へ振り分ける。そしてピクセルシェーダ１０５の各々は、各々が並列的にピクセルを処理する。従って、上記第１、第２の実施形態で説明したユニット選択回路２０を設け、シーケンシャルまたはランダムにピクセルシェーダ１０５に対してピクセルを投入するようにしても良い。本構成とすることで、ピクセルシェーダ１０５の負荷を平均化させることが出来る。
【００８０】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【００８１】
【図１】この発明の第１の実施形態に係るプロセッサのブロック図。
【図２】この発明の第１の実施形態に係るプロセッサの一部領域のブロック図であり、演算命令の割り当ての様子を示す図。
【図３】この発明の第１の実施形態に係るプロセッサの一部領域のブロック図であり、演算命令の割り当ての様子を示す図。
【図４】この発明の第１の実施形態に係るプロセッサにおいて、カウンタと各演算ユニットの処理内容を示すタイムチャート。
【図５】この発明の第２の実施形態に係るプロセッサのブロック図。
【図６】この発明の第２の実施形態に係るプロセッサの一部領域のブロック図であり、演算命令の割り当ての様子を示す図。
【図７】この発明の第２の実施形態に係るプロセッサの一部領域のブロック図であり、演算命令の割り当ての様子を示す図。
【図８】この発明の第２の実施形態に係るプロセッサにおいて、乱数発生器と各演算ユニットの処理内容を示すタイムチャート。
【図９】この発明の第３の実施形態に係るプロセッサシステムのブロック図。
【図１０】この発明の第３の実施形態に係るプロセッサシステムの保持する第１テーブルのダイアグラム。
【図１１】この発明の第３の実施形態に係るプロセッサシステムの保持する第２テーブルのダイアグラム。
【図１２】この発明の第３の実施形態に係るプロセッサシステムにおける、ジョブの割り当て方法を示すフローチャート。
【図１３】この発明の第３の実施形態に係るプロセッサにおける、瞬間活性化率と累積活性化時間の変化を示すグラフ。
【図１４】この発明の第３の実施形態の変形例に係るプロセッサシステムのブロック図。
【図１５】この発明の第１、第２の実施形態に係るプロセッサを備えたＬＳＩのブロック図。
【符号の説明】
【００８２】
１…プロセッサ、１０…命令発行ユニット、２０…ユニット選択回路、２１、７５…カウンタ、２２…選択回路、２３…乱数発生器、３０…演算実行部、３１、３１−０〜３１−７…演算ユニット、４０…演算結果出力部、６０、６０−０〜６０−ｎ…第１プロセッサ、６１…実行部、６２…活性化率書き込み部、７０…第２プロセッサ、７１…ジョブ割り当て部、７２〜７４…メモリ、７６…閾値データ、７７…第１テーブル、７８…第２テーブル
【図１】
2008225893.tif 000003
【図２】
2008225893.tif 000004
【図３】
2008225893.tif 000005
【図４】
2008225893.tif 000006
【図５】
2008225893.tif 000007
【図６】
2008225893.tif 000008
【図７】
2008225893.tif 000009
【図８】
2008225893.tif 000010
【図９】
2008225893.tif 000011
【図１０】
2008225893.tif 000012
【図１１】
2008225893.tif 000013
【図１２】
2008225893.tif 000014
【図１３】
2008225893.tif 000015
【図１４】
2008225893.tif 000016
【図１５】
2008225893.tif 000017