(57)【要約】【課題】  ＣＰＵとＭＭＵとをつなぐバスの混雑度を予測し、ＣＰＵの効率的な動作を図る。【解決手段】  命令デコーダ１３で命令をデコードして得られるオペコードをスカラリクエスト数計算部４２に送信する。スカラリクエスト数計算部４２は、発行されるメモリリクエスト数の期待値を計算し、登録時計算制御部４６等を経由して演算器４８に送信する。また、主記憶部２１からデータの読み出しが終了した際には、終了時計算制御部４７で実行が完了したメモリリクエスト数が計算され、演算器４８に送信される。演算器４８はリクエストカウンタ４９の保持値と登録時計算制御部４６と終了時計算制御部４７とから送信された値とを加算し、結果をリクエストカウンタ４９に格納する。リクエストカウンタ４９の格納値に従って、動作制御部５０内の各制御部５１〜５４からメモリアクセス中の動作を最適化するような各種制御信号を出力する。【選択図】  図１
2006285683.tif 000002
【特許請求の範囲】
【請求項１】
制御部と、
メモリとを具備する情報処理装置であって、
前記制御部は、
命令からオペコードとオペランドとを取り出す命令デコーダと、
前記命令デコーダが取り出したオペランドが前記メモリにアクセスする命令のオペランドであるか否かを判別する命令種別判別手段と、
前記命令種別判別手段でオペランドが前記メモリにアクセスする命令のオペランドであると判別された場合に、この命令で前記メモリにアクセスする際に発行されるリクエスト数の期待値を算出する加算値算出手段と、
前記加算値算出手段が算出した値を積算する積算手段と、
を具備することを特徴とする情報処理装置。
【請求項２】
前記制御部は、
前記メモリへのアクセス終了後、このアクセスの基になった命令に対し、前記加算値算出手段が算出した期待値を減算値として算出する減算値算出手段を具備し、
前記積算手段は、前記加算値算出手段と前記減算値算出手段が算出した値とを積算すること、
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記メモリは、情報を格納しつづけるために、所定間隔かそれより短い間隔で格納内容をリフレッシュするメモリであって、
前記制御部は、
前記積算手段で算出した値が０であるか否かを判別する積算値判別手段と、
前記積算値判別手段で前記積算手段で算出した値が０であると判別した場合に、前記メモリの格納内容をリフレッシュさせるリフレッシュ指示信号を前記メモリへ出力し、前記積算手段で算出した値が０でないと判別した場合に、前記メモリの格納内容を前記所定間隔でリフレッシュ指示信号を前記メモリへ出力するリフレッシュ指示手段と、
を具備すること、
を特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記情報処理装置はクロック信号に同期して動作するものであって、
前記制御部は、前記積算値判別手段が前記積算手段が算出した値が０であると判別した場合に、前記クロック信号の周波数を基本周波数から上昇させるクロック制御信号を出力し、前記積算手段で算出した値が０でないと判別した場合に、前記クロック信号の周波数を基本周波数に戻すクロック制御信号を出力するクロック制御手段を具備すること、
を特徴とする請求項１、２または３に記載の情報処理装置。
【請求項５】
前記メモリは、メモリクロック信号に同期して動作するものであって、
前記制御部は、前記積算値判別手段が前記積算手段が算出した値が０であると判別した場合に、前記クロック信号の周波数を基本周波数から低下させるメモリクロック制御信号を出力し、前記積算手段で算出した値が０でないと判別した場合に、前記クロック信号の周波数を基本周波数に戻すメモリクロック制御信号を出力するメモリクロック制御手段を具備すること、
を特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記制御部は、前記積算値算出手段が算出した積算値に従って、同時に前記制御部と前記メモリとの間で送受信できるメモリアクセス要求の最大数を変更するリクエスト制御手段を具備することを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記情報処理装置はキャッシュメモリを具備し、
前記制御部は前記キャッシュメモリのキャッシュミス率を算出するミス率算出手段を具備し、
前記命令種別判別手段は、さらに、前記命令デコーダが取り出したオペランドがスカラ型命令であるか否かを判別する手段であって、
前記加算値算出手段は、前記命令種別判別手段がオペランドがスカラ型命令のオペランドであると判別した場合、前記ミス率算出手段で算出されたキャッシュミス率に従って、前記期待値を算出する手段であること、
を特徴とする請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記制御部は、前記積算値判別手段が前記積算手段が算出した値が０であると判別した場合に、前記制御部と前記メモリとの間を接続するメモリバスの遅延ロックループの再調整を指示するＤＬＬ制御信号を出力し、前記積算手段で算出した値が０でないと判別した場合に、前記メモリバスの遅延ロックループの再調整を所定の間隔で前記ＤＬＬ信号を出力するＤＬＬ制御手段を具備することを特徴とする請求項１乃至７の何れか１項に記載の演算処理装置。
【請求項９】
メモリバスを介してメモリとデータをやりとりする演算処理装置であって、
命令からオペコードとオペランドとを取り出す命令デコーダと、
前記命令デコーダが取り出したオペランドが前記メモリバスを介して前記メモリにアクセスする命令のオペランドであるか否かを判別する命令種別判別手段と、
前記命令種別判別手段でオペランドが前記メモリにアクセスする命令のオペランドであると判別された場合に、この命令で前記メモリにアクセスする際に発行されるリクエスト数の期待値を算出する加算値算出手段と、
前記加算値算出手段が算出した値を積算する積算手段と、
を具備することを特徴とする演算処理装置。
【請求項１０】
メモリバスを介してメモリとデータをやりとりする演算処理装置が、
命令からオペコードとオペランドとを取り出すデコードステップと、
前記デコードステップで取り出したオペランドが前記メモリバスを介して前記メモリにアクセスする命令のオペランドであるか否かを判別する判別ステップと、
前記判別ステップでオペランドが前記メモリにアクセスする命令のオペランドであると判別された場合に、この命令で前記メモリにアクセスする際に発行されるリクエスト数の期待値を算出する加算値算出ステップと、
前記加算値算出ステップが算出した値を積算する積算ステップと、
前記積算ステップで積算された値に従って、演算処理装置のメモリアクセスを最適化する制御ステップと、
を備えることを特徴とするメモリアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、演算処理装置およびメモリアクセス制御方法に関し、特に、キャッシュメモリを具備するパイプライン処理方式の演算処理装置を備える情報処理装置、パイプライン処理方式の演算処理装置およびメモリアクセス制御方法に関する。
【背景技術】
【０００２】
通常、パイプライン処理方式では、大別して、命令のフェッチステージ、命令のデコードステージ、データの読み出しステージ、命令の実行ステージ、書き込みステージがあり、この順でステージが進行する。
【０００３】
それぞれ、命令のフェッチステージでは命令の読み出し、命令のデコードステージでは命令の解読、データの読み出しステージでは命令の演算に必要なデータの準備、命令の実行ステージでは実際の演算、書き込みステージでは演算結果の書き込みが実行される。
【０００４】
命令やデータがキャッシュメモリに存在しない場合、主記憶から命令やデータを読み出す必要がある。命令やデータを主記憶から読み出す状態が引き続くと、演算処理装置の処理能力の低下を引き起こす。
【０００５】
演算処理装置の処理能力を有効に活用する１つの手法として、特許文献１にコンピュータシステムにおけるコンテクスト間のメモリシステム相互作用特性の統計値を推定し、これを命令スケジューリングや命令やデータの配置の最適化に適用することが開示されている。
【特許文献１】特開平１１−３５３２３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１に開示されている手法では、推定したメモリシステム相互作用特性の統計値をプログラム単位で演算処理装置の処理能力を有効活用しているにすぎない。このため、様々なプログラムに対し汎用的に演算処理装置で効率的に演算を施すことができない。
【０００７】
また、演算処理装置の動作周波数向上のスピードに対して、メモリアクセス動作速度の向上のスピードが追いつけない状況が続いている。そのため、パイプラインの段数が増加し、パイプライン上流に位置するデコードステージからメモリリクエストが実際に出力されるステージまでの時間が長くなる傾向にある。ますます長くなりつつあるこの時間を有効活用する手段が必要となってきている。
【０００８】
本発明は上記問題点に鑑みてなされたもので、命令デコード時に得られる命令のオペランドを元に発行されるメモリリクエスト数を予測し、この算出値を利用することで従来と比較して効率的に動作する情報処理装置、演算処理装置およびメモリアクセス制御方法の提供を目的する。
【課題を解決するための手段】
【０００９】
本発明の第１の観点に係る演算処理装置は、
制御部と、
メモリとを具備する情報処理装置であって、
前記制御部は、
命令からオペコードとオペランドとを取り出す命令デコーダと、
前記命令デコーダが取り出したオペランドが前記メモリにアクセスする命令のオペランドであるか否かを判別する命令種別判別手段と、
前記命令種別判別手段でオペランドが前記メモリにアクセスする命令のオペランドであると判別された場合に、この命令で前記メモリにアクセスする際に発行されるリクエスト数の期待値を算出する加算値算出手段と、
前記加算値算出手段が算出した値を積算する積算手段と、
を具備する。
【００１０】
この発明によれば、演算処理装置とメモリとの間でメモリアクセスのためにやり取りされるメモリリクエスト数の期待値を算出し、算出した期待値を積算する。この積算値を用いて、演算処理装置とメモリとの間でデータがスムーズにやり取りできるよう情報処理装置を動作させることができる。
【００１１】
上記演算処理装置において、
前記制御部は、前記メモリへのアクセス終了後、このアクセスの基になった命令に対し、前記加算値算出手段が算出した期待値を減算値として算出する減算値算出手段を具備することが望ましい。
この場合、前記積算手段は、前記加算値算出手段と前記減算値算出手段が算出した値とを積算する。
【００１２】
上記演算処理装置において、
前記メモリは、情報を格納しつづけるために、所定間隔かそれより短い間隔で格納内容をリフレッシュするメモリである。
この場合、前記制御部は、
前記積算手段で算出した値が０であるか否かを判別する積算値判別手段と、
前記積算値判別手段で前記積算手段で算出した値が０であると判別した場合に、前記メモリの格納内容をリフレッシュさせるリフレッシュ指示信号を前記メモリへ出力し、前記積算手段で算出した値が０でないと判別した場合に、前記メモリの格納内容を前記所定間隔でリフレッシュ指示信号を前記メモリへ出力するリフレッシュ指示手段と、
を具備することが望ましい。
【００１３】
この場合、メモリリクエストが発生しないと予測される場合に、メモリの格納内容をリフレッシュする指示を、リフレッシュ指示手段が出力し、メモリの格納内容がリフレッシュされる。これにより、メモリの格納内容をリフレッシュすることにより生じるメモリアクセスの待ち時間を削減することができる。
【００１４】
上記前記情報処理装置はクロック信号に同期して動作するものであってもよい。
この場合、前記制御部は、前記積算値判別手段が前記積算手段が算出した値が０であると判別した場合に、前記クロック信号の周波数を基本周波数から上昇させるクロック制御信号を出力し、前記積算手段で算出した値が０でないと判別した場合に、前記クロック信号の周波数を基本周波数に戻すクロック制御信号を出力するクロック制御手段を具備することが望ましい。
【００１５】
上記情報処理装置において、
前記メモリは、メモリクロック信号に同期して動作するものであってもよい。
この場合、前記制御部は、前記積算値判別手段が前記積算手段が算出した値が０であると判別した場合に、前記クロック信号の周波数を基本周波数から低下させるメモリクロック制御信号を出力し、前記積算手段で算出した値が０でないと判別した場合に、前記クロック信号の周波数を基本周波数に戻すメモリクロック制御信号を出力するメモリクロック制御手段を具備することが望ましい。
【００１６】
上記情報処理装置において、
前記制御部は、前記積算値算出手段が算出した積算値に従って、同時に前記制御部と前記メモリとの間で送受信できるメモリアクセス要求の最大数を変更するリクエスト制御手段を具備してもよい。
【００１７】
この発明によれば、例えば、メモリアクセス要求が多いときには、制御部とメモリとの間で送受信されるメモリアクセス要求の最大発行数を下げて、メモリアクセス要求の発行を押さえ、メモリアクセス要求が少ないときには、制御部とメモリとの間で送受信されるメモリアクセス要求の最大発行数を上げて、メモリアクセス要求の発行を制限しないようにすることができる。
【００１８】
上記情報処理装置において、
前記情報処理装置はキャッシュメモリを具備することが望ましい。
この場合、前記制御部は前記キャッシュメモリのキャッシュミス率を算出するミス率算出手段を具備し、
前記命令種別判別手段は、さらに、前記命令デコーダが取り出したオペランドがスカラ型命令であるか否かを判別する手段であって、
前記加算値算出手段は、前記命令種別判別手段がオペランドがスカラ型命令のオペランドであると判別した場合、前記ミス率算出手段で算出されたキャッシュミス率に従って、前記期待値を算出する。
【００１９】
上記情報処理装置において、
前記制御部は、前記積算値判別手段が前記積算手段が算出した値が０であると判別した場合に、前記制御部と前記メモリとの間を接続するメモリバスの遅延ロックループの再調整を指示するＤＬＬ制御信号を出力し、前記積算手段で算出した値が０でないと判別した場合に、前記メモリバスの遅延ロックループの再調整を所定の間隔で前記ＤＬＬ信号を出力するＤＬＬ制御手段を具備してもよい。
【００２０】
本発明の第２の観点に係る演算処理装置によれば、
メモリバスを介してメモリとデータをやりとりする演算処理装置であって、
命令からオペコードとオペランドとを取り出す命令デコーダと、
前記命令デコーダが取り出したオペランドが前記メモリバスを介して前記メモリにアクセスする命令のオペランドであるか否かを判別する命令種別判別手段と、
前記命令種別判別手段でオペランドが前記メモリにアクセスする命令のオペランドであると判別された場合に、この命令で前記メモリにアクセスする際に発行されるリクエスト数の期待値を算出する加算値算出手段と、
前記加算値算出手段が算出した値を積算する積算手段と、
を具備する。
【００２１】
本発明の第３の観点に係るメモリアクセス制御方法は、
メモリバスを介してメモリとデータをやりとりする演算処理装置が、
命令からオペコードとオペランドとを取り出すデコードステップと、
前記デコードステップで取り出したオペランドが前記メモリバスを介して前記メモリにアクセスする命令のオペランドであるか否かを判別する判別ステップと、
前記判別ステップでオペランドが前記メモリにアクセスする命令のオペランドであると判別された場合に、この命令で前記メモリにアクセスする際に発行されるリクエスト数の期待値を算出する加算値算出ステップと、
前記加算値算出ステップが算出した値を積算する積算ステップと、
前記積算ステップで積算された値に従って、演算処理装置のメモリアクセスを最適化する制御ステップと、
を備える。
【発明の効果】
【００２２】
本発明によれば、デコードステージでデコードした結果に従って、メモリとの間でデータの読み書きする際に演算処理装置が発行するメモリアクセス要求の数を予測し、予測値に従い後続のステージの動作を効率的に制御できる。
【発明を実施するための最良の形態】
【００２３】
本発明に係る実施形態を、以下図面を参照して説明する。
本実施形態では、演算処理装置とメモリとの間でデータをやりとりする必要が発生する命令は、ロード命令とストア命令とする。また、ロード命令とストア命令とは、単一のレジスタのみ関係するスカラ命令と、複数のレジスタに関係するベクトル命令とに分類することができる。ロード命令とストア命令とを含む各命令は１つのオペコードと０個以上（３個以下）のオペランドとから構成される。なお、オペコードによっては、暗黙のうちにいくつかのオペランドが指定される。さらに、メモリアクセスは命令の実行順に行われる。
また、以下の説明で単にアドレスとした場合は主記憶アドレスを意味する。
【００２４】
図１は、本発明の実施形態に係る演算処理装置およびその周辺装置の構成を示すブロック図である。演算処理装置およびその周辺装置はメインフレームやパーソナルコンピュータなど、情報処理装置の１構成要素となっている。
なお、矢印の先が直線になっている線（以下、データ線と称する）は演算データ（命令や通常の意味でのデータ）が通る信号線で、矢印の先が三角形になっている線（以下、制御信号線と称する）は演算処理装置１内の各種制御信号が通る信号線である。また、本発明と直接関係のない、グラフィック、外部入出力関係の要素は省略した。
【００２５】
本実施形態の演算処理装置１は、シリコン上に実装された論理回路と順序回路から構成される。演算処理装置１は、主記憶部２１に格納されている命令列や、主記憶部２１に格納されているデータあるいは図示しない入力装置データから入力されたデータを、クロック信号に同期しつつ解釈実行して所定の処理を実行し、処理結果を主記憶部２１に書き込んだり、図示しない出力装置に出力する。主記憶部２１の格納内容の一部は、一時的にキャッシュメモリ２３に格納される。演算処理装置１は、実際には主記憶部２１から直接命令列やデータを読み書きするのではなく、キャッシュメモリ２３に蓄えられている命令列やデータを読み書きする。
【００２６】
図１に示すように、演算処理装置１は、命令フェッチ部１１と、命令デコーダ１３と、読み出しステージ１５と、演算器１７と、書き込みステージ１９と、レジスタ群２９と、キャッシュミス率算出部４１と、スカラリクエスト数計算部４２と、リプライ受信部４３と、設定値格納部４４と、登録時計算制御部４６と、終了時計算制御部４７と、演算器４８と、リクエストカウンタ４９と、動作制御部５０と、テーブル管理部１２１と、メモリリクエスト管理テーブル１２７とを備える。これらの各要素は論理回路と順序回路とを組み合わせて構成されている。その他、周辺装置として動作クロック信号発生部６０と、メモリクロック信号発生部６１とがある。
【００２７】
命令フェッチ部１１は、プログラムカウンタ（図示なし）で指定されるアドレスに格納されている命令をキャッシュメモリ２３より読み出し、命令デコーダ１３に受け渡す。
【００２８】
命令デコーダ１３は、命令のオペコードからどの演算が要求されているのか、オペランドからどのレジスタあるいはどのアドレスに格納されているデータを利用し、また、演算器１７の演算結果をどのレジスタあるいはどのアドレスに格納するのか、などを判別する。また、オペランドから、主記憶部２１へのアクセス（読み書き）が発生する「可能性」があるか否かを判別し、主記憶部２１へのアクセスが発生する可能性があると判別すれば、デコードの結果として得られたオペコードをメモリリクエスト管理テーブル１２７にリクエスト管理情報として記録する。なお、結果として、キャッシュメモリ２３へのアクセスで済んだとしても、判別条件は成立する。命令デコーダ１３は、デコード結果として得られるオペコードをオペコード情報としてスカラリクエスト数計算部４２と、登録時計算制御部４６と、テーブル管理部１２１とに送信する。
【００２９】
読み出しステージ１５は、オペランドで指定されたレジスタまたはアドレスから後続の実行ステージで必要なデータをキャッシュメモリ２３、主記憶部２１とレジスタ群２９とから読み出して用意する。データをキャッシュメモリ２３と主記憶部２１とから読み出す場合、メモリ管理ユニット２５を介してデータの読み出しを要求する。
【００３０】
演算器１７は、加算、減算、条件判断、などオペコードで指定される演算を実行する実行ステージを担当する。そして、演算結果を書き込みステージ１９に送信する。
【００３１】
書き込みステージ１９は、オペランドで指定されるレジスタ群２９のうちの１つのレジスタあるいは主記憶部２１内の指定されたアドレスに演算結果を書き込む。
【００３２】
レジスタ群２９は、演算器１７の演算結果を一時的に保持するレジスタを複数備える。
【００３３】
キャッシュミス率算出部４１は、メモリ管理ユニット２５から、キャッシュヒット、キャッシュミスの情報を受け取り、所定のキャッシュ判定回数（例えば、１０００回）でのキャッシュミス率を算出しスカラリクエスト数計算部４２に送信する。キャッシュミス率算出部４１はキャッシュミス率を繰り返し算出する。
【００３４】
スカラリクエスト数計算部４２は、命令デコーダ１３から送信されてきたオペコード情報がロード命令（スカラ命令）を示すデータであるか否かを判別する。ロード命令（スカラ命令）を示すデータであると判別した場合、スカラリクエスト数計算部４２はキャッシュミス率算出部４１から送信されたキャッシュミス率にキャッシュ読み込み時に発行されるメモリリクエスト数をかけて得られた値をテーブル管理部１２１に送信する。ロード命令（スカラ命令）を示すデータでないと判別した場合、スカラリクエスト数計算部４２は値０をテーブル管理部１２１に送信する。
【００３５】
リプライ受信部４３はメモリ管理ユニット２５が主記憶部２１に格納されているデータをキャッシュメモリ２３に読み出した際に出力する完了信号を受信し、テーブル管理部１２１に送信する。
【００３６】
設定値格納部４４は、ベクトル型ストア／ロード命令実行時に発行される可能性のあるメモリリクエスト数をオペコードごとに格納している。
【００３７】
テーブル管理部１２１は、メモリリクエスト管理テーブル１２７のエントリへの登録および削除を制御する。テーブル管理部１２１は、命令デコーダ１３からオペコード情報を受信すると、そのオペコード情報で示される命令がスカラ型ロード／ストア命令の場合、スカラリクエスト数計算部４２から、発行されるメモリリクエスト数の期待値を受信し、オペコード情報と関連づけメモリリクエスト管理テーブル１２７に登録する。また、オペコード情報で示される命令がベクトル型ロード／ストア命令の場合、設定値格納部４４からその命令で発行されるメモリリクエスト数を検索し、オペコード情報と関連づけメモリリクエスト管理テーブル１２７に登録する。さらに、リプライ受信部４３から完了信号を受信した時、テーブル管理部１２１は完了信号に対応するエントリに対し、主記憶部２１あるいはキャッシュメモリ２３からデータが読み出された旨を記録する。
【００３８】
メモリリクエスト管理テーブル１２７は、演算処理装置１が主記憶部２１あるいはキャッシュメモリ２３とデータを読み書きする際にメモリリクエストを発行する可能性のある命令やその命令で発行されるメモリリクエスト数などを関連づけて、リクエスト管理情報として順次記録する。メモリリクエスト管理テーブル１２７はサイクリックに使用される。すなわち、最後のエントリにリクエスト管理情報を登録すると、次の登録は最初のエントリに移る。メモリリクエスト管理テーブル１２７の各エントリは、登録されていたリクエスト管理情報に対応するデータの読み書き終了後に、何も登録されていない状態に戻され再利用される。メモリリクエスト管理テーブル１２７のエントリ数（図２では８個）は、使用中のエントリの格納内容を破壊することなくエントリを再利用できるよう余裕を持って設定される。
【００３９】
図２に示すように、メモリリクエスト管理テーブル１２７の各エントリは、「エントリ番号」と、「命令種別情報」と、「使用中情報」と、「リクエスト数」と、「リプライ情報」とを含む。
「エントリ番号」は、メモリリクエスト管理テーブル１２７の各エントリの識別情報である。
「命令種別情報」は、メモリリクエストを発行する可能性のあるオペコードを記録する。なお、図２では、理解しやすくするため、命令を自然言語で記載しているが、実際には、２進数で記録される。また、「空」と記載してある（エントリ番号７）のは、エントリが未使用であることを示しており、例えば、未定義のオペコードあるいは、いわゆるＮＯＰ命令のオペコードを格納する。
「使用中情報」は、エントリが使用中であるか否かを示すデータであり、「１」であれば使用中、「０」であれば未使用であることを示す。エントリに「命令種別情報」が登録された際に「０」から「１」に更新される。
「リクエスト数」は、命令種別情報に対応する命令が発行するメモリリクエスト数の期待値である。
「リプライ情報」は、命令種別情報に対応する命令の処理に必要なデータが主記憶部２１あるいはキャッシュメモリ２３から読み出されたか否かを示すデータであり、「１」でば読み出し済み、「０」であれば要求中であることを示す。
「使用中情報」と「リプライ情報」とが共に「１」になると、所定の時間経過後、テーブル管理部１２１の指示により、エントリ番号７の欄のように未使用状態に戻される。
【００４０】
図１に戻って、登録時計算制御部４６は、メモリリクエスト管理テーブル１２７にリクエスト管理情報が登録される際に加算する値を計算し、演算器４８に渡す。加算される値は、テーブル管理部１２１から送信されるエントリ番号の「リクエスト数」を参照するか、命令デコーダ１３から受信したオペコード情報に応じて定まる値である。
【００４１】
終了時計算制御部４７は、メモリリクエスト管理テーブル１２７に登録されている命令に関し、メモリアクセスが終了した際に減算される値を計算し、負の数に変換し演算器４８に渡す。減算される値は、メモリリクエスト管理テーブル１２７の「リプライ情報」が「０」から「１」に変更されたエントリの「リクエスト数」に登録された値である。
【００４２】
演算器４８は加算器で構成され、登録時計算制御部４６と、終了時計算制御部４７（負の数とみなす）とから送信される値と、リクエストカウンタ４９に格納されている値とを加算し、リクエストカウンタ４９に格納する。
【００４３】
リクエストカウンタ４９は、演算器４８の加算結果を格納するレジスタである。リクエストカウンタ４９に格納されている値は、動作制御部５０が読み出す。
【００４４】
動作制御部５０は、リクエストカウンタ４９のカウント値に従って演算処理装置１あるいは主記憶部２１の動作を制御する各種制御信号を生成する。動作制御部５０は機能的にリフレッシュタイミング制御部５１と、遅延ロックループ（Delay Lock Loop、ＤＬＬ）制御部５２と、クロック制御部５３と、プリフェッチプリロード制御部５４とから構成される。
【００４５】
リフレッシュタイミング制御部５１は、少なくとも所定の間隔（これは、主記憶部２１内の記憶セルの時定数に依存する）で主記憶部２１の格納内容をリフレッシュする意味を持つリフレッシュ信号を生成、出力する。ただし、リクエストカウンタ４９から読み出した値が０である場合に、直ちにリフレッシュ信号を生成する。
主記憶部２１の格納内容をリフレッシュしている間、主記憶部２１はメモリアクセスに対応できない。したがって、メモリアクセスがない隙を見計らって主記憶部２１の格納内容をリフレッシュすることで、リフレッシュ中のメモリアクセスの回数が減少し、演算処理装置１の処理性能が向上する。
【００４６】
ＤＬＬ制御部５２は、少なくとも所定の間隔（これは、演算処理装置１の動作環境の変化により各種信号にばらつきが発生したとしても、各部の動作が１クロックで完了する状態が保たれる最長の時間よりは短い実験的・経験的に求められた時間である）でＤＬＬの再調整を指示する意味を持つ調整信号を生成、出力する。ただし、リクエストカウンタ４９から読み出した値が０である場合に、直ちに調整信号を生成する。ここで、ＤＬＬの再調整とは、遅延素子での遅延時間を調整することで演算処理装置１内の各種信号をクロック信号に同期させることをいう。また、ＤＬＬの再調整の対象となるのは演算処理装置１とメモリ管理ユニット２５との間のデータバスＡ、Ｂである。
メモリアクセスがない隙を見計らってＤＬＬを再調整することで、ＤＬＬ再調整中のメモリアクセスタイムの増加を低減させる。これにより、演算処理装置１の処理性能の向上を図っている。
【００４７】
クロック制御部５３は、リクエストカウンタ４９のカウント値に従った電圧レベルで、動作クロック信号発生部６０が発生するクロック信号の周波数を制御するクロック制御信号を出力する。例えば、リクエストカウンタ４９のカウンタ値が０の場合、クロック信号の周波数を基準周波数から上げるよう、リクエストカウンタ４９のカウンタ値が０以上（以外）の場合、クロックの周波数を基準周波数に戻すよう、電圧レベルを調整してクロック制御信号を出力する。
これにより、演算処理装置１の消費電力の低減ができる。
また、クロック制御部５３が出力するクロック制御信号は、リクエストカウンタ４９のカウント値に従った電圧レベルで、メモリクロック信号発生部６１が発生するメモリクロック信号の周波数を制御する。例えば、クロック制御部５３は、上述したように電圧レベルを調整したクロック制御信号を出力することで、リクエストカウンタ４９のカウンタ値が０の場合、メモリクロック信号の周波数を基本周波数から下げ、リクエストカウンタ４９のカウント値が０以上の場合、メモリクロック信号の周波数を基本周波数に戻す、あるいは基本周波数から上げる。これにより、メモリアクセスのターンアラウンド時間の削減ができる。
【００４８】
プリフェッチプリロード制御部５４は、命令列やデータ列のプリフェッチやプリロード時のリクエスト発行数を制御する。例えば、０≦カウンタ値＜１００の場合はリクエスト発行数３、１００≦カウンタ値＜１０００の場合はリクエスト発行数２、１０００≦カウンタの値場合はリクエスト発行数１という制御を行う。
【００４９】
動作クロック信号発生部６０は、クロック制御部５３から受信するクロック制御信号の電圧に応じた周波数でクロック信号を生成し、演算処理装置１各部に供給する。このため、動作クロック信号発生部６０が発生するクロック信号の周波数は、リクエストカウンタ４９のカウンタ値に応じて増減する。ただし、基準となる周波数の上下で動作エラーが発生しない動作範囲で設定された所定の範囲内でしか周波数は変化しない。
【００５０】
メモリクロック信号発生部６１は、クロック制御部５３から受信するクロック制御信号の電圧に応じた周波数でメモリクロック信号を生成し、主記憶部２１と、キャッシュメモリ２３と、メモリ管理ユニット２５とに供給する。このため、メモリクロック信号発生部６１が発生するバスクロック信号の周波数は、リクエストカウンタ４９のカウンタ値に応じて増減する。ただし、基準となる周波数の上下で動作エラーが発生しない動作範囲で設定された所定の範囲内でしか周波数は変化しない。
【００５１】
主記憶部２１は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）から構成され、演算処理装置１で実行されるプログラム（命令列）やプログラムの実行に必要なデータ列を格納する。主記憶部２１はリフレッシュタイミング制御部５１から出力されるリフレッシュ信号に応答して、そのたびに格納内容をリフレッシュしている。
【００５２】
キャッシュメモリ２３は、例えば、ＳＲＡＭ（Static Random Access Memory）から構成され、主記憶部２１に格納されている命令列などのキャッシュデータを格納する。キャッシュメモリ２３へのデータの読み込みはキャッシュライン単位で行われる。例えば、キャッシュラインの大きさ（長さ）が６４バイトの場合、読み込み時に発行されるメモリリクエスト数は８バイトである。ストア命令の場合は、スカラ型ストア命令あるいはベクトル型ストア命令に従って発行されるメモリリクエスト数が変化する。スカラ型ストア命令であれば１、ベクトル型ストア命令であればストアするデータサイズに応じて変化する。
【００５３】
メモリ管理ユニット（Memory Management Unit、ＭＭＵ）２５は、演算処理装置１とキャッシュメモリ２３と主記憶部２１との間にあって、キャッシュメモリ２３に格納されているデータが主記憶部２１のどの部分のコピーであるのか、また、キャッシュメモリ２３の格納内容を上書きする領域の判別などを行う。
【００５４】
ＭＭＵ２５は、データを読み出す場合、命令フェッチ部１１と、読み出しステージ１５と、書き込みステージ１９とにより指定されるアドレスに格納されているデータがキャッシュメモリ２３に格納されているか否かを判別し、格納されていると判別すれば、キャッシュメモリ２３からデータを読み出し、格納されていないと判別すれば、主記憶部２１から読み出して、コピーをキャッシュメモリ２３に格納する。データを主記憶部２１に書き込む場合、主記憶部２１に格納する。また、指定されたアドレスのデータがキャッシュメモリ２３に格納されている場合、キャッシュメモリ２３にも格納する。ＭＭＵ２５はデータの読み書きが終了すると、その旨を示す完了信号をリプライ受信部４３へ送信する。
【００５５】
以下、図面を参照して本実施形態に係る情報処理装置１および周辺装置の動作のうち、オペコード情報に従ってメモリリクエスト数を推定する部分を説明する。
【００５６】
まず、図３を参照して、メモリリクエスト管理テーブル１２７にリクエスト管理情報を登録する登録処理の際のスカラリクエスト数計算部４２と、テーブル管理部１２１と、メモリリクエスト管理テーブル１２７と、登録時計算制御部４６と、演算器４８との動作を説明する。
【００５７】
まず、命令デコーダ１３が命令をデコードしたことを契機として登録処理が開始される。命令デコード１３は命令をデコードして得たオペコードをオペコード情報として、スカラリクエスト数計算部４２と、テーブル管理部１２１と、登録時計算制御部４６とに送信する（ステップＳ１０１）。
【００５８】
テーブル管理部１２１は、受信したオペコード情報に含まれるオペコードに対応する命令が主記憶部２１にアクセスする可能性のある命令（ロード命令あるいはストア命令）であるか否かを判別する（ステップＳ１０２）。命令が主記憶部２１にアクセスする可能性のある命令であると判別した場合（ステップＳ１０２：ＹＥＳ）、テーブル管理部１２１は、そのオペコード情報に基づいてリクエスト管理情報を作成し、メモリリクエスト管理テーブル１２７に登録し（ステップＳ１０３）、登録したエントリのエントリ番号を登録時計算制御部４６に送信する。ここで、オペコードが、スカラ型命令に対応する場合、「リクエスト数」としてスカラリクエスト数計算部４２が算出した値を選択し、ベクトル型命令に対応する場合、設定値格納部４４から読み出した値を選択する。そして、リクエスト情報を登録したエントリの「使用中情報」を使用中を意味する「１」に変更する。命令が主記憶部２１にアクセスする可能性のある命令でないと判別した場合（ステップＳ１０２：ＮＯ）、テーブル管理部１２１は何もせず、ステップＳ１０４に処理を進める。
【００５９】
次に、登録時計算制御部４６は、テーブル管理部１２１から通知されたエントリ番号に対応するエントリに格納されているリクエスト数をメモリリクエスト管理テーブル１２７から読み出し、演算器４８に送信する。最後に、演算器４８はリクエストカウンタ４９の格納値と登録時計算制御部４６から送信された値を加算し（ステップＳ１０４）、リクエストカウンタ４９に格納し登録処理を終了する。
【００６０】
図４を参照して、メモリリクエスト管理テーブル１２７にリクエスト管理情報を削除する削除処理の際のリプライ受信部４３と、テーブル管理部１２１、とメモリリクエスト管理テーブル１２７と、終了時計算制御部４７と、演算器４８との動作を説明する。
【００６１】
まず、ＭＭＵ２５が要求されたデータの読み出しが完了した旨を示す完了信号がＭＭＵ２５からリプライ受信部４３へ送信されたことを契機として削除処理が開始される。テーブル管理部１２１はリプライ受信部４３から完了信号を受信する（ステップＳ２０１）。上述したように、本実施形態では、オペコード情報の受信順序と完了信号の受信順序は同一であるので、テーブル管理部１２１は、全エントリの「リプライ情報」を参照すれば、メモリリクエスト管理テーブル１２７のどのエントリの「リプライ情報」を「１」にするべきかを判別できる。テーブル管理部１２１は、「リプライ情報」を「１」にすべきエントリを判別すると、該当する「リプライ情報」を１に更新する（ステップＳ２０２）。そして、テーブル管理部１２１はデータの読み書きが終了したエントリのエントリ番号を終了時制御部４７に送信する。
【００６２】
次に、終了時計算制御部４７は、テーブル管理部１２１から通知されたエントリ番号に対応するエントリに格納されているリクエスト数をメモリリクエスト管理テーブル１２７から読み出し、演算器４８に送信する。最後に、演算器４８はリクエストカウンタ４９の格納値から登録時計算制御部４６から送信された値を減算し（ステップＳ２０３）、リクエストカウンタ４９に格納し削除処理を終了する。
【００６３】
なお、実際には、登録処理と削除処理は並行して実行されるため、演算器４８では、登録時計算制御部４６から送信される値と終了時計算制御部４７から送信される値（ただし、この値は負の数として扱う）とリクエストカウンタ４９に格納されている値とを加算し、リクエストカウンタ４９に格納する。
【００６４】
以上説明した登録処理および削除処理により、演算処理装置１とＭＭＵ２５と間をつなぐバスＡ、Ｂで行き来するメモリリクエスト数を計算することが可能となる。この計算されたメモリリクエスト数は、演算処理装置１とＭＭＵ２５と間をつなぐバスＡ、Ｂの負荷（混雑度）の予測値を表す。主記憶部２１にアクセスするにはＭＭＵ２５が仮想アドレスから物理アドレスを計算する必要があるため、命令デコード１３が命令をデコードしてから、実際にリクエストが発行されるまでには時間的な遅延がある。このため、本発明の実施例で示した構成をとることで実際のリクエストが発行される段階でカウントするよりも早い段階でリクエスト数を知ることが可能となる。
【００６５】
リクエストカウンタ４９の保持値に従って、動作制御部５０内の各制御部５１〜５４で以下のように動作する。
【００６６】
リフレッシュタイミング制御部５１は、リクエストカウンタ４９に格納された値を読み出し、この値が０であると判別すると、主記憶部２１の格納内容をリフレッシュする意味を持つリフレッシュ信号を生成し、主記憶部２１に出力する。リクエストカウンタ４９から読み出した値が所定の時間０で無くても、前回のリフレッシュ時から所定の時間経過すると、リフレッシュ信号を生成し、主記憶部２１に出力する。
【００６７】
ＤＬＬ制御部５２は、リクエストカウンタ４９に格納された値を読み出し、この値が０であると判別すると、ＤＬＬの再調整を指示する意味を持つ調整信号を生成し、バスＡ、Ｂに出力する。リクエストカウンタ４９から読み出した値が所定の時間０で無くても、前回のＤＬＬの再調整の指示を出してから所定の時間経過すると、調整信号を生成し、バスＡ、Ｂに出力する。
【００６８】
クロック制御部５３は、リクエストカウンタ４９に格納された値を読み出し、この値が０であると判別すると、クロック信号の周波数を上げるよう電圧レベルを調整してクロック制御信号を動作クロック信号発生部６０に出力する。読み出した値が０でない場合、クロック制御部５３は動作クロック信号の周波数を基本周波数に戻すよう電圧レベルを調整してクロック制御信号を動作クロック信号発生部６０に出力する。また、同じクロック制御信号により、メモリクロック信号発生部６１が出力するメモリクロック信号は、読み出した値が０である場合、メモリクロック信号の周波数を基本周波数から下げ、読み出した値が０でない場合、メモリクロック信号の周波数を基本周波数に戻す、もしくは基本周波数から上げる。
【００６９】
プリフェッチプリロード制御部５４は、リクエストカウンタ４９に格納された値を読み出し、この値が０以上１００未満の場合はメモリリクエストの発行数を３、１００以上１０００未満の場合メモリリクエストの発行数を２、１０００以上の場合メモリリクエスト数の発行数を１にするよう、制御信号を命令デコーダ１３と、読み出しステージ１５と、書き込みステージ１９へ送信する。
【００７０】
以上、説明したように、本発明の実施形態に係る情報処理装置によれば、主記憶部２１へのメモリアクセスの変動に応じて、主記憶部２１をリフレッシュするタイミングの制御、ＤＬＬ再調整動作のタイミングの制御、動作周波数の一時的な上下、メモリリクエスト発行数の制御により、メモリアクセスの効率化を図り、もって演算処理装置１の動作周波数の向上を図ることができる。
【００７１】
なお、本発明は上記実施形態に限定されず、種々の変形および応用が可能である。
例えば、上記実施形態では、メモリアクセスが発生する命令は、ロード命令およびストア命令の２種類であったが、これらに限定されるものではない。さらに、ベクトル型命令、スカラ型命令のうち、一方だけで上記動作を行うようにしてもよい。また、上記実施形態では外部入出力命令について考慮しなかったが、上記実施形態で説明した手法を敷衍することで考慮することもできる。
【００７２】
また、キャッシュメモリ２３へのデータの書き込み方式がライトスルー方式である場合を例に説明したが、ライトバック方式でもよい。なお、キャッシュメモリ２３が演算処理装置１に内蔵されていてもよい。
【００７３】
また、上記実施形態では、主記憶部２１としてリフレッシュ動作の必要なＤＲＡＭを例に説明したが、ＳＲＡＭ（Static RAM）でもよい。この場合、リフレッシュ動作が不要となる。また、２次キャッシュなど多段にキャッシュメモリが存在する場合、演算処理装置１と主記憶部２１との間でメモリアクセスが発生する可能性があるときに、メモリリクエスト管理テーブル１２７のカウント数を増減させるようにしてもよい。
【００７４】
また、レジスタのリネーミング、実行ステージでの演算結果の横流し、等演算処理装置１の動作周波数を向上させる既知の手法と組み合わせて本発明を適用することができる。
【００７５】
また、設定値格納部４４はなくてもよい。この場合、テーブル管理部１２１がオペコード情報に含まれるオペコードの種別に応じた、発行される可能性のあるメモリリクエスト数を生成する。
【００７６】
また、上記実施形態で動作制御部５０内の各制御部５１〜５４における判別条件は一例であり、任意の閾値により判別可能である。
【００７７】
また、リクエストカウンタ４９が特権命令、非特権命令によりアクセス可能なレジスタであってもよい。この場合、プログラム側でリクエスト数予測の結果を利用できる。例えば演算処理装置１とＭＭＵ２５の間にあるバス上の負荷を考慮したプログラムによる命令スケジューリングに利用できる。
【００７８】
また、上記実施形態では、直近のキャッシュミス率に基づいて、ロード命令（スカラ）におけるリクエスト要求の発行数を予測していたが、これをあらかじめ実験的な試行に基づいて算出された１命令あたり平均のリクエスト要求発行数を格納したメモリから読み込むように構成することができる。この場合、このメモリへの格納値は工場設定により固定であってもよいし、ディップスイッチ入力あるいはジャンパプラグの設定により可変であってもよい。
【００７９】
また、上記実施形態からリプライ受信部４３と終了時計算制御部４７とを取り除き、演算器４８で減算しない構成にすることで、累積のリクエスト数を計算することもできる。
【００８０】
なお、本発明の実施形態に係る演算処理装置１は、専用のハードウェアによらず、通常のコンピュータシステムを用いて実現可能である。例えば、汎用コンピュータに、上述の処理を実行するためのプログラムを格納した媒体（ＣＤ−ＲＯＭなど）から当該プログラムを記憶部にインストールすることにより、上述の処理をエミュレート実行する情報処理装置を構築することができる。
【００８１】
また、上述の機能を、ＯＳ（Operating System）とアプリケーションとの分担、またはＯＳとアプリケーションとの協動により実現する場合などには、ＯＳ以外の部分のみを媒体に格納してもよい。
【００８２】
また、搬送波にプログラムを重畳し、通信ネットワークを介して配信することも可能である。例えば、通信ネットワーク上の掲示板（ＢＢＳ、Bulletin Board System）に該プログラムを掲示し、ネットワークを介して該プログラムを配信してもよい。そして、このプログラムを起動し、オペレーティングシステムの制御下で、他のアプリケーションプログラムと同様に実行することにより、上述の処理を実行できるように構成しても構わない。
【図面の簡単な説明】
【００８３】
【図１】本発明の実施形態に係る演算処理装置および周辺装置のブロック図である。
【図２】図１のメモリリクエスト管理テーブルの構成を示すブロック図である。
【図３】本発明の実施形態に係るメモリリクエスト管理テーブルへの登録処理を説明するためのフローチャートである。
【図４】本発明の実施形態に係るメモリリクエスト管理テーブルからの削除処理を説明するためのフローチャートである。
【符号の説明】
【００８４】
１      演算処理装置
１１    命令フェッチ部
１３    命令デコーダ
１５    読み出しステージ
１７    演算器
１９    書き込みステージ
２１    主記憶部
２３    キャッシュメモリ
２５    メモリ管理ユニット（ＭＭＵ）
２９    レジスタ群
４１    キャッシュミス率算出部
４２    スカラリクエスト数計算部
４３    リプライ受信部
４６    登録時計算制御部
４７    終了時計算制御部
４８    演算器
４９    リクエストカウンタ
５０    動作制御部
５１    リフレッシュタイミング制御部
５２    遅延ロックループ（ＤＬＬ）制御部
５３    クロック制御部
５４    プリフェッチプリロード制御部
６０    動作クロック信号発生部
６１    メモリクロック信号発生部
１２１  テーブル管理部
１２７  メモリリクエスト管理テーブル
【図１】
2006285683.tif 000003
【図２】
2006285683.tif 000004
【図３】
2006285683.tif 000005
【図４】
2006285683.tif 000006