(57)【要約】【課題】  ベクトル型コンピュータにおけるメモリアクセス処理の高速化を図る。【解決手段】  メモリアクセスリクエスト生成回路２０は、スカラユニット１１より受け取った命令からリクエストコードおよびリクエストアドレスを生成するとともに、読み出し指示（リストアドレスバッファ読み出し指示）の生成の制御を行い、リスト命令に先行する命令が存在する場合に、その先行する命令の処理に当該リスト命令に関する「リストアドレスバッファからリストアドレスを読み出す処理」をオーバラップさせるための制御を行う。リストアドレスバッファ制御回路３０は、リスト命令のリストアドレスを保持するリストアドレスバッファを有しており、そのリストアドレスバッファに対する書き込み・読み出しの制御を行う。【選択図】        図１
2005141345.tif 000002
【特許請求の範囲】
【請求項１】
リスト命令を含むベクトル命令が実行されるベクトル型コンピュータにおいて、
リスト命令のリストアドレスをリストアドレスバッファから読み出すための処理をそのリスト命令に先行する命令の処理にオーバラップさせることにより、当該先行する命令の実行と当該リスト命令の実行とを間断無く行うことを可能ならしめることを特徴とするベクトル型コンピュータ。
【請求項２】
スカラユニット，ベクトルユニット，およびメモリを備え、リスト命令を含むベクトル命令が実行されるベクトル型コンピュータにおいて、
スカラユニットより受け取った命令からリクエストコードおよびリクエストアドレスを生成するとともに、リストアドレスバッファ読み出し指示の生成の制御を行い、リスト命令に先行する命令が存在する場合に、その先行する命令の処理に当該リスト命令に関する「リストアドレスバッファからリストアドレスを読み出す処理」をオーバラップさせるための制御を行うメモリアクセスリクエスト生成回路と、
リスト命令のリストアドレスを保持するリストアドレスバッファを有しており、そのリストアドレスバッファに対する書き込み・読み出しの制御を行い、読み出し制御時にリストアドレスバッファから読み出されたリストアドレスを保持するリードデータレジスタを備えているリストアドレスバッファ制御回路と、
スカラユニットから発行された命令がリスト命令かどうかを判定し、その判定結果に基づき前記メモリアクセスリクエスト生成回路からのリクエストアドレスと前記リストアドレスバッファ制御回路からのリストアドレスとのいずれかをメモリへのリクエストアドレスとして選択するアドレス差し替え回路と
を有することを特徴とするベクトル型コンピュータ。
【請求項３】
連続する２つの命令を保持することが可能であり、そのうちの先行する命令のリクエストコードやリクエストアドレスの生成とともに、当該先行する命令の残要素数の算出を行うリクエスト生成部と、
前記リクエスト生成部によって算出された残要素数を受け取り、「２つの命令がメモリアクセスリクエスト生成回路に保持されており、後続の命令がリスト命令であり、先行する命令の残要素数が「リストアドレスバッファ読み出し指示がリストアドレスバッファ制御回路によって受け取られるマシンサイクルと、リードデータレジスタにリストアドレスが設定されるマシンサイクルとの差分に、処理レートにおける１マシンサイクルあたりの要素数を乗じた値」である指示発行基準値以下である」という条件に合致する場合に、リストアドレスバッファ読み出し指示を発行するリストアドレスバッファ読み出し制御部と
を備えるメモリアクセスリクエスト生成回路を有することを特徴とする請求項２記載のベクトル型コンピュータ。
【請求項４】
メモリアクセスリクエスト生成回路内のリクエスト生成部が、
連続した２つの命令を保持する後続命令用レジスタおよび先行命令用レジスタ（これらのレジスタにおける命令語の内部フィールドには、オペコードと、要素数と、ベースアドレスと、要素間距離とが定義されている）と、
先行命令用レジスタ中の命令の要素数を入力として残要素数を計算・判定する残要素数算出回路とを含んで構成されており、
メモリアクセスリクエスト生成回路内のリストアドレスバッファ読み出し制御部が、
先行する命令の残要素数が指示発行基準値以下であるかどうかを判定する残要素数判定回路と、
前記リクエスト生成部内の後続命令用レジスタのオペコードがリスト命令であるかどうかを判定する第１のリスト命令判定回路と、
「前記リクエスト生成部内の先行命令用レジスタに存在する命令の残要素数が指示発行基準値以下であり、かつ後続命令用レジスタに存在する命令がリスト命令であること」を“１”（オン）によって示す信号を生成するアンドゲートと、
前記リクエスト生成部内の先行命令用レジスタのオペコードがリスト命令であるかどうかを判定し、リスト命令であると判断した場合に“１”という信号を出力する第２のリスト命令判定回路と、
前記アンドゲートの出力信号と前記第２のリスト命令判定回路の出力信号との論理和を算出するオアゲートとを含んで構成されており、
メモリアクセスリクエスト生成回路が、「後続命令用レジスタに存在する命令がリスト命令であり、かつ先行命令用レジスタに存在する命令の残要素数が指示発行基準値以下である」という時と、「先行命令用レジスタに存在する命令がリスト命令である」という時とに、前記オアゲートの出力の“１”という信号によって示されるリストアドレスバッファ読み出し指示を発行することを特徴とする請求項３記載のベクトル型コンピュータ。
【請求項５】
処理レートが１要素／１マシンサイクルであることを特徴とする請求項３または請求項４記載のベクトル型コンピュータ。
【請求項６】
スカラユニット，ベクトルユニット，およびメモリと、
リスト命令のリストアドレスを保持するリストアドレスバッファを有しており、そのリストアドレスバッファに対する書き込み・読み出しの制御を行い、読み出し制御時にリストアドレスバッファから読み出されたリストアドレスを保持するリードデータレジスタを備えているリストアドレスバッファ制御回路と、
スカラユニットから発行された命令がリスト命令かどうかを判定し、その判定結果に基づきリスト命令以外の命令のリクエストアドレスと前記リストアドレスバッファ制御回路からのリストアドレスとのいずれかをメモリへのリクエストアドレスとして選択するアドレス差し替え回路と
を含むベクトル型コンピュータにおいて、
連続する２つの命令を保持することが可能であり、そのうちの先行する命令のリクエストコードやリクエストアドレスの生成とともに、当該先行する命令の残要素数の算出を行うリクエスト生成部と、
前記リクエスト生成部によって算出された残要素数を受け取り、「２つの命令がメモリアクセスリクエスト生成回路に保持されており、後続の命令がリスト命令であり、先行する命令の残要素数が「リストアドレスバッファ読み出し指示がリストアドレスバッファ制御回路によって受け取られるマシンサイクルと、リードデータレジスタにリストアドレスが設定されるマシンサイクルとの差分に、処理レートにおける１マシンサイクルあたりの要素数を乗じた値」である指示発行基準値以下である」という条件に合致する場合に、リストアドレスバッファ読み出し指示を発行するリストアドレスバッファ読み出し制御部と
を有することを特徴とするメモリアクセスリクエスト生成回路。
【請求項７】
リクエスト生成部が、
連続した２つの命令を保持する後続命令用レジスタおよび先行命令用レジスタと、
先行命令用レジスタ中の命令の要素数を入力として残要素数を計算・判定する残要素数算出回路とを含んで構成されており、
リストアドレスバッファ読み出し制御部が、
先行する命令の残要素数が指示発行基準値以下であるかどうかを判定する残要素数判定回路と、
前記リクエスト生成部内の後続命令用レジスタのオペコードがリスト命令であるかどうかを判定する第１のリスト命令判定回路と、
「前記リクエスト生成部内の先行命令用レジスタに存在する命令の残要素数が指示発行基準値以下であり、かつ後続命令用レジスタに存在する命令がリスト命令であること」を“１”によって示す信号を生成するアンドゲートと、
前記リクエスト生成部内の先行命令用レジスタのオペコードがリスト命令であるかどうかを判定し、リスト命令であると判断した場合に“１”という信号を出力する第２のリスト命令判定回路と、
前記アンドゲートの出力信号と、前記第２のリスト命令判定回路の出力信号との論理和を算出するオアゲートとを含んで構成されており、
「後続命令用レジスタに存在する命令がリスト命令であり、かつ先行命令用レジスタに存在する命令の残要素数が指示発行基準値以下である」という時と、「先行命令用レジスタに存在する命令がリスト命令である」という時とに、前記オアゲートの出力の“１”という信号によって示されるリストアドレスバッファ読み出し指示を発行することを特徴とする請求項６記載のメモリアクセスリクエスト生成回路。
【請求項８】
処理レートが１要素／１マシンサイクルであることを特徴とする請求項６または請求項７記載のメモリアクセスリクエスト生成回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、間接アドレッシングのリスト命令（メモリアドレスにベクトルレジスタのデータを使用し、ベクトルデータの１要素毎に任意のアドレスが指定できる命令。以下、単に「リスト命令」と呼ぶ）を含むベクトル命令の実行が行われるベクトル型コンピュータに関し、特にリスト命令がメモリアクセスを行う際に使用されるリストアドレス（間接アドレス）をリストアドレスバッファから読み出すための動作（リストアドレス読み出し動作）に着目したものであり、リストアドレスの先行読み出しを実行するベクトル型コンピュータに関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の処理能力の向上は、インテル（Ｉｎｔｅｌ）製ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に代表されるようにすさまじいものがあるが、ベクトル型コンピュータのＣＰＵについても同じことが言える。ベクトルデータは、そのデータ量から、ＣＰＵ内のキャッシュに納めることができないため、ベクトル型コンピュータのＣＰＵは常にメモリにアクセスする必要があり、このメモリアクセス性能に対する比重もＭＰＵに比べて高い。つまり、ベクトル型コンピュータにおいては、そのＣＰＵ性能だけでなく、その性能とＣＰＵに供給するデータの転送速度とのバランスが非常に重要になってくる。すなわち、ベクトル型コンピュータでは、ＣＰＵとメモリとの間のデータ転送を効率よく行うこと（メモリアクセス処理を高速に行うこと）が、重要になる。
【０００３】
従来におけるメモリアクセス処理の高速化技術としては、例えば、特許文献１記載の発明（ベクトルデータ処理装置）や、その改良発明に該当する特許文献２記載の発明（ベクトルデータ処理装置）が存在した。
【０００４】
これらの従来技術は、リスト命令によるアクセス（間接アドレスベクトルデータの各要素へのアクセス）に関して、リスト命令によって主記憶（メモリ）にアクセスする場合に、アクセスのためのアドレス計算処理とその計算結果のアドレスによる主記憶へのアクセス処理とを、このアクセスに必要なベクトルデータのストア手段へのアクセス動作に平行して実行することを可能として、メモリアクセス処理の高速化を図っている。
【０００５】
すなわち、当該技術は、リストアドレスの読み出し後に、リストアドレスを使用して主記憶からベクトルデータを取り出して演算を行う際の一連の処理過程の高速化に関するものである（この技術内容は、後述の本願発明のように、リスト命令の処理と先行する他の命令の処理とのオーバラップ動作により、メモリアクセス処理の高速化を実現しているものではない）。
【特許文献１】特開昭５７−０２５０６９号公報
【特許文献２】特開昭６０−２１５２８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ここで、ベクトル型コンピュータにおけるメモリアクセス処理の高速化を考える場合には、リストアドレス読み出し動作にも注目する必要がある。
【０００７】
通常の命令は、パイプラインに沿って、アドレス生成や、リクエスト送出が行われるため、命令間での無駄な空き時間が発生しない。しかし、リスト命令に関しては、前もってリストアドレスバッファ内に格納しておいたリストアドレスを使用してメモリアクセスを行うため、リストアドレスバッファからの読み出しの制御にかかる時間が、そのリスト命令に先行する命令とそのリスト命令との間に生まれてしまい、結果的にこれが無駄な空き時間となってしまう。
【０００８】
すなわち、従来の技術では、先行する命令の実行とリスト命令の実行との間にタイムラグが生じてしまうという問題点が生じていた。
【０００９】
本発明は、この無駄な空き時間を無くすようにし、リスト命令を先行する命令に間断なく連続して実行できるように、先行する命令のリクエスト送出が終わる前に（リスト命令のリクエストが先行する命令の最終リクエストの直後に送出できるタイミングで）、リストアドレスバッファからリストアドレスを読み出すことを可能にするために、先行する命令のリクエスト送出と、リスト命令のリストアドレスの読み出しとをオーバラップさせて動作させる点に特徴がある。
【００１０】
ちなみに、先に言及した従来技術文献（特許文献１および特許文献２）においては、このようなオーバラップ動作については考察されていなかった。
【００１１】
このように、本発明の目的は、リスト命令のリストアドレスをリストアドレスバッファから読み出す時間のロスを、当該リスト命令の処理とそれに先行する命令の処理とをオーバラップさせることにより、メモリアクセスを効率よく行うこと（ＣＰＵとメモリとの間のデータ転送を効率よく行うこと、つまりベクトル型コンピュータにおけるメモリアクセス処理を高速に行うこと）を可能にするために、リストアドレスの先行読み出しを実行するベクトル型コンピュータを提供することにある。
【課題を解決するための手段】
【００１２】
本発明のベクトル型コンピュータは、スカラユニット，ベクトルユニット，およびメモリを備え、リスト命令を含むベクトル命令が実行されるベクトル型コンピュータにおいて、スカラユニットより受け取った命令からリクエストコードおよびリクエストアドレスを生成するとともに、リストアドレスバッファ読み出し指示の生成の制御を行い、リスト命令に先行する命令が存在する場合に、その先行する命令の処理に当該リスト命令に関する「リストアドレスバッファからリストアドレスを読み出す処理」をオーバラップさせるための制御を行うメモリアクセスリクエスト生成回路と、リスト命令のリストアドレスを保持するリストアドレスバッファを有しており、そのリストアドレスバッファに対する書き込み・読み出しの制御を行い、読み出し制御時にリストアドレスバッファから読み出されたリストアドレスを保持するリードデータレジスタを備えているリストアドレスバッファ制御回路と、スカラユニットから発行された命令がリスト命令かどうかを判定し、その判定結果に基づき前記メモリアクセスリクエスト生成回路からのリクエストアドレスと前記リストアドレスバッファ制御回路からのリストアドレスとのいずれかをメモリへのリクエストアドレスとして選択するアドレス差し替え回路とを有する。
【００１３】
ここで、上記のメモリアクセスリクエスト生成回路は、連続する２つの命令を保持することが可能であり、そのうちの先行する命令のリクエストコードやリクエストアドレスの生成とともに、当該先行する命令の残要素数の算出を行うリクエスト生成部と、前記リクエスト生成部によって算出された残要素数を受け取り、「２つの命令がメモリアクセスリクエスト生成回路に保持されており、後続の命令がリスト命令であり、先行する命令の残要素数が「リストアドレスバッファ読み出し指示がリストアドレスバッファ制御回路によって受け取られるマシンサイクルと、リードデータレジスタにリストアドレスが設定されるマシンサイクルとの差分に、処理レートにおける１マシンサイクルあたりの要素数を乗じた値」である指示発行基準値以下である」という条件に合致する場合に、リストアドレスバッファ読み出し指示を発行するリストアドレスバッファ読み出し制御部とを備えるように構成することが考えられる。
【００１４】
また、より具体的には、上記のメモリアクセスリクエスト生成回路内のリクエスト生成部は、連続した２つの命令を保持する後続命令用レジスタおよび先行命令用レジスタ（これらのレジスタにおける命令語の内部フィールドには、オペコードと、要素数と、ベースアドレスと、要素間距離とが定義されている）と、先行命令用レジスタ中の命令の要素数を入力として残要素数を計算・判定する残要素数算出回路とを含むように構成することが可能であり、メモリアクセスリクエスト生成回路内のリストアドレスバッファ読み出し制御部は、先行する命令の残要素数が指示発行基準値以下であるかどうかを判定する残要素数判定回路と、前記リクエスト生成部内の後続命令用レジスタのオペコードがリスト命令であるかどうかを判定する第１のリスト命令判定回路と、「前記リクエスト生成部内の先行命令用レジスタに存在する命令の残要素数が指示発行基準値以下であり、かつ後続命令用レジスタに存在する命令がリスト命令であること」を“１”（オン）によって示す信号を生成するアンドゲートと、前記リクエスト生成部内の先行命令用レジスタのオペコードがリスト命令であるかどうかを判定し、リスト命令であると判断した場合に“１”という信号を出力する第２のリスト命令判定回路と、前記アンドゲートの出力信号と前記第２のリスト命令判定回路の出力信号との論理和を算出するオアゲートとを含むように構成することが可能である。この場合に、メモリアクセスリクエスト生成回路は、「後続命令用レジスタに存在する命令がリスト命令であり、かつ先行命令用レジスタに存在する命令の残要素数が指示発行基準値以下である」という時と、「先行命令用レジスタに存在する命令がリスト命令である」という時とに、前記オアゲートの出力の“１”という信号によって示されるリストアドレスバッファ読み出し指示を発行することとなる。
【００１５】
なお、本発明のベクトル型コンピュータは、より一般的には、リスト命令を含むベクトル命令が実行されるベクトル型コンピュータにおいて、リスト命令のリストアドレスをリストアドレスバッファから読み出すための処理をそのリスト命令に先行する命令の処理にオーバラップさせることにより、当該先行する命令の実行と当該リスト命令の実行とを間断無く行うことを可能ならしめることを特徴とすると表現することができる。
【００１６】
また、本発明は、スカラユニット，ベクトルユニット，およびメモリと、リスト命令のリストアドレスを保持するリストアドレスバッファを有しており、そのリストアドレスバッファに対する書き込み・読み出しの制御を行い、読み出し制御時にリストアドレスバッファから読み出されたリストアドレスを保持するリードデータレジスタを備えているリストアドレスバッファ制御回路と、スカラユニットから発行された命令がリスト命令かどうかを判定し、その判定結果に基づきリスト命令以外の命令のリクエストアドレスと前記リストアドレスバッファ制御回路からのリストアドレスとのいずれかをメモリへのリクエストアドレスとして選択するアドレス差し替え回路とを含むベクトル型コンピュータにおいて、以下のａおよびｂの部を有することを特徴とするメモリアクセスリクエスト生成回路の態様で実現することも可能である。
ａ．連続する２つの命令を保持することが可能であり、そのうちの先行する命令のリクエストコードやリクエストアドレスの生成とともに、当該先行する命令の残要素数の算出を行うリクエスト生成部
ｂ．前記リクエスト生成部によって算出された残要素数を受け取り、「２つの命令がメモリアクセスリクエスト生成回路に保持されており、後続の命令がリスト命令であり、先行する命令の残要素数が「リストアドレスバッファ読み出し指示がリストアドレスバッファ制御回路によって受け取られるマシンサイクルと、リードデータレジスタにリストアドレスが設定されるマシンサイクルとの差分に、処理レートにおける１マシンサイクルあたりの要素数を乗じた値」である指示発行基準値以下である」という条件に合致する場合に、リストアドレスバッファ読み出し指示を発行するリストアドレスバッファ読み出し制御部
【発明の効果】
【００１７】
本発明によると、少量のハードウェア量を追加するだけで、リスト命令のリストアドレスの読み出しに要する処理時間を、先行する命令の処理にオーバーラップさせることが可能になり、リスト命令の実行を先行する命令の実行と間断無く実行することができ、ベクトル型コンピュータにおけるメモリアクセス処理の高速化を実現することができるという効果が生じる。
【００１８】
なお、従来技術では、先行する命令が終了してからリストアドレス読み出し動作が行われていたため、先行する命令の実行とリスト命令の実行との間にタイムラグが生じてしまっていた。
【発明を実施するための最良の形態】
【００１９】
次に、本発明について図面を参照して詳細に説明する。
【００２０】
図１は、本発明のベクトル型コンピュータ（リストアドレスの先行読み出しを実行するベクトル型コンピュータ）の最良の形態の構成を示すブロック図である。
【００２１】
図１を参照すると、このベクトル型コンピュータは、命令を発行するスカラユニット１１と、スカラユニット１１から命令を受け取りベクトル命令（リスト命令もベクトル命令の一種である）の処理（この処理の中の１つとしてリスト命令のリストアドレスに関する処理も含まれる）を行うベクトルユニット１２と、スカラユニット１１から命令を受け取りメモリアクセスに必要なリクエストコードおよびリクエストアドレスを生成するメモリアクセスリクエスト生成回路２０と、リスト命令のリストアドレスを一時的に保持するリストアドレスバッファ（図３におけるリストアドレスバッファ３７）を有しておりそのリストアドレスバッファの制御（リストアドレスバッファに対する書き込み・読み出しの制御）を行うリストアドレスバッファ制御回路３０と、スカラユニット１１から発行された命令がリスト命令かどうかを判定しその判定結果に基づきメモリアクセスリクエスト生成回路２０からのリクエストアドレスとリストアドレスバッファ制御回路３０からのリストアドレスとのいずれかをメモリ５０へのリクエストアドレスとして選択するアドレス差し替え回路４０と、メモリ５０とを含んで構成されている。
【００２２】
図２は、メモリアクセスリクエスト生成回路２０の詳細な回路構成を示すブロック図である。メモリアクセスリクエスト生成回路２０は、スカラユニット１１より受け取った命令からリクエストコードとリクエストアドレスとを生成するリクエスト生成部２２と、リクエスト生成部２２からリクエスト処理情報（リストアドレスバッファからの読み出しを実現するために必要な情報）を受け取りリストアドレスバッファの読み出しタイミングの制御（リストアドレスバッファ読み出し指示の生成）を行うリストアドレスバッファ読み出し制御部２１と、リストアドレスバッファ読み出し指示（図１中には、単に「読み出し指示」と示している）を保持する読み出し指示レジスタ２３と、アドレス差し替え回路４０およびメモリ５０に送出されるリクエストコードを保持するリクエストコードレジスタ２４と、スカラユニット１１からの命令がリスト命令以外である場合にリクエストアドレスを保持するリクエストアドレスレジスタ２５とを含んで構成されている。
【００２３】
図３は、リストアドレスバッファ制御回路３０の詳細な回路構成を示すブロック図である。リストアドレスバッファ制御回路３０は、リードイネーブルレジスタ（ＲＥ）３１と、リードアドレスレジスタ（ＲＡ）３２と、ライトイネーブルレジスタ（ＷＥ）３３と、ライトアドレスレジスタ（ＷＡ）３４と、リードアドレスをカウントアップするための＋１カウンタ（リードアドレス用＋１カウンタ）３５と、ライトアドレスをカウントアップするための＋１カウンタ（ライトアドレス用＋１カウンタ）３６と、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されたＦＩＦＯ（ＦｉｒｓｔＩｎ  Ｆｉｒｓｔ  Ｏｕｔ）バッファであるリストアドレスバッファ３７と、リストアドレスバッファ３７から読み出されたリストアドレスを保持するリードデータレジスタ３８とを含んで構成されている。
【００２４】
ベクトル型コンピュータで取り扱われるベクトル命令は、１命令で処理するデータ量（「要素数」と呼ぶ）を命令によって設定することが可能な命令である（通常２５６要素まで指定が可能である）。リスト命令も、ベクトル命令の一種であり、要素数としては他のベクトル命令と同じく２５６要素まで指定することが可能である。ただし、リスト命令は、通常のベクトル命令のように命令からリクエストアドレスを生成することはできず、命令により指定されたベクトルレジスタ（ベクトルユニット１２内に存在するレジスタであり、ベクトルデータを保持するレジスタであって、複数個存在する）内のデータをリクエストアドレスとしてメモリアクセスを行う命令である。そのため、命令実行時に、ベクトルレジスタの内容を読み出しておき、リクエストをメモリ５０に送出するタイミングでその内容をリクエストアドレスとして使用することになる。この際に、リストアドレスを一時的に保持しておくバッファが必要になるため、リストアドレスバッファを設ける必要がある。このリストアドレスバッファはベクトルユニット１２とメモリアクセスリクエスト生成回路２０とが非同期で動作しているため、最大要素数である２５６要素分を保持できるようにする必要があり、通常ＳＲＡＭで構成されている。
【００２５】
図３は、そのようなＳＲＡＭで構成されたリストアドレスバッファ（リストアドレスバッファ３７）を含むリストアドレスバッファ制御回路３０の一般的な回路構成を示す図に該当する。
【００２６】
ここで、リードイネーブルレジスタ３１，リードアドレスレジスタ３２，ライトイネーブルレジスタ３３，およびライトアドレスレジスタ３４の値は、当該ベクトル型コンピュータ内のリセット信号あるいはスキャンインにより、必ず“０”に初期化されている。
【００２７】
また、リードイネーブルレジスタ３１の出力はリードアドレスレジスタ３２およびリードデータレジスタ３８のセット信号（図３中のＳＥＴ）になり、ライトイネーブルレジスタ３３の出力はライトアドレスレジスタ３４のセット信号になる。
【００２８】
なお、リストアドレスバッファ３７へのリストアドレスの書き込みについては、ベクトルユニット１２から送られてくる書き込み指示（リストアドレスバッファ書き込み指示）に従い、リストアドレスを１ワード書き込んだらライトアドレスを＋１するという作業が繰り返されることにより、リストアドレスの全てが書き込まれる。
【００２９】
図４は、アドレス差し替え回路４０の詳細な回路構成を示すブロック図である。アドレス差し替え回路４０は、リクエストコードから処理対象の命令がリスト命令であるかどうかを判定するリスト命令判定回路４１と、リスト命令判定回路４１の判定結果が「リスト命令である」の場合にはリストアドレスバッファ制御回路３０から送られてきたリストアドレスをメモリ５０へのリクエストアドレスとして選択し、当該判定結果が「リスト命令以外である」の場合にはメモリアクセスリクエスト生成回路２０から送られてきたリクエストアドレスをメモリ５０へのリクエストアドレスとして選択するセレクタ（選択回路）４２とを含んで構成されている。
【００３０】
本発明のベクトル型コンピュータは、メモリアクセスリクエスト生成回路２０およびそれに関連するハードウェアによって、リストアドレスの先行読み出しの動作を実現する。
【００３１】
以下に、このリストアドレスの先行読み出しの動作について説明する。
【００３２】
初めに、本発明の動作説明の前提として、図１に示すベクトル型コンピュータにおける命令（スカラユニット１１から発行される命令）に関する処理の流れについて説明する。
【００３３】
まず、スカラユニット１１から発行された命令は、ベクトルユニット１２およびメモリアクセスリクエスト生成回路２０に送られる。
【００３４】
当該命令が、リストアドレスバッファ３７への書き込みを指示する命令である場合には、ベクトルユニット１２では、その命令で指定されたベクトルレジスタからリストアドレスが読み出される。そして、リストアドレスバッファ制御回路３０の制御によって、当該リストアドレスがリストアドレスバッファ３７に格納される。
【００３５】
一方、当該命令がロード命令やストア命令である場合には、上記のようなリストアドレスバッファ３７への書き込みが行われていることを前提として、次のような処理が行われる。
【００３６】
メモリアクセスリクエスト生成回路２０では、発行命令（スカラユニット１１から発行された命令）がリスト命令以外の命令である場合には、その命令で指定されたリクエストアドレスが生成されてアドレス差し替え回路４０に出力されると同時に、その命令のリクエストコードが生成されてアドレス差し替え回路４０に出力される。また、発行命令がリスト命令である場合には、リストアドレスバッファ制御回路３０にリストアドレスバッファ読み出し指示（図１中の「読み出し指示」）が発行されると同時に、その命令のリクエストコードが生成されてアドレス差し替え回路４０に出力される。
【００３７】
アドレス差し替え回路４０では、発行命令がリスト命令以外の命令である場合には、メモリアクセスリクエスト生成回路２０からのリクエストアドレスがメモリ５０に対して送られるリクエストアドレスとして選択される。一方、発行命令がリスト命令である場合には、リストアドレスバッファ制御回路３０からのリストアドレスがメモリ５０に対して送られるリクエストアドレスとして選択される。このようにして選択されたリクエストアドレスと、メモリアクセスリクエスト生成回路２０から送られてきたリクエストコードとは、アドレス差し替え回路４０からメモリ５０に出力される。
【００３８】
ここで、本発明の特徴は、リスト命令の発行時にメモリアクセスリクエスト生成回路２０からリストアドレスバッファ制御回路３０に発行されるリストアドレスバッファ読み出し指示の発行タイミングにある。以下に、図２〜図４を用いて、その特徴について説明する。
【００３９】
リスト命令がスカラユニット１１からメモリアクセスリクエスト生成回路２０内のリクエスト生成部２２に送られてきたとすると、リクエスト生成部２２からリストアドレスバッファ読み出し制御部２１にその旨が通知され、リストアドレスバッファ読み出し制御部２１によってリストアドレスバッファ読み出し指示が生成される（そのリストアドレスバッファ読み出し指示は読み出し指示レジスタ２３に格納される）。
【００４０】
図３に示すように、このリストアドレスバッファ読み出し指示は、リストアドレスバッファ制御部回路３０に送られ、リードイネーブルレジスタ３１にセット信号の“１”が設定される。そして、次のマシンサイクルのタイミングで、リストアドレスバッファ３７から読み出されたリストアドレスがリードデータレジスタ３８にセットされると同時に、リードアドレスレジスタ３２では＋１カウンタ３５によって＋１カウント（１の加算）が行われる。
【００４１】
同時に、メモリアクセスリクエスト生成回路２０では、リクエスト生成部２２によってリクエストコードが生成され、そのリクエストコードがリクエストコードレジスタ２４に格納される。そして、次のマシンサイクルのタイミングで、リードデータレジスタ３８からリストアドレスがアドレス差し替え回路４０に出力されると同時に、リクエストコードレジスタ２４からリクエストコードがアドレス差し替え回路４０に出力される。
【００４２】
図４に示すように、アドレス差し替え回路４０では、メモリアクセスリクエスト生成回路２０からのリクエストコードに基づき、リスト命令判定回路４１によって、今回の発行命令がリスト命令であるか否かが判定される（ここでは、リスト命令の場合には判定結果が“１”になり、リスト命令以外の場合には判定結果が“０”になるものとする）。セレクタ４２は、リスト命令判定回路４１の判定結果により、リスト命令の場合にはリストアドレスバッファ制御回路３０から送られてきたリストアドレスを選択し、リスト命令以外の場合にはメモリアクセスリクエスト生成回路２０から送られてきたリクエストアドレスを選択する。
【００４３】
この場合（リスト命令の発行時）には、メモリアクセスリクエスト生成回路２０から送られてきたリクエストコードがリスト命令であるので、リスト命令判定回路４１の判定結果は“１”となり、セレクタ４２によって、リストアドレスバッファ制御回路３０から送られてきたリストアドレスがメモリ５０に送られるリクエストアドレスとして選択される。そして、そのリストアドレスがリクエストアドレスとしてメモリ５０に送出されると同時に、リクエストコードもメモリ５０に送出される。
【００４４】
上記に説明したような流れで、リスト命令に関する処理が行われるが、ここで一つ性能的な問題が発生する（これが従来技術における問題点に該当する）。それは、リストアドレスバッファ読み出し指示が発行されてから、アドレス差し替え回路４０にリストアドレスが送出されるまでに、タイムラグが発生する点である。すなわち、リストアドレスバッファ読み出し指示を出すタイミングで、メモリアクセスリクエスト生成回路２０は、リクエストコードをアドレス差し替え回路４０に出力できる状態であるにもかかわらず、リストアドレスバッファ制御回路３０によってリストアドレスが読み出されるまでの時間だけ、その出力を待機する必要が生じてしまう。
【００４５】
本発明では、このロス時間（タイムラグ）をなくすことを可能にするために、次のような動作が行われる。
【００４６】
すなわち、メモリアクセスリクエスト生成回路２０は、リスト命令に先行する命令が存在する場合に（リスト命令に先行する命令が存在しない場合には、このロス時間をなくすことはできない）、その先行する命令の処理にリスト命令に関する「リストアドレスバッファ３７からリストアドレスを読み出す処理」をオーバラップさせる。
【００４７】
具体的には、以下のような手順で、リストアドレスバッファ読み出し指示が発行される。
【００４８】
メモリアクセスリクエスト生成回路２０内のリクエスト生成部２２は、連続する２つの命令を保持することが可能であり、そのうちの先行する命令のリクエストコードやリクエストアドレスの生成とともに、当該先行命令の残要素数の算出を行い、その残要素数をリストアドレスバッファ読み出し制御部２１に送出する。
【００４９】
リストアドレスバッファ読み出し制御部２１は、その残要素数を受けて、「２つの命令がメモリアクセスリクエスト生成回路２０に保持されており、後続の命令がリスト命令であり、先行する命令の残要素数が下記の値（「指示発行基準値」と呼ぶ）以下である」という条件に合致する場合に、リストアドレスバッファ読み出し指示（図１中の「読み出し指示」）を発行する。その指示発行基準値とは、「リストアドレスバッファ読み出し指示がリストアドレスバッファ制御回路３０によって受け取られるマシンサイクルと、リードデータレジスタ３８にリストアドレスが設定されるマシンサイクルとの差分に、メモリアクセスリクエスト生成回路２０内の処理レートにおける１マシンサイクルあたりの要素数を乗じた値」が該当する。なお、先行する命令がリスト命令である場合にリストアドレスバッファ読み出し指示が発行されることは、従来技術と同様である。
【００５０】
これにより、メモリアクセスリクエスト生成回路２０内においてリスト命令の先頭のリクエストコードを出力するタイミングで、リストアドレスバッファ制御回路３０からリストアドレスを出力することが可能となり、それにより、リストアドレスの読み出しにかかる時間のロスを実質的になくしてしまうことができる。
【実施例１】
【００５１】
以下に、上記の実施の形態を具体化した実施例について説明する。
【００５２】
先に言及した図１は、本発明の第１の実施例に係るベクトル型コンピュータの構成を示すブロック図でもある。また、図２，図３，および図４は、それぞれ、本実施例におけるメモリアクセスリクエスト生成回路２０，リストアドレスバッファ制御回路３０，およびアドレス差し替え回路４０の詳細な回路構成を示すブロック図にも該当する。
【００５３】
図５は、図２中のリストアドレスバッファ読み出し制御部２１の内部の回路構成を示すブロック図である。リストアドレスバッファ読み出し制御部２１は、処理中の命令（先行する命令）の残要素数が１以下であるかどうかを判断する残要素数判定回路２１１と、リクエスト生成部２２内のレジスタ２２１のオペコードがリスト命令であるかどうかを判定するリスト命令判定回路２１２（第１のリスト命令判定回路）と、アンドゲート２１３と、リクエスト生成部２２内のレジスタ２２２のオペコードがリスト命令であるかどうかを判定するリスト命令判定回路２１４（第２のリスト命令判定回路）と、オアゲート２１５とを含んで構成されている。
【００５４】
アンドゲート２１３は、レジスタ２２２に存在する命令の残要素数が１以下であり、かつレジスタ２２１に存在する命令がリスト命令であることを示す信号（ここでは、“１”（“０”と“１”との２値におけるうちの“１”）によってそのことを示す信号）を生成するための回路である。また、オアゲート２１５は、アンドゲート２１３の出力と、レジスタ２２２に存在する命令がリスト命令であるかどうかを示す信号との論理和（オア）を算出するための回路である。つまり、「レジスタ２２１に存在する命令がリスト命令であり、かつレジスタ２２２に存在する命令の残要素数が１以下である」という時、あるいは「レジスタ２２２に存在する命令がリスト命令である」という時に、リストアドレスバッファ読み出し制御部２１は、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”であることによって示される指示）を発行する。
【００５５】
図６は、図２中のリクエスト生成部２２の内部の回路構成を示すブロック図である。リクエスト生成部２２は、スカラユニット１１からの命令を受け取るレジスタであるレジスタ２２１（後続命令用レジスタ）およびレジスタ２２２（先行命令用レジスタ）を有している。これらのレジスタ２２１／２２２における命令語の内部フィールドには、オペコードと、要素数と、ベースアドレスと、要素間距離とが定義されている。このように、リクエスト生成部２２は、２つの命令を同時に保持することが可能な構成となっている。ここで、レジスタ２２２に命令が存在している場合には、次の命令はレジスタ２２１で待機する論理になっている（両方のレジスタが空き状態である場合には、命令はまずレジスタ２２２に格納される）。
【００５６】
リクエスト生成部２２は、上記のレジスタ２２１およびレジスタ２２２とともに、レジスタ２２２のオペコードを入力としてリクエストコードを生成するリクエストコード生成回路２２３と、レジスタ２２２の要素数を入力として残要素数を計算・判定する残要素数算出回路２２４と、レジスタ２２２のベースアドレスと要素間距離とからリクエストアドレスを生成するリクエストアドレス生成回路２２５とを含んで構成されている。
【００５７】
図７は、本実施例に係るベクトル型コンピュータにおける具体的なリストアドレス読み出し（リストアドレス先行読み出し）の動作を説明するためのタイムチャートを示す図である。
【００５８】
次に、図１〜図７を参照して、上記のように構成された本実施例に係るベクトル型コンピュータのリストアドレス読み出しに関する全体の動作について詳細に説明する。
【００５９】
ここでは、図７に示すように、１命令目がベクトルロード命令（命令語で指定されたアドレスによりメモリからデータをロードする命令）であり、２命令目がリストロード命令（ベクトルレジスタ内のデータをアドレスとしてメモリからデータをロードする命令）であるという順番で、命令の処理が行われる場合の動作について説明する。なお、これらの命令は、全て要素数を４要素とし、１要素のデータ幅を８Ｂ（バイト）とし、要素間距離を８Ｂとする。なお、メモリアクセスリクエスト生成回路２０は、一度に１要素ずつのリクエストを生成するものとする。また、当該リストロード命令のリストアドレスは、前もって、ベクトルユニット１２およびリストアドレスバッファ制御回路３０（図３参照）における動作により、ベクトルユニット１２からリストアドレスバッファ制御回路３０に転送され、リストアドレスバッファ３７に格納されているものとする。
【００６０】
ここで、図７中の符号の意味を以下に示す。
ＶＬ：ベクトルロード命令
ＬＬ：リストロード命令
ＢＡ：ベースアドレス
ＬＡ（ｎ）：要素ｎのリストアドレス
Ｔｍ：マシンサイクルｍ
【００６１】
また、図７中の２２１，２２２，２３，２４，２５，２２４，３１，３２，３８，および４２の符号は図２〜図６中の符号を表しており、「リクエストコード」および「リクエストアドレス」は図４に示すアドレス差し替え回路４０の出力信号（メモリ５０に送出される信号）を表している。
【００６２】
以下の（１）〜（１２）に、各マシンサイクルにおける動作について記述する。
【００６３】
（１）  マシンサイクル０（図７中のＴ０）
まず、ベクトルロード命令が、スカラユニット１１から発行され、メモリアクセスリクエスト生成回路２０内のリクエスト生成部２２に入力される。この時点ではリクエスト生成部２２内のレジスタ２２２には先行する命令が存在しないので、このベクトルロード命令は、次のマシンサイクル（マシンサイクル１）でレジスタ２２２に格納される。
【００６４】
（２）  マシンサイクル１（図７中のＴ１）
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、ベクトルロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクル（マシンサイクル２）でリクエストコードレジスタ２４に格納される。
【００６５】
また、リクエストアドレス生成回路２２５では、レジスタ２２２中のベースアドレスがそのままリクエストアドレスとしてリクエストアドレスレジスタ２５に送出され、次のマシンサイクルでそのリクエストアドレスがリクエストアドレスレジスタ２５に格納される（そのリクエストアドレスはリクエストアドレス生成回路２２５内のレジスタにも保持される）。
【００６６】
さらに、残要素数算出回路２２４では、レジスタ２２２中の要素数の“４”から１が減算され、その減算結果の“３”という値が残要素数として生成される（この残要素数は残要素数算出回路２２４内のレジスタに保持される）。
【００６７】
レジスタ２２２に格納されているベクトルロード命令のオペコードと、上述のようにして残要素数算出回路２２４で生成された残要素数の“３”とが、リストアドレスバッファ読み出し制御部２１に送られる。
【００６８】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１２によって「レジスタ２２１内の命令がリスト命令ではない（レジスタ２２１に命令が存在しない）」と判定され（リスト命令判定回路２１２の出力が“０”となる）、アンドゲート２１３の出力が“０”となる。また、リスト命令判定回路２１４によって「レジスタ２２２内の命令がリスト命令ではない」と判定される（リスト命令判定回路２１４の出力が“０”となる）。このため、オアゲート２１５の出力は“０”となり、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）が発行されることはない（読み出し指示レジスタ２３内への“１”の格納はない）。
【００６９】
次の命令であるリストロード命令が、スカラユニット１１から発行され、メモリアクセスリクエスト生成回路２０内のリクエスト生成部２２に入力される。この時点ではレジスタ２２２に先行命令が存在するため、このリストロード命令は、次のマシンサイクルでレジスタ２２１に格納される。
【００７０】
（３）  マシンサイクル２（図７中のＴ２）
リクエスト生成部２２内のリクエストアドレス生成回路２２５では、マシンサイクル１で生成されたリクエストアドレス（すなわち、レジスタ２２２中のベースアドレス）にレジスタ２２２中の要素間距離の“８”が加算され、その加算結果（図７中のＢＡ＋８）が新たなリクエストアドレスとして生成され、次のマシンサイクルでそのリクエストアドレスがリクエストアドレスレジスタ２５に格納される。
【００７１】
また、残要素数算出回路２２４では、残要素数の“３”から１が減算され、その減算結果の“２”という値が新たな残要素数として生成される。
【００７２】
リクエストコードレジスタ２４に格納されているリクエストコードとリクエストアドレスレジスタ２５に格納されているリクエストアドレスとが、アドレス差し替え回路４０に出力される。
【００７３】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードではないという判定結果）に基づき、セレクタ４２でメモリアクセスリクエスト生成回路２０からのリクエストアドレスが選択され、そのリクエストアドレスがメモリ５０に送出される。
【００７４】
レジスタ２２１に格納されているリストロード命令のオペコードと、レジスタ２２２に格納されているベクトルロード命令のオペコードと、残要素数算出回路２２４の出力（ベクトルロード命令の残要素数の“２”）とが、リストアドレスバッファ読み出し制御部２１に送られる。
【００７５】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１４によって「レジスタ２２２内の命令がリスト命令ではない」と判定される（リスト命令判定回路２１４の出力が“０”となる）。また、残要素数判定回路２１１によって「レジスタ２２２内の命令の残要素数が１以下ではない」と判定される（残要素数判定回路２１１の出力が“０”となる）ため、アンドゲート２１３の出力が“０”となる。したがって、オアゲート２１５の出力は“０”となり、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）は発行されない（読み出し指示レジスタ２３内への“１”の格納はない）。
【００７６】
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、ベクトルロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクルでリクエストコードレジスタ２４に格納される。
【００７７】
（４）  マシンサイクル３（図７中のＴ３）
リクエスト生成部２２内のリクエストアドレス生成回路２２５では、マシンサイクル２で生成されたリクエストアドレスに要素間距離の“８”が加算され、その加算結果（図７中のＢＡ＋１６）が新たなリクエストアドレスとして生成され、次のマシンサイクルでそのリクエストアドレスがリクエストアドレスレジスタ２５に格納される。
【００７８】
また、残要素数算出回路２２４では、残要素数の“２”から１が減算され、その減算結果の“１”という値が新たな残要素数として生成される。
【００７９】
リクエストコードレジスタ２４に格納されているリクエストコードとリクエストアドレスレジスタ２５に格納されているリクエストアドレスとが、アドレス差し替え回路４０に出力される。
【００８０】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードではないという判定結果）に基づき、セレクタ４２でメモリアクセスリクエスト生成回路２０からのリクエストアドレスが選択され、そのリクエストアドレスがメモリ５０に送出される。
【００８１】
レジスタ２２１に格納されているリストロード命令のオペコードと、レジスタ２２２に格納されているベクトルロード命令のオペコードと、残要素数算出回路２２４の出力（ベクトルロード命令の残要素数の“１”）とが、リストアドレスバッファ読み出し制御部２１に送られる。
【００８２】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１２によって「レジスタ２２１内の命令がリスト命令である」と判定され（リスト命令判定回路２１２の出力が“１”となる）、残要素数判定回路２１１によって「レジスタ２２２内の命令の残要素数が１以下である」と判定される（残要素数判定回路２１１の出力が“１”となる）。このため、アンドゲート２１３の出力が“１”となり、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）が発行され、次のマシンサイクルで読み出し指示レジスタ２３内に“１”（リストアドレスバッファ読み出し指示を示す情報）が格納される。
【００８３】
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、ベクトルロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクルでリクエストコードレジスタ２４に格納される。
【００８４】
（５）  マシンサイクル４（図７中のＴ４）
リクエスト生成部２２内のリクエストアドレス生成回路２２５では、マシンサイクル３で生成されたリクエストアドレスに要素間距離の“８”が加算され、その加算結果（図７中のＢＡ＋２４）が新たなリクエストアドレスとして生成され、次のマシンサイクルでそのリクエストアドレスがリクエストアドレスレジスタ２５に格納される。
【００８５】
また、残要素数算出回路２２４では、残要素数の“１”から１が減算され、その減算結果の“０”という値が新たな残要素数として生成される。これによって（残要素数が“０”になったことに基づき）、「これでベクトルロード命令が終了」と判断され、レジスタ２２１に格納されているリストロード命令が次のマシンサイクルでレジスタ２２２に格納される。
【００８６】
リクエストコードレジスタ２４に格納されているリクエストコードとリクエストアドレスレジスタ２５に格納されているリクエストアドレスとが、アドレス差し替え回路４０に出力される。
【００８７】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードではないという判定結果）に基づき、セレクタ４２でメモリアクセスリクエスト生成回路２０からのリクエストアドレスが選択され、そのリクエストアドレスがメモリ５０に送出される。
【００８８】
レジスタ２２１に格納されているリストロード命令のオペコードと、レジスタ２２２に格納されているベクトルロード命令のオペコードと、残要素数算出回路２２４の出力（ベクトルロード命令の残要素数の“０”）とが、リストアドレスバッファ読み出し制御部２１に送られる。
【００８９】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１２によって「レジスタ２２１内の命令がリスト命令である」と判定され（リスト命令判定回路２１２の出力が“１”となり）、残要素数判定回路２１１によって「レジスタ２２２内の命令の残要素数が１以下である」と判定される（残要素数判定回路２１１の出力が“１”となる）。このため、アンドゲート２１３の出力が“１”となり、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）が発行され、次のマシンサイクルで読み出し指示レジスタ２３内に“１”が格納される。
【００９０】
リストアドレスバッファ制御回路３０では、メモリアクセスリクエスト生成回路２０から送出されたリストアドレスバッファ読み出し指示（リストアドレスバッファ読み出し制御部２１で生成されマシンサイクルで読み出し指示レジスタ２３に格納されたリストアドレスバッファ読み出し指示）が受け取られ、次のマシンサイクルでリードイネーブルレジスタ３１に“１”が格納される。
【００９１】
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、ベクトルロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクルでリクエストコードレジスタ２４に格納される。
【００９２】
（６）  マシンサイクル５（図７中のＴ５）
リクエスト生成部２２内の残要素数算出回路２２４では、レジスタ２２２中の要素数の“４”から１が減算され、その減算結果の“３”という値が残要素数として生成される（この残要素数は残要素数算出回路２２４内のレジスタに保持される）。
【００９３】
リクエストコードレジスタ２４に格納されているリクエストコードとリクエストアドレスレジスタ２５に格納されているリクエストアドレスとが、アドレス差し替え回路４０に出力される。
【００９４】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードではないという判定結果）に基づき、セレクタ４２でメモリアクセスリクエスト生成回路２０からのリクエストアドレスが選択され、そのリクエストアドレスがメモリ５０に送出される。
【００９５】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１４によって「レジスタ２２２内の命令がリスト命令である」と判断される。このため、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）が発行され、次のマシンサイクルで読み出し指示レジスタ２３内に“１”が格納される。
【００９６】
リストアドレスバッファ制御回路３０では、リードイネーブルレジスタ３１に“１”が設定されており、リードアドレスレジスタ３２に“０”が設定されているので、リストアドレスバッファ３７のワード０からリストロード命令の要素０のリストアドレスが読み出され、次のマシンサイクルでそのリストアドレスがリードデータレジスタ３８に格納される。同時に、＋１カウンタ３５によって、リードアドレスレジスタ３２の出力（“０”という値）に＋１した値の“１”が次のマシンサイクルでリードアドレスレジスタ３２に格納される。また、メモリアクセスリクエスト生成回路２０から送出されたリストアドレスバッファ読み出し指示が受け取られ、次のマシンサイクルでリードイネーブルレジスタ３１に“１”が格納される。
【００９７】
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、リストロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクルでリクエストコードレジスタ２４に格納される。
【００９８】
（７）  マシンサイクル６（図７中のＴ６）
リクエスト生成部２２内の残要素数算出回路２２４では、残要素数の“３”から１が減算され、その減算結果の“２”という値が新たな残要素数として生成される。
【００９９】
リクエストコードレジスタ２４に格納されているリクエストコードとリストアドレスバッファ制御回路３０内のリストアドレスバッファ３７中のワード０に存在するリストロード命令の要素０のリストアドレスとが、アドレス差し替え回路４０に出力される。
【０１００】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードであるという判定結果）に基づき、セレクタ４２でリストアドレスバッファ制御回路３０からの要素０のリストアドレスが選択され、そのリストアドレスがリクエストアドレスとしてメモリ５０に送出される。
【０１０１】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１４によって「レジスタ２２２内の命令がリスト命令である」と判定される。このため、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）が発行され、次のマシンサイクルで読み出し指示レジスタ２３内に“１”が格納される。
【０１０２】
リストアドレスバッファ制御回路３０では、リードイネーブルレジスタ３１に“１”が設定されており、リードアドレスレジスタ３２に“１”が設定されているので、リストアドレスバッファ３７のワード１からリストロード命令の要素１のリストアドレスが読み出され、次のマシンサイクルでそのリストアドレスがリードデータレジスタ３８に格納される。同時に、＋１カウンタ３５によって、リードアドレスレジスタ３２の出力（“１”という値）に＋１した値の“２”が次のマシンサイクルでリードアドレスレジスタ３２に格納される。また、メモリアクセスリクエスト生成回路２０から送出されたリストアドレスバッファ読み出し指示が受け取られ、次のマシンサイクルでリードイネーブルレジスタ３１に“１”が格納される。
【０１０３】
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、リストロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクルでリクエストコードレジスタ２４に格納される。
【０１０４】
（８）  マシンサイクル７（図７中のＴ７）
リクエスト生成部２２内の残要素数算出回路２２４では、残要素数の“２”から１が減算され、その減算結果の“１”という値が新たな残要素数として生成される。
【０１０５】
リクエストコードレジスタ２４に格納されているリクエストコードとリストアドレスバッファ制御回路３０内のリストアドレスバッファ３７中のワード１に存在するリストロード命令の要素１のリストアドレスとが、アドレス差し替え回路４０に出力される。
【０１０６】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードであるという判定結果）に基づき、セレクタ４２でリストアドレスバッファ制御回路３０からの要素１のリストアドレスが選択され、そのリストアドレスがリクエストアドレスとしてメモリ５０に送出される。
【０１０７】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１４によって「レジスタ２２２内の命令がリスト命令である」と判定される。このため、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）が発行され、次のマシンサイクルで読み出し指示レジスタ２３内に“１”が格納される。
【０１０８】
リストアドレスバッファ制御回路３０では、リードイネーブルレジスタ３１に“１”が設定されており、リードアドレスレジスタ３２に“２”が設定されているので、リストアドレスバッファ３７のワード２からリストロード命令の要素２のリストアドレスが読み出され、次のマシンサイクルでそのリストアドレスがリードデータレジスタ３８に格納される。同時に、＋１カウンタ３５によって、リードアドレスレジスタ３２の出力（“２”という値）に＋１した値の“３”が次のマシンサイクルでリードアドレスレジスタ３２に格納される。また、メモリアクセスリクエスト生成回路２０から送出されたリストアドレスバッファ読み出し指示が受け取られ、次のマシンサイクルでリードイネーブルレジスタ３１に“１”が格納される。
【０１０９】
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、リストロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクルでリクエストコードレジスタ２４に格納される。
【０１１０】
（９）  マシンサイクル８（図７中のＴ８）
リクエスト生成部２２内の残要素数算出回路２２４では、残要素数の“１”から１が減算され、その減算結果の“０”という値が新たな残要素数として生成される。このため、「これでリストロード命令が終了」と判断される。
【０１１１】
リクエストコードレジスタ２４に格納されているリクエストコードとリストアドレスバッファ制御回路３０内のリストアドレスバッファ３７中のワード２に存在するリストロード命令の要素２のリストアドレスとが、アドレス差し替え回路４０に出力される。
【０１１２】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードであるという判定結果）に基づき、セレクタ４２でリストアドレスバッファ制御回路３０からの要素２のリストアドレスが選択され、そのリストアドレスがリクエストアドレスとしてメモリ５０に送出される。
【０１１３】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１４によって「レジスタ２２２内の命令がリスト命令である」と判定される。このため、リストアドレスバッファ読み出し指示（オアゲート２１５の出力が“１”となることによって表される指示）が発行され、次のマシンサイクルで読み出し指示レジスタ２３内に“１”が格納される。
【０１１４】
リストアドレスバッファ制御回路３０では、リードイネーブルレジスタ３１に“１”が設定されており、リードアドレスレジスタ３２に“３”が設定されているので、リストアドレスバッファ３７のワード３からリストロード命令の要素３のリストアドレスが読み出され、次のマシンサイクルでそのリストアドレスがリードデータレジスタ３８に格納される。同時に、＋１カウンタ３５によって、リードアドレスレジスタ３２の出力（“３”という値）に＋１した値の“４”が次のマシンサイクルでリードアドレスレジスタ３２に格納される。また、メモリアクセスリクエスト生成回路２０から送出されたリストアドレスバッファ読み出し指示が受け取られ、次のマシンサイクルでリードイネーブルレジスタ３１に“１”が格納される。
【０１１５】
リクエスト生成部２２内のリクエストコード生成回路２２３では、レジスタ２２２中のオペコードに基づいて、リストロード命令を示すリクエストコードが生成され、そのリクエストコードが次のマシンサイクルでリクエストコードレジスタ２４に格納される。
【０１１６】
（１０）  マシンサイクル９（図７中のＴ９）
リクエスト生成部２２内のリクエストコード生成回路２２３では、マシンサイクル８で命令終了と判断されたため、次の命令がくるまで動作が行われない。
【０１１７】
リクエストコードレジスタ２４に格納されているリクエストコードとリストアドレスバッファ制御回路３０内のリストアドレスバッファ３７中のワード３に存在するリストロード命令の要素３のリストアドレスとが、アドレス差し替え回路４０に出力される。
【０１１８】
アドレス差し替え回路４０では、リスト命令判定回路４１の判定結果（当該リクエストコードがリスト命令のリクエストコードであるという判定結果）に基づき、セレクタ４２でリストアドレスバッファ制御回路３０からの要素３のリストアドレスが選択され、そのリストアドレスがリクエストアドレスとしてメモリ５０に送出される。
【０１１９】
リストアドレスバッファ読み出し制御部２１では、リスト命令判定回路２１２によって「レジスタ２２１内の命令がリスト命令ではない（レジスタ２２１に命令が存在しない）」と判定され（リスト命令判定回路２１２の出力が“０”となる）、アンドゲート２１３の出力が“０”となる。また、リスト命令判定回路２１４によって「レジスタ２２２内の命令がリスト命令ではない（レジスタ２２２に命令が存在しない）」と判定される（リスト命令判定回路２１４の出力が“０”となる）。このため、オアゲート２１５の出力は“０”となり、リストアドレスバッファ読み出し指示が生成・発行されることはない。しかし、読み出し指示レジスタ２３にはマシンサイクル８で生成されたリストアドレスバッファ読み出し指示（“１”という値）が格納されているため、これがリストアドレスバッファ制御回路３０に出力される。
【０１２０】
リストアドレスバッファ制御回路３０では、リードイネーブルレジスタ３１に“１”が設定されており、リードアドレスレジスタ３２に“４”が設定されているので、リストアドレスバッファ３７のワード４からデータが読み出され、次のマシンサイクルでそのデータがリードデータレジスタ３８に格納される。同時に、＋１カウンタ３５によって、リードアドレスレジスタ３２の出力（“４”という値）に＋１した値の“５”が次のマシンサイクルでリードアドレスレジスタ３２に格納される。また、メモリアクセスリクエスト生成回路２０から送出されたリストアドレスバッファ読み出し指示が受け取られ、次のマシンサイクルでリードイネーブルレジスタ３１に“１”が格納される。
【０１２１】
（１１）  マシンサイクル１０（図７中のＴ１０）
アドレス差し替え回路４０では、リストアドレスバッファ制御回路３０から送られてきたリストアドレス（リストアドレスバッファ３７のワード４に格納されているデータ）がセレクタ４２に入力される。しかし、リクエストコード（メモリアクセスリクエスト生成回路２０から送られてきてリスト命令判定回路４１によって判定されるリクエストコード）がリスト命令を示すものではないため、そのリストアドレスは、セレクタ４２によって選択されることはなく、ここで捨てられる。すなわち、このリストアドレスは、無効なものとして扱われ、使用されない。
【０１２２】
リストアドレスバッファ制御回路３０では、リードイネーブルレジスタ３１に“１”が設定されており、リードアドレスレジスタ３２に“５”が設定されているので、リストアドレスバッファ３７のワード５からデータが読み出され、次のマシンサイクルでそのデータがリードデータレジスタ３８に格納される。同時に、＋１カウンタ３５によって、リードアドレスレジスタ３２の出力（“５”という値）に＋１した値の“６”が次のマシンサイクルでリードアドレスレジスタ３２に格納される。
【０１２３】
（１２）  マシンサイクル１１（図７中のＴ１１）
アドレス差し替え回路４０では、リストアドレスバッファ制御回路３０から送られてきたリストアドレス（リストアドレスバッファ３７のワード５に格納されているデータ）がセレクタ４２に入力される。しかし、リクエストコードがリスト命令を示すものではないため、そのリストアドレスは、セレクタ４２によって選択されることはなく、ここで捨てられる。すなわち、このリストアドレスは、無効なものとして扱われ、使用されない。
【０１２４】
ここで、本実施例の具体的な効果について説明する。
【０１２５】
図８は、従来のベクトル型コンピュータにおけるリストアドレスバッファ読み出し制御部（図５に示したリストアドレスバッファ読み出し制御部２１に該当する制御部）の回路構成を示すブロック図である。
【０１２６】
従来技術においては、リクエスト生成部内のレジスタ（図６におけるリクエスト生成部２２内のレジスタ２２２に該当するレジスタ）から送られてくるオペコードが、リスト命令判定回路によって、リスト命令のオペコードであるかどうかが判断されていた。そして、リスト命令のオペコードであると判定された場合に、リストアドレスバッファ読み出し指示を示す信号が生成されていた（図２中の読み出し指示レジスタ２３に該当する読み出し指示レジスタにリストアドレスバッファ読み出し指示が格納されていた）。
【０１２７】
すなわち、リスト命令のリストアドレスの読み出しに際しては、そのリスト命令に先行する命令の処理が完全に終わってから、リストアドレスバッファのリストアドレスが読み出されることとなっていた。
【０１２８】
図９は、図７に示したタイムチャートにおける場合と同様のベクトルロード命令およびリストロード命令が従来の技術で実行される場合のタイムチャートを示す図である。ここでは、図１と同様な構成を有する従来のベクトル型コンピュータの動作を考え、各レジスタおよび各回路や各命令および各アドレス等を示す符号として、図７と同一の符号を使用して表している。ただし、上述のように、従来技術においては、リストアドレスバッファ制御部の構成は図５に示すリストアドレスバッファ制御部２１とは異なる構成となる。なお、リクエスト生成部２２についても、必ずしも２つのレジスタ（レジスタ２２１およびレジスタ２２２）が存在する必要はないが（レジスタ２２２だけでもよい）、対比説明の便宜上、レジスタ２２１が存在するものとして説明する。また、従来技術における残要素数算出回路２２４は、レジスタ２２２内の命令の終了判定のためだけに残要素数の算出を行うものであり、本発明のように「リストアドレス先行読み出し実現のためにリストアドレスバッファ読み出し制御部２１に対して残要素数を送出すること」を行うことはない。
【０１２９】
図７のタイムチャートによって示される動作では、先行するベクトルロード命令の処理中であるマシンサイクルのＴ４（マシンサイクル４）で、リストロード命令に関するリストアドレスバッファ読み出し指示がリストアドレスバッファ制御回路３０に発行されている（読み出し指示レジスタ２３に格納されている）。これに対して、図９のタイムチャートによって示される動作では、Ｔ６で、初めて、リストアドレスバッファ読み出し指示が読み出し指示レジスタ２３に格納されている。
【０１３０】
したがって、図７における動作では、リストロード命令のリクエストコードの発行タイミングであるＴ６で、リストアドレスがリストアドレスバッファ３７から読み出されており、待ち時間なしに、リスト命令（ここではリストロード命令）の処理を行うことが可能となっている。一方、図９における動作では、リストロード命令のリクエストコードの発行タイミングであるＴ６ではまだリストアドレスが読み出されておらず、Ｔ８で初めてリストアドレスが読み出されるので、２マシンサイクルの間、処理を待たなければならない。この待ち時間により、リスト命令と先行する命令との間に、空き時間ができてしまい、ベクトル型コンピュータの性能を低下させている。また、上記に起因して、リストロード命令の終了時間についても、図７の動作ではＴ９で終了しているのに対し、図９の動作ではＴ１１でようやく終了することとなっている。
【０１３１】
このように、本実施例によると、リストアドレスバッファ読み出し制御部２１内の少量のハードウェア量を従来技術に対して追加するだけで、リスト命令のリストアドレス読み出しに関し、２マシンサイクル分の待ち時間を回避することが可能になるという効果が生じている。
【０１３２】
ところで、上記の実施例においては、メモリアクセスリクエスト生成回路２０内の処理レートが１要素／１マシンサイクルとして説明した。しかし、この処理レートは、２要素／１マシンサイクル，４要素／１マシンサイクル，８要素／１マシンサイクル，または１６要素／１マシンサイクルなどの他の値でもよい。ここで、処理レートにおける１マシンサイクルあたりの要素数は、一般的には２の巾乗（２の０乗である１を含む）であることが通常であるが、理論的には２の巾乗以外の値であってもよい。
【０１３３】
ここで、残要素数判定回路２１１の判定内容をより一般的に表現すると、「リスト命令に先行する命令の残要素数が下記の値（指示発行基準値）以下であるかどうかの判定」ということになる。その指示発行基準値とは、「リストアドレスバッファ読み出し指示がリストアドレスバッファ制御回路３０によって受け取られるマシンサイクルと、リードデータレジスタ３８にリストアドレスが設定されるマシンサイクルとの差分に、メモリアクセスリクエスト生成回路２０内の処理レートにおける１マシンサイクルあたりの要素数を乗じた値」が該当する。
【０１３４】
また、上記の実施例では、ロード命令（リストロード命令）に関する動作で説明したが、もちろんストア命令（リストストア命令）の動作でも上記と同じ効果が得られることはいうまでもない。
【実施例２】
【０１３５】
次に、本発明の第２の実施例に係るメモリアクセスリクエスト生成回路について説明する。
【０１３６】
先に述べた図２は、本実施例に係るメモリアクセスリクエスト生成回路の回路構成を示すブロック図にも該当する。
【０１３７】
ここで、第１の実施例に係るベクトル型コンピュータ中のメモリアクセスリクエスト生成回路２０のリストアドレス先行読み出しに関する動作が、本実施例（第２の実施例）に係るメモリアクセスリクエスト生成回路におけるリストアドレス先行読み出しに関する動作にも該当する。
【０１３８】
従来の技術と比較した場合に、本実施例に係るメモリアクセスリクエスト生成回路によると、それを採用するベクトル型コンピュータの性能向上（メモリアクセス処理の高速化）が可能になるという効果が生じる。
【図面の簡単な説明】
【０１３９】
【図１】本発明を実施するための最良の形態に係るベクトル型コンピュータの構成を示すブロック図である。
【図２】図１中のメモリアクセスリクエスト生成回路の詳細な回路構成を示すブロック図である。
【図３】図１中のリストアドレスバッファ制御回路の詳細な回路構成を示すブロック図である。
【図４】図１中のアドレス差し替え回路の詳細な回路構成を示すブロック図である。
【図５】図２中のリストアドレスバッファ読み出し制御部の詳細な回路構成を示すブロック図である。
【図６】図２中のリクエスト生成部の詳細な回路構成を示すブロック図である。
【図７】本発明の第１の実施例に係るベクトル型コンピュータにおけるリストアドレスの読み出しに関する動作を説明するためのタイムチャートを示す図である。
【図８】従来のベクトル型コンピュータの一例におけるリストアドレスバッファ読み出し制御部の回路構成を示すブロック図である。
【図９】図７のタイムチャートに対比させて従来技術におけるリストアドレスの読み出しに関する動作を説明するためのタイムチャートを示す図である。
【符号の説明】
【０１４０】
１１  スカラユニット
１２  ベクトルユニット
２０  メモリアクセスリクエスト生成回路
２１  リストアドレスバッファ読み出し制御部
２２  リクエスト生成部
２３  読み出し指示レジスタ
２４  リクエストコードレジスタ
２５  リクエストアドレスレジスタ
３０  リストアドレスバッファ制御回路
３１  リードイネーブルレジスタ（ＲＥ）
３２  リードアドレスレジスタ（ＲＡ）
３３  ライトイネーブルレジスタ（ＷＥ）
３４  ライトアドレスレジスタ（ＷＡ）
３５  ＋１カウンタ（リードアドレス用＋１カウンタ）
３６  ＋１カウンタ（ライトアドレス用＋１カウンタ）
３７  リストアドレスバッファ
３８  リードデータレジスタ
４０  アドレス差し替え回路
４１，２１２，２１４  リスト命令判定回路
４２  セレクタ（選択回路）
５０  メモリ
２１１  残要素数判定回路
２１３  アンドゲート
２１５  オアゲート
２２１，２２２  レジスタ
２２３  リクエストコード生成回路
２２４  残要素数算出回路
２２５  リクエストアドレス生成回路
【図１】
2005141345.tif 000003
【図２】
2005141345.tif 000004
【図３】
2005141345.tif 000005
【図４】
2005141345.tif 000006
【図５】
2005141345.tif 000007
【図６】
2005141345.tif 000008
【図７】
2005141345.tif 000009
【図８】
2005141345.tif 000010
【図９】
2005141345.tif 000011