(57)【要約】【課題】プロセッサコア間でのデータ転送のオーバーヘッドを低減し、プロセッサ全体の処理能力を向上させる。【解決手段】演算処理または信号処理を行うＣＰＵ２０と、データを記憶する内蔵メモリ３０と、内蔵メモリ３０と共有メモリ６０の間でデータの転送を実行するデータ転送機構４０と、を備えて、データ転送機構４０は、ＣＰＵ２０が内蔵メモリ３０に書き込んだデータ転送指令を複数のコマンドからなるコマンド列を実行するコマンドチェイン部と、コマンドが所定の監視コマンドのときには、内蔵メモリ３０または共有メモリ６０に予め設定されたデータを読み込んで、予め設定された比較値と前記データの値が一致するまで当該データの監視を繰り返す監視部と、を備え、コマンドチェイン部は、監視部による監視が完了した後に、コマンド列から次のコマンドを実行させる。【選択図】図１
2008097084.tif 000002
【特許請求の範囲】
【請求項１】
演算処理または信号処理を行う演算部と、データを記憶する記憶部と、前記記憶部と記憶装置の間でデータの転送を実行するデータ転送部と、を備えたプロセッサにおいて、
前記データ転送部は、
前記記憶部または記憶装置に予め格納されたデータ転送指令を含む複数のコマンドからなるコマンド列を、前記演算部からの指令に基づいて読み込んで実行するコマンドチェイン部と、
前記コマンドが所定の監視コマンドのときには、前記記憶装置または記憶部に予め設定されたデータを読み込んで、予め設定された比較値と前記データの値が一致するまで当該データの監視を繰り返す監視部と、を備え、
前記コマンドチェイン部は、前記監視部による監視が完了した後に、前記コマンド列から次のコマンドを実行させることを特徴とするプロセッサ。
【請求項２】
前記演算部と記憶部とデータ転送部とを含むプロセッサコアを複数備え、
前記コマンドが所定のデータ設定コマンドのときには、前記記憶部または記憶装置の予め設定された領域に所定のデータを書き込むデータセット部を備えたことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記監視部は、前記他のプロセッサコアのデータセット部によって前記予め設定されたデータが書き込まれるのを監視することを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記監視部は、
前記予め設定されたデータの読み込みを所定の周期で実行するように時間間隔を設定するインターバル設定部を備えたことを特徴とする請求項１に記載のプロセッサ。
【請求項５】
少なくとも前記演算部とデータ転送部にクロックを供給するクロック供給部を備え、
前記監視部は、
前記時間間隔が経過するまでの期間は、当該データ転送部へのクロックの周波数を低減または遮断するクロック制御部を備えたことを特徴とする請求項４に記載のプロセッサ。
【請求項６】
演算処理または信号処理を行う演算部と、データを記憶する記憶部と、を含むプロセッサと、
前記演算部からの指令に基づいて前記記憶部と記憶装置の間でデータの転送を実行するデータ転送ユニットにおいて、
前記データ転送ユニットは、
前記記憶部または記憶装置に予め格納されたデータ転送指令を含む複数のコマンドからなるコマンド列を、前記演算部からの指令に基づいて読み込んで実行するコマンドチェイン部と、
前記コマンドが所定の監視コマンドのときには、前記記憶装置または記憶部に予め設定されたデータを読み込んで、予め設定された比較値と前記データの値が一致するまで当該データの監視を繰り返す監視部と、を備え、
前記コマンドチェイン部は、前記監視部による監視が完了した後に、前記コマンド列から次のコマンドを実行させることを特徴とするデータ転送ユニット。
【請求項７】
前記プロセッサは、前記演算部と記憶部とを含むプロセッサコアを複数備え、
前記コマンドが所定のデータ設定コマンドのときには、前記記憶部または記憶装置の予め設定された領域に所定のデータを書き込むデータセット部を備えたことを特徴とする請求項６に記載のデータ転送ユニット。
【請求項８】
前記監視部は、前記他のプロセッサコアのデータセット部によって前記予め設定されたデータが書き込まれるのを監視することを特徴とする請求項７に記載のデータ転送ユニット。
【請求項９】
前記監視部は、
前記予め設定されたデータの読み込みを所定の周期で実行するように時間間隔を設定するインターバル設定部を備えたことを特徴とする請求項６に記載のデータ転送ユニット。
【請求項１０】
前記監視部は、
前記時間間隔が経過するまでの期間は、当該データ転送ユニットへのクロックの周波数を低減または遮断するクロック制御部を備えたことを特徴とする請求項６に記載のデータ転送ユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置内に内蔵されるデータ転送機構に関する。
【背景技術】
【０００２】
プロセッサなどの情報処理装置においてはデータ転送を効率良く行うことが、装置全体の性能向上につながる。
【０００３】
情報処理装置が大量のデータ転送を行う場合、これをＣＰＵ（汎用プロセッサ）で実施すると、本来ＣＰＵで実施すべき処理が滞り、装置全体の性能が低下するという問題がある。
【０００４】
この問題に対する解決策として、現在の情報処理装置では、一般にダイレクトメモリアクセスコントローラ(ＤＭＡＣ)と呼ばれるデータ転送処理装置を用いて、ＣＰＵに代わってデータ転送を実施している（例えば、特許文献１〜３）。したがって、ＣＰＵ自身はデータ転送起動コマンドをＤＭＡＣに設定するだけで、ＤＭＡＣがデータ転送を行っている間に別の処理を行うことが可能となる。
【０００５】
上記の方法では、ＣＰＵはデータ転送が必要なときにＤＭＡＣに対してデータ転送起動コマンドを設定する必要がある。また、ＤＭＡＣが動作中かどうかを監視する必要も生じる。
【０００６】
このようにデータ転送起動コマンドの設定をデータ転送の度に行うことは、転送データ長が長い場合は、あまりオーバーヘッドとして見えてこないが、転送データ長が短い場合は、大きなオーバーヘッドとして見えてしまい、性能向上の妨げとなってしまう。また、プログラミングの難易度が高いデータ転送指示の挿入を、コンパイラが自動的に行うことで回避する最適化技術に対する要求が高まっているが、このような最適化コンパイラが、ある計算に対して複数回のデータ転送が必要と解析した場合、これらのデータ転送の度にＣＰＵがＤＭＡＣを駆動することはやはり大きなオーバーヘッドとなり、コンパイラによる効率的なデータ転送指示を生成することが難しい。
【０００７】
ＣＰＵによるデータ転送起動コマンドの設定回数を削減する方法として、コマンドチェインと呼ばれる方法が提案されている。コマンドチェインではデータ転送を行うたびに、ＣＰＵを介してデータ転送起動指示をＤＭＡＣに与えるのではなく、全データ転送指示をリストとして、予め記憶装置上に設定し、ＣＰＵが当該リストの先頭のデータ転送指示からデータ転送を実施するよう指示することで、ＤＭＡＣが記憶装置上の転送指示を順に読み出して、データ転送を実施する。
【０００８】
本方法では、ＣＰＵは最初のデータ転送の起動のみ実施し、その後のデータ転送に関してはＤＭＡＣ自身がコマンドの起動を行うため、ＣＰＵによるデータ転送起動コマンドの設定回数は１回だけとなる。そのため、これまでＣＰＵがデータ転送コマンドの設定に要した時間を、他の処理に割り当てることができる。さらにこのような自律性の高いＤＭＡＣによるデータ転送機能により、コンパイラが解析したデータ転送を実行時に効率よく行うことが可能となる。
【特許文献１】特開平６−１４９７４９号公報
【特許文献２】特開平６−２８２５１５号公報
【特許文献３】特開平９−３３０２８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
近年、プロセッサの動作周波数の向上の限界から、ひとつの半導体チップに複数のプロセッサコアを搭載したマルチコアプロセッサが普及している。マルチコアプロセッサでは、複数のプロセッサコアで処理を並列化することで、プロセッサの動作周波数を上昇させずに処理能力を向上させている。また、このようなマルチコアプロセッサ用のプログラムの生産性向上を目指し、最適化コンパイラによる自動並列化、メモリ管理及びデータ転送指示の生成といった研究も行われている。
【００１０】
しかしながら、上記従来のハードウェア技術ではＤＭＡＣによるデータ転送とコマンドチェインにより単一のＣＰＵが演算処理を行う場合には処理性能向上を図っているが、複数のプロセッサコアで並列的に処理を行う場合ではプロセッサコア間で通信を行う必要が生じて、オーバーヘッドが生じる場合がある。例えば、２つのプロセッサコアが記憶装置を介してデータ転送を行う場合、プロセッサコアＡのＤＭＡＣが記憶装置（共有記憶装置）に書き込んだデータを、プロセッサコアＢのＤＭＡＣが読み込んで、プロセッサコアＢで処理を行う例について検討する。
【００１１】
まず、プロセッサコアＡは内蔵したＤＭＡＣに対してプロセッサコアＡにあるデータを記憶装置に転送するよう指令し、ＤＭＡＣはこのデータを記憶装置へ転送する処理を開始する。一方、このデータを利用するプロセッサコアＢは、プロセッサコアＡによる記憶装置へのデータの書き込みが完了したか否かが不明であるため、プロセッサコアＢはプロセッサコアＡに対してデータ転送が完了したかを問い合わせる必要が生じる。そして、プロセッサコアＢはプロセッサコアＡへの問い合わせの結果、データ転送が完了した通知を受けるまでプロセッサコアＢのＤＭＡＣへデータ転送の指令を行うことができず、プロセッサコアＢは問い合わせと、処理待ちによって演算処理を行うことができない。
【００１２】
このように、各プロセッサコアにＤＭＡＣ等のデータ転送機構を備えながらも、複数のプロセッサコア間でデータのやり取りを行う場合には、プロセッサコア間で通信を行う必要が生じ、この通信によるオーバーヘッドや処理待ちによって、プロセッサ全体の処理能力を向上させることが難しく、このようなデータ転送をコンパイラが抽出できたとしても、効率の良いデータ転送指示の挿入が難しいという問題があった。
【００１３】
そこで本発明は、上記問題点に鑑みてなされたもので、複数のプロセッサコアにそれぞれデータ転送機構を備えたマルチコアプロセッサにおいて、プロセッサコア間でのデータ転送のオーバーヘッドを低減し、同時にコンパイラによるデータ転送最適化を行いやすくすることにより、プロセッサ全体の処理能力を向上させることを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、演算処理または信号処理を行う演算部と、データを記憶する記憶部と、前記記憶部と記憶装置の間でデータの転送を実行するデータ転送部と、を備えたプロセッサにおいて、前記データ転送部は、前記記憶部または記憶装置に予め格納されたデータ転送指令を含む複数のコマンドからなるコマンド列を、前記演算部からの指令に基づいて読み込んで実行するコマンドチェイン部と、前記コマンドが所定の監視コマンドのときには、前記記憶装置または記憶部に予め設定されたデータを読み込んで、予め設定された比較値と前記データの値が一致するまで当該データの監視を繰り返す監視部と、を備え、前記コマンドチェイン部は、前記監視部による監視が完了した後に、前記コマンド列から次のコマンドを実行させる。
【００１５】
また、前記演算部と記憶部とデータ転送部とを含むプロセッサコアを複数備え、前記コマンドが所定のデータ設定コマンドのときには、前記記憶部または記憶装置の予め設定された領域に所定のデータを書き込むデータセット部を備える。
【００１６】
さらに、前記監視部は、前記記憶部または記憶装置に前記予め設定されたデータが書き込まれるのを監視する。
【発明の効果】
【００１７】
したがって、本発明によれば、演算部は、データ転送の指令をデータ転送部に対して行うだけで良く、指令を行った後はデータ転送部が次のコマンドの実行タイミングを自立的に決定するので、プロセッサコア間でのデータ転送のオーバーヘッドを低減して、プロセッサ全体の処理能力を向上させることが可能となる。さらにコンパイラによるデータ転送最適化が行いやすくなるため、プログラムの生産性も向上する。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１９】
図１は、本発明の第１の実施形態であるマルチコアプロセッサシステム（情報処理装置）の構成を示すブロック図である。
【００２０】
図１において、マルチコアプロセッサシステム１は、複数のプロセッサコア１０−０〜１０−ｎと、これらプロセッサコア１０−０〜１０−ｎで共有する共有メモリ６０及び各プロセッサコア１０−０〜１０−ｎと共有メモリ６０を接続するプロセッサコア間ネットワーク５０を主体にして構成される。なお、プロセッサコア間ネットワーク５０は、共有バスやクロスバなどで構成してもよい。
【００２１】
本実施形態では、各プロセッサコアが命令セット及び構成が同一のホモジニアス・マルチコアプロセッサシステムで構成した例を示す。このため、プロセッサコア１０−０〜１０−ｎについてのみ構成の説明を行い、他のプロセッサコア１０−１〜１０−ｎも同様とする。
【００２２】
プロセッサコア１０−０は、演算処理を行うＣＰＵ２０と、データや命令を格納する内蔵メモリ（ローカルメモリ）３０と、内蔵メモリ３０と共有メモリ６０あるいは内蔵メモリ３０と他のプロセッサコア１０−１〜１０−ｎの内蔵メモリ３０との間でデータの転送を行うデータ転送機構（Data Transfer Unit）４０と、ＣＰＵ２０、内蔵メモリ３０及びデータ転送機構４０へクロックを供給するクロック生成部７０を備えている。なお、マルチコアプロセッサシステム１の外部に記憶装置が接続されている場合には、データ転送機構４０は、内蔵メモリ３０と外部の記憶装置との間でデータの転送を行うことができる。
【００２３】
データ転送機構４０は、ＤＭＡＣ（Direct Memory Access Controller）を含んで構成され、ＣＰＵ２０のバックグラウンドで、内蔵メモリ３０や共有メモリ６０または他のプロセッサコア１０−１〜１０−ｎとの間でデータの転送を実行する。
【００２４】
また、データ転送機構４０は、ＣＰＵ２０からデータの転送指令を受け付けると、前記従来例に示したＤＭＡ及びコマンドチェインにより、連続してデータの転送を実行することができる。ＣＰＵ２０は、データ転送機構４０へデータの転送を指令した後には、データの転送処理をデータ転送機構４０に任せることで自らの演算処理を実行することができる。
【００２５】
図２は、データ転送機構４０の機能ブロック図を示す。データ転送機構４０は、内蔵メモリ３０（または共有メモリ６０）に予め書き込まれた転送指令を含むコマンド列を順次実行するコマンドチェイン部４１０と、コマンドチェイン部４１０が読み込んだ転送指令に基づいて、内蔵メモリ３０と共有メモリ６０等との間でデータの転送をＤＭＡによって実行するデータ転送部４２０と、共有メモリ６０（または内蔵メモリ３０）の所定の領域にフラグなどの所定のデータを書き込むフラグセット部（データセット部）４５０と、共有メモリ６０（または内蔵メモリ３０）に設定されたフラグの値が予め設定した比較値と一致するまで繰り返して判定するフラグチェック部（データチェック部）４３０と、フラグをチェックする周期または間隔を設定するインターバル設定部４４０と、フラグチェックの待ち時間にデータ転送機構４０の動作クロックを低減するクロック制御部４６０と、を含む。
【００２６】
データ転送機構４０のコマンドチェイン部４１０は、ＣＰＵ２０から所定の指令を受けると内蔵メモリ３０（または共有メモリ６０）に予め読み込まれたコマンド列を順次読み込んで各部に実行させる。
【００２７】
コマンドチェイン部４１０は、ＣＰＵ２０が内蔵メモリ３０に読み込んだコマンド列のうち、最初のコマンドをＣＰＵ２０の指令に応じて読み込んで実行する。そして、コマンドチェイン部４１０は、一つのコマンドが終了すると後述するように次のコマンドを読み込んで順次実行する。データ転送機構４０で処理するコマンドとしては、内蔵メモリ３０からプロセッサコアの外部の記憶装置へデータを転送するputコマンド、プロセッサコアの外部の記憶装置から内蔵メモリ３０へデータを転送するgetコマンド、共有メモリ６０（または内蔵メモリ３０）の所定の領域にフラグを設定して、指定された値を書き込むsetコマンド、指定された値（比較値）と共有メモリ６０（または内蔵メモリ３０）のフラグの値とを比較するcheckコマンドを発行し、内蔵メモリ３０に格納する。
【００２８】
コマンドチェイン部４１０は、上記コマンドを内蔵メモリ３０から読み込んで、コマンドに応じた各部を機能させる。
【００２９】
データ転送部４２０は、ＤＭＡＣを含んで構成され、putコマンドやgetコマンドを実行して、内蔵メモリ３０と共有メモリ６０または他のプロセッサコア１０−１〜１０−ｎとの間でデータの転送を実行する。データ転送部４２０は、連続領域のデータ転送に加えてストライド転送やギャザー（gather）転送やスキャッタ（scatter）転送といったアドレスが不連続なデータ転送も実行する。
【００３０】
フラグセット部４５０は、setコマンドを実行して共有メモリ６０（または内蔵メモリ３０）の所定の領域にフラグを設定して、指定された値を書き込む。
【００３１】
フラグチェック部４３０は、checkコマンドを実行してフラグの値が指定された値（比較値）と一致するまで繰り返して実行される。
【００３２】
インターバル設定部４４０は、フラグチェック部４３０が実行するフラグのチェック周期を設定し、フラグのチェックサイクルが短くなってプロセッサコア間ネットワーク５０の負荷が過大になるのを防ぐ。なお、フラグのチェックを行ってから次回のフラグのチェックまでの時間はフラグチェックの待ち時間となる。この待ち時間ではデータ転送機構４０は全ての機能を作動させる必要がないので、クロック制御部４６０によって動作クロックの低減または停止を行って、無駄な電力消費を抑制する。クロック制御部４６０は、クロックの低減または停止中であっても、待ち時間をカウントする回路には所定の周波数のクロックを供給し続ける。
【００３３】
ここで、フラグは、後述するように、複数のプロセッサコア間でデータをやり取りする際の読み込みまたは書き込みのタイミングを決定するために用いるものである。２つのプロセッサコア間でデータ転送を行うとき、一方のプロセッサコアが共有メモリ６０へデータを書き込んだ後に、他のプロセッサコアが共有メモリ６０のデータを読み込んで利用する場合、データを書き込むプロセッサコアがフラグをセットし、データを読み込むプロセッサコアがフラグの値をチェックする。つまり、データを書き込むプロセッサコアのデータ転送機構４０は、データ転送が完了すると共有メモリ６０上のフラグを所定の値にセットする。データを読み込むプロセッサコアではデータ転送機構４０が共有メモリ６０上のフラグの値を監視し、フラグの値が所定の値になってから読み込みを開始する。これにより、複数のプロセッサコア間でデータ転送を行う場合は、各プロセッサコア１０−０〜１０−ｎのＣＰＵ２０が、データの書き込みまたは読み出しと、フラグのセットとフラグのチェックをデータ転送機構４０へ指令するだけでよい。各プロセッサコア間ではデータ転送機構４０がフラグを用いて、データの書き込みが完了したことをフラグの値で示し、他方のプロセッサコアは、フラグの値からデータ転送が完了したことを検知して、一方のプロセッサコアが確実に書き込んだデータを読み込むことができる。なお、セットするフラグの値と、比較する値は、プログラムで同一の値を設定しておけばよい。
【００３４】
このように、データ転送機構４０がデータ転送を同期させるフラグを共有メモリ６０（または内蔵メモリ３０）上で操作することで、ＣＰＵ２０同士が通信することなくプロセッサコア間でデータの読み書きを正確に行うことができる。
【００３５】
図３は、データ転送機構４０を構成するレジスタ群のうち、主要なレジスタを示すブロック図である。
【００３６】
転送元アドレスレジスタ４６１は、読み込むデータが記憶された内蔵メモリ３０または共有メモリ６０のアドレスをセットする。転送先アドレスレジスタ４６２は、データを書き込む内蔵メモリ３０または共有メモリ６０のアドレスをセットする。総転送量レジスタ４６３は、転送を行うデータのサイズを設定する。ストライド転送量レジスタ４６４は、アドレスが不連続なストライド転送やギャザー転送またはスキャッタ転送を行う場合のデータの転送量を設定する。ストライド幅レジスタ４６５は、ストライド転送やギャザー転送またはスキャッタ転送を行う場合のメモリアドレスの間隔を設定する。
【００３７】
コマンドチェインレジスタ４６６は、コマンドチェイン機能が有効なときに、内蔵メモリ３０（または共有メモリ６０）に格納されたコマンドのアドレスを設定する。チェックウェイトレジスタ４６７は、フラグのチェックの待ち時間の長さを設定するレジスタで、チェックウェイトレジスタ４６７に設定された値は、常時所定のクロック周波数で駆動されるカウンタ４７４で計数され、カウンタ４７４の値がチェックウェイトレジスタ４６７の値に一致すると、フラグチェック部４３０が共有メモリ６０（または内蔵メモリ３０）のフラグのチェックを実行する。
【００３８】
ステータスレジスタ４６８はデータ転送機構４０のデータ転送状態を示す値が格納されうる。コマンドレジスタ４６９は、ＣＰＵ２０がデータ転送機構４０に要求する機能に対応するコマンドを格納する。チェックパタン格納レジスタ４７０は、フラグのチェックの際に共有メモリ６０上のフラグの値と比較するための値を格納する。セットパタン格納レジスタ４７１では、共有メモリ６０に設定するフラグの値を格納する。フラグアドレスレジスタ４７２は、フラグを格納した共有メモリ６０のアドレスが格納される。
【００３９】
クロック制御レジスタ４７３は、フラグのチェックの待ち時間でデータ転送機構４０への動作クロックを低減または停止させる場合に、動作クロック周波数の値を設定する。
【００４０】
また、データ転送機構４０は、ＣＰＵ２０からの指令やデータを一時的に格納するバッファ４７５を備えている。
【００４１】
以上の各レジスタにＣＰＵ２０が所定の値をセットすることで、データ転送機構４０はＣＰＵ２０の指令したコマンド基づいてデータ転送や監視を実行する。
【００４２】
図４は、内蔵メモリ３０に設定されるコマンドチェイン機能によるコマンド列の一例を示す。コマンドとしては、メモリ（内蔵メモリ３０または共有メモリ６０）上のアドレスが連続した領域でデータ転送を行うコマンドや、フラグのセットまたはチェックのコマンドを記述する場合には、図中ショートコマンド４０１を使用する。一方、メモリ上のアドレスが不連続な領域でデータ転送を行うストライド転送やギャザー転送またはスキャッタ転送を場合には、図中ロングコマンド４０２を使用する。
【００４３】
ショートコマンドは、先頭からオペコード、全転送バイト数、内蔵メモリアドレス、共有メモリアドレス、次のコマンドへのポインタ４０１０から構成される。
【００４４】
オペコードは、データ転送機構４０によるデータ転送を制御し、put/getコマンド、setコマンド、checkコマンド、チェインコマンドの指示を行う。
【００４５】
内蔵メモリアドレスは、put/getコマンドでは転送元あるいは転送先となる内蔵メモリ３０の先頭のアドレスを指定する。
【００４６】
共有メモリアドレスは、put/getコマンドでは転送元あるいは転送先となる共有メモリ６０の先頭のアドレスを指定する。
【００４７】
内蔵メモリアドレスと共有メモリアドレスは、setコマンド及びcheckコマンドではいずれかがsetもしくはcheckの対象となるアドレスを指定し、残りがsetもしくはcheckすべき値を指定する。例えば、共有メモリ６０上にフラグを設定した場合には、共有メモリアドレスにフラグのアドレスをセットし、内蔵メモリアドレスにフラグの値をセットする。
【００４８】
次のコマンドへのポインタ４０１０は、次に実行すべきコマンドの格納先となるメモリアドレスを指定する。なお、全転送バイト数は、put/getコマンドでの転送バイト数を指定する。
【００４９】
ロングコマンド４０２は、上記ショートコマンド４０１の次のコマンドへのポインタ４０１０以降に、全転送バイト数、ストライド時の転送バイト数、ストライド幅を加えたものである。ストライド時の転送バイト数は、put/getコマンドにおけるgather/scatter転送時の各転送バイト数を指定する。また、ストライド幅は、put/getコマンドにおけるgather/scatter転送時のストライド間隔を指定する。
【００５０】
ＣＰＵ２０は、データ転送機構４０のコマンドチェイン機能を利用するときには、図５で示すように、内蔵メモリ３０（または共有メモリ６０）に上記図４で示したコマンド列を予め格納しておく。そして、ＣＰＵ２０からの指令を受けて、コマンドチェイン部４１０がコマンド列を読み出し、データ転送などを実行する。なお、ＣＰＵ２０は実行するプログラムで指定されたコマンド列を、所定の記憶域（内蔵メモリ３０や共有メモリ６０）に書き込むものである。
【００５１】
図中コマンド１〜４は、内蔵メモリ３０の任意の領域に格納され、図４に示したように、次のコマンドへのポインタ４０１０により、データ転送機構４０が次に読み込むべきコマンドのアドレスが指定される。ＣＰＵ２０は、内蔵メモリ３０の書き込み可能な領域へ順次コマンドを書き込むため、コマンドの実行順序とコマンドのアドレスは一致しない。
【００５２】
コマンドチェインを利用したコマンドの実行は、ＣＰＵ２０から指令を受けたコマンドチェイン部４１０がコマンド列を順次読み込んで、実行する。
【００５３】
図５の例では、コマンド１が終了するとコマンド２を読み込み、順次コマンド３、４を読み込んで実行することができる。最後のコマンド４のポインタ４０１０には内蔵メモリ３０のアドレスがないので、最後のコマンドとして判定され、コマンドチェイン部４１０は一連のコマンド列の実行を終了する。
【００５４】
ＣＰＵ２０は、データ転送機構４０のコマンドチェイン部４１０が提供するコマンドチェイン機能を利用することで、複数のデータ転送に関する指令をまとめて行うことが可能となり、指令が完了した後には演算処理を実行することができる。
【００５５】
図６は、データ転送機構４０で行われるチェインコマンドの実行処理の一例を示すフローチャートである。この処理は、上記図４に示したコマンド列の書き込みが完了した後に、ＣＰＵ２０からの指令を受けて実行される。なお、コマンドチェインの指令は、プログラムのコンパイル時にコンパイラが設定することができる。
【００５６】
ステップＳ１１では、コマンドチェイン部４１０が内蔵メモリ３０のコマンド列を先頭から順次読み込んで、Ｓ１２でコマンドの種類を判定する。ステップＳ１２では、コマンドの種類に応じたモジュール（図４のデータ転送部４２０〜フラグセット部４５０等の機能要素）が実行される。
【００５７】
読み込んだコマンドの種類がputコマンドまたはgetコマンドの場合にはステップＳ１３ヘ進み、setコマンドの場合にはステップＳ１４へ進み、checkコマンドの場合にはステップＳ１５へ進み、その他のコマンドの場合にはステップＳ１６へ進む。
【００５８】
ステップＳ１３では、putコマンドの場合、転送元アドレスレジスタ４６１に内蔵メモリ３０のアドレスを設定し、転送先アドレスレジスタ４６２に共有メモリ６０上のアドレスを設定し、総転送量レジスタ４６３にデータの総量を設定し、コマンドレジスタ４６９にputコマンドを設定して内蔵メモリ３０から共有メモリ６０への書き込み処理を実行する。
【００５９】
一方、getコマンドの場合は、転送元アドレスレジスタ４６１に共有メモリ６０のアドレスを設定し、転送先アドレスレジスタ４６２に内蔵メモリ３０のアドレスを設定し、総転送量レジスタ４６３にデータの総量を設定し、コマンドレジスタ４６９にgetコマンドを設定して共有メモリ６０から内蔵メモリ３０への読み込み処理を実行する。
【００６０】
なお、ストライドやギャザー、スキャッタ等、アドレスの不連続な転送を実行する場合には、ストライド転送量レジスタ４６４に転送するデータの総量を設定し、ストライド幅レジスタ４６５に、アドレスの間隔を設定し、コマンドレジスタ４６９にストライド、ギャザー、スキャッタの識別子を設定する。
【００６１】
ステップＳ１４のsetコマンドの場合では、フラグアドレスレジスタ４７２に共有メモリ６０上のアドレスを設定し、セットパタン格納レジスタ４７１にフラグの値を設定し、コマンドレジスタ４６９にsetコマンドを格納して、フラグの設定処理を実行する。
【００６２】
ステップＳ１５のcheckコマンドの場合では、フラグアドレスレジスタ４７２に共有メモリ６０上のアドレスを設定し、チェックパタン格納レジスタ４７０にフラグの比較値を設定し、コマンドレジスタ４６９にcheckコマンドを格納して、フラグのチェック処理を実行する。なお、checkコマンドの詳細については後述する。
【００６３】
ステップＳ１６のその他のコマンドの場合は、コマンドの種類に応じたレジスタにＣＰＵ２０から指令された値を設定して処理を実行する。
【００６４】
上記ステップＳ１３からＳ１６のいずれかで処理の実行が完了すると、ステップＳ１７へ進み、コマンドチェイン部４１０は、実行が完了したコマンドのポインタ４０１０を参照して、次に実行するコマンドのアドレスがあるか否かを判定する。ポインタ４０１０に次のコマンドのアドレスが設定されていればステップＳ１１に戻って次のコマンドを実行する。一方、ポインタ４０１０に次のコマンドのアドレスが設定されていなければ、実行が完了したコマンドがコマンド列の最後のコマンドであったので、コマンドチェイン処理を終了する。
【００６５】
上記処理により、データ転送機構４０は、図５で示した内蔵メモリ３０上のコマンド列（コマンド１〜４）を順次実行し、データ転送に関する処理をＣＰＵ２０から独立して連続的に実行する。
【００６６】
なお、データ転送機構４０は、コマンドチェインの指令がない場合には、通常のＤＭＡＣと同等に機能することができる。
【００６７】
次に、本発明のデータ転送機構４０の特徴である、フラグチェック部４３０の処理について説明する。図７は、データ転送機構４０のフラグチェック部４３０で行われる処理の一例を示すフローチャートである。このフローチャートは、コマンドチェイン部４１０がcheckコマンドを読み込んだときに実行されるものである。
【００６８】
フラグチェック部４３０は、コマンドチェイン部４１０が読み込んだcheckコマンドから、フラグが設定される共有メモリ６０上のアドレスと、フラグの比較値を読み込む。そして、ステップＳ２１で、フラグチェック部４３０は、checkコマンドで指定された共有メモリ６０上のアドレスからフラグを読み込む。次に、ステップＳ２２では、checkコマンドから取得したフラグの比較値と、ステップＳ２１で読み込んだフラグの値が一致するか否かを判定する。
【００６９】
読み込んだフラグの値とフラグの比較値が一致していれば、他のプロセッサコアによる処理、例えば、共有メモリ６０へのデータ転送が完了したと判定してフラグチェック部４３０の処理を終了する。この後、コマンドチェイン部４１０は、当該checkコマンドの次のコマンドへのポインタ４０１０により指定されたコマンドを読み込んで実行することになる。
【００７０】
一方、フラグの値とフラグの比較値が一致しない場合には、ステップＳ２３へ進んで、フラグチェックの待ち時間のカウントを開始する。すなわち、図３のチェックウェイトレジスタ４６７に待ち時間に対応する値を設定し、カウンタ４７４でカウントを開始する。
【００７１】
ステップＳ２４では、カウンタ４７４の値がチェックウェイトレジスタ４６７の値に一致したか否かを判定し、一致していれば所定の待ち時間が経過したのでステップＳ２１に戻って、再度フラグのチェックを繰り返す。
【００７２】
一方、待ち時間が経過していない場合には、ステップＳ２５に進んで、データ転送機構４０の動作クロックを低減する。すなわち、クロック制御レジスタ４７３に低減させる動作クロック周波数を設定し、データ転送機構４０を駆動する動作クロックを低下させる。
【００７３】
そして、再びステップＳ２４の処理に戻って待ち時間が経過するまでステップＳ２５のクロックの低減を繰り返す。
【００７４】
以上の処理により、共有メモリ６０のフラグの監視を所定の待ち時間が経過する度に実行することで、プロセッサコア間ネットワーク５０の負荷が過大になるのを防ぎながら、他のプロセッサコアによる共有メモリ６０へのデータ転送が完了するのをデータ転送機構４０で検知できるのである。この間、ＣＰＵ２０は所定の演算処理を行うことができるので、処理能力を損なうことがない。
【００７５】
なお、ステップＳ２５のクロックの低減処理に代わって、データ転送機構４０の動作クロックを停止する場合には、カウンタ４７４（またはタイマ）への動作クロックは常時クロック生成部７０から供給させる。そして、カウンタ４７３（またはタイマ）は所定期間が経過したらＣＰＵ２０に割り込みをかけて、データ転送機構４０再起動させればよい。
【００７６】
次に、図８〜図１０は複数のプロセッサコア間で共有メモリ６０を介してデータを転送する場合に、上記setコマンドとcheckコマンドを用いてデータ転送機構４０同士でデータ転送を実行する例を示す。
【００７７】
図８は、図１に示したプロセッサコア１０−０のＣＰＵ２０をＣＰＵ＃０とし、データ転送機構４０をＤＴＵ＃０とし、内蔵メモリ３０をＬＭ＃０とし、同じくプロセッサコア１０−１のＣＰＵ２０をＣＰＵ＃１、データ転送機構４０をＤＴＵ＃１とし、内蔵メモリ３０をＬＭ＃１とする。
【００７８】
そして、２つのプロセッサコアはＤＴＵ＃０、＃１のコマンドチェイン機能を利用して、プロセッサコア１０−０のＤＴＵ＃０が、ＬＭ＃０の領域Ａのデータを共有メモリ６０の領域Ｂへ転送し（Ｓ３３）、その後、プロセッサコア１０−１のＤＴＵ＃１が共有メモリ６０の領域ＢのデータをＬＭ＃１の領域Ｃへ転送する（Ｓ３６）場合を示す。そして、ＤＴＵ＃０はデータ転送が完了すると、共有メモリ６０の所定の領域にフラグＦをセットし（Ｓ３４）、ＤＴＵ＃１はフラグＦが所定の比較値と一致したことを判定した後に（Ｓ２５）、共有メモリ６０からＬＭ＃１の領域Ｃへのデータ転送を開始する例を示している。
【００７９】
図９は、プロセッサコア１０−０、１０−１が所定のプログラムを実行して、ＤＴＵ＃０、＃１に指示するコマンドチェインの一例を示す。プロセッサコア１０−０は、図９のコマンドチェインＰＧＭ０をＤＴＵ＃０に指令し、プロセッサコア１０−１は、コマンドチェインＰＧＭ１をＤＴＵ＃１へ指令する。プロセッサコア１０−０、１は各コマンドチェインＰＧＭ１、０をほぼ同時に指令するものとする。
【００８０】
プロセッサコア１０−０は、次の複数のコマンドをコマンドチェインＰＧＭ０で処理するようにＤＴＵ＃０へ指令する。
「put  Ａ  to  Ｂ」：ＬＭ＃０の領域Ａのデータを共有メモリ６０の領域Ｂへ書き込み。
「set  Ｆ」：書き込みの後に、共有メモリ６０へフラグＦをセット。
【００８１】
プロセッサコア１０−１は、次の複数のコマンドをコマンドチェインＰＧＭ１で処理するようにＤＴＵ＃１へ指令する。
「check  Ｆ」：共有メモリ６０のフラグＦが所定の比較値と一致するまで所定の時間間隔で監視。
「get  Ｂ  to  Ｃ」：共有メモリ６０の領域ＢからＬＭ＃１の領域Ｃのデータを読み込み。
【００８２】
なお、共有メモリ６０上のフラグＦを格納する領域及びフラグＦの設定値と比較値は、プロセッサコア１０−０、１が実行するプログラムに予め設定したものである。
【００８３】
プロセッサコア１０−０では、ＣＰＵ＃０がコマンドチェインＰＧＭ０をＤＴＵ＃０に指令し、内蔵メモリＬＭ＃０にコマンド列を設定してＤＴＵ＃０が実行する。同様に、プロセッサコア１０−１では、ＣＰＵ＃１がコマンドチェインＰＧＭ１をＤＴＵ＃１に指令し、内蔵メモリＬＭ＃１にコマンド列を設定してＤＴＵ＃１が実行する。
【００８４】
以上のコマンドチェインを実行した結果を図１０のタイムチャートに示す。図１０において、時刻Ｔ０では、プロセッサコア１０−０のＤＴＵ＃０は内蔵メモリＬＭ＃０の領域Ａにあるデータを、共有メモリ６０の領域Ｂへ転送を開始する。ＤＴＵ＃０は領域Ｂへの転送を時刻Ｔ１で終了すると、次のsetコマンドを実行して、時刻Ｔ２に共有メモリ６０の所定のアドレスにフラグＦを設定する。すなわち、putコマンドとsetコマンドを併用することで、ＤＴＵ＃０のデータ転送が完了したことを共有メモリ６０のフラグＦで他のプロセッサコアのＤＴＵに伝達することができるのである。
【００８５】
一方、プロセッサコア１０−１では、時刻Ｔ０からＤＴＵ＃１が、共有メモリ６０のフラグＦが比較値と一致したか否かを所定の時間間隔ΔＴで監視する。ＤＴＵ＃１は、フラグＦの値が所定の比較値と一致しない間は、所定の間隔ΔＴで繰り返してフラグＦの値を監視する。そして、ＤＴＵ＃１は時刻Ｔ２でフラグＦがＤＴＵ＃１によってセットされたことから、フラグＦの値が比較値と一致したのでプロセッサコア１０−０のデータ転送が完了したことを検知する。そして、ＤＴＵ＃１は、時刻Ｔ３で次のgetコマンドを実行して、共有メモリ６０の領域ＢからＬＭ＃１の領域Ｃへデータ転送を実行する。
【００８６】
以上のように、２つのプロセッサコア１０−０、１０−１間でデータの転送を行う場合、putコマンドやgetコマンドのデータ転送コマンドに、フラグＦを設定するsetコマンドとフラグＦを監視するcheckコマンドをコマンドチェイン機能によって併用することで、ＣＰＵ＃０、＃１は、データ転送の指令を行った後は、ＤＴＵ同士がデータ転送のタイミングを自立的に決定するので、プロセッサコア間でのデータ転送のオーバーヘッドを低減して、マルチコアプロセッサシステム１全体の処理能力を向上させることが可能となるのである。
【００８７】
また、フラグＦの監視を所定の時間間隔ΔＴで監視することにより、プロセッサコア間ネットワーク５０の通信負荷が過大になるのを防止でき、マルチコアプロセッサシステム１全体の処理能力を向上させることができる。
【００８８】
また、フラグＦの監視の待ち時間は、データ転送機構４０の動作クロックの周波数を低減することにより、無駄な消費電力を抑制して、高性能かつ低消費電力のマルチコアプロセッサシステム１を提供できる。
【００８９】
なお、上記実施形態では、フラグＦを共有メモリ６０に設定したが、内蔵メモリＬＭ＃０、＃１のいずれかに設定することができる。また、上記実施形態では、共有メモリ６０を介してデータ転送を行ったが、プロセッサコアの内蔵メモリ３０間でデータの転送を行っても良い。
【００９０】
また、上記実施形態では、各プロセッサコアの命令セット及び構成が同一のホモジニアス・マルチコアプロセッサシステムに本発明を適用した例を示したが、各プロセッサコアの命令セットと構成が異なるヘテロジニアス・マルチコアプロセッサシステムに本発明を適用することができる。例えば、演算処理を行うＣＰＵ２０を備えたプロセッサコアの他に、信号処理を行うＤＳＰ（Digital Signal Processor）を含むプロセッサコアや、ＤＲＰ（Dynamically Reconfigurable Processor）を含むプロセッサコアを備えるようにしても良い。
【００９１】
また、上記実施形態では、ＣＰＵ２０が複数のコマンドからなるコマンド列を内蔵メモリ３０に書き込んだが、共有メモリ６０あるいはマルチコアプロセッサシステム１の外部の記憶装置にコマンド列を書き込んでデータ転送機構４０が実行するようにしても良い。      
【００９２】
＜第２実施形態＞
図１１は、第２の実施形態を示し、前記第１実施形態のデータ転送機構４０をプロセッサコアの外部に配置したもので、その他の構成は前記第１実施形態と同様である。データ転送機構ＤＴＵ＃０及びＤＴＵ＃１はプロセッサコア間ネットワーク５０に接続され、プロセッサコア１０−０、プロセッサコア１０−１から利用可能となっている。
【００９３】
この構成の場合、各プロセッサコア１０−０、１０−１は空き（処理待ち）となっているデータ転送機構を利用するようにしても良い。
【００９４】
なお、上記第１または第２実施形態において、上記マルチコアプロセッサシステム１は、所定のコンパイラが出力したコマンドチェインを含むコードと協調して動作するアーキテクチャとしても良い。すなわち、所定のコンパイラはプログラムの解析結果からデータ転送命令列（コマンド列）ならびにデータ転送機構間の順序関係を保証する同期命令列からなるデータ転送機構４０用のコマンド列をローカルメモリ（内蔵メモリ３０）上に生成する。マルチコアプロセッサシステム１は、所定のコンパイラが出力したデータ転送命令列、同期命令列からなるコマンド列の実行時に、これらコマンド列の先頭をデータ転送機構４０に渡し、データ転送機構４０はマルチコアプロセッサシステム１の動作とは独立して、これらのコマンド列を処理していく。
【産業上の利用可能性】
【００９５】
以上のように、本発明は複数のプロセッサコアを備えたマルチコアプロセッサシステムや、複数のプロセッサを備えた計算機システムに適用することで、データ転送のオーバーヘッドを低減してプロセッサの処理能力を向上させることができるのである。
【図面の簡単な説明】
【００９６】
【図１】本発明の第１の実施形態を示し、プロセッサの構成を示すブロック図。
【図２】データ転送機構の機能を示すブロック図。
【図３】データ転送機構の主なレジスタ構成を示すブロック図。
【図４】データ転送機構が扱うコマンドのフォーマットを示す説明図。
【図５】内蔵メモリに格納されたコマンド列を示すマップ。
【図６】コマンド列を実行するコマンドチェイン処理の一例を示すフローチャート。
【図７】フラグチェックの処理の一例を示すフローチャート。
【図８】２つのプロセッサコア間でデータの転送を行う場合のブロック図。
【図９】２つのデータ転送機構に実行させるコマンドチェインの指令の一例を示す説明図。
【図１０】２つのプロセッサコア間でデータの転送を行う場合のタイムチャート。
【図１１】第２の実施形態を示し、プロセッサの構成を示すブロック図。
【符号の説明】
【００９７】
１０−０〜１０−ｎ  プロセッサコア
２０  ＣＰＵ
３０  内蔵メモリ
４０  データ転送機構
６０  共有メモリ
４１０  コマンドチェイン部
４２０  データ転送部
４３０  フラグチェック部
４４０  インターバルセット部
４５０  フラグセット部
４６０  クロック制御部
【図１】
2008097084.tif 000003
【図２】
2008097084.tif 000004
【図３】
2008097084.tif 000005
【図４】
2008097084.tif 000006
【図５】
2008097084.tif 000007
【図６】
2008097084.tif 000008
【図７】
2008097084.tif 000009
【図８】
2008097084.tif 000010
【図９】
2008097084.tif 000011
【図１１】
2008097084.tif 000012
【図１０】
2008097084.tif 000013