(57)【特許請求の範囲】
【請求項１】
命令を出力するスカラユニットから命令を入力し、前記スカラユニットより命令を入力してベクトルギャザー命令発行許可を出力するベクトルユニットからベクトルギャザー命令発行許可を入力し、ベクトルギャザー命令が入力されたときに該ベクトルギャザー命令に対する命令発行許可がなければ該ベクトルギャザー命令を保持し、ロード命令が入力されたときに該ロード命令に先行するベクトルギャザー命令が保持されていれば該ロード命令を先行するベクトルギャザー命令を追い越してメモリアクセスリクエスト生成回路に対して発行することを特徴とするベクトルギャザー命令追い越し回路。
【請求項２】
スカラユニット，ベクトルユニットおよびメモリアクセスリクエスト生成回路を備えるベクトル処理装置において、
前記ベクトルユニットでベクトルギャザー命令のアドレスが揃うまで該ベクトルギャザー命令および後続の命令が待ち合わせるための命令バッファと、
前記命令バッファの各段に格納された命令の有効／無効を示す命令有効フラグを保持する第１のフリップフロップ群と、
前記スカラユニットから入力された命令がベクトルギャザー命令であるかどうかを判断する第１のデコーダと、
前記第１のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がベクトルギャザー命令であるかどうかを示すベクトルギャザー命令フラグを保持する第２のフリップフロップ群と、
前記スカラユニットから入力された命令がロード命令であるかどうかを判断する第２のデコーダと、
前記第２のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がロード命令であるかどうかを示すロード命令フラグを保持する第３のフリップフロップ群と、
前記ベクトルユニットからのベクトルギャザー命令発行許可をカウントし前記命令バッファに格納されているベクトルギャザー命令の発行可否状態を判断するベクトルギャザー命令発行判断回路と、
前記ベクトルギャザー命令発行判断回路の出力信号，前記命令有効フラグ，前記ベクトルギャザー命令フラグおよび前記ロード命令フラグに基づいて後続するロード命令による先行するベクトルギャザー命令の追い越しの可否を判定し、入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路に送出する命令を選択するためのセレクト信号を生成するセレクト信号生成回路と、
前記セレクト信号生成回路からのセレクト信号に基づいて入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路へ送出する命令を選択するセレクタと
を有することを特徴とするベクトルギャザー命令追い越し回路。
【請求項３】
スカラユニット，ベクトルユニットおよびメモリアクセスリクエスト生成回路を備えるベクトル処理装置において、
前記ベクトルユニットでベクトルギャザー命令のアドレスが揃うまで該ベクトルギャザー命令および後続の命令が待ち合わせるための命令バッファと、
前記命令バッファの各段に格納された命令の有効／無効を示す命令有効フラグを保持する第１のフリップフロップ群と、
前記スカラユニットから入力された命令がベクトルギャザー命令であるかどうかを判断する第１のデコーダと、
前記第１のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がベクトルギャザー命令であるかどうかを示すベクトルギャザー命令フラグを保持する第２のフリップフロップ群と、
前記スカラユニットから入力された命令がロード命令であるかどうかを判断する第２のデコーダと、
前記第２のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がロード命令であるかどうかを示すロード命令フラグを保持する第３のフリップフロップ群と、
前記ベクトルユニットからのベクトルギャザー命令発行許可をカウントし前記命令バッファに格納されているベクトルギャザー命令の発行可否状態を判断するベクトルギャザー命令発行判断回路と、
前記ベクトルギャザー命令発行判断回路の出力信号，前記命令有効フラグ，前記ベクトルギャザー命令フラグ，前記第２のデコーダの出力信号および前記ロード命令フラグに基づいて後続するロード命令による先行するベクトルギャザー命令の追い越しの可否を判定し、入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路に送出する命令を選択するためのセレクト信号を生成するセレクト信号生成回路と、
前記セレクト信号生成回路からのセレクト信号に基づいて入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路へ送出する命令を選択するセレクタと
を有することを特徴とするベクトルギャザー命令追い越し回路。
【請求項４】
前記命令バッファが、複数段のレジスタでなることを特徴とする請求項２または請求項３記載のベクトルギャザー命令追い越し回路。
【請求項５】
前記命令バッファが、ＲＡＭでなることを特徴とする請求項２または請求項３記載のベクトルギャザー命令追い越し回路。
【請求項６】
命令を出力するスカラユニットと、
前記スカラユニットから命令を入力してベクトルギャザー命令発行許可およびアドレスを出力するベクトルユニットと、
前記スカラユニットから命令を入力するとともに前記ベクトルユニットからベクトルギャザー命令発行許可を入力し、ベクトルギャザー命令が入力されたときに該ベクトルギャザー命令に対する命令発行許可がなければ該ベクトルギャザー命令を保持し、ロード命令が入力されたときに該ロード命令に先行するベクトルギャザー命令が保持されていれば該ロード命令を先行するベクトルギャザー命令を追い越して発行するベクトルギャザー命令追い越し回路と、
前記ベクトルギャザー命令追い越し回路から命令を入力するとともに前記ベクトルユニットから該ベクトルギャザー命令のアドレスを入力して、メモリアクセスリクエストを生成するメモリアクセスリクエスト生成回路と
を備えることを特徴とするベクトル処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はベクトルギャザー命令追い越し回路に関し、特にスカラユニット，ベクトルユニットおよびメモリアクセスリクエスト生成回路を備えるベクトル処理装置におけるベクトルギャザー命令追い越し回路に関する。
【０００２】
【従来の技術】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｅｒ  Ｕｎｉｔ）の処理能力の向上は、インテル社のチップに代表されるようにすさまじいものがあるが、ベクトル処理装置のＣＰＵについても同じことがいえる。ベクトルデータはそのデータ量からＣＰＵ内のキャッシュに納めることができないため、常にメモリにアクセスする必要があり、メモリアクセス性能に対する比重も高い。つまり、ベクトル処理装置においては、ＣＰＵ性能だけでなく、ＣＰＵに供給するデータの転送速度とのバランスが重要であり、ＣＰＵとメモリ間のデータ転送を効率よく行うことが望まれている。
【０００３】
従来から、ベクトルストア命令（主記憶へライトするためのデータをメモリアクセスリクエスト生成回路に供給するために待ち時間が必要）の追い越しに関する技術が数多く提案されている。
【０００４】
たとえば、このような先行技術として、特開平１０−２６９１９９号公報に開示された「命令追い越し処理回路」がある。この回路は、先行する主記憶アクセス命令のアクセス領域と後続する主記憶アクセス命令のアクセス領域とを比較し、両領域が重ならない場合には、先行する主記憶アクセス命令よりも先に後続する主記憶アクセス命令を実行させるようにしたものである。
【０００５】
また、他の先行技術として、特開平０９−２３１２０３号公報に開示された「ベクトルストア追い越し制御回路」がある。この回路は、ベクトルストア命令に対する後続のロード系命令のメモリアクセスに関する追い越しチェックの結果を待つことなく、後続のメモリリクエストを受け付けることができるようにしたものである。
【０００６】
しかし、上記２件の先行技術では、ベクトルストア命令を後続の命令が追い越すためには、主記憶のアクセスエリアが重複しているかどうか等の判断が必要になり、追い越すためのハードウェア量や追い越し可否判断時間も多くかかっていた。
【０００７】
一方、ベクトルロード命令の追い越しに関する先行技術としては、特許第２７４１７１７号に開示された「ベクトル処理装置」がある。この装置は、ベクトルロードデータをスカラユニットを経由してベクトルユニットのベクトルレジスタに格納するものであり、また、ベクトルロード命令のアドレス計算をスカラユニットの加算器を使用して算出しているものである。
【０００８】
ところで、ベクトル処理装置では、間接アドレッシングのベクトルロード命令、言い換えれば、ロードアドレスにベクトルレジスタの内容を使用してベクトルデータの１要素毎に任意のアドレスが指定できる命令（以下、ベクトルギャザー命令という）が使用されている。
【０００９】
ここで、図１０（ａ）および（ｂ）を参照して、通常のロード命令とベクトルギャザー命令との処理経路の違いを説明する。図１０（ａ）は通常のロード命令の処理経路、図１０（ｂ）はベクトルギャザー命令の処理経路を表したものである。通常のロード命令は、図１０（ａ）に示すように、スカラレジスタの内容あるいは即値をアドレスとして使用するため、スカラユニットＳＵ内でアドレスを生成でき、そこから命令をメモリアクセスリクエスト生成回路ＭＡへ送出できる。これに対して、ベクトルギャザー命令は、図１０（ｂ）に示すように、ベクトルレジスタの内容をアドレスとして使用するため、ベクトルレジスタからアドレスをデータとして読み出しメモリアクセスリクエスト生成回路ＭＡに送出する必要があり、メモリアクセスリクエスト生成回路ＭＡにアドレスが揃うまで、ここで余分な時間を費やしてしまうことがわかる。
【００１０】
そこで、間接アドレッシングのベクトルロード命令であるベクトルギャザー命令を後続のロード命令が追い越すことができるベクトル処理装置が望まれるが、上記特許第２７４１７１７号に開示されたベクトル処理装置では追い越すことはできなかった。なぜならば、ベクトルギャザー命令のアドレスは、１要素ずつランダムなアドレスであり、ベクトルレジスタに格納されているため、スカラユニットＳＵの加算器を使用して求まるものではないからである。
【００１１】
【発明が解決しようとする課題】
上述した従来のベクトル処理装置では、メモリアクセス処理を高速に行い、ＣＰＵとメモリ間のデータ転送を効率よく行うことができないという問題点があった。その理由は、間接アドレッシングのベクトルロード命令であるベクトルギャザー命令を後続のロード命令が追い越すことができなかったからである。
【００１２】
本発明の目的は、先行するベクトルギャザー命令を後続のロード命令が追い越すことができるようにしたベクトルギャザー命令追い越し回路を提供することにある。
【００１３】
本発明の他の目的は、先行するベクトルギャザー命令を後続のロード命令が追い越すことができるようにしたベクトルギャザー命令追い越し回路を備えるベクトル処理装置を提供することにある。
【００１４】
【課題を解決するための手段】
本発明のベクトルギャザー命令追い越し回路は、命令を出力するスカラユニットから命令を入力し、前記スカラユニットより命令を入力してベクトルギャザー命令発行許可を出力するベクトルユニットからベクトルギャザー命令発行許可を入力し、ベクトルギャザー命令が入力されたときに該ベクトルギャザー命令に対する命令発行許可がなければ該ベクトルギャザー命令を保持し、ロード命令が入力されたときに該ロード命令に先行するベクトルギャザー命令が保持されていれば該ロード命令を先行するベクトルギャザー命令を追い越してメモリアクセスリクエスト生成回路に対して発行することを特徴とする。
【００１５】
また、本発明のベクトルギャザー命令追い越し回路は、スカラユニット，ベクトルユニットおよびメモリアクセスリクエスト生成回路を備えるベクトル処理装置において、前記ベクトルユニットでベクトルギャザー命令のアドレスが揃うまで該ベクトルギャザー命令および後続の命令が待ち合わせるための命令バッファと、前記命令バッファの各段に格納された命令の有効／無効を示す命令有効フラグを保持する第１のフリップフロップ群と、前記スカラユニットから入力された命令がベクトルギャザー命令であるかどうかを判断する第１のデコーダと、前記第１のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がベクトルギャザー命令であるかどうかを示すベクトルギャザー命令フラグを保持する第２のフリップフロップ群と、前記スカラユニットから入力された命令がロード命令であるかどうかを判断する第２のデコーダと、前記第２のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がロード命令であるかどうかを示すロード命令フラグを保持する第３のフリップフロップ群と、前記ベクトルユニットからのベクトルギャザー命令発行許可をカウントし前記命令バッファに格納されているベクトルギャザー命令の発行可否状態を判断するベクトルギャザー命令発行判断回路と、前記ベクトルギャザー命令発行判断回路の出力信号，前記命令有効フラグ，前記ベクトルギャザー命令フラグおよび前記ロード命令フラグに基づいて後続するロード命令による先行するベクトルギャザー命令の追い越しの可否を判定し、入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路に送出する命令を選択するためのセレクト信号を生成するセレクト信号生成回路と、前記セレクト信号生成回路からのセレクト信号に基づいて入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路へ送出する命令を選択するセレクタとを有することを特徴とする。
【００１６】
さらに、本発明のベクトルギャザー命令追い越し回路は、スカラユニット，ベクトルユニットおよびメモリアクセスリクエスト生成回路を備えるベクトル処理装置において、前記ベクトルユニットでベクトルギャザー命令のアドレスが揃うまで該ベクトルギャザー命令および後続の命令が待ち合わせるための命令バッファと、前記命令バッファの各段に格納された命令の有効／無効を示す命令有効フラグを保持する第１のフリップフロップ群と、前記スカラユニットから入力された命令がベクトルギャザー命令であるかどうかを判断する第１のデコーダと、前記第１のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がベクトルギャザー命令であるかどうかを示すベクトルギャザー命令フラグを保持する第２のフリップフロップ群と、前記スカラユニットから入力された命令がロード命令であるかどうかを判断する第２のデコーダと、前記第２のデコーダの出力信号に基づいて前記命令バッファの各段に格納された命令がロード命令であるかどうかを示すロード命令フラグを保持する第３のフリップフロップ群と、前記ベクトルユニットからのベクトルギャザー命令発行許可をカウントし前記命令バッファに格納されているベクトルギャザー命令の発行可否状態を判断するベクトルギャザー命令発行判断回路と、前記ベクトルギャザー命令発行判断回路の出力信号，前記命令有効フラグ，前記ベクトルギャザー命令フラグ，前記第２のデコーダの出力信号および前記ロード命令フラグに基づいて後続するロード命令による先行するベクトルギャザー命令の追い越しの可否を判定し、入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路に送出する命令を選択するためのセレクト信号を生成するセレクト信号生成回路と、前記セレクト信号生成回路からのセレクト信号に基づいて入力された命令および前記命令バッファに蓄積された命令から前記メモリアクセスリクエスト生成回路へ送出する命令を選択するセレクタとを有することを特徴とする。
【００１７】
さらにまた、本発明のベクトルギャザー命令追い越し回路は、前記命令バッファが、複数段のレジスタでなることを特徴とする。
【００１８】
また、本発明のベクトルギャザー命令追い越し回路は、前記命令バッファが、ＲＡＭでなることを特徴とする。
【００１９】
一方、本発明のベクトル処理装置は、命令を出力するスカラユニットと、前記スカラユニットから命令を入力してベクトルギャザー命令発行許可およびアドレスを出力するベクトルユニットと、前記スカラユニットから命令を入力するとともに前記ベクトルユニットからベクトルギャザー命令発行許可を入力し、ベクトルギャザー命令が入力されたときに該ベクトルギャザー命令に対する命令発行許可がなければ該ベクトルギャザー命令を保持し、ロード命令が入力されたときに該ロード命令に先行するベクトルギャザー命令が保持されていれば該ロード命令を先行するベクトルギャザー命令を追い越して発行するベクトルギャザー命令追い越し回路と、前記ベクトルギャザー命令追い越し回路から命令を入力するとともに前記ベクトルユニットから該ベクトルギャザー命令のアドレスを入力して、メモリアクセスリクエストを生成するメモリアクセスリクエスト生成回路とを備えることを特徴とする。
【００２０】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００２１】
（１）第１の実施の形態
図２は、アドレスが揃うのを待つベクトルギャザー命令に後続するロード命令が存在する場合に、後続するロード命令の無駄な待ち時間を削除するために、ベクトルギャザー命令追い越し回路ＶＧを設ける場合のベクトル処理装置における配置関係を説明するブロック図である。通常のロード命令は、スカラユニットＳＵからベクトルデータの先頭のアドレスとデータ間の距離（要素間距離）とをもらい、これらから各要素のアドレスをメモリアクセスリクエスト生成回路ＭＡで作り出す。一方、ベクトルギャザー命令は、そのアドレスが要素毎にランダムであり、しかもベクトルユニットＶＵ内のベクトルレジスタに保存されているために、ベクトルユニットＶＵからアドレスを入力する。また、ベクトルユニットＶＵからベクトルギャザー命令追い越し回路ＶＧにベクトルギャザー命令発行許可を入力する。
【００２２】
図３（ａ）を参照すると、通常のロード命令の一例であるベクトルロード命令（ベクトルギャザー命令を除く）のフォーマットは、命令コードＯＰと、データを書き込むベクトルレジスタ番号Ｘと、要素間距離が格納されているスカラレジスタ番号Ｙと、ベクトルデータの先頭要素のアドレスが格納されているスカラレジスタ番号Ｚとから構成されている。
【００２３】
図３（ｂ）を参照すると、ベクトルギャザー命令のフォーマットは、命令コードＯＰと、データを書き込むベクトルレジスタ番号Ｘと、ベクトルデータのアドレスが格納されているベクトルレジスタ番号Ｙとから構成されている。
【００２４】
なお、先行するベクトルギャザー命令と後続のロード命令とがあった場合、プログラムがコンパイラによって事前にコンパイルされているので、先行するベクトルギャザー命令と後続のロード命令との間でレジスタの重複使用は事前に排除されている。このため、先行するベクトルギャザー命令を後続のロード命令が追い越す場合、使用するレジスタのチェックは必要ない。
【００２５】
図１は、本発明の第１の実施の形態に係るベクトルギャザー命令追い越し回路の構成を示す回路ブロック図である。本実施の形態に係るベクトルギャザー命令追い越し回路は、ベクトルギャザー命令のアドレスが揃うまで待ち合わせるための命令バッファを形成するレジスタ４００〜４０３（この例では４ワード）と、ベクトルギャザー命令を追い越すために必要な各種情報フラグを保持するフリップフロップ（以後、ＦＦと略記する）１００〜１０３，２００〜２０３，および３００〜３０３と、入力された命令がベクトルギャザー命令であることを判断するデコーダ５００と、入力された命令がベクトルロード命令であることを判断するデコーダ５０１と、ベクトルギャザー命令の発行可否状態を判断するベクトルギャザー命令発行判断回路５０２と、ベクトルギャザー命令の追い越し可否を判定し、メモリアクセスリクエスト生成回路ＭＡに送出する命令を選択するためのセレクト信号５０３−１を生成するセレクト信号生成回路５０３と、セレクト信号生成回路５０３からのセレクト信号に基づいて入力された命令および命令バッファに蓄積された命令からメモリアクセスリクエスト生成回路ＭＡへ送出する命令を選択し、メモリアクセスリクエスト生成回路ＭＡへ送出する命令を選択するセレクタ５０４とから構成されている。
【００２６】
ＦＦ１００〜１０３は、命令バッファのワード０であるレジスタ４００からワード３であるレジスタ４０３に対応した命令有効フラグ１００−１〜１０３−１を保持する。例えば、ＦＦ１００が保持する命令有効フラグ１００−１が“１”のとき、対応するレジスタ４００の命令は有効と見なす。ＦＦ１００〜１０３は、レジスタ４００〜４０３に対応した命令有効フラグ、つまり、どこのワード（レジスタ４００〜４０３）に有効な命令が存在するかを示すフラグである。命令０００―１が有効である場合に、何らかの要因でメモリアクセスリクエスト生成回路ＭＡに送出できなかったときに、レジスタ４００〜４０３でなる命令バッファに一時的に命令が格納される。この要因には３つあり、１つ目は命令０００―１がベクトルギャザー命令であった場合、２つ目は入力された命令０００―１に先行する命令がレジスタ４００〜４０３でなる命令バッファに存在する場合、３つ目は先行する命令はレジスタ４００〜４０３でなる命令バッファに存在しないが、メモリアクセスリクエスト生成回路ＭＡが命令を受け付けられない状態であった場合であり、これらの場合に命令０００―１はレジスタ４００〜４０３でなる命令バッファに一時的に格納される。
【００２７】
次に、レジスタ４００〜４０３でなる命令バッファへの命令の格納のされ方は、通常のＦＩＦＯバッファと同じで、初めの命令はレジスタ４００に格納され、次の命令はレジスタ４０１に、さらに次の命令はレジスタ４０２に、またさらに次の命令はレジスタ４０３にと順に格納されていく。レジスタ４００の命令がメモリアクセスリクエスト生成回路ＭＡに送出されると、レジスタ４０１の命令がレジスタ４００に、レジスタ４０２の命令がレジスタ４０１に、レジスタ４０３の命令がレジスタ４０２にと順に移動されていく。ただし、ベクトルギャザー命令の追い越しのタイミングだけは、命令の順番が入れ替わる。これらの命令の動きに対応して、ＦＦ１００〜１０３の命令有効フラグ１００−１〜１０３−１等も制御される。
【００２８】
ＦＦ２００〜２０３は、レジスタ４００〜４０３に対応し、レジスタ４００〜４０３に格納された命令がベクトルギャザー命令か否かを示すベクトルギャザー命令フラグ２００−１〜２０３−１を保持する。
【００２９】
セレクタ２１０〜２１２は、ＦＦ２００〜２０２に保持するベクトルギャザー命令フラグ２００−１〜２０２−１を選択的に切り換えるための回路であり、命令有効フラグ１０１−１〜１０３−１に応じてデコーダ５００の出力信号５００−１または前段のベクトルギャザー命令フラグ２０１−１〜２０３−１をＦＦ２００〜２０２に出力する。
【００３０】
ＦＦ３００〜３０３は、レジスタ４００〜４０３に対応し、レジスタ４００〜４０３に格納された命令がロード命令か否かを示すロード命令フラグ３００−１〜３０３−１を保持する。
【００３１】
セレクタ３１０〜３１２は、ＦＦ３００〜３０２に保持するロード命令フラグ３００−１〜３０２−１を選択的に切り換えるための回路であり、命令有効フラグ１０１−１〜１０３−１に応じてデコーダ５０１の出力信号５０１−１または前段のロード命令フラグ３０１−１〜３０３−１をＦＦ３００〜３０２に出力する。
【００３２】
レジスタ４００〜４０３は、命令を保持するためのレジスタで、ワード０〜３に対応している。
【００３３】
セレクタ４１０〜４１２は、レジスタ４００〜４０２に保持する命令を選択的に切り換えるための回路であり、命令有効フラグ１０１−１〜１０３−１に応じて入力された命令コード０００−１または前段のレジスタ４０１〜４０３に保持された命令を後段のレジスタ４００〜４０２に出力する。
【００３４】
デコーダ５００は、スカラユニットＳＵから入力された命令０００―１がベクトルギャザー命令であるかどうかを判断するデコーダであり、命令０００―１がベクトルギャザー命令のときに“１”となる出力信号５００−１を出力する。
【００３５】
デコーダ５０１は、スカラユニットＳＵから入力された命令０００―１がロード命令であるかどうかを判断するデコーダであり、命令０００―１がロード命令のときに“１”となる出力信号５０１−１を出力する。
【００３６】
ベクトルギャザー命令発行判断回路５０２は、ベクトルギャザー命令のアドレスがメモリアクセスリクエスト生成回路ＭＡに揃ったときにカウントアップするカウンタ（以下、ベクトルギャザー命令発行許可数カウンタという）の値が“０”か否かを判断する回路である。ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１が“０”のとき、先頭のベクトルギャザー命令は発行できる状態にあると判断する。ベクトルギャザー命令の発行許可を制御できるのはベクトルユニットＶＵのみであり、ベクトルギャザー命令がアドレスとして使用するベクトルレジスタのデータが確定しているかどうかという条件を検出して、ベクトルギャザー命令の処理を開始できるかどうかを判断する。ベクトルギャザー命令に先行する命令が、後続のベクトルギャザー命令がアドレスとして使用するベクトルレジスタを更新しようとする場合に、先行する命令が終了するのを待たなければならない。このようにベクトルユニットＶＵ内で、ベクトルギャザー命令が使用するベクトルレジスタのデータが確定しているかどうかを判断し、発行許可という形で、ベクトルギャザー命令発行判断回路５０２に送り込まれ、ここでベクトルギャザー命令発行許可数カウンタのカウントアップを行う。ベクトルギャザー命令をメモリアクセスリクエスト生成回路ＭＡに送出したならば、ベクトルギャザー命令発行許可数カウンタの値を１だけカウントダウンする。これにより、実行待ちのベクトルギャザー命令が存在しないときは、ベクトルギャザー命令発行判断回路５０２内のベクトルギャザー命令発行許可数カウンタは“０”になっている。
【００３７】
セレクト信号生成回路５０３は、ＦＦ１００〜１０３の命令有効フラグ１００−１〜１０３−１，ＦＦ２００〜２０３のベクトルギャザー命令フラグ２００−１〜２０３−１，ＦＦ３００〜３０３のロード命令フラグ３００−１〜３０３−１，およびベクトルギャザー命令発行判断回路５０２の出力信号５０２−１からレジスタ４００〜４０３でなる命令バッファあるいはベクトルギャザー命令追い越し回路に入力された命令０００−１のいずれかを選択するためのセレクト信号５０３−１を生成する回路である。
【００３８】
セレクタ５０４は、セレクト信号生成回路５０３からのセレクト信号５０３−１に基づいて、スカラユニットＳＵから入力された命令０００−１およびレジスタ４００〜４０３でなる命令バッファに蓄積された命令からメモリアクセスリクエスト生成回路ＭＡへ送出する命令を選択する回路である。
【００３９】
図４は、セレクト信号生成回路５０３の論理を表すテーブルである。このテーブルは、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１，ＦＦ１００〜１０３の命令有効フラグ１００−１〜１０３−１，ＦＦ２００〜２０３のベクトルギャザー命令フラグ２００−１〜２０３−１，およびＦＦ３００〜３０３のロード命令フラグ３００−１〜３０３−１の値を用いて、メモリアクセスリクエスト生成回路ＭＡへ送出する命令を判断する。ベクトルギャザー命令と後続のロード命令との間に、ベクトルギャザー命令以外の命令が存在する場合には、追い越しを行わないことを示しているが、ベクトルギャザー命令が２命令あるいは３命令連続している場合に、後続のロード命令は、この２命令あるいは３命令のベクトルギャザー命令を１マシンサイクルで追い越すことができることも示している。
【００４０】
図５は、レジスタ４０１のベクトルロード命令がレジスタ４００のベクトルギャザー命令を追い越す場合のタイムチャートを、従来の技術による同様の場合と比較して示す図である。
【００４１】
図６は、レジスタ４０２のベクトルロード命令がレジスタ４００および４０１のベクトルギャザー命令を追い越す場合のタイムチャートを、従来の技術による同様の場合と比較して示す図である。
【００４２】
図７は、レジスタ４０３のベクトルロード命令がレジスタ４００，４０１および４０２のベクトルギャザー命令を追い越す場合のタイムチャートを、従来の技術による同様の場合と比較して示す図である。
【００４３】
次に、このように構成された第１の実施の形態に係るベクトルギャザー命令追い越し回路の動作について、図１ないし図７を参照して説明する。
【００４４】
まず、レジスタ４００〜４０３でなる命令バッファに命令が存在しない場合の動作について説明する。
【００４５】
レジスタ４００〜４０３でなる命令バッファに他の命令が存在しない場合、ベクトルギャザー命令以外の命令はアドレスが揃うのを待つ必要がないため、入力された命令０００―１は、レジスタ４００〜４０３に格納されることなく、セレクタ５０４を抜け、メモリアクセスリクエスト生成回路ＭＡへ送出される。
【００４６】
次に、レジスタ４００〜４０３でなる命令バッファにベクトルギャザー命令以外の命令が１命令でも存在する場合の動作について説明する。
【００４７】
レジスタ４００〜４０３でなる命令バッファにベクトルギャザー命令以外の命令が１命令でも存在する場合、レジスタ４００〜４０３でなる命令バッファは通常のＦＩＦＯバッファと同じ動きをするため、入力された命令０００−１は先行する最終命令の次のワードに書き込まれ、先行する命令がメモリアクセスリクエスト生成回路ＭＡに送出されるたびに前段のワードへ移動される。このとき、ＦＦ１００〜１０３の命令有効フラグ１００−１〜１０３−１，ＦＦ２００〜２０３のベクトルギャザー命令フラグ２００−１〜２０３−１，およびＦＦ３００〜３０３のロード命令フラグ３００−１〜３０３−１も命令と同期して移動される。
【００４８】
例えば、レジスタ４００および４０１に先行する命令が存在する場合、入力された命令０００−１はレジスタ４０２に格納され、レジスタ４００の命令がメモリアクセスリクエスト生成回路ＭＡへ送出されたタイミングで、レジスタ４０１の命令はレジスタ４００へ、レジスタ４０２の命令はレジスタ４０１へ移動される。レジスタ４００の命令がメモリアクセスリクエスト生成回路ＭＡへ送出されたタイミングで、レジスタ４０１の命令はレジスタ４００へ移動される。レジスタ４００の命令がメモリアクセスリクエスト生成回路ＭＡへ送出されると、レジスタ４００〜４０３でなる命令バッファ内は空となり、次の命令０００−１が入力されるまで、待機状態となる。
【００４９】
続いて、ベクトルギャザー命令の追い越しの動作について説明する。
【００５０】
レジスタ４００〜４０３でなる命令バッファにベクトルギャザー命令が存在する場合でも、ベクトルギャザー命令がレジスタ４００に格納されるまでは、前述した通常のＦＩＦＯバッファと同じ動作を行うため、説明は省略する。
【００５１】
第１の実施の形態に係るベクトルギャザー命令追い越し回路では、ベクトルギャザー命令の追い越しには、３つのパタンが存在する。以下、ロード命令の一例であるベクトルロード命令（ベクトルギャザー命令を除く）が、ベクトルギャザー命令を追い越す３つのパタンについて説明する。
【００５２】
図５は、第１の追い越しパタンを示す。図５（ａ）は本発明による追い越しを行った場合のタイムチャートであり、図５（ｂ）は従来技術によるタイムチャートを示す。
【００５３】
図５（ａ）において、マシンサイクル０ですでにレジスタ４００にベクトルギャザー命令ＶＧＴ０が存在し、マシンサイクル１でレジスタ４０１にベクトルロード命令ＶＬＤ０が格納されたものとする。すると、命令有効フラグ１００−１および１０１−１が“１”および“１”、ベクトルギャザー命令フラグ２００−１および２０１−１が“１”および“０”、ロード命令フラグ３００−１および３０１−１が“０”および“１”となる。この時点では、まだベクトルギャザー命令ＶＧＴ０が発行できない状態であると仮定すると、ベクトルギャザー命令発行許可数カウンタの値が“０”であるため、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１が“１”となる。このため、セレクト信号生成回路５０３は、レジスタ４０１の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する（図４参照）。セレクタ５０４は、レジスタ４０１に格納されているベクトルロード命令ＶＬＤ０を選択して、メモリアクセスリクエスト生成回路ＭＡに送出する。
【００５４】
ベクトルギャザー命令ＶＧＴ０の発行が可能な状態になり、マシンサイクル４においてベクトルギャザー命令発行許可数カウンタの値が“１”となると、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１は“０”となる。このため、セレクト信号生成回路５０３は、レジスタ４００の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する（図４参照）。セレクタ５０４は、レジスタ４００に格納されているベクトルギャザー命令ＶＧＴ０を選択し、メモリアクセスリクエスト生成回路ＭＡに送出する。
【００５５】
図５（ａ）と図５（ｂ）とを比べると、本発明による追い越しを行った場合のタイムチャートの方が、従来の技術によるタイムチャートより、ベクトルロード命令ＶＬＤ０がメモリアクセスリクエスト生成回路ＭＡに送出されるタイミングが４マシンサイクル早くなっている。この違いは、ベクトルギャザー命令の発行が可能になるタイミングが遅くなればなるほど、広がっていく。
【００５６】
図６は、第２の追い越しパタンを示す。図６（ａ）は本発明による追い越しを行った場合のタイムチャートであり、図６（ｂ）は従来の技術によるタイムチャートを示す。
【００５７】
図６（ａ）において、マシンサイクル０ですでにレジスタ４００および４０１にそれぞれにベクトルギャザー命令ＶＧＴ０およびＶＧＴ１が存在し、マシンサイクル１でレジスタ４０２にベクトルロード命令ＶＬＤ０が格納されたものとする。すると、命令有効フラグ１００−１，１０１−１および１０２−１が“１”，“１”および“１”、ベクトルギャザー命令フラグ２００−１，２０１−１および２０２−１が“１”，“１”および“０”、ロード命令フラグ３００−１，３０１−１および３０２−１が“０”，“０”および“１”となる。この時点では、まだベクトルギャザー命令ＶＧＴ０およびＶＧＴ１が発行できない状態と仮定すると、ベクトルギャザー命令発行許可数カウンタの値が“０”であるため、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１が“１”となる。このため、セレクト信号生成回路５０３は、レジスタ４０２の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する（図４参照）。セレクタ５０４は、レジスタ４０２に格納されているベクトルロード命令ＶＬＤ０を選択して、メモリアクセスリクエスト生成回路ＭＡに送出する。
【００５８】
ベクトルギャザー命令ＶＧＴ０の発行が可能な状態になり、マシンサイクル４においてベクトルギャザー命令発行許可数カウンタの値が“１”となると、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１は“０”となる。このため、セレクト信号生成回路５０３は、レジスタ４００の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する（図４参照）。セレクタ５０４は、レジスタ４００に格納されているベクトルギャザー命令ＶＧＴ０を選択して、メモリアクセスリクエスト生成回路ＭＡに送出する。このとき、レジスタ４０１に格納されているベクトルギャザー命令ＶＧＴ１はレジスタ４００に移動され、ベクトルギャザー命令発行許可数カウンタの値が“０”にカウントダウンされる。
【００５９】
ベクトルギャザー命令ＶＧＴ１の発行が可能な状態になり、マシンサイクル９においてベクトルギャザー命令発行許可数カウンタの値が“１”となると、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１は“０”となる。このため、セレクト信号生成回路５０３は、レジスタ４００の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する（図４参照）。セレクタ５０４は、レジスタ４００に格納されているベクトルギャザー命令ＶＧＴ１を選択して、メモリアクセスリクエスト生成回路ＭＡに送出する。このとき、ベクトルギャザー命令発行許可数カウンタの値が“０”にカウントダウンされる。
【００６０】
図６（ａ）と図６（ｂ）と比べると、本発明による追い越しを行った場合のタイムチャートの方が、従来の技術によるタイムチャートより、ベクトルロード命令ＶＬＤ０がメモリアクセスリクエスト生成回路ＭＡに送出されるタイミングが９マシンサイクル早くなっている。この違いは、ベクトルギャザー命令の発行が可能になるタイミングが遅くなればなるほど、広がっていく。
【００６１】
図７は、第３の追い越しパタンを示す。図７（ａ）は本発明による追い越しを行った場合のタイムチャート、図７（ｂ）は従来の技術によるタイムチャートを示す。
【００６２】
図７（ａ）において、マシンサイクル０ですでにレジスタ４００，４０１および４０２にそれぞれにベクトルギャザー命令ＶＧＴ０，ＶＧＴ１およびＶＧＴ２が存在し、マシンサイクル１でレジスタ４０３にベクトルロード命令ＶＬＤ０が格納されたものとする。すると、命令有効フラグ１００−１，１０１−１，１０２−１および１０３−１が“１”，“１”，“１”および“１”、ベクトルギャザー命令フラグ２００−１，２０１−１，２０２−１および２０３−１が“１”，“１”，“１”および“０”、ロード命令フラグ３００−１，３０１−１，３０２−１および３０３−１が“０”，“０”，“０”および“１”となる。この時点では、まだベクトルギャザー命令ＶＧＴ０，ＶＧＴ１およびＶＧＴ２が発行できない状態と仮定すると、ベクトルギャザー命令発行許可数カウンタの値が“０”であるため、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１が“１”となる。このため、セレクト信号生成回路５０３は、レジスタ４０３の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する（図４参照）。セレクタ５０４は、レジスタ４０３に格納されているベクトルロード命令ＶＬＤ０を選択して、メモリアクセスリクエスト生成回路ＭＡに送出する。
【００６３】
ベクトルギャザー命令ＶＧＴ０の発行が可能な状態になり、マシンサイクル４においてベクトルギャザー命令発行許可数カウンタの値が“１”となると、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１は“０”となる。このため、セレクト信号生成回路５０３は、レジスタ４００の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する。セレクタ５０４は、レジスタ４００に格納されているベクトルギャザー命令ＶＧＴ０を選択し、メモリアクセスリクエスト生成回路ＭＡに送出する（図４参照）。このとき、レジスタ４０１に格納されているベクトルギャザー命令ＶＧＴ１はレジスタ４００に、レジスタ４０２に格納されているベクトルギャザー命令ＶＧＴ２はレジスタ４０１にそれぞれ移動され、ベクトルギャザー命令発行許可数カウンタの値が“０”にカウントダウンされる。
【００６４】
ベクトルギャザー命令ＶＧＴ１の発行が可能な状態になり、マシンサイクル９においてベクトルギャザー命令発行許可数カウンタの値が“１”となると、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１は“０”となる。このため、セレクト信号生成回路５０３は、レジスタ４００の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する。セレクタ５０４は、レジスタ４００に格納されているベクトルギャザー命令ＶＧＴ１を選択し、メモリアクセスリクエスト生成回路ＭＡに送出する（図４参照）。このとき、レジスタ４０１に格納されているベクトルギャザー命令ＶＧＴ２はレジスタ４００に移動され、ベクトルギャザー命令発行許可数カウンタの値が“０”にカウントダウンされる。
【００６５】
ベクトルギャザー命令ＶＧＴ２の発行が可能な状態になり、マシンサイクル１５においてベクトルギャザー命令発行許可数カウンタの値が“１”となると、ベクトルギャザー命令発行判断回路５０２の出力信号５０２−１は“０”となる。このため、セレクト信号生成回路５０３は、レジスタ４００の出力を選択するセレクト信号５０３−１をセレクタ５０４に出力する。セレクタ５０４は、レジスタ４００に格納されているベクトルギャザー命令ＶＧＴ２を選択し、メモリアクセスリクエスト生成回路ＭＡに送出する。このとき、ベクトルギャザー命令発行許可数カウンタの値が“０”にカウントダウンされる。
【００６６】
図７（ａ）と図７（ｂ）とを比べると、本発明による追い越しを行った場合のタイムチャートの方が、従来の技術によるタイムチャートより、ベクトルロード命令ＶＬＤ０がメモリアクセスリクエスト生成回路ＭＡに送出されるタイミングが１４マシンサイクル早くなっている。この違いは、ベクトルギャザー命令の発行が可能になるタイミングが遅くなればなるほど、広がっていく。
【００６７】
（２）  第２の実施の形態
ところで、第１の実施の形態に係るベクトルギャザー命令追い越し回路では、先行するベクトルギャザー命令に後続するロード命令を必ずレジスタ４０１〜４０３でなる命令バッファに一度格納してから追い越しを行うようにしたが、命令バッファに格納せずに、セレクタ５０４に直接入力してメモリアクセスリクエスト生成回路ＭＡに送出することも可能である。
【００６８】
図８は、このようにした本発明の第２の実施の形態に係るベクトルギャザー命令追い越し回路の構成を示す回路ブロック図である。本実施の形態に係るベクトルギャザー命令追い越し回路は、図１に示した第１の実施の形態に係るベクトルギャザー命令追い越し回路に対して、デコーダ５０１の出力信号５０１−１がセレクト信号生成回路５０３に直接入力されている点だけが異なる。したがって、その他の部分は、同一符号を付して詳しい説明を割愛する。
【００６９】
図９は、第２の実施の形態に係るベクトルギャザー命令追い越し回路におけるセレクト信号生成回路５０３の論理を表すテーブルである。このテーブルは、図４に示した第１の実施の形態に係るベクトルギャザー命令追い越し回路におけるセレクト信号生成回路５０３の論理を表すテーブルに対して、デコーダ５０１の出力信号５０１−１が判断の１要素として加味されている点だけが異なっている。
【００７０】
このように構成された第２の実施の形態に係るベクトルギャザー命令追い越し回路では、デコーダ５０１の出力信号５０１−１をセレクト信号生成回路５０３に直接入力することにより、セレクト信号生成回路５０３は、入力された命令０００―１がロード命令であるかどうかを直ちに判断できる。また、セレクト信号生成回路５０３では、ＦＦ２００〜２０３のベクトルギャザー命令フラグ２００−１〜２０３−１からどこのワードにベクトルギャザー命令が存在しているかを判断でき、さらにベクトルギャザー命令発行判断回路５０２の出力信号５０２−１からベクトルギャザー命令の発行許可がきているかどうかも判断できる。したがって、命令０００―１がロード命令で、先行するベクトルギャザー命令を追い越せる場合は、セレクタ５０４が命令０００―１を選択するように制御することにより、後続のロード命令を命令バッファに格納せずにセクタ５０４に直接入力し、メモリアクセスリクエスト生成回路ＭＡに送出することが実現できる。
【００７１】
ところで、上記各実施の形態では、命令バッファを４ワードとしたが、命令バッファのワード数は任意に設定することができる。
【００７２】
また、上記各実施の形態では、命令バッファをレジスタ４００〜４０３で構成するようにしたが、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成することも可能である。ここでいうＲＡＭは、一般のＣＰＵ内のキャッシュなどに使用されている記憶回路であり、容量はそれほど大きくなくてよく、幅は命令分、ワードは数ワードあれば十分である。
【００７３】
【発明の効果】
第１の効果は、少量のハードウェアで、メモリアクセスリクエストを効率良く処理することが可能になることである。その理由は、ベクトルギャザー命令をメモリアクセスリクエスト生成回路に送出できない場合に、後続のロード命令をベクトルギャザー命令に先行してメモリアクセスリクエスト生成回路に送出することにより、メモリアクセスリクエスト生成回路の無駄な空き時間を無くすことができるためである。
【００７４】
第２の効果は、ベクトルギャザー命令を後続のロード命令が追い越すため、メモリのアクセスエリアのチェックも必要なく、少量のハードウェアでかつ追い越し可否判断時間も短いことである。その理由は、プログラムがコンパイラによって事前にコンパイルされているので、先行するベクトルギャザー命令と後続のロード命令との間でレジスタの重複使用をチェックする必要がないからである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るベクトルギャザー命令追い越し回路の構成を示す回路ブロック図である。
【図２】本発明によるベクトルギャザー命令追い越し回路の配置関係を説明するブロック図である。
【図３】（ａ）はベクトルロード命令のフォーマットを、（ｂ）はベクトルギャザー命令のフォーマットをそれぞれ示す図である。
【図４】図１中のセレクト信号生成回路の論理を表すテーブルである。
【図５】（ａ）はベクトルロード命令がベクトルギャザー命令を追い越す場合のタイムチャート、（ｂ）は従来の技術による同様の場合のタイムチャートである。
【図６】（ａ）はベクトルロード命令が２つのベクトルギャザー命令を追い越す場合のタイムチャート、（ｂ）は従来の技術による同様の場合のタイムチャートである。
【図７】（ａ）はベクトルロード命令が３つのベクトルギャザー命令を追い越す場合のタイムチャート、（ｂ）は従来の技術による同様の場合のタイムチャートである。
【図８】本発明の第２の実施の形態に係るベクトルギャザー命令追い越し回路の構成を示す回路ブロック図である。
【図９】図８中のセレクト信号生成回路の論理を表すテーブルである。
【図１０】（ａ）は通常のロード命令の処理経路、（ｂ）は従来のベクトルギャザー命令の処理経路を説明するブロック図である。
【符号の説明】
１００〜１０３  フリップフロップ
１００−１〜１０３−１  命令有効フラグ
２００〜２０３  フリップフロップ
２００−１〜２０３−１  ベクトルギャザー命令フラグ
２１０〜２１２  セレクタ
３００〜３０３  フリップフロップ
３００−１〜３０３−１  ロード命令フラグ
３１０〜３１２  セレクタ
４００〜４０３  レジスタ
４１０〜４１３  セレクタ
５００  デコーダ
５００−１  出力信号
５０１  デコーダ
５０１−１  出力信号
５０２  ベクトルギャザー命令発行判断回路
５０２−１  出力信号
５０３  セレクト信号生成回路
５０３−１  セレクト信号
５０４  セレクタ
ＭＡ  メモリアクセスリクエスト生成回路
ＳＵ  スカラユニット
ＶＧ  ベクトルギャザー命令追い越し回路
ＶＵ  ベクトルユニット
【図１】
0003789315.tif 000002
【図２】
0003789315.tif 000003
【図３】
0003789315.tif 000004
【図４】
0003789315.tif 000005
【図５】
0003789315.tif 000006
【図６】
0003789315.tif 000007
【図７】
0003789315.tif 000008
【図８】
0003789315.tif 000009
【図９】
0003789315.tif 000010
【図１０】
0003789315.tif 000011