(57)【要約】【課題】  ホストプロセッサの処理負荷の増大による処理能力の低下やスループットの低下を抑制できるストリームプロセッサを提供する。【解決手段】  タスクに対応付けられたタスクコマンドとタスクに対応付けられたタスクデータとを外部のメモリからロードする入力ＤＭＡ回路と、タスクデータをタスクコマンドで指定されるプログラムにしたがって処理するアレイ型プロセッサと、該プログラムがアレイ型プロセッサにロードされていない場合に、アレイ型プロセッサからの転送要求によってプログラムを外部メモリからアレイ型プロセッサにロードする構成情報ＤＭＡコントローラとを備えた構成とする。アレイ型プロセッサは、プログラムのロードが完了してからタスクデータの処理を開始する。【選択図】  図１
2006338538.tif 000002
【特許請求の範囲】
【請求項１】
タスクに対応付けられたタスクコマンドと前記タスクに対応付けられたタスクデータとを外部のメモリからロードする入力ＤＭＡ回路と、
前記タスクデータを前記タスクコマンドで指定されるプログラムにしたがって処理することで前記タスクを実行するアレイ型プロセッサと、
前記プログラムが前記アレイ型プロセッサにロードされていない場合に、前記アレイ型プロセッサからの転送要求によって前記プログラムを前記外部メモリから前記アレイ型プロセッサにロードする構成情報ＤＭＡコントローラと、
を備え、
前記アレイ型プロセッサは、前記プログラムのロードが完了してから前記タスクデータの処理を開始するストリームプロセッサ。
【請求項２】
第１のタスクと第２のタスクとが連続して実行され、かつ前記第１のタスクに対応付けられた第１のタスクコマンドと前記第２のタスクに対応付けられた第２のタスクコマンドとが異なる場合、
前記アレイ型プロセッサは、
前記第２のタスクコマンドで指定された転送要求を発行し、
前記構成情報ＤＭＡコントローラは、
前記転送要求に応じて、前記アレイ型プロセッサ内部のレジスタに格納された中間データを前記外部メモリにセーブする転送処理、及び外部メモリにセーブされた中間データをロードする転送処理のいずれか一方の転送処理、または、その両方の転送処理を行う請求項１記載のストリームプロセッサ。
【請求項３】
前記アレイ型プロセッサは、前記構成情報ＤＭＡコントローラに対する前記タスクコマンドで指定された前記転送要求を前記タスクコマンドから算出されたインデックスとして発行し、
前記構成情報ＤＭＡコントローラは、
前記アレイ型プロセッサが発行する前記インデックスを格納する第１のインデックスレジスタと、
前記プログラムまたは前記中間データの転送元アドレス及び転送先アドレスを含むＤＭＡコマンドが格納されるＤＭＡコマンドテーブルと、
前記ＤＭＡコマンドテーブルから前記ＤＭＡコマンドが入力されるＤＭＡ制御部と、
を備え、
前記ＤＭＡ制御部は、
前記インデックスレジスタに格納された前記インデックスで指定される前記ＤＭＡコマンドから前記転送元アドレス及び前記転送先アドレスを抽出し、抽出された前記転送元アドレス及び前記転送先アドレスにしたがって、前記アレイ型プロセッサと前記外部メモリとの間で前記プログラム及び／または前記中間データの転送処理を行う請求項２記載のストリームプロセッサ。
【請求項４】
前記ＤＭＡコマンドに、前記転送元アドレス、前記転送先アドレス及びエンドフラグを備え、
前記ＤＭＡ制御部は、
前記第１のインデックスレジスタに格納された前記インデックスで指定される前記ＤＭＡコマンドのエンドフラグが前記ＤＭＡコマンドの実行終了を示すか否かを判断し、
前記エンドフラグが実行終了を示す場合は、前記ＤＭＡコマンドテーブルから前記ＤＭＡコマンドの読み込みを終了し、
前記エンドフラグが実行継続を示す場合は、前記インデックスの値をインクリメントした新たな値のインデックスで指定されるＤＭＡコマンドにしたがって、前記プログラムまたは前記中間データの転送処理を行う請求項３記載のストリームプロセッサ。
【請求項５】
前記タスクコマンドで指定されるプログラムが１つまたは複数である請求項４記載のストリームプロセッサ。
【請求項６】
前記エンドフラグが実行終了を示す場合、前記構成情報ＤＭＡコントローラは、
ロード完了通知を前記アレイ型プロセッサに送信する請求項４または５記載のストリームプロセッサ。
【請求項７】
前記構成情報ＤＭＡコントローラは、さらに
外部から入力されるインデックスを格納する第２のインデックスレジスタと、
前記第１のインデックスレジスタに格納された第１のインデックス、または前記第２のインデックスレジスタに格納された第２のインデックスのいずれか一方のインデックスを選択する調停回路と、
を備えた請求項３から６のいずれか１項記載のストリームプロセッサ。
【請求項８】
前記ＤＭＡコマンドは、前記転送元アドレス、前記転送先アドレス、前記エンドフラグ及び割り込みフラグを備え、
前記ＤＭＡ制御部は、前記調停回路が選択した、インデックスで指定される前記ＤＭＡコマンドの割り込みフラグが立っているか否かを判断し、
前記割り込みフラグが立っている場合は、外部に割り込み通知を行う請求項７記載のストリームプロセッサ。
【請求項９】
前記入力ＤＭＡ回路は、
前記タスクデータが格納された前記外部メモリのアドレスを示す入力データアドレス情報、前記タスクデータのサイズを示す入力データサイズ情報、及び前記タスクに対応づけられたタスクコマンドを備えたディスクリプタを前記外部メモリからロードし、
前記ディスクリプタから抽出した前記入力データアドレス情報及び前記入力データサイズ情報にしたがって前記外部メモリから前記タスクデータをロードし、
前記ディスクリプタから前記タスクコマンドを抽出する請求項１から８のいずれか１項記載のストリームプロセッサ。
【請求項１０】
前記アレイ型プロセッサの処理結果である出力データを前記アレイ型プロセッサから受け取り、前記外部メモリに前記出力データをストアするメモリアクセス制御回路を備える請求項９記載のストリームプロセッサ。
【請求項１１】
前記ストリームプロセッサは、
前記アレイ型プロセッサの処理結果である出力データの格納先を示す出力データアドレス情報を格納するディスクリプタ管理テーブルをさらに備え、
前記ディスクリプタは、
前記タスクデータが格納された前記外部メモリのアドレスを示す入力データアドレス情報、前記タスクデータのサイズを示す入力データサイズ情報、前記タスクに対応づけられたタスクコマンド、前記ディスクリプタを識別するためのトランザクション識別子及び前記出力データアドレス情報を備え、
前記入力ＤＭＡ回路は、
前記ディスクリプタから前記トランザクション識別子を抽出し、前記トランザクション識別子を前記アレイ型プロセッサへ送信し、前記出力データアドレス情報を前記トランザクション識別子に関連付けて前記ディスクリプタ管理テーブルに格納し、
前記メモリアクセス制御回路は、
前記アレイ型プロセッサから前記トランザクション識別子を受け取り、該トランザクション識別子に関連する前記出力データアドレス情報を読み出し、該出力データアドレス情報にしたがって前記アレイ型プロセッサの出力データを前記外部メモリにストアする請求項１０記載のストリームプロセッサ。
【請求項１２】
前記入力ＤＭＡ回路と前記アレイ型プロセッサとの間にＦＩＦＯを備える請求項１１記載のストリームプロセッサ。
【請求項１３】
前記アレイ型プロセッサと前記メモリアクセス制御回路との間にＦＩＦＯを備える請求項１１または１２記載のストリームプロセッサ。
【請求項１４】
前記タスクコマンドが指定するプログラムが１つまたは複数である請求項２記載のストリームプロセッサ
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置で用いられる、各種の処理を実現するアレイ型プロセッサを備えたストリームプロセッサに関する。
【背景技術】
【０００２】
情報処理装置は、その利用範囲が広がり、より高度な演算処理あるいは画像や動画のように大量のデータを高速に処理する能力が要求されている。このような要求を満たすための手法として、従来、ホストプロセッサとは別に特定の演算や処理を専用に実行するＤＳＰ（Digital Signal Processor）やＡＳＩＣ（Application Specific Integrated Circuit）等を備え、ＣＰＵ等のホストプロセッサの処理負荷を軽減することで情報処理装置としての処理能力を向上させた構成が知られている。
【０００３】
しかしながら、近年の情報処理装置は、これら画像、動画、音声、音楽等のマルチメディアデータに対して様々な規格の圧縮／伸長処理や演算処理等が必要になり、またインターネット等のネットワークを介して各種データを送受信するための通信処理にも様々なプロトコルが用いられるようになってきている。さらに、ネットワーク上で送受信される情報の安全性が問題となっているため、情報セキュリティのための暗号化処理やそれを解読するための復号処理等も必要となる。そのため、これらの処理に合わせて多数のＤＳＰやＡＳＩＣ等を設けていたのでは、情報処理装置の回路規模やコストが膨大なものとなってしまう。
【０００４】
そこで、情報処理装置内にＰＬＤ（Programmable Logic Device）を備え、必要に応じてＰＬＤ内のプログラムを書き換えることにより、情報処理装置としての処理速度を向上させると共に、コストを低減しつつ様々な処理要求への対応を可能にした構成が特許文献１で提案されている。この特許文献１で提案された従来の情報処理装置の構成を図８に示す。
【０００５】
図８は従来の情報処理装置の構成を示すブロック図である。
【０００６】
図８に示すように、従来の情報処理装置は、プログラムにしたがって処理を実行するＣＰＵ１００と、ＣＰＵ１００に代わって特定の処理を実行するＰＬＤ１１０と、ＰＬＤ１１０に実行させるプログラムを書き換える変更部１２０と、ＣＰＵ１００やＰＬＤ１１０で実行するプログラム及び処理対象となるデータや処理後のデータ等が格納されるメモリ１３０と、処理後のデータや処理状況等を外部へ出力するための出力部１４０と、データを外部から入力するための入力部１５０とを有し、それらがバス１６０を介して接続された構成である。
【０００７】
ＣＰＵ１００は、メモリ１３０に格納されたＯＳ（Operating System）プログラムやアプリケーションプログラム等にしたがって処理を実行する。ＰＬＤ１１０は、内部にプログラムを格納するためのメモリを備え、ＣＰＵ１００の指示にしたがって変更部１２０によりメモリ１３０に格納されたプログラムが内部のメモリへロードされ、ロードされたプログラムにしたがって特定の処理（以下、タスクと称す）を実行する。なお、ＰＬＤ１１０は、ＰＬＤ１１０自身でタスクのプログラム（以下、タスク用プログラムと称す）を内部のメモリへロードすることはできないため、ＰＬＤ１１０で実行するタスクを切り換える場合は、外部の装置（ＣＰＵ１００や変更部１２０）がＰＬＤ１１０の内部のメモリへタスク用プログラムをロードする必要がある。
【０００８】
ＣＰＵ１００は、ＰＬＤ１１０にタスクを実行させる場合、対応するタスク用プログラムのＰＬＤ１１０へのロード（Load）要求及び該タスク用プログラムを特定する情報を変更部１２０に送信する。また、ＰＬＤ１１０に対して処理対象となるデータを送信する。
【０００９】
変更部１２０は、ＣＰＵ１００からロード要求を受信すると、ＣＰＵ１００が指定するタスク用プログラムをメモリ１３０から読み出し、該タスク用プログラムをＰＬＤ１１０へ書き込む。ＰＬＤ１１０は、タスク用プログラムにしたがって内部回路を変更し、処理対象のデータ（以下、タスクデータと称す）に対して指定されたタスクの処理を実行する。また、タスクが終了すると、割り込み信号等を用いてＣＰＵ１００へ通知する。ＣＰＵ１００は、ＰＬＤ１１０からタスクの終了通知を受け取ると、ＰＬＤ１１０に次に実行させるタスクの種類を判断し、前回と同一のタスクを実行させる場合はＰＬＤ１１０に処理対象となる次のタスクデータを送信する。また、前回と異なるタスクを実行させる場合は、上記と同様にそのタスク用プログラムを特定する情報及びロード要求を変更部１２０へ送信し、ＰＬＤ１１０のタスク用プログラムを書き換える。
【００１０】
このように図８に示した情報処理装置では、ＰＬＤ１１０に実行させるタスク用プログラムを変更部１２０で書き換えることで、コストを低減しつつ様々な処理要求への対応を可能にしている。
【００１１】
しかしながら、図８に示した従来の情報処理装置は、上述したように変更部１２０が能動的にＰＬＤ１１０のタスク用プログラムを書き換えるものではなく、あくまでもＣＰＵ１００がＰＬＤ１１０に実行させるタスクの種類を判断し、必要なタスク用プログラムのロード要求を発行している。したがって、ＰＬＤ１１０に対するタスク用プログラムのロード処理が頻繁に発生すると、ＣＰＵ１００の処理負荷が増大して情報処理装置の処理能力を十分に向上させることができない問題がある。
【００１２】
また、図８に示すような情報処理装置の場合、通常、ＣＰＵ１００は、複数の処理を切り換えて実行するマルチタスク処理を行っている。したがって、ＣＰＵ１００は、ＰＬＤ１１０から割り込み信号によってタスクの終了が通知されると、割り込みハンドラを起動してＰＬＤ１１０に次に実行させるタスクを判断し、必要に応じてＰＬＤ１１０に対するタスク用プログラムのロード要求を発行する。このような処理を行う割り込みハンドラを起動すると、ＣＰＵ１００のタスクスイッチによるオーバーヘッドが発生し、ＣＰＵ１００の処理のスループットが低下する問題がある。
【００１３】
このタスクスイッチが発生した場合のＣＰＵの一般的な処理手順について図９を用いて説明する。なお、タスクスイッチ発生時のＣＰＵの処理手順については、例えば特許文献２でも例示されている。
【００１４】
図９はタスクスイッチ発生時のＣＰＵの処理手順を示すタイミングチャートである。
【００１５】
図９は、ＣＰＵ１００がタスク０を実行中にＰＬＤ１１０からタスクＢの終了を示す割り込み信号を受信し、タスク０の処理を中断してタスクＡのプログラムのロード要求を変更部１２０へ送信し、その後タスク０の処理を再び実行する場合の処理手順を示している。
【００１６】
図９に示すように、ＰＬＤ１１０から割り込み信号（サイクル（１））が発行されると、ＣＰＵ１００は、まず自身が備える汎用レジスタ、ステータスレジスタ、プログラムカウンタ、スタックポインタ等の内部レジスタで保持しているタスク０の中間データ（処理途中のデータ）をストア（Store）命令を用いてメモリ１３０へ保存する（サイクル（２））。
【００１７】
次に、ＣＰＵ１００は、タスクＡのプログラムのロードに必要な初期データを、ロード命令を用いてメモリ１３０から内部レジスタに読み込む（サイクル（３））。初期データとしては、例えば現在ＰＬＤ１１０に書き込まれているタスク用プログラムの種類を示す情報等がある。
【００１８】
初期データの内部レジスタへの読み込みが終了すると、ＣＰＵ１００は、ＰＬＤ１１０にタスクＡのプログラムをロードさせるための処理を実行する（サイクル（４））。ＣＰＵ１００は、まずＰＬＤ１１０に実行させるタスクの種類を判断し、変更部１２０に対してタスク用プログラムのロード要求及びロード対象となるタスク用プログラムを特定する情報を送信する。また、併せて処理対象となるタスクデータをＰＬＤ１１０へ送信する。
【００１９】
変更部１２０は、ＣＰＵ１００からロード要求を受信すると、指定されたタスク（ここでは、タスクＡ）のプログラムをメモリ１３０から読み出し、ＰＬＤ１１０へ転送して書き込む（サイクル（５）、（６）、（７））。ＰＬＤ１１０は、タスクＡのプログラムのロード処理が完了すると、処理対象のタスクデータに対して指定されたタスクＡの処理を実行する（サイクル（８））。このとき、ＣＰＵ１００は、ＰＬＤ１１０に対してタスク用プログラムのロード要求時に更新されたデータを、ストア命令を用いてメモリ１３０へ保存する（サイクル（５））。更新データとしては、例えばＰＬＤ１１０へ新たに書き込むタスク用プログラムの種類を示す情報等がある。
【００２０】
次に、ＣＰＵ１００は、ＰＬＤ１１０から割り込み信号が発行される直前まで実行していたタスク０の中間データを、ロード命令を用いてメモリ１３０から内部レジスタへ読み込み（サイクル（６））、タスク０の処理を再開する（サイクル（７）、（８））。
【００２１】
図９に示したように、ＰＬＤ１１０に対するタスク用プログラムのロード要求をＣＰＵ１００で制御する場合、ＣＰＵ１００ではロード処理が必要となる毎にタスクスイッチが発生し、内部レジスタで保持している中間データのメモリ１３０への保存やタスク用プログラムのロードに必要な初期データをメモリ１３０から内部レジスタへ読み込む処理等が必要となる。その結果、ＣＰＵ１００によるデータの保存と読み込みのためにメモリアクセスが頻繁に発生する。したがって、ＣＰＵ１００のメモリアクセスによるレイテンシが増大し、情報処理装置としてのスループットが低下してしまう。
【特許文献１】特開平１１−１８４７１８号公報
【特許文献２】特開２００４−２２００７０号公報
【発明の開示】
【発明が解決しようとする課題】
【００２２】
上述したように、図８に示した従来の情報処理装置では、ＰＬＤに、そのメモリ容量以上の複数のプログラムを実行させる場合、ＰＬＤはそれらの回路を一度に実現できないため、プログラムを入れ替えながら実行する必要がある。そのような場合、ＣＰＵによるプログラムをロードするための処理（ロード要求）が多発するため、ＣＰＵの処理負荷が増大して情報処理装置としての処理能力を十分に向上させることができない問題がある。
【００２３】
さらに、ＰＬＤへのプログラムのロード要求をＣＰＵが制御することで、ＣＰＵではロード処理毎にタスクスイッチが発生し、内部レジスタに格納された中間データの退避やプログラムのロードに必要な初期データを外部のメモリから内部レジスタに書き込む処理等が必要になる。そのため、ＣＰＵによるメモリアクセスが頻繁に発生し、メモリアクセスによるレイテンシが増大して情報処理装置としてのスループットが低下してしまう問題がある。
【００２４】
ところで、上記ＰＬＤに代わるものとして、本出願人は演算処理を実行するデータパスの構成をプログラムにより変更可能なアレイ型プロセッサを既に提案している（例えば、特開２００１−３１２４８１号公報、特開２００３−１９６２４６号公報、Hideharu Amano, Akiya Jouraku, Kenichiro Anjo, "A dynamically adaptive switch fabric on a multicontext reconfigurable device", Proceeding of International Field programmable Logic and Application Conference, September 2003, p161-170.等を参照）。
【００２５】
上記特開２００３−１９６２４６号公報では、ＣＰＵと、アレイ型プロセッサ及び該アレイ型プロセッサに対するデータの入出力を制御する入出力制御回路を備えたストリームプロセッサと、ストリームプロセッサに対して入出力されるデータを一時的に保持するメモリとを有する情報処理装置を開示している。ストリームプロセッサは、複数のアレイ型プロセッサを備えることで複数の処理を並列に実行することも可能である。
【００２６】
上記特開２００３−１９６２４６号公報に記載のアレイ型プロセッサは、内部にタスク用プログラムを格納するための命令メモリとタスクで使用するデータ（中間データ）を格納するための内部レジスタとを備えている。このアレイ型プロセッサは、上記ＰＬＤと同様にアレイ型プロセッサ自身で外部のメモリに格納されたタスク用プログラムを命令メモリへロードすることはできない。このアレイ型プロセッサの命令メモリや内部レジスタは、ＣＰＵが管理可能なメモリ空間にマッピングされている。したがって、ＣＰＵは、ロード命令やストア命令を用いることで、アレイ型プロセッサの命令メモリや内部レジスタの任意の領域に対してタスク用プログラムや中間データの書き込みや読み出しが可能である。
【００２７】
このようなストリームプロセッサに、メモリ容量以上の複数のタスク用プログラムを実行させる場合、上記ＰＬＤを備える情報処理装置と同様に、ストリームプロセッサに対するタスク用プログラムの入れ替えをホストプロセッサであるＣＰＵで制御していたのでは、ＣＰＵの処理負荷の増大による処理能力の低下やスループットの低下を招いてしまう。
【００２８】
本発明は上記したような従来の技術が有する問題点を解決するためになされたものであり、ホストプロセッサの処理負荷の増大による処理能力の低下やスループットの低下を抑制できるストリームプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００２９】
上記目的を達成するため本発明のストリームプロセッサは、タスクに対応付けられたタスクコマンドと前記タスクに対応付けられたタスクデータとを外部のメモリからロードする入力ＤＭＡ回路と、
前記タスクデータを前記タスクコマンドで指定されるプログラムにしたがって処理することで前記タスクを実行するアレイ型プロセッサと、
前記プログラムが前記アレイ型プロセッサにロードされていない場合に、前記アレイ型プロセッサからの転送要求によって前記プログラムを前記外部メモリから前記アレイ型プロセッサにロードする構成情報ＤＭＡコントローラと、
を備え、
前記アレイ型プロセッサは、前記プログラムのロードが完了してから前記タスクデータの処理を開始する構成である。
【００３０】
上記のように構成されたストリームプロセッサでは、タスクコマンドで指定されたプログラムがアレイ型プロセッサにロードされていない場合に、構成情報ＤＭＡコントローラによって該プログラムを外部のメモリからアレイ型プロセッサへロードし、アレイ型プロセッサはプログラムのロードが完了してからタスクの実行を開始する。したがって、ストリームプロセッサは、ホストプロセッサの制御を必要とせずにタスク用プログラムをロードして、タスクの処理を実行できる。
【発明の効果】
【００３１】
本発明によれば、ホストプロセッサが、一旦、ストリームプロセッサに設定を行った後は、ホストプロセッサの制御を必要とせずに、ストリームプロセッサが必要に応じてタスク用プログラムをメモリからロードして、タスクの処理を実行できる。
【００３２】
したがって、本発明のストリームプロセッサを備えた情報処理装置は、ホストプロセッサの処理負荷が軽減されるために処理能力の低下が抑制される。また、ストリームプロセッサに対するタスク用プログラムのロード処理毎に、ホストプロセッサでタスクスイッチが発生することがない。よって、ホストプロセッサでメモリアクセスが頻繁に発生することによるレイテンシの増大が抑制されるため、処理のスループットの低下が抑制される。
【発明を実施するための最良の形態】
【００３３】
次に本発明について図面を参照して説明する。
【００３４】
図１は本発明のストリームプロセッサを有する情報処理装置の一構成例を示すブロック図である。
【００３５】
図１に示すように、情報処理装置は、ホストプロセッサであるＣＰＵ１と、タスク用プログラムにしたがって処理を実行するアレイ型プロセッサを備えたストリームプロセッサ２と、メモリ３と、不図時の入力装置及び出力装置とのインタフェースである入出力回路４とを有し、ＣＰＵ１、ストリームプロセッサ２、メモリ３及び入出力回路４がバス５を介して相互に接続された構成である。メモリ３には、ＣＰＵ１で実行するプログラム、ストリームプロセッサ２で実行するタスク用プログラム、ストリームプロセッサ２で処理するタスクデータ、該タスクデータの処理で用いる各種情報から成るディスクリプタ、アレイ型プロセッサで処理されたデータである出力データ、アレイ型プロセッサで使用される中間データが格納される。本発明における中間データは、必要に応じてアレイ型プロセッサから退避される、アレイ型プロセッサの内部レジスタに格納されたデータである。なお、ホストプロセッサは、ＣＰＵである必要はなく、情報処理装置全体の処理や制御が可能であればＤＳＰやその他の処理装置であってもよい。
【００３６】
ストリームプロセッサ２は、ディスクリプタ及びタスクデータをメモリ３から読み出す入力ＤＭＡ回路２１と、ディスクリプタを管理するためのディスクリプタ管理テーブル２２と、タスク用プログラムにしたがって処理を実行するアレイ型プロセッサ２３と、アレイ型プロセッサ２３へ供給するタスクデータを一時的に保持する入力ＦＩＦＯ２４と、アレイ型プロセッサ２３で処理された出力データを一時的に保持する出力ＦＩＦＯ２５と、出力データをメモリ３へ書き戻すためのメモリアクセス制御回路２６と、アレイ型プロセッサ２３で実行するタスク用プログラムのロード、及びアレイ型プロセッサ２３の内部レジスタに対する中間データの読み出し／書き込みを可能にするための構成情報ＤＭＡコントローラ２７とを有する構成である。入力ＤＭＡ回路２１、ディスクリプタ管理テーブル２２、メモリアクセス制御回路２６及び構成情報ＤＭＡコントローラ２７は、例えば論理回路やメモリ等を用いてそれぞれ構成してもよく、ＣＰＵ（またはＤＳＰ）と内部メモリとを備え、該内部メモリに格納されたプログラムにしたがってＣＰＵ（またはＤＳＰ）により以下に記載する処理を実現する構成であってもよい。なお、ストリームプロセッサ２は、複数のアレイ型プロセッサ２３を備え、これら複数のアレイ型プロセッサ２３により処理を実行するためのチャネル（処理経路）が複数形成されていてもよい。その場合、入力ＦＩＦＯ２４及び出力ＦＩＦＯ２５は、各チャネルに対応してそれぞれ設ければよい。
【００３７】
図２（ａ）は図１に示した入力ＤＭＡ回路２１がメモリ３から読み出すディスクリプタのフォーマットを示す模式図であり、図２（ｂ）は図１に示した入力ＦＩＦＯ２４及びアレイ型プロセッサ２３へ供給するディスクリプタの構成を示す模式図である。図２（ａ）ではディスクリプタを１２８ビットで構成し、図２（ｂ）では入力ＦＩＦＯ２４及びアレイ型プロセッサ２３に６４ビットのディスクリプタを供給する例を示しているが、ディスクリプタのビット幅は、ＣＰＵ１やアレイ型プロセッサ２３の処理ビット幅、あるいはメモリ空間の大きさ等に応じて適宜設定すればよい。なお、図２（ｂ）中のＲＥＳＥＲＶＥＤは予備として用いる空き領域である。
【００３８】
図２（ａ）に示すように、本実施形態の情報処理装置で用いるディスクリプタは、割り込みフラグ（ＩＮＴ）、トランザクション識別子（ＴＩＤ）、タスクコマンド（ＴＡＳＫＣＭＤ）、入力データサイズ（ＩＳＩＺＥ）、出力データアドレス（ＲＡＤＲ）及び入力データアドレス（ＩＡＤＲ）の各フィールドを備えている。
【００３９】
割り込みフラグ（ＩＮＴ）は、ストリームプロセッサ２による処理の終了をＣＰＵ１等へ通知するための割り込み信号の発生に用いるビットである。
【００４０】
トランザクション識別子（ＴＩＤ）は、アレイ型プロセッサ２３で処理するタスクデータを識別するための識別子が格納されるフィールドである。トランザクション識別子は、タスクデータと共にアレイ型プロセッサ２３へ供給され、出力データ共にアレイ型プロセッサ２３から出力される。
【００４１】
タスクコマンド（ＴＡＳＫＣＭＤ）は、ストリームプロセッサ２に実行させるタスクを指定するための指示子が格納されるフィールドである。
【００４２】
入力データアドレス（ＩＡＤＲ）はアレイ型プロセッサ２３で処理するタスクデータの格納元のアドレスを示すデータバッファポインタが設定されるフィールドであり、出力データアドレス（ＲＡＤＲ）はアレイ型プロセッサ２３で処理された出力データの格納先のアドレスを示すデータバッファポインタが設定されるフィールドである。
【００４３】
入力データサイズ（ＩＳＩＺＥ）はタスクデータの大きさを示す情報が設定されるフィールドである。
【００４４】
ディスクリプタは、例えばＣＰＵ１によりメモリ３に格納されたプログラムにしたがって作成され、メモリ３に予め格納される。ストリームプロセッサ２でタスクを実行する場合、ストリームプロセッサ２は入力ＤＭＡ回路２１によりメモリ３からディスクリプタを読み出し、読み出したディスクリプタの各フィールドの値にしたがってタスク用プログラムをメモリ３からロードし、さらにメモリ３からタスクデータを読み出してアレイ型プロセッサ２３にてタスクの処理を実行する。アレイ型プロセッサ２３で処理した出力データはメモリアクセス制御回路２６によってメモリ３へ書き戻される。
【００４５】
入力ＤＭＡ回路２１には、各ディスクリプタが格納されたメモリ３上の先頭アドレスを示すディスクリプタポインタを備えている。このディスクリプタポインタの値は、例えばＣＰＵ１によりメモリ３に格納されたプログラムにしたがって予め設定される。ＣＰＵ１は、ストリームプロセッサ２に処理を実行させる場合、処理対象となるディスクリプタの先頭アドレスを入力ＤＭＡ回路２１のディスクリプタポインタにセットする。
【００４６】
入力ＤＭＡ回路２１は、ＣＰＵ１によって設定されたディスクリプタポインタの値にしたがってメモリ３から対応するディスクリプタを読み出し、該ディスクリプタのＩＡＤＲフィールドで指定されたアドレスからＩＳＩＺＥフィールドで指定された大きさのタスクデータを読み出し、該タスクデータを入力ＦＩＦＯ２４へ供給する。また、読み出したディスクリプタからＴＩＤフィールド、ＴＡＳＫＣＭＤフィールド及びＩＳＩＺＥフィールドの値をそれぞれ抽出し、入力ＦＩＦＯ２４を介してアレイ型プロセッサ２３へ供給する（図２（ｂ）参照）。図２（ｂ）に示すように、本実施形態では１２８ビットのディスクリプタから抽出した６４ビットの情報をアレイ型プロセッサ２３へ供給している。このように入力ＤＭＡ回路２１で読み出したディスクリプタから必要な情報のみを取り出してアレイ型プロセッサ２３へ供給することで、アレイ型プロセッサ２３に対するデータ転送量が削減できるため、データ転送のスループットが向上する。
【００４７】
さらに、入力ＤＭＡ回路２１は、読み出したディスクリプタからＴＩＤフィールド及びＲＡＤＲフィールドの値をそれぞれ抽出し、出力データアドレス（ＲＡＤＲ）の値をトランザクション識別子（ＴＩＤ）に関連付けてディスクリプタ管理テーブル２２へ格納する。
【００４８】
入力ＦＩＦＯ２４は、入力ＤＭＡ回路２１から受信したタスクコマンド及びトランザクション識別子及びそれに対応付けられたタスクデータを一時的に保持し、アレイ型プロセッサ２３によるタスク用プログラムのロード処理または先のタスクの処理が終了した時点で、保持している次に処理すべきタスクコマンド、トランザクション識別子及びタスクデータをアレイ型プロセッサ２３へ供給する。このような入力ＦＩＦＯ２４を備えることで、アレイ型プロセッサ２３に複数のタスクを実行させる場合に、アレイ型プロセッサ２３の動作を停止させることなく、タスクデータをアレイ型プロセッサ２３へ効率よく連続して供給することが可能になる。また、アレイ型プロセッサ２３がタスク用プログラムや中間データのロード処理あるいはタスク用プログラムを実行しているためにタスクデータを受信できない場合でも、入力ＤＭＡ回路２１は動作を停止することなく入力ＦＩＦＯ２４へタスクデータを供給できる。したがって、ストリームプロセッサ２の処理効率が向上する。
【００４９】
アレイ型プロセッサ２３は、入力ＦＩＦＯ２４から受け取ったタスクコマンドに基づき、構成情報ＤＭＡコントローラ２７を用いて少なくとも一つのタスク用プログラムをメモリ３からロードし、ロード完了後、タスクデータに対してタスク用プログラムの処理を実行する。アレイ型プロセッサ２３による処理後の出力データは出力ＦＩＦＯ２５を介してメモリアクセス制御回路２６へ供給される。このとき、アレイ型プロセッサ２３は、出力データの先頭データと共に受信したトランザクション識別子を出力ＦＩＦＯ２５へ供給する。
【００５０】
出力ＦＩＦＯ２５は、アレイ型プロセッサ２３の出力データを一時的に保持し、バス５に対するアクセスの競合等によりメモリアクセス制御回路２６からメモリ３へ先の出力データが転送できない場合に、そのデータ転送ができない状態が解消された時点で保持している出力データをメモリアクセス制御回路２６へ供給する。また、アレイ型プロセッサ２３から受信したトランザクション識別子を出力データの先頭データと共にメモリアクセス制御回路２６へ供給する。このような出力ＦＩＦＯ２５を有することで、アレイ型プロセッサ２３の動作を停止させることなく、アレイ型プロセッサ２３の出力データをメモリ３へ効率よく転送できるため、ストリームプロセッサ２のスループットの低下が抑制される。
【００５１】
メモリアクセス制御回路２６は、出力ＦＩＦＯ２５からトランザクション識別子及び出力データを受け取ると、該トランザクション識別子をディスクリプタ管理テーブル２２へ転送する。ディスクリプタ管理テーブル２２は、出力ＦＩＦＯ２５から受信したトランザクション識別子に関連付けて保存された出力データアドレス（ＲＡＤＲ）を取り出し、メモリアクセス制御回路２６へ出力する。メモリアクセス制御回路２６は、ディスクリプタ管理テーブル２２から受信した出力データアドレスを開始アドレスとするメモリ３の領域へ、出力ＦＩＦＯ２５から供給された出力データを格納する。
【００５２】
図３は図１に示した構成情報ＤＭＡコントローラ２７の一構成例を示すブロック図であり、図４は図３に示したＤＭＡコマンドテーブル７４のフォーマットを示す模式図である。
【００５３】
図３に示すように、構成情報ＤＭＡコントローラ２７は、第１のインデックスレジスタ７１、第２のインデックスレジスタ７２、調停回路７３、ＤＭＡコマンドテーブル７４、ＤＭＡ制御部７５、データ送信部７６、データ受信部７７及びバスインタフェース部７８を備えた構成である。
【００５４】
本実施形態の構成情報ＤＭＡコントローラ２７は、アレイ型プロセッサ２３及びＣＰＵ１からそれぞれインデックス（ＩＮＤＥＸ）を受信できるように２つのインデックスレジスタを備えている。第１のインデックスレジスタ７１はアレイ型プロセッサ２３から送信されるインデックス（ＩＮＤＥＸ）を保持するためのレジスタである。第１のインデックスレジスタ７１に入力されるインデックスは、入力ＦＩＦＯ２４から受信したタスクコマンドに基づきアレイ型プロセッサ２３によって算出される。インデックスの算出処理は、アレイ型プロセッサ２３がタスク用プログラムをロードするための処理（ロードタスク）に含まれ、タスクコマンド（ＴＡＳＫＣＭＤ）とインデックス（ＩＮＤＥＸ）とは１対１に対応した値となる。タスクコマンドの値とインデックスの値とは同一であってもよい。
【００５５】
第２のインデックスレジスタ７２はＣＰＵ１等からバス５を介して送信されるインデックスを保持するためのレジスタある。この第２のインデックスレジスタ７２は、例えばアレイ型プロセッサ２３にロードタスクのプログラム（ロードタスク用プログラム）を書き込むために用いられる。
【００５６】
なお、本実施形態で言う「ロードタスク」とは、アレイ型プロセッサ２３に、入力ＦＩＦＯ２４から供給されたディスクリプタからタスクコマンドを抽出させる処理、該タスクコマンドを用いてアレイ型プロセッサ２３に新たなタスク用プログラムのロード処理の要否を判定させる処理、該タスクコマンドからインデックスを算出させる処理、算出したインデックスを構成情報ＤＭＡコントローラ２７に送信させる処理、ロード完了通知を受信する処理を含んでいる。
【００５７】
調停回路７３は、第１のインデックスレジスタ７１及び第２のインデックスレジスタ７２にインデックスが格納されると、いずれか一方のインデックスを選択する。インデックスの選択方法としては、先に格納されたインデックスを選択する方法、あるいは一方のインデックスレジスタの優先度を高く設定し、優先度の高いインデックスレジスタ内のインデックスから先に選択する方法等がある。
【００５８】
ＤＭＡ制御部７５は、ＤＭＡコマンドテーブル７４に格納された情報にしたがって、メモリ３からアレイ型プロセッサ２３へのタスク用プログラムや中間データのロード処理、あるいはアレイ型プロセッサ２３からメモリ３への中間データのセーブ処理を制御する。
【００５９】
データ送信部７６はバスインタフェース部７８によってメモリ３から読み出されたタスク用プログラムや中間データをアレイ型プロセッサ２３へ送信する。また、データ受信部７７は、アレイ型プロセッサ２３の内部レジスタから読み出された中間データを受信し、バスインタフェース部７８へ転送する。
【００６０】
バスインタフェース部７８は、ＤＭＡ制御部７５からの指示にしたがってバス５を介してメモリ３へアクセスし、メモリ３から読み出したタスク用プログラムや中間データをデータ送信部７６へ送信する。また、データ受信部７７から転送された中間データをメモリ３へ書き込む。ＣＰＵ１からＤＭＡコマンドテーブル７４に各種情報（後述するＤＭＡコマンド）を書き込む場合、バスインタフェース部７８はバス５を介してＣＰＵ１から受信した情報をＤＭＡ制御部７５によって指定されたＤＭＡコマンドテーブル７４のアドレスへ書き込む。
【００６１】
ＤＭＡコマンドテーブル７４は、図４に示すように、例えばインデックス（ＩＮＤＥＸ）の値をアドレスとする、アレイ型プロセッサ２３へタスク用プログラムや中間データを書き込むための情報またはアレイ型プロセッサ２３から中間データを読み出すための情報がそれぞれ格納される複数のコマンドフィールドを備えた構成である。本明細書では、一つのコマンドフィールドに格納される情報を総称してＤＭＡコマンドと呼ぶ。
【００６２】
図４に示すように、ＤＭＡコマンドは、エンドフラグ（ＥＮＤ）、リードイネーブル（ＲＥ）、割り込みフラグ（ＤＩＮＴ）、転送データ長（ＬＥＮＧＴＨ）、転送元アドレス（ＲＤＡＤＲ）及び転送先アドレス（ＷＲＡＤＲ）の各フィールドをそれぞれ備えている。ＤＭＡコマンドの各フィールドの値は、メモリ３に格納されたプログラムにしたがってＣＰＵ１により予め設定される。
【００６３】
エンドフラグ（ＥＮＤ）は、インデックスで指定されるＤＭＡコマンドが最終（タスクの切り替えを必要とする）の処理であるか否かを示すフラグである。例えば、ＥＮＤ＝０の場合、当該インデックスで指定されるＤＭＡコマンドの処理が終了すると、そのインデックスの値をインクリメントした新たな値のインデックスで指定されるＤＭＡコマンドが実行される。また、ＥＮＤ＝１の場合は、当該インデックスで指定されるＤＭＡコマンドの処理が終了すると、以降、ＤＭＡコマンドによる処理を停止する。このとき、ＤＭＡ制御部７５は、当該インデックスで指定されるＤＭＡコマンドの処理が終了すると、第１のインデックスレジスタ７１を介してアレイ型プロセッサ２３へロード完了通知を発行する。
【００６４】
転送元アドレス（ＲＤＡＤＲ）は、転送対象となる中間データまたはタスク用プログラムが格納されたメモリ領域の先頭アドレスを示すフィールドであり、転送先アドレス（ＷＲＡＤＲ）は転送対象となる中間データまたはタスク用プログラムを格納するメモリ領域の先頭アドレスを示すフィールドである。
【００６５】
転送データ長（ＬＥＮＧＴＨ）は、アレイ型プロセッサ２３へロードする中間データまたはタスク用プログラムのデータ長、あるいはアレイ型プロセッサ２３から読み出す中間データのデータ長を示すフィールドである。
【００６６】
リードイネーブル（ＲＥ）は、インデックスで指定されるＤＭＡコマンドがアレイ型プロセッサ２３に対してタスク用プログラムや中間データをロードするためのものであるか、アレイ型プロセッサ２３から中間データを読み出すためのものであるかを示すフラグである。例えばＲＥ＝０の場合はアレイ型プロセッサ２３に対してタスク用プログラムや中間データのロード処理が実行され、ＲＥ＝１の場合はアレイ型プロセッサ２３からの中間データの読み出し処理が実行される。なお、ＲＥ＝０の場合、転送元アドレス（ＲＤＡＤＲ）にはメモリ３に格納されたタスク用プログラムや中間データのアドレスが設定され、転送先アドレス（ＷＲＡＤＲ）にはアレイ型プロセッサ２３の命令メモリや内部レジスタのアドレスが設定される。一方、ＲＥ＝１の場合、転送元アドレス（ＲＤＡＤＲ）にはアレイ型プロセッサ２３の内部レジスタに格納された中間データのアドレスが設定され、転送先アドレス（ＷＲＡＤＲ）にはメモリ３のアドレスが設定される。
【００６７】
割り込みフラグ（ＤＩＮＴ）は、当該インデックスで指定されるＤＭＡコマンドの処理が終了したとき、ホストプロセッサ等へ割り込み通知（割り込み信号の発行）が必要であるか否かを指定するフラグである。例えばＤＩＮＴ＝０の場合は割り込み信号が発行されず、ＤＩＮＴ＝１の場合は割り込み信号が発行される。通常、割り込みフラグ（ＤＩＮＴ）は、ＥＮＤ＝１に設定されたＤＭＡコマンドで「１」に設定される。例えば、ＣＰＵ１から構成情報ＤＭＡコントローラ２７へインデックスを転送する場合、最終のインデックスで指定されるＤＭＡコマンドの割り込みフラグを「１」に設定しておけば、アレイ型プロセッサ２３に対するタスク用プログラムのロード終了後、ＣＰＵ１は入力ＤＭＡ回路２１に対して直ちにディスクリプタやタスクテータの転送要求を発行できる。また、アレイ型プロセッサ２３から構成情報ＤＭＡコントローラ２７にインデックスを転送する場合、最終のインデックスで指定されるＤＭＡコマンドの割り込みフラグを「１」に設定しておけば、ストリームプロセッサ２は、ＣＰＵ１と協調動作する際にタスクが切り替わったことをＣＰＵ１へ通知できる。
【００６８】
構成情報ＤＭＡコントローラ２７は、第１のインデックスレジスタ７１または第２のインデックスレジスタ７２にインデックス（ＩＮＤＥＸ）が格納されると、調停回路７３の制御により該インデックスをＤＭＡコマンドテーブル７４へ供給する。
【００６９】
ＤＭＡ制御部７５は、ＤＭＡコマンドテーブル７４にインデックスが供給されると、当該インデックスで指定されるＤＭＡコマンドを読み出し、該ＤＭＡコマンドのリードイネーブル（ＲＥ）を確認する。そして、リードイネーブルがタスク用プログラムや中間データのロード処理を示している場合は、最初にアレイ型プロセッサ２３に対してタスク用プログラムまたは中間データのロード要求を発行（アクセス要求）し、転送先アドレス（ＷＲＡＤＲ）を通知する。
【００７０】
次に、ＤＭＡ制御部７５は、バスインタフェース部７８へ読み出しを要求するバスコマンドを発行し、併せて転送元アドレス（ＲＤＡＤＲ）及び転送データ長（ＬＥＮＧＴＨ）をそれぞれ通知する。バスインタフェース部７８はＤＭＡ制御部７５からバスコマンド（読み出し要求）を受け取ると、メモリ３へアクセスして転送元アドレスで指定された領域から転送データ長で指定された大きさのタスク用プログラムまたは中間データを読み出し、データ送信部７６へ転送する。
【００７１】
データ送信部７６は、バスインタフェース部７８から受信したタスク用プログラムまたは中間データをアレイ型プロセッサ２３へ送信する。また、データ送信部７６は、タスク用プログラムまたは中間データの送信が完了すると、ＤＭＡ制御部７５に送信完了通知を発行する。ＤＭＡ制御部７５は、データ送信部７６から送信完了通知を受け取ると、対応するＤＭＡコマンドのエンドフラグがＥＮＤ＝１の場合に、第１のインデックスレジスタ７１に送信完了通知を発行する。第１のインデックスレジスタ７１は送信完了通知を受信すると、アレイ型プロセッサ２３へロード完了通知を発行する。
【００７２】
アレイ型プロセッサ２３は、構成情報ＤＭＡコントローラ２７から受信したタスク用プログラムまたは中間データを、転送先アドレスを開始位置とするアドレス領域へ格納する。このとき、アレイ型プロセッサ２３は、第１のインデックスレジスタ７１からロード完了通知を受け取った時点でタスク用プログラムや中間データの受信を終了している。したがって、アレイ型プロセッサ２３はロード完了通知を受け取ると、直ちにタスク用プログラムの実行を開始する。
【００７３】
一方、ＤＭＡコマンドテーブル７４から読み出したＤＭＡコマンドのリードイネーブルが中間データの読み出しを示している場合、ＤＭＡ制御部７５は、アレイ型プロセッサ２３に中間データの読み出し要求を発行し（アクセス要求）、併せて転送元アドレス及び転送データ長をそれぞれ通知する。アレイ型プロセッサ２３は、ＤＭＡ制御部７５からアクセス要求（読み出し要求）を受信すると、転送元アドレスで指定された領域から転送データ長で指定されたサイズの中間データを読み出し、データ受信部７７へ送信する。データ受信部７７は、アレイ型プロセッサ２３から中間データを受信すると、転送準備が完了したことをＤＭＡ制御部７５へ通知する。
【００７４】
ＤＭＡ制御部７５は、データ受信部７７から転送準備完了通知を受け取ると、バスインタフェース部７８へ書き込みを要求するバスコマンドを発行し、併せて転送先アドレスを通知する。バスインタフェース部７８はデータ受信部７７から受信した中間データをメモリ３へ送信し、ＤＭＡ制御部７５から通知された転送先アドレスを開始位置とするアドレス領域へ格納する。データ受信部７７は、中間データを全て転送し終わると、ＤＭＡ制御部７５へ転送完了通知を発行する。ＤＭＡ制御部７５は、データ受信部７７から転送完了通知を受け取ると、当該ＤＭＡコマンドのエンドフラグがＥＮＤ＝１の場合に、第１のインデックスレジスタ７１に送信完了通知を発行する。第１のインデックスレジスタ７１は送信完了通知を受信すると、アレイ型プロセッサ２３へロード完了通知を発行する。
【００７５】
ＤＭＡ制御部７５は、ＤＭＡコマンドにしたがってタスク用プログラムまたは中間データの転送処理が完了すると、当該ＤＭＡコマンドのエンドフラグ（ＥＮＤ）を確認し、ＥＮＤ＝０の場合はインデックスの値をインクリメントした新たな値のインデックスで指定されるＤＭＡコマンドを読み出し、上記と同様に新たな値のインデックスで指定されるＤＭＡコマンドにしたがってアレイ型プロセッサ２３に対するタスク用プログラムや中間データのロード処理、またはアレイ型プロセッサ２３からの中間データの読み出し処理を実行する。ＥＮＤ＝１の場合は、ＤＭＡコマンドによる処理を終了する。
【００７６】
本実施形態では、このエンドフラグを用いることで構成情報ＤＭＡコントローラ２７に対する一度のロード要求で複数のタスク用プログラムのロード処理を実行できるため、アレイ型プロセッサ２３と構成情報ＤＭＡコントローラ２７との間で発生するロード処理のための制御が簡易になる。また、アレイ型プロセッサ２３で複数のタスク用プログラムのロード処理や中間データの退避及びメモリ３からの読み出し処理を必要とする場合でも、これらの処理を一度のロード要求で連続して実行できるようになる。
【００７７】
次に、本発明のストリームプロセッサ２が有するアレイ型プロセッサ２３の動作について図面を用いて説明する。
【００７８】
図５は図１に示したアレイ型プロセッサ２３のロードタスク用プログラムによる処理手順を示すフローチャートである。
【００７９】
なお、ロードタスク用プログラムは、ＣＰＵ１から構成情報ＤＭＡコントローラ２７の第２のインデックスレジスタ７２に所定のインデックスを設定することで、予めアレイ型プロセッサ２３に読み込まれているものとする。また、図５は、後述する図６に示すタイミングチャートのサイクル（５）以降のアレイ型プロセッサ２３の処理を示している。
【００８０】
図５に示すように、アレイ型プロセッサ２３は、現在保持しているタスク用プログラムに対応するタスクコマンドであるカレントタスクコマンド（CurTaskcmd）の値を設定する。初期状態では、タスク用プログラムを何も備えていないため、カレントタスクコマンドにタスク用プログラムが無いことを示す、例えば「−１」を設定する（ステップＳ１）。
【００８１】
次に、アレイ型プロセッサ２３は、入力ＦＩＦＯ２４内にディスクリプタが在るか否かを判定し（ステップＳ２）、ディスクリプタが在る場合はそれを受信する。但し、アレイ型プロセッサ２３が受信するディスクリプタは、図２（ｂ）に示したように、ＲＥＳＥＲＶＥＤ、ＩＳＩＺＥ、ＴＩＤ及びＴＡＳＫＣＭＤの各フィールドを備えた構成である。
【００８２】
続いて、アレイ型プロセッサ２３は、受信したディスクリプタからタスクコマンド（ＴＡＳＫＣＭＤ）の値を抽出する（ステップＳ３）。そして、抽出したタスクコマンドの値とカレントタスクコマンドの値とを比較することで、必要なタスク用プログラムが既にロードされているか否かを判定する（ステップＳ４）。
【００８３】
タスクコマンドの値とカレントタスクコマンドの値とが一致しない場合、アレイ型プロセッサ２３は、ロードタスク用プログラムにしたがって該タスクコマンドからインデックスを算出する。また、算出したインデックスを構成情報ＤＭＡコントローラ２７の第１のインデックスレジスタ７１に転送要求として送信する。さらに、カレントタスクコマンドの値をステップＳ３の処理で抽出したタスクコマンドの値に書き換える（ステップＳ５）。
【００８４】
このとき、構成情報ＤＭＡコントローラ２７は、アレイ型プロセッサ２３から送信されたインデックスで指定されるＤＭＡコマンドにしたがってタスク用プログラムをメモリ３からロードし、タスク用プログラムのロード処理が完了すると、ロード完了通知を第１のインデックスレジスタ７１を通してアレイ型プロセッサ２３へ送信する。
【００８５】
アレイ型プロセッサ２３は、構成情報ＤＭＡコントローラ２７からのロード完了通知の有無を判定し（ステップＳ６）、ロード完了通知を受け取っていない場合は該通知を待ち受ける。
【００８６】
アレイ型プロセッサ２３は、構成情報ＤＭＡコントローラ２７からロード完了通知を受け取ると、入力ＦＩＦＯ２４からタスクデータを受信し、ロードしたタスク用プログラムにしたがって処理を実行する（ステップＳ７）。アレイ型プロセッサ２３がタスク用プログラムのロードを完了しタスクの処理を開始する時点で、入力ＦＩＦＯ２４には全てのタスクデータが格納された状態にある。
【００８７】
ステップＳ４の処理の結果、タスクコマンドの値とカレントタスクコマンドの値とが一致する場合は、構成情報ＤＭＡコントローラ２７によるタスク用プログラムのロード処理が不要であるため、アレイ型プロセッサ２３は、ステップＳ７の処理に移行して入力ＦＩＦＯ２４からタスクデータを受信し、該タスクデータに対してタスクの処理を実行する。
【００８８】
次に、アレイ型プロセッサ２３は、入力ＦＩＦＯ２４に処理対象のタスクデータが残っているか否かを確認し（ステップＳ８）、タスクデータが残っている場合はステップＳ７の処理に戻って該タスクデータに対するタスクの処理を引き続き実行する。
【００８９】
また、入力ＦＩＦＯ２４に処理対象のタスクデータが残っていない場合は、処理を終了するか否かを判定し（ステップＳ９）、処理を終了しない場合はステップＳ２の処理に戻ってステップＳ２〜Ｓ９の処理を繰り返す。
【００９０】
なお、上述したロードタスクの処理は、必ずしもアレイ型プロセッサ２３がロードタスク用プログラムにしたがって実行する必要はなく、例えば論理回路等によって構成された処理回路で実行してもよい。
【００９１】
次に、本実施形態のストリームプロセッサ２の動作について図６を用いて説明する。
【００９２】
図６は本発明のストリームプロセッサ２の動作の一例を示すタイミングチャートである。
【００９３】
図６は、ストリームプロセッサ２に５つのタスク（タスクＡ０、タスクＡ１、タスクＢ０、タスクＡ２、タスクＢ１）を順次実行させる場合のＣＰＵ１とストリームプロセッサ２の動作をそれぞれ示している。タスクＡ０はタスク用プログラムＡによるタスクデータＡ０の処理であり、タスクＡ１、Ａ２はタスクＡ０と同じタスク用プログラムＡによるタスクデータＡ１、Ａ２の処理である。また、タスクＢ０はタスク用プログラムＢによるタスクデータＢ０の処理であり、タスクＢ１はタスクＢ０と同じタスク用プログラムＢによるタスクデータＢ１の処理である。ディスクリプタＡ０は、タスク用プログラムＡを指定するタスクコマンドと、タスク用プログラムＡで処理するタスクデータＡ０の格納先である入力データアドレスとタスクデータＡ０の大きさを示す入力データサイズの情報とを備えている。ディスクリプタＡ１は、ディスクリプタＡ０と同じタスクコマンドと、タスクデータＡ１に対応した入力データアドレスと入力データサイズの情報とを備えている。ディスクリプタＡ２も同様である。また、ディスクリプタＢ０は、タスク用プログラムＢを指定するタスクコマンドと、タスク用プログラムＢで処理するタスクデータＢ０の情報とを備えている。ディスクリプタＢ１も同様である。
【００９４】
上述したように、入力ＦＩＦＯ２４が入力ＤＭＡ回路２１から受信するディスクリプタは、入力ＤＭＡ回路２１によりメモリ３から読み出したディスクリプタから必要な情報（ＴＩＤ、ＴＡＳＫＣＭＤ及びＩＳＩＺＥ）を抽出したものであり、入力ＦＩＦＯ２４が受信するディスクリプタと、入力ＤＭＡ回路２１が読み出したディスクリプタとは異なっている。以下では、入力ＤＭＡ回路２１が読み出したディスクリプタを、ディスクリプタＡ０，Ａ１，Ａ２，Ｂ０，Ｂ１と表記する。また、ディスクリプタＡ０，Ａ１，Ａ２，Ｂ０，Ｂ１から必要な情報を抽出した、入力ＦＩＦＯ２４が受信するディスクリプタを、それぞれディスクリプタＡ０’，Ａ１’，Ａ２’，Ｂ０’，Ｂ１’と表記する。
【００９５】
図６に示すように、ＣＰＵ１は、まず構成情報ＤＭＡコントローラ２７のＤＭＡコマンドテーブル７４にロードタスク、タスク用プログラムＡ及びタスク用プログラムＢをロードするためのＤＭＡコマンドをそれぞれ設定する（サイクル（１））。これは処理の最初に一度だけ実行すればよい。
【００９６】
次に、ＣＰＵ１は、構成情報ＤＭＡコントローラ２７の第２のインデックスレジスタ７２にインデックスを送信して、アレイ型プロセッサ２３に対するロードタスク用プログラムのロード処理を要求する（サイクル（２））。
【００９７】
構成情報ＤＭＡコントローラ２７は、ＣＰＵ１からインデックスを受け取ると、ＤＭＡコマンドテーブル７４内の該インデックスで指定されたＤＭＡコマンドにしたがってメモリ３に格納されたロードタスク用プログラムを読み出し、アレイ型プロセッサ２３へ転送する。そして、アレイ型プロセッサ２３に対するロードタスク用プログラムのロード処理が完了すると、ＣＰＵ１へロード完了を通知するための割り込み信号を送信する（サイクル（３））。
【００９８】
ＣＰＵ１は、構成情報ＤＭＡコントローラ２７から割り込み信号によってロード完了通知を受け取ると、入力ＤＭＡ回路２１にディスクリプタポインタを設定し、ディスクリプタの読み出し処理（データＤＭＡ要求）を開始させる（サイクル（４））。
【００９９】
入力ＤＭＡ回路２１は、ディスクリプタポインタを基にメモリ３からディスクリプタを読み出し、該ディスクリプタからタスクコマンド（ＴＡＳＫＣＭＤ）、トランザクション識別子（ＴＩＤ）及び入力データサイズ（ＩＳＩＺＥ）を抽出して入力ＦＩＦＯ２４へ転送する。ここでは、入力ＤＭＡ回路２１によって最初にディスクリプタＡ０及びタスクデータＡ０が読み出され、入力ＦＩＦＯ２４にディスクリプタＡ０’及びタスクデータＡ０が転送されるものとする。
【０１００】
アレイ型プロセッサ２３は、入力ＦＩＦＯ２４からディスクリプタＡ０'を受信し、このディスクリプタＡ０'のタスクコマンドと上記カレントタスクコマンドとを比較してタスクコマンドが指定するタスク用プログラムがロードされていないことを確認する。アレイ型プロセッサ２３は受信したタスクコマンドからインデックスを算出し、構成情報ＤＭＡコントローラ２７にそのインデックスを送信する（サイクル（５））。
【０１０１】
構成情報ＤＭＡコントローラ２７は、アレイ型プロセッサ２３からインデックスを受け取ると、ＤＭＡコマンドテーブル７４内の該インデックスで指定されるＤＭＡコマンドにしたがってメモリ３からタスク用プログラムＡを読み出し、アレイ型プロセッサ２３へ転送する。構成情報ＤＭＡコントローラ２７は、タスク用プログラムＡの転送処理が完了すると、アレイ型プロセッサ２３へロード完了通知を送信する。入力ＤＭＡ回路２１は、ディスクリプタＡ０及びタスクデータＡ０に続いてディスクリプタＡ１及びタスクデータＡ１をメモリ３から読み出し、必要な情報を抽出してディスクリプタＡ１’を入力ＦＩＦＯ２４へ転送する（サイクル（６））。
【０１０２】
アレイ型プロセッサ２３は、構成情報ＤＭＡコントローラ２７からロード完了通知を受信すると、入力ＦＩＦＯ２４からタスクデータＡ０を受け取り、タスク用プログラムＡを実行してタスクＡ０の処理を実行する。入力ＤＭＡ回路２１は、ディスクリプタＡ１及びタスクデータＡ１に続いてディスクリプタＢ０及びタスクデータＢ０をメモリ３から読み出し、必要な情報を抽出してディスクリプタＢ０’を後述するサイクル（８）で入力ＦＩＦＯ２４へ転送する（サイクル（７））。
【０１０３】
アレイ型プロセッサ２３は、タスクデータＡ０に対するタスクＡ０の処理を終了すると、次のディスクリプタＡ１'を入力ＦＩＦＯ２４から受信する。アレイ型プロセッサ２３は、このディスクリプタＡ１'のタスクコマンドとカレントタスクコマンドとを比較してタスクコマンドが指定するタスク用プログラムがロードされていることを確認する（サイクル（８））。この場合、アレイ型プロセッサ２３は、構成情報ＤＭＡコントローラ２７へ転送要求を発行することなく、入力ＦＩＦＯ２４からタスクデータＡ１を受け取り、タスク用プログラムＡを実行してタスクＡ１の処理を実行する。入力ＤＭＡ２１は、ディスクリプタＢ０及びタスクデータＢ０に続いてディスクリプタＡ２をメモリ３から読み出し、必要な情報を抽出してディスクリプタＡ２'を後述するサイクル（１０）で入力ＦＩＦＯ２４へ転送する（サイクル（９））。
【０１０４】
アレイ型プロセッサ２３は、タスクデータＡ１に対するタスクＡ１の処理が終了すると、次のディスクリプタＢ０'を入力ＦＩＦＯ２４から受信する。アレイ型プロセッサ２３は、このディスクリプタＢ０'のタスクコマンドとカレントタスクコマンドとを比較してタスクコマンドが指定するタスク用プログラムがロードされていないことを確認する。アレイ型プロセッサ２３は受信したタスクコマンドからインデックスを算出し、構成情報ＤＭＡコントローラ２７にそのインデックスを送信する。入力ＤＭＡ回路２１は、ディスクリプタＡ２に続いてタスクデータＡ２をメモリ３から読み出し、入力ＦＩＦＯ２４へ転送する（サイクル（１０））。
【０１０５】
構成情報ＤＭＡコントローラ２７は、アレイ型プロセッサ２３からインデックスを受け取ると、ＤＭＡコマンドテーブル７４内の該インデックスで指定されるＤＭＡコマンドにしたがってメモリ３からタスク用プログラムＢを読み出し、アレイ型プロセッサ２３へ転送する。構成情報ＤＭＡコントローラ２７は、タスク用プログラムＢの転送処理が完了すると、アレイ型プロセッサ２３へロード完了通知を送信する。入力ＤＭＡ回路２１は、ディスクリプタＡ２及びタスクデータＡ２に続いてディスクリプタＢ１及びタスクデータＢ１をメモリ３から読み出し、必要な情報を抽出してディスクリプタＢ１'を入力ＦＩＦＯ２４へ転送する（サイクル（１１））。
【０１０６】
アレイ型プロセッサ２３は、構成情報ＤＭＡコントローラ２７からロード完了通知を受信すると、入力ＦＩＦＯ２４からタスクデータＢ０を受け取り、タスク用プログラムＢを実行してタスクＢ０の処理を実行する（サイクル（１２））。
【０１０７】
アレイ型プロセッサ２３は、タスクデータＢ０に対するタスクＢ０の処理を終了すると、次のディスクリプタＡ２'を入力ＦＩＦＯ２４から受信する。アレイ型プロセッサ２３は、このディスクリプタＡ２'のタスクコマンドとカレントタスクコマンドとを比較してタスクコマンドが指定するタスク用プログラムがロードされていないことを確認する（サイクル（１３））。
【０１０８】
ここではアレイ型プロセッサ２３にタスク用プログラムＡがロードされていないため、上記サイクル（１０）の処理と同様に、アレイ型プロセッサ２３は、受信したタスクコマンドからインデックスを算出し、構成情報ＤＭＡコントローラ２７にそのインデックスを送信する。アレイ型プロセッサ２３は、タスク用プログラムＡのロード完了信号を待ってタスクデータＡ２にタスクＡ２の処理を実行する。以下、同様にしてタスクコマンドとタスクコマンドの比較、タスク用プログラムのロード要求の要否判定及びタスクデータに対する指定されたタスクの処理を繰り返す。
【０１０９】
次に、図７を用いてタスク用プログラムのロード処理、中間データの退避及び中間データのロード処理について説明する。ここでは、上記と同様にタスクコマンドが指定するタスク用プログラムは１つであるものとする。タスク用プログラムのロード処理が発生した場合、アレイ型プロセッサ２３では、内部レジスタに格納された中間データのメモリ３への退避、及びメモリ３から内部レジスタへの中間データの読み出し処理が必要になる場合がある。これらの処理の要否はタスクの種類に依存する。
【０１１０】
以下では、タスクＡとタスクＢの処理を連続して実行し、かつタスクＡに対応付けられたタスクコマンドＡとタスクＢに対応付けられたタスクコマンドＢが異なる場合に、タスク用プログラムＢをロードする前にタスクＡが完了した時点での中間データ（以下中間データＡと称す。）をアレイ型プロセッサ２３からメモリ３へ退避させ、タスク用プログラムＢをロードした後にタスクＢの実行に必要な中間データ（以下中間データＢと称す。）をメモリ３からアレイ型プロセッサ２３へ書き込む場合を例にして説明する。図７は、このような処理を構成情報ＤＭＡコントローラ２７に実行させる場合のＤＭＡコマンドテーブル７４の一例を示している。
【０１１１】
アレイ型プロセッサ２３は、タスクＡの処理が完了すると、タスクコマンドＢを含むディスクリプタを入力ＦＩＦＯ２４から受信する。アレイ型プロセッサ２３は、受信したディスクリプタからタスクコマンドＢを抽出すると、このタスクコマンドＢとカレントタスクコマンドを比較し、これらが一致しないことを確認する。その場合、アレイ型プロセッサ２３は、受信したタスクコマンドからインデックスを算出し、構成情報ＤＭＡコントローラ２７に算出したインデックスを送信する。ここでは、算出したインデックスの値が３とする。
【０１１２】
構成情報ＤＭＡコントローラ２７は、図７に示すＤＭＡコマンドテーブル７４にしたがって、ＤＭＡ制御部７５によりＤＭＡコマンドテーブル７４のインデックス＝３で指定されるＤＭＡコマンドを読み出し、該ＤＭＡコマンドにしたがってアレイ型プロセッサ２３からの中間データＡの読み出し処理及び該中間データＡのメモリ３への書き込み処理を実行する。
【０１１３】
ＤＭＡ制御部７５は、インデックス＝３で指定されるＤＭＡコマンドの処理が終了すると、当該ＤＭＡコマンドのエンドフラグ（ＥＮＤ）を確認する。ここでは、ＥＮＤ＝０であるため、インデックスの値をインクリメントしてインデックス＝４で指定されるＤＭＡコマンドを読み出し、該ＤＭＡコマンドにしたがってタスク用プログラムＢのロード処理を実行する。
【０１１４】
ＤＭＡ制御部７５は、インデックス＝４で指定されるＤＭＡコマンドの処理が終了すると、当該ＤＭＡコマンドのエンドフラグ（ＥＮＤ）を確認する。ここでは、ＥＮＤ＝０であるため、インデックスの値をインクリメントしてインデックス＝５で指定されるＤＭＡコマンドを読み出し、該ＤＭＡコマンドにしたがってメモリ３からアレイ型プロセッサ２３に中間データＢの書き込みを実行する。
【０１１５】
ＤＭＡ制御部７５は、インデックス＝５で指定されるＤＭＡコマンドの処理が終了すると、当該ＤＭＡコマンドのエンドフラグ（ＥＮＤ）を確認する。ここでは、ＥＮＤ＝１であるため、以降の処理を停止する。
【０１１６】
なお、図７では、タスクコマンドが指定するタスク用プログラムが１つであるものを例に示したが、タスクコマンドが指定するタスク用プログラムは複数であってもよい。タスクが複数のタスク用プログラムによってタスクデータを処理する場合、上記ＤＭＡコマンドのエンドフラグを適切に設定することで、アレイ型プロセッサ２３からの一度の転送要求により複数のタスク用プログラムを連続してロードすることが可能になる。
【０１１７】
例えば、図７に示したＤＭＡコマンドテーブル７４のインデックス＝４とインデックス＝５の間にタスク用プログラムＣをロードするためのＤＭＡコマンドを追加すれば、インデックス＝３で指定されるＤＭＡコマンドの処理が終了した後に、タスク用プログラムＢのロード処理及びタスク用プログラムＣのロード処理を連続して実行することができる。
【０１１８】
なお、複数のタスク用プログラムを新たに１つのタスク用プログラムとして定義し、１つのＤＭＡコマンドを用いてロードすることも可能であるが、この場合は、新たに作成したタスク用プログラムをメモリ３に格納する必要があるためにメモリ３の使用量が増加してしまう。したがって、複数のタスク用プログラムを１つのプログラムにまとめるよりも、複数のタスク用プログラムを順番にロードする方がメモリ３の使用量を削減できる。
【０１１９】
以上説明したように本発明のストリームプロセッサによれば、構成情報ＤＭＡコントローラ２７を備えることで、ホストプロセッサであるＣＰＵ１がストリームプロセッサ２にＤＭＡコマンドを設定すれば、以降、ストリームプロセッサ２はＣＰＵ１の制御を必要とせずに必要に応じてタスク用プログラムをメモリからロードして、タスクの処理を実行できる。
【０１２０】
したがって、本発明のストリームプロセッサ２を備えた情報処理装置は、ＣＰＵ１の処理負荷が軽減されるために処理能力の低下が抑制される。また、ストリームプロセッサ２に対するタスク用プログラムのロード処理毎に、ＣＰＵ１でタスクスイッチが発生することがない。よって、ＣＰＵ１でメモリアクセスが頻繁に発生することによるレイテンシの増大が抑制されるため、処理のスループットの低下が抑制される。
【０１２１】
なお、本実施形態のストリームプロセッサ２を有する情報処理装置は、ＣＰＵ１、ストリームプロセッサ２、メモリ３、入出力回路４及びバス５を１つの半導体集積回路装置に備えた構成であってもよく、これらの構成要素が持つ機能を複数の半導体集積回路装置で実現する構成であってもよい。また、入出力回路４を複数備えた構成であってもよく、バス５の代わりにクロスバススイッチ等の接続網を用いた構成であってもよい。さらに、ストリームプロセッサ２とＣＰＵ１間で割り込み信号を直接やり取りする構成であってもよく、ストリームプロセッサ２とＣＰＵ１の間に割り込みコントローラを挿入し、該割り込みコントローラを介してストリームプロセッサ２とＣＰＵ１間で割り込み信号を直接やり取りする構成であってもよい。
【図面の簡単な説明】
【０１２２】
【図１】本発明のストリームプロセッサを有する情報処理装置の一構成例を示すブロック図である。
【図２（ａ）】図１に示した入力ＤＭＡ回路がメモリから読み出すディスクリプタのフォーマットを示す模式図である。
【図２（ｂ）】図１に示した入力ＦＩＦＯ及びアレイ型プロセッサへ供給するディスクリプタの構成を示す模式図である。
【図３】図１に示した構成情報ＤＭＡコントローラの一構成例を示すブロック図である。
【図４】図３に示したＤＭＡコマンドテーブルのフォーマットを示す模式図である。
【図５】図１に示したアレイ型プロセッサのロードタスク用プログラムによる処理手順を示すフローチャートである。
【図６】本発明のストリームプロセッサの動作の一例を示すタイミングチャートである。
【図７】図３に示したＤＭＡコマンドテーブルの一構成例を示す模式図である。
【図８】従来の情報処理装置の構成を示すブロック図である。
【図９】タスクスイッチ発生時のＣＰＵの処理手順を示すタイミングチャートである。
【符号の説明】
【０１２３】
１    ＣＰＵ
２    ストリームプロセッサ
３    メモリ
４    入出力回路
５    バス
２１    入力ＤＭＡ回路
２２    ディスクリプタ管理テーブル
２３    アレイ型プロセッサ
２４    入力ＦＩＦＯ
２５    出力ＦＩＦＯ
２６    メモリアクセス制御回路
２７    構成情報ＤＭＡコントローラ
７１    第１のインデックスレジスタ
７２    第２のインデックスレジスタ
７３    調停回路
７４    ＤＭＡコマンドテーブル
７５    ＤＭＡ制御部
７６    データ送信部
７７    データ受信部
７８    バスインタフェース部
【図１】
2006338538.tif 000003
【図２（ａ）】
2006338538.tif 000004
【図２（ｂ）】
2006338538.tif 000005
【図３】
2006338538.tif 000006
【図４】
2006338538.tif 000007
【図５】
2006338538.tif 000008
【図６】
2006338538.tif 000009
【図７】
2006338538.tif 000010
【図８】
2006338538.tif 000011
【図９】
2006338538.tif 000012