(58)【調査した分野】(Int.Cl.,DB名)
前記チャネルユニットは、所定のサイズのデータが格納される第1のデータ記憶部及び第2のデータ記憶部を備え、前記位置情報が示す位置のデータを第1データ記憶部に格納し、第1データ記憶部に格納されたデータの後続データを第2データ記憶部に格納する、ことを特徴とする請求項1に記載の情報処理装置。
【発明を実施するための形態】
【0017】
まず、
図1を参照して、本発明の実施の形態にかかる情報処理装置の概要を示す。
図1は、本発明の実施の形態1にかかる情報処理装置の概要を示す構成図である。
【0018】
情報処理装置は、プロセッサ1、メモリ2及びチャネルユニット21〜24を備える。なお、チャネルユニットの数は、ここで例示する数に限定されない。
プロセッサ1は、チャネルユニットが先読みしたストリームデータにアクセスする。
メモリ2は、ストリーム識別情報によって識別されるストリームデータを複数格納する。
チャネルユニット21〜24は、自身に割り当てられたストリームデータをメモリ2から先読みする。また、チャネルユニット21〜24は、メモリ2に格納される複数のストリームデータのストリーム識別情報に応じて、ストリームデータに割り当てられる。なお、異なるストリーム識別情報によって示されるストリームデータに対して異なるチャネルユニットが割り当てられる。
【0019】
続いて、本発明の実施の形態にかかる情報処理装置の処理の概要について説明する。
チャネルユニット21〜24のうちのいずれかは、ストリームデータのストリーム識別情報に応じて、異なるストリーム識別情報によって示されるストリームデータに対して異なるチャネルユニットが割り当てられるようにストリームデータを自身に割り当てる。
ストリームデータが割り当てられたチャネルユニットは、自身に割り当てられたストリームデータを先読みする。
プロセッサは、チャネルユニットが先読みしたストリームデータにアクセスする。
【0020】
続いて、本発明の実施の形態にかかる情報処理装置ついて図面を参照して説明する。
図2は、本発明の実施の形態にかかる情報処理装置の構成図である。
【0021】
情報処理装置は、プロセッサ1、メモリ2及びストリームアクセスユニット10を備える。ストリームアクセスユニット10は、メイン制御ユニット11と、チャネルユニット12A、12B、12C、12Dと、メモリアクセスユニット13と、を備える。
【0022】
ストリームアクセスユニット10は、プロセッサ1から指示を受けて、メモリ2からデータを読み出したり、メモリ2へデータを書き込んだりするように構成される。
プロセッサ1は、演算器、レジスタ、制御ユニット、などを備えたCPUやDSPなどの計算機であり、制御ユニットが外部に接続されたメモリ2に格納されたプログラムを解釈し、それにもとづいて演算器を動作させ、レジスタや外部に接続されたメモリ2へ演算結果を書込む。以降の説明において、プロセッサ1が何かの処理を行うと表記されている場合には、実際には、その処理がプログラムとして記述されていて、そのプログラムをプロセッサ1が実行することによって、その処理が行われる、ということを意味する。
【0023】
メモリ2は、連続的なデータ(ストリーム)を保持する記憶装置である。ストリームに加えて、ストリームアクセスユニット10を動作させるための制御情報(ストリームIDテーブル、各ストリームのストリーム情報)も、メモリ2に格納される。ここで、本実施の形態において、「ストリーム」又は「ストリームデータ」とは、メモリ2に連続的に格納されるデータである。「ストリーム」又は「ストリームデータ」は、例えば、配列データ、映像データ、音声データ及び通信データ等が含まれる。つまり、「ストリーム」又は「ストリームデータ」は、例えば、連続するデータであって、先頭から順番にアクセスされるデータである。また、「ストリーム」又は「ストリームデータ」は、例えば、いちど利用されるだけで再利用される可能性の低いデータである。
【0024】
ストリームアクセスユニット10において、メイン制御ユニット11は、プロセッサ1から与えられた指示を解釈し、その指示にもとづいてチャネルユニット12A、12B、12C、12Dのいずれかを選択し、プロセッサ1から与えられた指示の動作を選択したチャネルユニットに行なわせるよう制御する。メモリアクセスユニット13は、チャネルユニット12A、12B、12C、12Dから与えられた制御信号とデータにもとづいて、メモリ2からデータを読み出したり、あるいはメモリ2へデータを書込んだりする。
【0025】
図3に示すように、チャネルユニット12A、12B、12C、12Dは、それぞれ、チャネル制御ユニット121と、チャネル記憶ユニット122と、を備える。チャネルユニット12A、12B、12C、12Dは、自身に割り当てられたストリームをメモリ2に代わって記憶(キャッシュ)したり先読みしたりする。これによって、チャネルユニット12A、12B、12C、12Dは、プロセッサ1に対してストリームに対する高速なアクセスを実現する。チャネル記憶ユニット122は、メモリ上に連続的に格納されたデータ配列(ストリーム)に関する情報を格納する。
図4に示すように、チャネル記憶ユニット122に格納されるストリーム情報は以下の項目を含む。チャネル記憶ユニット122には、チャネルユニットに割り当てられたストリームのストリーム情報が格納される。
【0026】
・ストリームを識別するためのストリームID
・ストリームの現在位置(アドレス)を表すストリームポインタ
・ストリームの内容をゼロで初期化するか否かを表すゼロクリアフラグ
・チャネル記憶ユニットにストリーム情報が格納されていることを示すCHVALIDフラグ
・ストリームの64バイトのデータを格納するためのバッファ0
・バッファ0に格納されたデータの開始アドレスのタグを格納するためのタグ0
・バッファ0にデータが格納されているか否かを表すフラグを格納するためのBFVALIDフラグ0
・バッファ0に格納されたデータがメモリ2に格納されたデータと不一致となっているか否かを表すフラグを格納するDIRTYフラグ0
・ストリームの64バイトのデータを格納するためのバッファ1
・バッファ1に格納されたデータの開始アドレスのタグを格納するためのタグ1
・バッファ1にデータが格納されているか否かを表すフラグを格納するためのBFVALIDフラグ1
・バッファ1に格納されたデータがメモリ2に格納されたデータと不一致となっているか否かを表すフラグを格納するDIRTYフラグ1
【0027】
タグとは、バッファに格納されたデータの開始アドレスから計算されたビットパターンである。一般的には、バッファに格納されたデータの開始アドレスの上位ビットがそのままタグとなる。例えば、バッファのサイズを64バイトとすると、64バイトは6ビットのアドレスに相当するので、バッファに格納されたデータの開始アドレスの下位6ビットを除いたビットパターンをタグとする。タグの計算方法はこれだけではなく、従来の一般的なタグの計算方法を本実施の形態で使用してもよい。
本実施の形態では、バッファ0あるいはバッファ1のサイズを64バイトとしているが、バッファのサイズは64バイトには限定されない。64バイトではなく、バッファのサイズを32バイトあるいは128バイトなどの2のべき乗の数にしてもよい。
【0028】
上記の項目に加えて、ストリームの開始アドレスや ストリームのデータサイズをストリーム情報に含んでも良い。もしこれらの項目をチャネル記憶ユニット122に格納しておくと、ストリームの現在位置がストリームから外れたか否かを チャネル制御ユニット121がすみやかに知ることができる。さらには、ストリームの現在位置がストリームの終端に達した場合に、ストリームの先頭に現在位置を移動する、という制御をチャネル制御ユニット121が行うことが可能になる。ストリームの開始アドレスをストリーム情報に含めておくと、このようなメリットがあるものの、以降の説明では、ストリームの開始アドレスとデータサイズをストリーム情報に含めない、という仮定で説明する。
【0029】
<<ストリームアクセスユニット10によるストリーム処理に共通の動作の説明>>
ストリームアクセスユニット10がもつ機能に共通の動作を説明する。共通の機能とは、「チャネル割り当て」と「データ取得処理」である。これらの動作をまず説明した後で、ストリームアクセスユニット10の機能を説明する。
【0030】
<チャネル割り当て>
まず、ストリームアクセスユニット10がもつ機能に共通の動作である「チャネル割り当て」について説明する。チャネル割り当ては、ストリームアクセスユニット10がもつチャネルユニットの中からひとつを選んで、ストリームのアクセスに割り当てる処理である。チャネル割り当てでは、割り当て対象のストリームはSID0というストリームIDで指定される。SID0はプロセッサ1からストリームアクセスユニット10へ与えられる制御信号に含まれている。このチャネル割り当てによって、プロセッサ1がアクセスするストリームをキャッシュ及び先読みするチャネルユニットを選択する。つまり、プロセッサ1がアクセスするストリームに、ストリームを先読みするチャネルユニットを割り当てる。チャネル割り当ての処理のフローチャートを
図5に示す。チャネル割り当ての処理の流れは以下のとおりである。各項目の内容を以降で具体的に説明する。
【0031】
・ステップS111:置換えチャネルユニットを選択
・ステップS112:置換えチャネルユニットのバッファの内容を書き戻す
・ステップS113:置換えチャネルユニットのストリーム情報を退避
・ステップS114:新たなストリーム情報を置換えチャネルユニットへ格納
【0032】
[ステップS111:置換えチャネルユニットを選択]
ステップS111において、ストリームアクセスユニット10のメイン制御ユニット11は、チャネルユニット12A、12B、12C、12Dの中から、所定の基準にもとづいて、ひとつのチャネルユニットを選択する。選択したチャネルユニットをCH99と呼ぶことにする。ここで、所定の基準とは、例えば、最近最も使用されていないチャネルユニットを選ぶとか、番号順にチャネルユニットを選ぶとか、ランダムにチャネルユニットを選ぶ、などが考えられる。一般的なキャッシュのライン置換えアルゴリズムを、チャネルユニットの選択に応用してもよい。メイン制御ユニット11は、選択したチャネルユニットに、ストリームの割り当てを指示する制御信号を出力する。この制御信号には、SID0が含まれる。チャネルユニット12A、12B、12C、12Dは、この制御信号に応じて、ステップS112以降の処理を実行する。なお、チャネルユニット12A、12B、12C、12Dは、この制御信号に含まれるSID0が示すストリームを自身に割り当てる。
【0033】
[ステップS112:置換えチャネルユニットのバッファの内容を書き戻す]
ステップS112において、チャネルユニットCH99のチャネル制御ユニット121は、もしチャネル記憶ユニット122のいずれかのバッファのDIRTYフラグがゼロでなければ、メモリアクセスユニット13を使って、そのバッファの内容をタグが示すメモリ2上のアドレスへ書き戻し、そのバッファのDIRTYフラグをゼロにする。そうでなければ、チャネルユニットCH99のチャネル制御ユニット121は、何もしない。
【0034】
ここで、この書き戻しは、選択したチャネルユニットに既にストリームが割り当てられている場合に行われる。この場合、SID0のストリームを新たに割り当てるため、既に割り当てられているストリームは、どのチャネルユニットへも割り当てられていない状態に変更される。そのため、既に割り当てられているストリームについて、チャネルユニットがキャッシュしているデータをメモリ2に反映するようにしている。具体的には、プロセッサ1から既に割り当てられているストリームに対する書き込みがあり、書き込み内容がバッファからメモリ2に反映されておらず、DIRTYフラグがゼロ以外となっている場合に、書き込み内容をバッファからメモリ2に反映するようにしている。つづいて、ステップS113へ進む。
【0035】
[ステップS113:置換えチャネルユニットのストリーム情報を退避]
ステップS113において、もしチャネルユニットCH99のチャネル記憶ユニット122のCHVALIDフラグがゼロでなければ、チャネルユニットCH99のチャネル制御ユニット121は、チャネル記憶ユニット122のストリームIDが示すメモリ領域へ チャネル記憶ユニット122のストリーム情報を格納する。ストリーム情報は後述する「OPEN」という処理によって作成される情報である。ストリーム情報は「READ」や「WRITE」などの処理によって変更される。ストリーム情報の中身についてはステップS114で説明する。ここで、ストリームIDは、後述するように、メモリ2においてストリーム情報が格納されるアドレスを示す。なお、ここでのストリーム情報のメモリ2への格納は、選択したチャネルユニットに既にストリームが割り当てられている場合(CHVALIDフラグがゼロでない場合)に行われる。この場合、次のステップS114において、新たに割り当てるSID0のストリームのストリーム情報をチャネル記憶ユニット112に格納するため、既に割り当てられているストリームのストリーム情報をメモリ2に退避するようにしている。
【0036】
[ステップS114:新たなストリーム情報を置換えチャネルユニットへ格納]
ステップS114において、チャネルユニットCH99のチャネル制御ユニット121は、メモリアクセスユニット13を使って、SID0というストリームIDが示すメモリ領域からストリーム情報を読み出し、それをチャネル記憶ユニット122に格納するとともに、チャネル記憶ユニット122のCHVALIDフラグへ1を代入する。なお、SID0というストリームIDに対応したストリーム情報は「OPEN」という処理によってメモリ2上に作成されたものである。「OPEN」は新たなストリームを利用開始する処理である。チャネルユニットCH99がSID0というストリームIDのストリームを扱うためには、それに対応するストリーム情報をメモリ2から読み出して、チャネル記憶ユニット122に格納するのである。ここで、チャネル記憶ユニット122に格納されるストリーム情報は以下の項目を含む。
【0037】
・ストリームID:ストリームを識別するためのストリーム識別子
・ストリームポインタ:ストリームの現在位置を表すアドレス
・ゼロクリアフラグ:ストリームの内容をゼロで初期化するか否かを表すフラグ
以上が「チャネル割り当て」の処理内容である。
【0038】
<データ取得処理>
次に、「データ取得処理」について説明する。データ取得処理は、ストリームアクセスユニット10のチャネルユニット(12A、12B、12C、12Dのいずれか)において、チャネル記憶ユニット122のストリームポインタに対応するバッファをバッファ0あるいはバッファ1から選択し、選択したバッファにデータを格納する処理である。格納されるデータは、ゼロか、あるいはストリームポインタが示すメモリ2上のアドレスから読み込んだデータである。どちらのデータが格納されるかは、チャネル記憶ユニット122のゼロクリアフラグによって決まる。例えば、ゼロクリアフラグがゼロの場合は、メモリ2のストリームポインタが示すアドレスから読み込んだデータが選択したバッファに格納される。また、例えば、ゼロクリアフラグがゼロ以外の場合は、選択したバッファ全体にゼロが格納される。データ取得処理のフローチャートを
図6に示す。データ取得処理の流れは以下のとおりである。各項目の内容を以降で具体的に説明する。以降の説明では、データ取得処理の対象となるチャネルユニットをCH99と呼ぶことにする。
【0039】
・ステップS121:バッファ選択
・ステップS122:選択したバッファにデータを転送
・ステップS123:選択したバッファのDIRTYフラグをクリア
・ステップS124:選択したバッファをクリア
・ステップS125:選択したバッファのDIRTYフラグをセット
・ステップS126:選択したバッファのタグをセット
・ステップS127:選択したバッファのBFVALIDフラグをセット
【0040】
[ステップS121:バッファ選択]
ステップS121において、チャネルユニットCH99のチャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタに対応するバッファをチャネル記憶ユニット122のバッファ0もしくはバッファ1の中から選択する。ここで、選択方法としては、ストリームポインタの所定のビットの値にもとづいてバッファ0かバッファ1を選択する、あるいは最近もっともアクセスされていない方のバッファを選択する、という方法などが考えられる。ストリームポインタの所定のビットの値を使う方法の具体的な例をひとつ示す。本実施の形態では、バッファ0、1の容量が64バイトの場合について例示しているので、ストリームポインタの下位6ビット(64バイト分)以外のひとつのビットの値を使って、バッファ0あるいはバッファ1のいずれかを選択してもよい。このようにして選択したバッファをBF99と呼ぶことにする。
つづいて、もしチャネル記憶ユニット122のゼロクリアフラグがゼロならば、ステップS122へ進む。もしそうでないならば、ステップS124へ進む。
【0041】
[ステップS122:選択したバッファにデータを転送]
ステップS122において、チャネルユニットCH99のチャネル制御ユニット121は、もしチャネル記憶ユニット122のゼロクリアフラグがゼロならば、メモリアクセスユニット13を使って、チャネル記憶ユニット122のストリームポインタが示すメモリ2上のアドレスから始まる64バイトのデータを読み出し、そのデータをバッファBF99へ格納する。つづいて、ステップS123へ進む。
【0042】
[ステップS123:選択したバッファのDIRTYフラグをクリア]
ステップS123において、チャネルユニットCH99のチャネル制御ユニット121は、もしチャネル記憶ユニット122のゼロクリアフラグがゼロならば、バッファBF99のDIRTYフラグへゼロを書込む。つづいて、ステップS126へ進む。
【0043】
[ステップS124:選択したバッファをクリア]
ステップS124において、チャネルユニットCH99のチャネル制御ユニット121は、もしチャネル記憶ユニット122のゼロクリアフラグがゼロでないならば、バッファBF99の全体にゼロを書込む。ここで、バッファのゼロクリアは、例えば、後述するストリームへデータを書き込む処理「WRITE」において、プロセッサ1がストリームに対して新規にデータの書き込みを行う場合に行われる。「WRITE」はデータを書き込む処理なので、書き込む以前のデータの値を必要としないことが多い。そこで、書き込む以前のデータの値が必要ない場合には、それらをゼロだと仮定することによって、メモリ2から書き込む以前のデータを読み込む処理を省略することができる。さらに、ストリームに対して書き込みをする場合において、プロセッサ1が書き込んだデータ以外のデータを全てゼロとしたい場合にも有効である。このようにすることで、メモリ2からストリームを読み出す処理(ステップS122)を省略することができる。つづいて、ステップS125へ進む。
【0044】
[ステップS125:選択したバッファのDIRTYフラグをセット]
ステップS125において、チャネルユニットCH99のチャネル制御ユニット121は、もしチャネル記憶ユニット122のゼロクリアフラグがゼロでないならば、バッファBF99のDIRTYフラグへ1を書込む。つづいて、ステップS126へ進む。
【0045】
[ステップS126:選択したバッファのタグをセット]
ステップS126において、チャネルユニットCH99のチャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタに対応するタグの値を計算し、バッファBF99のタグへ書き込む。タグの計算方法としては、例えば、ストリームポインタの上位数ビットの値をそのままタグとする、などの方法でもよい。つづいて、ステップS127に進む。
【0046】
[ステップS127:選択したバッファのBFVALIDフラグをセット]
ステップS127において、チャネルユニットCH99のチャネル制御ユニット121は、バッファBF99のBFVALIDフラグへ1を書込む。
以上が「データ取得処理」の処理内容である。
【0047】
<<ストリームアクセスユニット10によるストリーム処理の動作の説明>>
ストリームアクセスユニット10によるストリーム処理の動作について説明する。ここでは、以下の五つの処理に分けて、ストリームアクセスユニット10の動作を説明する。
【0048】
・ストリームを利用開始する:OPEN
・ストリームからデータを読み込む:READ
・ストリームへデータを書込む:WRITE
・ストリームのカレントポジションを移動する:SEEK
・ストリームを利用停止する:CLOSE
【0049】
<ストリームを利用開始する:OPEN>
「OPEN」は、ストリームをストリームアクセスユニット10が扱えるようにするための初期化処理である。ストリームアクセスユニット10は、ストリームIDを使ってストリームを識別する。したがって、ストリームアクセスユニット10が扱うストリームにはIDを割り当てる必要がある。ストリームIDは、ストリームを利用開始する処理の中で割り当てられる。
【0050】
ストリームを利用開始するための処理のフローチャートを
図7に示す。ストリームを利用開始するための処理の流れは以下のとおりである。ステップS11からステップS13はプロセッサ1が実行し、ステップS14からステップS15はストリームアクセスユニット10が実行する。各項目の内容を以降で具体的に説明する。
【0051】
・ステップS11:ストリーム情報の記憶領域割り当て
・ステップS12:ストリーム情報作成
・ステップS13:チャネル割り当て要求
・ステップS14:チャネル割り当て
・ステップS15:データ取得処理
【0052】
[ステップS11:ストリーム情報の記憶領域割り当て]
ステップS11において、プロセッサ1は、新たなストリームに関する情報を格納するためのメモリ領域を割り当てる。具体的には、ストリーム情報を格納するためのメモリ領域のアドレスを予めテーブル(ストリームIDテーブル)に格納しておいて、そのテーブルの中から利用可能なアドレスを見つけて、新たなストリーム情報に割り当てる。このアドレスをストリームIDとして使用する。つまり、ストリームIDは、ストリームを識別するストリーム識別情報として機能する。テーブルの各エントリには、アドレスと、アドレスを使用中か否かを表すフラグ、を格納しておく。アドレスをストリームIDとして使用する際には、そのアドレスに対応するフラグに1を代入する。
【0053】
[ステップS12:ストリーム情報作成]
ステップS12において、プロセッサ1は、新たなストリームに関するストリーム情報を作成し、そのストリーム情報をストリームIDが示すメモリ2上のアドレスへ格納する。ここで、メモリ2に格納されるストリーム情報は以下の項目を含む。
【0054】
・ストリームを識別するためのストリームID
・ストリームの内容をゼロで初期化するか否かを表すゼロクリアフラグ
・ストリームの現在のアドレスを表すストリームポインタ(初期値はストリーム開始アドレスの下位6ビット(バッファサイズの64バイト分に相当)をゼロにした値)
【0055】
上記の項目に加えて、ストリームの開始アドレスやストリームのデータサイズをストリーム情報に含んでも良い。
[ステップS13:チャネル割り当て要求]
ステップS13において、プロセッサ1は、ストリームアクセスユニット10に対して、新たなストリームにチャネルユニットをひとつ割り当てるように指示する。この指示は、新たなストリームを特定するために、ストリームID(SID0)を含んでいる。言い換えると、プロセッサ1は、ストリームの割り当てを指示する制御信号をメイン制御ユニット10に出力する。メイン制御ユニット11は、この制御信号に応じて、ステップS14の処理を実行する。
【0056】
[ステップS14:チャネル割り当て]
ステップS14において、ストリームアクセスユニット10のメイン制御ユニット11は、与えられたSID0というストリームIDにチャネルユニットを割り当てる。この割り当て処理は、共通処理のステップS111〜S114のチャネル割り当てである。
【0057】
[ステップS15:データ取得処理]
ステップS15において、ステップ15で割り当てられたチャネルユニットCH99のチャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタに対応するバッファを選択し、そのバッファへデータを格納する。このデータ取得処理は、共通処理のステップS121〜S127のデータ取得処理である。この処理によって選択されたチャネルユニットCH99のバッファをBF99と呼ぶことにする。
以上が「OPEN」の処理内容である。
【0058】
<ストリームからデータを読み込む:READ>
「READ」は、ストリームからデータを読み出す処理である。プロセッサ1は、ストリームを特定するためのストリームID(SID0)と、読み出したいデータのサイズ(SIZE0)と、ストリームリードコマンドと、をストリームアクセスユニット10へ送信する。ストリームアクセスユニット10は、これらを受け取って、SID0というストリームから指定されたサイズのデータを読み出して、そのデータをプロセッサ1へ送信する。ストリームからデータを読み出す処理「READ」のフローチャートを
図8に示す。
ストリームアクセスユニット10がSID0というストリームから指定されたサイズSIZE0のデータを読み出す処理の流れは以下のとおりである。各項目の内容を以降で具体的に説明する。
【0059】
・ステップS21:チャネルユニット探索
・ステップS22:チャネル割り当て
・ステップS23:データ取得処理
・ステップS24:バッファからデータ読み出し
・ステップS25:データ先読み要否判定
・ステップS26:データ先読み処理
・ステップS27:ストリームの現在位置更新
【0060】
[ステップS21:チャネルユニット探索]
ステップS21において、メイン制御ユニット11は、 与えられたストリームID(SID0)をチャネル記憶ユニット122の中にもつチャネルユニットを探す。なお、メイン制御ユニット11は、プロセッサ1から出力されたストリームリードコマンドに応じて、ステップS21の処理を実行する。もしそのようなチャネルユニットが見つかれば、それをCH99として、ステップS24に進む。チャネルユニットCH99が見つかった場合、メイン制御ユニット11は、データの読み出しを指示する制御信号をチャネルユニットCH99に出力する。この制御信号には、プロセッサ1から出力されたSIZE0が含まれる。チャネルユニットCH99は、この制御信号に応じて、ステップS24の処理を実行する。もしそのようなチャネルユニットが見つからなければ、ステップS22に進む。
【0061】
[ステップS22:チャネルユニット割り当て]
ステップS22において、メイン制御ユニット11は、与えられたSID0というストリームIDを使って、共通処理のステップS111〜S114のチャネル割り当てを行う。この処理によって割り当てられたチャネルユニットをCH99と呼ぶことにする。つづいて、ステップS23へ進む。
【0062】
[ステップS23:データ取得処理]
ステップS23において、チャネルユニットCH99のチャネル制御ユニット121は、共通処理のステップS121〜S127のデータ取得処理を行う。つづいて、ステップS24へ進む。ここで、チャネルユニットCH99がデータの取得完了を通知する制御信号をメイン制御ユニット11に出力するようにして、メイン制御ユニット11が、この制御信号に応じて、データの読み出しを指示する制御信号をチャネルユニットCH99に出力するようにしてもよい。また、ストリームの割り当てを指示する制御信号に、続けて、データ取得が完了したら、ステップS24の処理を実行することを指示する情報を含めてもよい。
【0063】
[ステップS24:バッファからデータ読み出し]
ステップS24において、チャネルユニットCH99のチャネル制御ユニット121は、 チャネル記憶ユニット122のストリームポインタのタグと同じタグをもつバッファをチャネル記憶ユニット122のバッファ0もしくはバッファ1の中から選択する。ここで、ストリームポインタのタグと同じタグをもつバッファとは、ストリームポインタが示すアドレスのデータが格納されるバッファのことである。選択したバッファをBF99とする。
【0064】
もしストリームポインタから計算したタグと同じタグをもつようなバッファBF99が見つからないならば、そのようなバッファBF99が見つかるまで、チャネル制御ユニット121は待つ。もし選択したバッファBF99のBFVALIDフラグがゼロならば、バッファBF99にデータが格納されていないので、データが格納されてBFVALIDフラグがゼロでなくなるまで、チャネル制御ユニット121は待つ。このように待つ理由は、バッファBF99へのデータ転送が他の処理と並行して行われているために、データ転送の完了を確認するためである。バッファBF99へのデータ転送は、後述するステップS26の「データ先読み処理」において、メモリアクセスユニット13によって行われる。メモリアクセスユニット13は他の処理と並行して「データ先読み処理」を実行するため、ステップS24の時点において、先読みされたデータが確実にバッファBF99に格納されていることを確認するひつようがある。
【0065】
その後、バッファBF99のBFVALIDフラグがゼロでなくなったら、バッファBF99の中から、チャネル制御ユニット121は、ストリームポインタが示すアドレスから始まるSIZE0バイト分のデータDATA0を読み出す。チャネル制御ユニット121はデータDATA0をメイン制御ユニット11へ渡し、メイン制御ユニット11はそのデータDATA0をプロセッサ1へ送信する。つづいて、ステップS25に進む。
【0066】
もしも、ストリームポインタが示すアドレスから始まるSIZE0バイト分のデータDATA0が、二つのバッファ0とバッファ1にまたがって格納されている場合には、バッファ0とバッファ1からDATA0を読み出す。その場合には、バッファ0とバッファ1のそれぞれのBFVALIDフラグがゼロでない必要がある。また、チャネル制御ユニット121は、バッファBF99の末尾にあるデータを読み出した際に、バッファBF99のBFVALIDフラグへゼロを代入してもよい。これによって、全てのデータを読み出されたバッファBF99を、後述するステップS26の「データ先読み処理」においてすぐに再利用することが可能となる。
【0067】
[ステップS25:データ先読み要否判定]
ステップS25において、チャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタを64バイト分(バッファのサイズ分)進めたアドレスに対応するバッファを選択する。ここで選択したバッファをBF98とする。アドレスからバッファを選択する方法は、共通処理のステップS121「バッファ選択」と同じでもよいし、より簡易的な方法を用いてもよい。例えば、本実施の形態ではチャネル記憶ユニット122のバッファの数は2個でそのサイズは64バイトなので、バッファBF98とストリームポインタに対応するバッファBF99とは互いに異なるはずである。したがって、バッファの数が2個の場合には、バッファBF99ではないバッファを選択し、それをBF98としてもよい。もしバッファBF98のBFVALIDフラグがゼロであるならば、データ先読み処理が必要なので、ステップS26に進む。もしそうでなければ、データ先読み処理は不要なので、ステップS27に進む。
【0068】
つまり、ストリームポインタが示すデータをバッファBF99から読む際に、もしそのデータの後続データが別のバッファBF98に格納されていないならば、チャネル制御ユニット121は、後続データをメモリ2から先読みして、バッファBF98に格納する。
【0069】
[ステップS26:データ先読み処理]
ステップS26において、チャネル制御ユニット121は、チャネル記憶ユニット122のゼロクリアフラグにもとづいて、チャネル記憶ユニット122のストリームポインタを64バイト分(バッファのサイズ分)進めたアドレスから始まる64バイトのデータか、もしくはゼロ(64バイト分)、のいずれかをステップS25で選択したバッファBF98へ格納する。この処理は、共通処理のステップS121〜S127のデータ取得処理とほぼ同じである。異なる点は、ステップS121〜S127のデータ取得処理ではストリームポインタの値をアドレスとして使うのに対して、ステップS26ではストリームポインタを64バイト分進めたアドレスを、メモリ2からデータを読み出すアドレスとして使う、ということである。データ先読み処理において、メモリからバッファBF98へのデータ転送は、他の処理と並行して行われてもよい。例えば、データ先読み処理の完了を待たずに、チャネル制御ユニット121は、ステップS27を開始してもよい。
【0070】
具体的には、チャネル制御ユニット121は、データの読み込みを指示する制御信号を、メモリアクセスユニット13に出力する。メモリアクセスユニット13は、この制御信号に応じて、メモリ2からデータを読み出す。そして、メモリアクセスユニット13は、データの読み込みを指示されたチャネルユニットに読み出したデータを出力する。そして、チャネル制御ユニット121は、メモリアクセスユニット13から出力されたデータをバッファに格納して、そのバッファに対応するBFVALIDフラグを0以外の値に更新する。
【0071】
[ステップS27:ストリームの現在位置更新]
ステップS27において、チャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタに、データサイズを表すSIZE0を加算する。
以上が「READ」の処理内容である。
【0072】
<ストリームへデータを書込む:WRITE>
「WRITE」は、ストリームへデータを書込む処理である。プロセッサ1は、ストリームを特定するためのストリームID(SID0)と、書き込みたいデータと、そのデータのサイズ(SIZE0)と、ストリームライトコマンドと、をストリームアクセスユニット10へ送信する。ストリームアクセスユニット10は、これらを受け取って、SID0というストリームへ与えられたデータを書込む。ストリームへデータを書込む処理「WRITE」のフローチャートを
図9に示す。
ストリームアクセスユニット10がSID0というストリームへ与えられたデータを書込む処理の流れは以下のとおりである。各項目の内容を以降で具体的に説明する。
【0073】
・ステップS31:チャネルユニット探索
・ステップS32:チャネル割り当て
・ステップS33:データ取得処理
・ステップS34:バッファへデータ書き込み
・ステップS35:データ書き戻し要否判定
・ステップS36:データ書き戻し処理
・ステップS37:データ先読み要否判定
・ステップS38:データ先読み処理
・ステップS39:ストリームの現在位置更新
【0074】
[ステップS31:チャネルユニット探索]
ステップS31において、メイン制御ユニット11は、与えられたストリームID(SID0)をチャネル記憶ユニット122の中にもつチャネルユニットを探す。なお、メイン制御ユニット11は、プロセッサ1から出力されたストリームライトコマンドに応じて、ステップS31の処理を実行する。もしそのようなチャネルユニットが見つかれば、それをCH99として、ステップS34に進む。チャネルユニットCH99が見つかった場合、メイン制御ユニット11は、データの書き出しを指示する制御信号をチャネルユニットCH99に出力する。この制御信号には、プロセッサ1から出力された書き込みデータ及びSIZE0が含まれる。チャネルユニットCH99は、この制御信号に応じて、ステップS34の処理を実行する。もしそのようなチャネルユニットが見つからなければ、ステップS32に進む。
【0075】
[ステップS32:チャネル割り当て]
ステップS32において、メイン制御ユニット11は、与えられたSID0というストリームIDを使って、共通処理のステップS111〜S114のチャネル割り当てを行う。この処理によって割り当てられたチャネルユニットをCH99と呼ぶことにする。つづいて、ステップS33へ進む。
【0076】
[ステップS33:データ取得処理]
ステップS33において、チャネルユニットCH99のチャネル制御ユニット121は、 共通処理のステップS121〜S127のデータ取得処理を行う。つづいて、ステップS34へ進む。ここで、チャネルユニットCH99がデータの取得完了を通知する制御信号をメイン制御ユニット11に出力するようにして、メイン制御ユニット11が、この制御信号に応じて、データの書き出しを指示する制御信号をチャネルユニットCH99に出力するようにしてもよい。また、ストリームの割り当てを指示する制御信号に、続けて、データ取得が完了したら、ステップS34の処理を実行することを指示する情報を含めてもよい。
【0077】
[ステップS34:バッファへデータ書き込み]
ステップS34において、チャネルユニットCH99のチャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタから計算したタグと同じタグをもつバッファをチャネル記憶ユニット122のバッファ0もしくはバッファ1の中から選択する。選択したバッファをBF99とする。
【0078】
もしストリームポインタから計算したタグと同じタグをもつようなバッファBF99が見つからないならば、そのようなバッファBF99が見つかるまで、チャネル制御ユニット121は待つ。もし選択したバッファBF99のBFVALIDフラグがゼロならば、バッファBF99にデータが格納されていないので、データが格納されてBFVALIDフラグがゼロでなくなるまで、チャネル制御ユニット121は待つ。このように待つ理由は、「READ」のステップS24と同様に、バッファBF99へのデータ転送の完了を確認するためである。その後、バッファBF99のBFVALIDフラグがゼロでなくなったら、チャネル制御ユニット121は、ストリームポインタが示すアドレスにもとづいて、バッファBF99への書込み位置を決定し、バッファBF99へプロセッサ1から与えられたデータを書込み、バッファBF99のDIRTYフラグへ1を書込む。具体的には、チャネル制御ユニット121は、メイン制御ユニット11から出力された書き込みデータを、SIZE0のサイズ分バッファに書き込む。
【0079】
[ステップS35:データ書き戻し要否判定]
ステップS35において、チャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタから64バイト分(バッファのサイズ分)遡ったアドレスを減算した値で表されるアドレスに対応するバッファを選択し、そのバッファのDIRTYフラグがゼロであるか否かを調べる。アドレスからバッファを選択する方法は、共通処理のステップS25における「バッファ選択」と同じである。ここで選択したバッファをBF98とする。もしBF98のDIRTYフラグがゼロならば、データ書き戻し処理は不要なので、ステップS37に進む。もしそうでなければ、データ書き戻し処理が必要なので、ステップS36に進む。
【0080】
つまり、ストリームポインタが示すデータをバッファBF98に書き込む際に、もしそのデータの先行データ(既にバッファBF98に書き込まれているデータ)が格納されるバッファBF98にデータがメモリ2に書き戻されていないならば、チャネル制御ユニット121は、バッファBF98に格納されたデータをメモリ2に書き戻す必要があると判断する。
【0081】
[ステップS36:データ書き戻し処理]
ステップS36において、チャネルユニットCH99のチャネル制御ユニット121は、メモリアクセスユニット13を使って、バッファBF98のタグが示すメモリ2上のアドレスへバッファBF98の内容を書き戻し、バッファBF98のDIRTYフラグおよびBFVALIDフラグをどちらもゼロにする。データ書き戻し処理において、バッファBF98からメモリ2へのデータ転送は、他の処理と並行して行われてもよい。例えば、データ書き戻し処理の完了を待たずに、チャネル制御ユニット121は、ステップS37を開始してもよい。
【0082】
具体的には、チャネル制御ユニット121は、メモリ2に書き戻すデータを、メモリアクセスユニット13に出力する。メモリアクセスユニット13は、このデータの出力に応じて、このデータをメモリ2に書き込む。
【0083】
[ステップS37:データ先読み要否判定]
ステップS37において、チャネルユニットCH99のチャネル制御ユニット121は、BFVALIDフラグがゼロであるようなバッファが存在する場合にだけ、ステップS25と同様の「データ先読み要否判定」を行う。つまり、もし先読みしたデータを格納可能なバッファが存在するならば、データ先読みの要否を判断する。そうでない場合には、データ先読みは不要と判断し、ステップS39へ進む。ステップS25の「データ先読み要否判定」については既に説明しているので、ここでは説明を省略する。
なお、「WRITE」はストリームへデータを書き込む処理であるため、先読みしたデータは上書きされ、メモリから先読みされたデータが無駄になってしまう。したがって、書き込み対象となるストリームに対しては、「OPEN」において、ゼロクリアフラグをセットしておくことが望ましい。そうすれば、「WRITE」におけるデータ先読みにおいて、メモリからのデータ先読みは行われず、ゼロという値がバッファへ格納される。
【0084】
[ステップS38:データ先読み処理]
ステップS38におけるデータ先読み処理は、ステップS26のデータ先読み処理と同様であるため、説明を省略する。
【0085】
[ステップS39:ストリームの現在位置更新]
ステップS39において、チャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタに、データサイズを表すSIZE0を加算する。
以上が「WRITE」の処理内容である。
【0086】
<ストリームの現在位置を変更する:SEEK>
「SEEK」は、ストリームの現在位置(ストリームポインタの値)を変更する処理である。プロセッサ1は、ストリームを特定するためのストリームID(SID0)と、新たなストリームポインタの値(SPTR0)と、ストリームシークコマンドと、をストリームアクセスユニット10へ送信する。ストリームアクセスユニット10は、これらを受け取って、SID0というストリームのストリームポインタへSPTR0を代入する。ストリームの現在位置を変更する処理「SEEK」のフローチャートを
図10に示す。
ストリームアクセスユニット10がSID0というストリームのストリームポインタの値を変更する処理の流れは以下のとおりである。各項目の内容を以降で具体的に説明する。
【0087】
・ステップS41:チャネルユニット探索
・ステップS42:チャネルユニット割り当て
・ステップS43:ストリーム現在位置更新
・ステップS44:データ取得処理
【0088】
[ステップS41:チャネルユニット探索]
ステップS41において、メイン制御ユニット11は、与えられたストリームID(SID0)をチャネル記憶ユニット122の中にもつチャネルユニットを探す。なお、メイン制御ユニット11は、プロセッサ1から出力されたストリームシークコマンドに応じて、ステップS41の処理を実行する。もしそのようなチャネルユニットが見つかれば、それをCH99として、ステップS43に進む。チャネルユニットCH99が見つかった場合、メイン制御ユニット11は、ストリームの現在位置の更新を指示する制御信号をチャネルユニットCH99に出力する。この制御信号には、プロセッサ1から出力されたストリームポインタの値が含まれる。チャネルユニットCH99は、この制御信号に応じて、ステップS43の処理を実行する。もしそのようなチャネルユニットが見つからなければ、ステップS42に進む。
【0089】
[ステップS42:チャネルユニット割り当て]
ステップS42において、メイン制御ユニット11は、与えられたSID0というストリームIDを使って、共通処理のステップS111〜S114のチャネル割り当てを行う。ここの処理によって割り当てられたチャネルユニットをCH99と呼ぶことにする。つづいて、ステップS43へ進む。ここで、チャネルユニットCH99がチャネルユニットの割り当てを通知する制御信号をメイン制御ユニット11に出力するようにして、メイン制御ユニット11が、この制御信号に応じて、ストリームの現在位置の更新を指示する制御信号をチャネルユニットCH99に出力するようにしてもよい。また、ストリームの割り当てを指示する制御信号に、続けて、チャネルユニットの割り当てが完了したら、ステップS43の処理を実行することを指示する情報を含めてもよい。
【0090】
[ステップS43:ストリーム現在位置更新]
ステップS43において、チャンルユニットCH99のチャネル制御ユニット121は、チャネル記憶ユニット122のストリームポインタに、与えられたストリームポインタの値SPTR0を代入する。具体的には、メイン制御ユニット11から出力されたストリームポインタの値を、チャネル記憶ユニット122のストリームポインタに格納する。
【0091】
[ステップS44:データ取得処理]
ステップS44において、チャネルユニットCH99のチャネル制御ユニット121は、共通処理のステップS121〜S127のデータ取得処理を行う。データ取得処理において、メモリからバッファへのデータ転送は、他の処理と並行して行われてもよい。例えば、データ取得処理の完了を待たずに、チャネル制御ユニット121は、「SEEK」という処理を終了し、別の処理を開始してもよい。
以上が「SEEK」の処理内容である。
【0092】
<ストリームを利用停止する:CLOSE>
「CLOSE」は、ストリームアクセスユニット10があるストリームの利用を停止する処理である。プロセッサ1は、ストリームを特定するためのストリームID(SID0)と、ストリームクローズコマンドと、をストリームアクセスユニット10へ送信する。ストリームクローズコマンドを受け取ったら、ストリームアクセスユニット10は、SID0というストリームに割り当てられたチャネルユニットを解放する。
【0093】
続いて、プロセッサ1は、SID0というストリームIDを解放する。具体的には、ストリーム情報を格納するためのメモリ領域のアドレス(ストリームID)を格納したテーブルの中から、SID0というストリームIDに対応するアドレスを見つけ、そのアドレスに対応するフラグにゼロを代入する。ストリームの利用を停止する処理「CLOSE」のフローチャートを
図11に示す。
ストリームアクセスユニット10がストリームクローズコマンドを受信した時の処理の流れは以下のとおりである。各項目の内容を以降で具体的に説明する。
【0094】
・ステップS51:チャネルユニット探索
・ステップS52:データ書き戻し処理
・ステップS53:チャネルユニット解放
【0095】
[ステップS51:チャネルユニット探索]
ステップS51において、メイン制御ユニット11は、与えられたストリームID(SID0)をチャネル記憶ユニット122の中にもつチャネルユニットを探す。なお、メイン制御ユニット11は、プロセッサ1から出力されたストリームクローズコマンドに応じて、ステップS51の処理を実行する。もしそのようなチャネルユニットが見つかれば、それをCH99として、ステップS52に進む。チャネルユニットCH99が見つかった場合、メイン制御ユニット11は、ストリームの割り当て解除を指示する制御信号をチャネルユニットCH99に出力する。チャネルユニットCH99は、この制御信号に応じて、ステップS52の処理を実行する。もしそのようなチャネルユニットが見つからなければ、処理を終了する。
【0096】
[ステップS52:データ書き戻し処理]
ステップS52において、選択されたチャネルユニットCH99のチャネル制御ユニット121は、もしチャネル記憶ユニット122のいずれかのバッファのDIRTYフラグがゼロでなければ、そのバッファの内容をタグが示すメモリ上のアドレスへ書き戻し、そのバッファのDIRTYフラグおよびBFVALIDフラグをゼロにする。もしチャネルユニットCH99のいずれのバッファのDIRTYフラグもゼロであれば、チャネル制御ユニット121はなにもしない。つづいて、ステップS53へ進む。
【0097】
[ステップS53:チャネルユニット解放]
ステップS53において、選択されたチャネルユニットCH99のチャネル制御ユニット121は、チャネル記憶ユニット122のCHVALIDフラグへゼロを代入する。CHVALIDフラグがゼロであるようなチャネルユニットはストリームIDが割り当てられていないことを意味する。
【0098】
以上に説明したように、本実施の形態によれば、メモリに格納されるストリームデータに対してプロセッサがアクセスする場合に、ストリームデータの先読みを行う機能を備えたチャネルユニットを介して、プロセッサ1はストリームデータへアクセスする。そしてストリームデータはストリームIDによって識別され、限られた個数のチャネルユニットによって任意の数のストリームデータおよびストリームIDを扱えるようにしている。チャネルユニットは、プロセッサ1からストリームデータを要求される際に、要求されたデータの後続のデータを先読みすることによって、将来のプロセッサ1からの要求に迅速に応えられるようにしている。
【0099】
また、本実施の形態によれば、ストリームを利用開始する処理「OPEN」と、ストリームを利用停止する処理「CLOSE」によって、プロセッサからアクセスするストリームデータの数を任意に調整することができる。
【0100】
また、本発明は、ひとつのストリームのデータを記憶するために、ひとつのチャネルユニットを使用するようにすることができる。チャネルユニットは、一般的なキャッシュメモリのキャッシュライン(あるいはキャッシュブロック)に相当する記憶要素である。一般的なキャッシュメモリは、データのアドレスにもとづいて、キャッシュラインの割当を決定する。一方、本発明では、ストリームIDにもとづいて、チャネルユニットの割当を決定する。データのアドレスは一般的に大きな空間に広がっているため、適当なヒット率を得るために必要なキャッシュラインの数は多くなる。一方、ストリームIDの個数はアドレス空間よりも小さいため、適当なヒット率を得るために必要なチャネルユニットの数は比較的少ない。本発明では、同時に使用するストリームの数にもとづいて必要なチャネルユニットの数を決めれば良いので、一般的なキャッシュのキャッシュラインの数よりもチャネルユニットの数を非常に少なくできる。
したがって、一般的なキャッシュメモリに比べて、本発明は少ない記憶要素でストリームデータを記憶することができる。このことによって、小回路規模のキャッシュを実現できる。
【0101】
以上説明したように、本発明を使用すれば、ストリームデータに適した小回路規模のキャッシュを構成することができる。ストリームデータは、画像/映像/音楽/通信などの処理で広く使われるため、そうした分野のプロセッサに対して、本発明を応用することが可能である。
【0102】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【0103】
<ストリームアクセスユニットの応用>
図1には、チャネルユニットを4個備えるストリームアクセスユニット10が描かれているが、ストリームアクセスユニット10のチャネルユニットの数は1個でも、複数個でもよい。チャネルユニットの数を増やすと、同時に記憶可能なストリームの数を増やすことができる。チャネルユニットの数を減らすと、回路規模を削減することができる。
【0104】
これまでの説明では、チャネル記憶ユニット122は、バッファ0とバッファ1の2つのバッファをもつことになっているが、チャネル記憶ユニット122がもつバッファの数は2個以上でもよい。バッファの数を増やすと、先読み可能なデータサイズを増やせるというメリットがある。
【0105】
これまでの説明では、チャネル記憶ユニット122のバッファ0とバッファ1の容量はそれぞれ64バイトであるが、バッファ0とバッファ1のサイズは64バイト以外でもよい。バッファのサイズを増やすと、先読み可能なデータサイズを増やせるというメリットがある。バッファのサイズを変更すると、それにあわせて、バッファの選択方法や、タグの計算方法を変更する必要がある。
【0106】
また、プロセッサ1と、メモリ2との間にストリームアクセスユニット10とは別のキャッシュメモリを備えるようにしてもよい。また、ストリームデータ以外の非ストリームデータをキャッシュメモリに格納するようにしてもよい。そして、プロセッサ1がメモリ2に格納された非ストリームデータにアクセスする場合、メモリ2の非ストリームデータをキャッシュメモリに読み込んで、キャッシュメモリに読み込んだ非ストリームデータをプロセッサ1がアクセスするようにしてもよい。この場合、本実施の形態によれば、キャッシュメモリに読み込んだ非ストリームデータが、ストリームデータで上書きされてしまうことがなくなるため、キャッシュメモリの利用効率を向上させることができる。
【0107】
上記の実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0108】
(付記1)ストリーム識別情報によって識別されるストリームデータを複数格納するメモリと、前記複数のストリームデータのストリーム識別情報に応じて、当該複数のストリームデータに割り当てられ、当該割り当てられたストリームデータを前記メモリから先読みする複数のチャネルユニットであって、異なるストリーム識別情報によって示されるストリームデータに対して異なるチャネルユニットが割り当てられる複数のチャネルユニットと、前記チャネルユニットが先読みしたストリームデータにアクセスするプロセッサと、を備えた情報処理装置。
【0109】
(付記2)前記メモリは、非ストリームデータをさらに格納し、前記情報処理装置は、前記メモリに格納された前記非ストリームデータをキャッシュするキャッシュメモリをさらに備え、前記プロセッサは、前記キャッシュメモリから、当該キャッシュメモリがキャッシュした非ストリームデータを取得する付記1に記載の情報処理装置。
【0110】
(付記3)前記情報処理装置は、メイン制御ユニットをさらに備え、前記プロセッサは、前記ストリームデータに前記チャネルユニットを割り当てる場合に、当該ストリームデータのストリーム識別情報を含む割り当て要求情報を前記メイン制御ユニットに出力し、 前記チャネルユニットは、前記プロセッサからの割り当て要求情報に応じて、当該割り当て要求に含まれるストリーム識別情報が示すストリームデータに、前記複数のチャネルユニットのうちのいずれかを割り当てる付記1又は2に記載の情報処理装置。
【0111】
(付記4)前記プロセッサは、前記チャネルユニットが先読みしたストリームデータにアクセスする場合に、当該ストリームデータのストリーム識別情報を含むアクセス要求情報を前記メイン制御ユニットに出力し、前記メイン制御ユニットは、前記プロセッサからのアクセス要求情報に応じて、当該アクセス要求情報に含まれるストリーム識別情報が示すストリームデータに割り当てられたチャネルユニットがない場合、前記複数のチャネルユニットのうちのいずれかを、当該ストリーム識別情報が示すストリームデータに割り当てる付記3に記載の情報処理装置。
【0112】
(付記5)前記プロセッサは、前記ストリームデータに前記チャネルユニットを割り当てる場合に、当該ストリームデータに関するストリーム情報を前記メモリに格納し、前記チャネルユニットは、当該ストリームデータが割り当てられた場合に、当該ストリームデータに関するストリーム情報を前記メモリから取得し、取得したストリーム情報に基づいて、当該ストリームデータを先読みする付記3又は4に記載の情報処理装置。
【0113】
(付記6)前記チャネルユニットは、当該チャネルユニットに割り当てられたストリームデータに関するストリーム情報を格納するチャネル記憶ユニットを有し、前記ストリームデータに前記チャネルユニットを割り当てるときに、当該チャネルユニットに他のストリームデータが割り当てられている場合、前記チャネル記憶ユニットに格納され、当該他のストリームデータに関するストリーム情報を前記メモリに格納するとともに、前記チャネルユニットに割り当てるストリームデータに関するストリーム情報を前記メモリから取得して、取得したストリーム情報を前記チャネル記憶ユニットに格納する付記5に記載の情報処理装置。
【0114】
(付記7)前記ストリーム情報は、前記ストリーム識別情報を含み、前記ストリーム識別情報は、当該ストリーム識別情報を含むストリーム情報が前記メモリにおいて格納されるアドレスを示し、前記チャネルユニットは、前記他のストリームデータに関するストリーム情報を、前記メモリの対応するアドレスに格納するとともに、前記プロセッサから出力されたストリーム識別情報が示すアドレスのストリーム情報を前記メモリから取得して前記チャネル記憶ユニットに格納する付記6に記載の情報処理装置。
【0115】
(付記8)前記ストリーム情報は、前記ストリームデータのうち、前記プロセッサがアクセスする位置を示すアクセス位置情報を含み、前記チャネルユニットは、前記プロセッサから前記先読みしたストリームデータにアクセスがあった場合、当該アクセスされたデータのサイズに応じて、前記アクセス位置情報を更新するとともに、当該アクセス位置情報に基づいて、前記ストリームデータを先読みするか否かを判定する付記6又は7に記載の情報処理装置。
【0116】
(付記9)前記チャネル記憶ユニットは、所定のサイズのデータが格納される第1のデータ記憶部及び第2のデータ記憶部を含み、前記チャネルユニットは、前記ストリームデータのうち、所定サイズのデータを先読みして前記第1のデータ記憶部に格納するとともに、前記アクセス位置情報が示す位置が、前記第1のデータ記憶部に格納されたデータに含まれる場合、前記ストリームデータにおいて当該データに後続するデータを先読みして前記第2のデータ記憶部に格納する付記8に記載の情報処理装置。
【0117】
(付記10)前記プロセッサは、前記チャネルユニットが先読みしたストリームデータに書き込みによるアクセスを行い、前記チャネル記憶ユニットは、所定のサイズのデータが格納される第1のデータ記憶部及び第2のデータ記憶部を含み、前記チャネルユニットは、前記ストリームデータのうち、所定サイズのデータを先読みして前記第1のデータ記憶部に格納し、当該データに後続するデータを先読みして前記第2の記憶部に格納するとともに、前記プロセッサから書き込みによるアクセスがあったときに、前記アクセス位置情報が示す位置が、前記第2のデータ記憶部に格納されたデータに含まれる場合、前記第1のデータ記憶部に格納されたデータを前記メモリに書き戻す付記8に記載の情報処理装置。
【0118】
(付記11)前記プロセッサは、前記ストリーム識別情報を含む割り当て解除要求情報を前記メイン制御ユニットに出力し、前記メイン制御ユニットは、前記プロセッサからの割り当て解除要求情報に応じて、当該割り当て解除要求情報に含まれるストリーム識別情報が示すストリームデータのチャネルユニットへの割り当てを解除する付記1乃至10のいずれか1項に記載の情報処理装置。