(57)【特許請求の範囲】
【請求項１】
受信した命令に基づいてメインメモリからベクトルデータを読み出すメモリアクセス制御部と、
前記メモリアクセス制御部が読み出した前記ベクトルデータを格納するロードバッファと、
ベクトル演算レジスタを備え、前記ロードバッファから前記ベクトル演算レジスタに転送された前記ベクトルデータをベクトル処理するベクトル処理部と、
前記受信した命令において処理される前記ベクトルデータの全要素を格納するために必要な前記ロードバッファを、前記ロードバッファを所定の要素数毎に区分けしたサブロードバッファを単位として確保し、確保された前記サブロードバッファを示す確保通知を生成するベクトルロードリクエスト処理部と、
前記ベクトルデータを構成する複数の要素を、前記サブロードバッファを単位とする複数の要素群に分け、前記複数の要素群のうちで全ての要素が前記メモリアクセス制御部により前記メインメモリから読み出された要素群について整列通知を発行するロードデータ整列判定部と、
前記確保通知に示された前記サブロードバッファに対応する前記整列通知が発行されたとき、前記整列通知に対応する前記サブロードバッファから前記ベクトル処理部への転送を開始するように制御するベクトル命令発行部
を具備するベクトル処理装置。
【請求項２】
前記ベクトル命令発行部は、前記ベクトルデータを前記複数の要素群に分けて前記転送を行ったとき、前記受信した命令に従って実行される前記ベクトル処理の結果が、仕掛かり中のベクトルロード命令が使用する前記ベクトル演算レジスタが先行するベクトル命令と競合しなくなったことを条件として、前記ロードバッファから前記ベクトル処理部への転送を開始するように制御する
請求項１に記載されたベクトル処理装置。
【請求項３】
前記ベクトル命令発行部は、前記転送を開始したとき、前記転送が開始された前記ロードバッファを後続のベクトルロード命令で使用できるように解放する制御を行う
請求項２に記載されたベクトル処理装置。
【請求項４】
受信した命令に基づいてメインメモリからベクトルデータを読み出すステップと、
前記読み出すステップにおいて読み出された前記ベクトルデータをロードバッファに格納するステップと、
前記ロードバッファからベクトル演算レジスタに転送された前記ベクトルデータをベクトル処理するステップと、
前記受信した命令において処理される前記ベクトルデータの全要素を格納するために必要なロードバッファを、前記ロードバッファを所定の要素数毎に区分けしたサブロードバッファを単位として確保し、確保された前記サブロードバッファを示す確保通知を生成するステップと、
前記ベクトルデータを構成する複数の要素を、前記サブロードバッファを単位とする複数の要素群に分け、前記複数の要素群のうちで全ての要素が前記メモリアクセス制御部により前記メインメモリから読み出された要素群について整列通知を発行するステップと、
前記確保通知に示された前記サブロードバッファに対応する前記整列通知が発行されたとき、前記整列通知に対応する前記サブロードバッファから前記ベクトル処理部への転送を開始するように制御するステップと
を具備するベクトル処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はベクトル演算処理に関する。
【背景技術】
【０００２】
一般にベクトル処理装置は、主記憶装置からロードしたベクトルデータやベクトル演算中の中間結果などを保持する複数のベクトル演算レジスタと、ベクトル演算レジスタに保持されたベクトルデータに対する演算を行うベクトル演算器とを備える。
【０００３】
メモリへアクセスしてから読み出しデータが帰ってくるまでの時間はメモリアクセスＴＡＴと呼ばれる。近年のベクトル型コンピュータでは、動作クロックの高速化にともなって、メモリアクセスＴＡＴが命令処理時間に対して相対的に長くなる傾向がある。
【０００４】
特許文献１には、主記憶装置からベクトル演算レジスタへのロードを高速化するために、メインメモリとベクトル演算レジスタとの間にベクトルデータを一時的に格納するロードバッファを備えるベクトル処理装置が記載されている。ロードバッファは、ベクトルデータの全ての要素が揃った条件と、転送先のベクトル演算レジスタのリソースが空いた条件の両方が整ってベクトル演算レジスタにベクトルデータが転送されるまで、一時的にデータをバッファリングする機能を持つ。
【０００５】
特許文献２には、ベクトルデータバッファの物量の増加を防ぎ、利用効率を向上させることのできるベクトル処理装置を提供することを目的とした技術が記載されている。このベクトル処理装置は、命令により指令された配列データの配列系統数を保持する配列系統数保持手段と、その配列系統数保持手段により保持された値により複数の配列系統ごとにベクトルデータバッファを分割し、配列データの入出力を制御する分割制御手段を備えることを特徴とする。
【特許文献１】特開２００５−２５６９３号公報
【特許文献２】特開平６−２７４５２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
近年のベクトル型コンピュータでは、動作クロックの高速化にともなって、メモリへアクセスしてから読み出しデータが帰ってくるまでの時間（メモリアクセスＴＡＴ）が命令処理時間に対して相対的に長くなる傾向がある。
【０００７】
ロードバッファは、演算器を有効に活用するために演算命令に先行して発行されるベクトルロード命令によってメモリから帰ってくるロードデータを一時的にバッファリングすることによってメモリアクセスＴＡＴを隠蔽する役割を担う。相対的に長くなったメモリアクセスＴＡＴを隠蔽するためには、より大容量のロードバッファが必要とされる。限られたチップ面積を有効に活用するために、ロードバッファを効率的に利用し、ロードバッファ容量の増加を抑制することが求められる。
【０００８】
ロードバッファを有するベクトル処理装置は、ベクトルロード命令で指定された要素が全てロードバッファに格納されたことを確認して、ロードバッファからベクトル演算レジスタへの転送を開始する。こうした処理では、メモリインタリーブが効かないようなアドレスに対するロードであった場合や、要素数の大きいベクトルロード命令の場合、全ての要素がロードバッファに格納されるまでに時間を要してしまう。その結果、ロードバッファからベクトル演算レジスタへの転送が遅れてしまい、そのロードデータを使う後続命令の実行も遅くなってしまうという問題点があった。
【０００９】
本発明の目的は、ベクトル演算器特有のロードバッファの使用効率を向上させることでシステム全体としての性能の向上を可能とするシステムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明によるベクトル処理装置は、受信した命令に基づいてメインメモリからベクトルデータを読み出すメモリアクセス制御部と、メモリアクセス制御部が読み出したベクトルデータを格納するロードバッファと、ベクトル演算レジスタを備えロードバッファからベクトル演算レジスタに転送されたベクトルデータをベクトル処理するベクトル処理部と、ベクトルデータを構成する複数の要素を複数の要素群に分け、複数の要素群のうちで全ての要素がメモリアクセス制御部によりメインメモリから読み出された要素群に対して、ロードバッファからベクトル処理部への転送を開始するように制御するベクトル命令発行部とを備える。
【００１１】
本発明によるベクトル処理方法は、受信した命令に基づいてメインメモリからベクトルデータを読み出すステップと、メモリアクセス制御部が読み出したベクトルデータをロードバッファに格納するステップと、ロードバッファからベクトル演算レジスタに転送されたベクトルデータをベクトル処理するステップと、ベクトルデータを構成する複数の要素を複数の要素群に分け、複数の要素群のうちで全ての要素がメモリアクセス制御部によりメインメモリから読み出された要素群に対して、ロードバッファからベクトル処理部への転送を開始するように制御するステップとを備える。
【発明の効果】
【００１２】
本発明により、ベクトルロード命令のデータを使った後続のベクトル演算命令を早く実行可能となるためベクトル演算器の使用効率が向上し、システムトータルの性能を向上させることが可能となる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態について図面を参照して詳細に説明する。図１を参照すると、本発明の一実施の形態としての構成概略図が示されている。本実施の形態におけるベクトル処理装置は、命令デコード部１、ベクトルロードリクエスト処理部２、ロードデータ整列判定部３、ベクトル命令発行部４、ベクトル命令処理部５、メモリアクセス制御部６及びメインメモリ７を備える。
【００１４】
命令デコード部１は入力した命令列をデコードする。命令デコード部１は、デコードした命令がベクトルロード命令を含むベクトル命令の場合は、そのベクトル命令１２と付随情報とをベクトル命令発行部４に送出する。命令デコード部１は、デコードした命令がベクトルロード命令の場合は、そのベクトルロード命令１１と付随情報とをベクトルロードリクエスト処理部２に送出する。命令デコード部１は、ベクトルロードリクエスト処理部２からビジー信号１０を受け取った場合は、ベクトルロード命令の送出を一時的に止める機能を持つ。
【００１５】
ベクトルロードリクエスト処理部２は、命令デコード部１よりベクトルロード命令１１と付随情報とを受信すると、その命令によってロードされるベクトルデータを格納するためのロードバッファを確保する処理を行う。この処理は、以下のように行われる。
【００１６】
受信した命令によってロードされるベクトルデータを構成する要素の数に基づいて、そのベクトルデータを格納するために必要なサブロードバッファ（例示：２５６ｂｉｔのロードバッファを４個に分けることによって用意される６４ｂｉｔ単位のサブロードバッファ）の数が算出される。複数存在するロードバッファの中から、算出された数のサブロードバッファの空きがあるロードバッファが、ロードをリクエストする宛先である確保済みロードバッファとして指定される。更に、確保済みロードバッファが有する空きサブロードバッファの中から、ベクトルデータを格納するために必要な数のサブロードバッファが確保済みサブロードバッファとして指定される。確保済みロードバッファを示す確保済みロードバッファ番号と、確保済みサブロードバッファを示す確保済みサブロードバッファ番号とを含むロードバッファ確保番号通知１３、２３がロードデータ判定部３とベクトル命令発行部４に送出される。
【００１７】
ベクトルロードリクエスト処理部２は、タグ及びアドレス１８を生成してメモリアクセス制御部６に送出する。アドレスは、ロードするベクトルデータを構成する複数の要素が格納されているメインメモリ７上の場所を示す。タグは、ロードするベクトルデータが格納されるロードバッファ上の宛先を示す確保済みロードバッファ番号と確保済みサブロードバッファ番号とを含む。必要な数のロードバッファが確保できなかった場合には、ベクトルロードリクエスト処理部２は、ビジー信号１０を命令デコード部１に送信する。
【００１８】
ロードデータ整列判定部３は、サブロードバッファ毎にロードされるベクトルデータの要素数を予め記憶し、メインメモリ７からサブロードバッファへベクトル要素が送出されたときにその要素数をデクリメントして残り要素数をモニタすることによって、サブロードバッファ単位ですべてのレジスタ領域にデータが送信されたことを認識する整列判定処理を行う。
【００１９】
より詳しくは、ロードデータ整列判定部３は、受信した確保番号通知１３で指定されている確保済みサブロードバッファ番号に対応する整列判定カウンタに、リプライ要素数分の値をセットする。メモリアクセス制御部６は、メインメモリ７からベクトルデータの要素を読み出してロードバッファの方に送出したときに、その宛先をタグ１９としてロードデータ整列判定部３に送出する。ロードデータ整列判定部３は、そのタグ１９をデコードし、サブロードバッファ番号毎に集計した値を整列判定カウンタにセットされた値から減算する。減算の結果が０となったら、リプライ予定の要素が全て揃ったと判定し、ベクトル命令発行部４に整列通知１５を送出する。
【００２０】
ベクトル命令発行部４は、以下のようにベクトル命令発行処理とロードバッファ解除処理とを行う。ベクトル命令発行部４は、命令デコード部１より、ベクトル演算命令やベクトルロード命令を含むベクトル命令１２を受け取る。ベクトル演算命令を受け取った場合は、必要に応じてベクトル演算レジスタなどの各種資源のビジー状況ならびに命令間の整合性を確認した上で、適切なタイミングでベクトル演算開始指示１７をベクトル命令処理部５に送出する。ベクトルロード命令を受け取った場合は、そのベクトルロード命令に対応するロードバッファ確保番号通知２３を受け取り、対応するロードバッファの整列通知１５ならびに転送先ベクトル演算レジスタ領域のビジー状況ならびに命令間の整合性を確認した上で、適切なタイミングでロードバッファ転送開始指示１６をベクトル命令処理部５に送出する。その際に転送を開始したロードバッファ番号をロードバッファ解放通知１４としてベクトルロードリクエスト処理部２に送出する。
【００２１】
ベクトル命令処理部５は、ロードバッファ５−１と、ベクトル演算レジスタ５−２とを備え、ベクトル演算レジスタ５−２に格納されたデータに対してベクトル演算処理を行う機能を有する。ベクトル命令処理部５は、以下のようにベクトル命令処理を行う。ロードバッファ転送開始指示１６を受け取ると、ロードバッファ５−１の指定された領域からロードデータを読み出して指定されたベクトル演算レジスタ領域に格納する。ベクトル演算開始指示１７を受け取ると、指定されたベクトル演算レジスタ領域からデータを読み出して所定のベクトル演算を行った結果を、指定されたベクトル演算レジスタ領域に格納する処理を行う。
【００２２】
メモリアクセス制御部６は、タグ及びアドレス１８を受け取る。タグ及びアドレス１８のアドレスには、読み出されるベクトルデータの各要素のメインメモリ７上のアドレスを示す情報であるデータ読み出しアドレス２１が示されている。受け取ったタグ及びアドレス１８に基づいて、データ読み出しアドレス２１がメインメモリ７に送出される。メモリアクセス制御部６は、メインメモリ７から読み出しデータ２２を受け取る。受け取った読み出しデータ２２と、タグ及びアドレス１８のタグに示される読み出しデータ２２の宛先とを含むタグ及びデータ２０が、ベクトル命令処理部５に送出される。更に、タグ及びアドレス１８において読み出しデータ２２に対応するタグ１９が、ロードデータ整列判定部３に送出される。メモリアクセス制御部６はインタリーブ機能を有しており、メインメモリ７上の分割された領域に対して並列的にアクセスすることが可能な機能を持つ。
【００２３】
メインメモリ７は、プログラムおよびベクトルデータを格納する。メインメモリ７は、メモリアクセス制御部６からデータ読み出しアドレス２１を受け取ると、そのアドレスのメモリ素子からデータを読み出して読み出しデータ２２としてメモリアクセス制御部６に送出する。メインメモリ７は、インタリーブ構成をとることができるように、複数に分割されたメモリ領域のそれぞれにアクセスポートを有する。
【００２４】
図２は、ロードデータ整列判定部３の詳細を示す。要素数セット部３０１は、受け取った確保番号通知１３に含まれる確保済みロードバッファ番号と確保済みサブロードバッファ番号により、ロードバッファ及びサブロードバッファの使用箇所を特定する。要素数セット部３０１は、受け取ったベクトルロード命令１１によりロードされるベクトルデータを構成する複数の要素を複数の確保済みサブロードバッファに分配して格納するために、各々の確保済みサブロードバッファに格納する要素の数であるサブロードバッファ格納予定要素数３５１を算出して、要素数減算カウンタ部３０２に送出する。
【００２５】
本実施の形態においては、ベクトルデータの最大要素数を２５６とし、ベクトルデータを分割してロードする分割単位であるサブロードバッファの要素数を６４とする。ロードするベクトルデータの要素数が１〜６４までの場合は１個の分割単位を、要素数が６５〜１２８までの場合は２個の分割単位を、要素数が１２９〜１９２までの場合は３個の分割単位を、要素数が１９３〜２５６までの場合は４個の分割単位を使用する。
【００２６】
メインメモリ７から読み出されたデータは、一つのロードバッファ５−１に対して、そのロードバッファ５−１の領域を所定の分割単位で分割したサブ領域であるサブロードバッファを単位として転送される。一つのロードバッファ５−１に対応する複数のサブロードバッファは、サブロードバッファ番号によってそれぞれ特定される。要素数セット部３０１は、ロードするベクトルデータの要素数を分割して、確保番号通知１３により指定されたサブロードバッファに割り当てることにより、サブロードバッファ格納予定要素数３５１を生成する。この割り当ては、サブロードバッファ番号がより若番の確保済みサブロードバッファから要素が６４個ずつ詰められるように行われる。要素数が６４で割り切れず端数が生じるケースでは、最も番号の大きい確保済みサブロードバッファ番号に端数が割り当てられる。
【００２７】
要素数減算カウンタ部３０２は、サブロードバッファと等しい数の整列判定カウンタと、整列判定カウンタの各々に対応する有効フラグとを備える。要素数減算カウンタ部３０２は、未確保のサブロードバッファの各々の有効フラグに“０”をセットし、確保済みサブロードバッファの各々に対応する有効フラグに“１”をセットする。要素数減算カウンタ部３０２は、有効フラグが“１”である各々の整列判定カウンタに、サブロードバッファ格納予定要素数３５１をセットする。
【００２８】
ロードバッファ番号振り分け部３０３は、複数のタグ１９を受け取る。複数のタグ１９の各々には、ロードするベクトルデータを構成する要素のうち、メインメモリ７から読み出された要素が格納されるロードバッファ５−１を特定する確保済みロードバッファ番号と確保済みサブロードバッファ番号とが含まれる。ロードバッファ番号振り分け部３０３は、複数のタグ１９をそれぞれデコードしてサブロードバッファ番号毎に振り分けて要素数カウンタ３０４に送る機能を有する。
【００２９】
要素数カウンタ３０４は、複数のロードバッファ５−１が備える複数のサブロードバッファのそれぞれに対応したカウンタを有する。それぞれのカウンタは、ロードバッファ番号振り分け部３０３がタグ１９を受け取る毎に、ロードバッファ番号振り分け部３０３で対応するサブロードバッファが振り分けの宛先となった回数３５２をカウントアップして、要素数減算カウンタ部３０２に送出する。ロードバッファ番号振り分け部３０３が同時に受け取り可能なタグ１９の数をＮとすると（即ちベクトルデータを構成するＮ個の要素に対応するタグを同時に受け取り可能であるとすると）、全てのタグ１９が同一サブロードバッファ番号宛であった場合にはカウントした値はＮとなる（最大値はＮ）。
【００３０】
整列判定部３０５は、各々のサブロードバッファに予定数（サブロードバッファ格納予定要素数３５１と同じ）のロードデータが格納されたことを判定する機能を持つ。この判定は、要素数減算カウンタ部３０２の各整列判定カウンタの値が“０”であることと、それに対応する有効フラグが“１”であることとを条件として成立する。この条件が成立すると、整列判定部３０５は、サブロードバッファに予定数の要素が全てロードされたことを示す整列通知１５をベクトル命令発行部４に通知する。
【００３１】
図３は、ベクトル命令発行部４を示す。ベクトル命令発行部４は、２つのベクトル演算命令発行待ちバッファ４１０、４３０と、２つのベクトルロード命令発行待ちバッファ４２０、４４０とを備えるものとする。命令バッファ部４０１は、命令デコード部１からベクトルロード命令を含むベクトル命令１２を受け取り、ベクトル演算命令発行待ちバッファ４１０、４３０にベクトル命令を、ベクトルロード命令発行待ちバッファ４２０、４４０にベクトルロード命令を格納するように制御する。
【００３２】
ベクトル命令バッファ部４０１は、ベクトル演算命令発行待ちバッファ４１０、４３０またはベクトルロード命令発行待ちバッファ４２０、４４０が発行待ちで使用中のため命令を格納できない場合は、ベクトル命令を受け取った順に（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔで）バッファリングする。このとき未発行要素識別フラグ４１２または未発行要素識別フラグ４２２に１つでも“１”がある場合は、未処理の要素番号帯があると判断して、ベクトル演算命令発行待ちバッファ４１０、４３０またはベクトルロード命令発行待ちバッファ４２０、４４０が発行待ちで使用中であると判断される。
【００３３】
ベクトル演算器ビジー管理部４０２は、図示していないベクトル演算器を使用中であることを示すビジーフラグを管理する機能を持つ。ベクトル演算器を使用中であることを示すベクトル演算器ビジー情報はベクトル演算命令発行チェック部４１５に送出されてベクトル演算命令発行チェックに使用される。ベクトル演算命令発行チェックにより、ベクトル演算器使用中に他の要素番号帯や別の命令によるベクトル演算が始まらないよう制御される。
【００３４】
ロードバッファ転送パスビジー管理部４０３は、ベクトル処理部５内にあるロードバッファ５−１からベクトル演算レジスタ５−２へロードデータを転送するために使用されるパスであるロードバッファ転送パスが使用中であることを示すビジーフラグを管理する機能を持つ。ロードバッファ転送パスのビジー状態を示すビジー情報はロードバッファ転送開始を行う際の発行チェックに使用される。この発行チェックにより、ロードバッファ転送中に同命令の別要素番号帯や別のベクトルロード命令によるロードバッファ転送が始まらないよう制御される。
【００３５】
ベクトル演算命令発行待ちバッファ４１０、４３０は、それぞれ、ベクトル演算命令情報バッファ４１１、未発行要素識別フラグ４１２、命令間整合性維持フラグ４１３、命令間整合性維持フラグチェック部４１４、及びベクトル演算命令発行チェック部４１５を含む。
【００３６】
ベクトルロード命令発行待ちバッファ４２０、４４０は、それぞれ、ベクトルロード命令情報バッファ４２１、未発行要素識別フラグ４２２、命令間整合性維持フラグ４２３、ロードバッファ番号４２４、ロードバッファ使用箇所指示フラグ４２５、命令間整合性維持フラグチェック部４２６、特定ロードバッファ転送条件確認部４２７、及びベクトルロード命令発行チェック部４２８を含む。
【００３７】
ベクトル演算命令情報バッファ４１１は、演算種別とベクトル演算命令で読み書きするベクトル演算レジスタ情報とを格納する。
【００３８】
未発行要素識別フラグ４１２は、２５６の要素の帯からなるベクトルデータを６４要素を分割単位として分割することにより形成された４つの要素番号帯に対応して設置される。未だ演算開始指示が発行されていない要素番号帯に対応するフラグ値が“１”となるよう制御される。
【００３９】
命令間整合性維持フラグ４１３は、６４要素を分割単位として形成された４つの要素番号帯に対応し、かつ４１０以外の命令発行待ちバッファ４２０、４３０、４４０に対応して設置される。先行命令とデータ整合性上命令実行順序を守る必要がある（ベクトル演算レジスタ競合関係がある）場合には、対応するフラグ値が有効となるよう制御される。
【００４０】
命令間整合性維持フラグチェック部４１４は、以下のように命令間整合性処理を行う。命令間整合性維持フラグ４１３のフラグ情報が無効の場合、該当する分割単位に対応する命令発行許可信号をベクトル演算命令発行チェック部４１５に対して送出する。
【００４１】
命令間整合性維持フラグ４１３のフラグ情報が有効であった場合は、先行してベクトルロード命令発行待ちバッファ４２０に格納され実行待ちであるベクトルロード命令転送先のベクトル演算レジスタ領域と、後続のベクトル演算命令で読み込むまたは書き込むベクトル演算レジスタ領域とが一致しているために、データ整合性を保つ必要性から命令発行の順番を守らなければならないことが示されている。従って、先行のベクトルロード命令が発行されない限りベクトル演算命令発行待ちバッファ４１０に格納された後続のベクトル演算命令は発行されない。こうした処理により、仕掛かり中のベクトルロード命令が使用するベクトル演算レジスタが先行するベクトル処理と競合するときには、後続のベクトル演算命令の実行を保留することが可能である。
【００４２】
本実施の形態ではベクトルデータを構成する２５６の要素を６４要素を分割単位として分割することにより４つの要素番号帯が形成される。例えばベクトルロード命令と後続のベクトル演算命令のデータ整合性を維持する必要があった場合、最初の６４要素に対する先行のベクトルロード命令が発行されると最初の６４要素に対応する命令間整合性維持フラグ４１３が無効となり、ベクトル演算命令の最初の６４要素に対応する命令発行許可信号がベクトル演算命令発行チェック部４１５に対して送出される。
【００４３】
ベクトル演算命令発行チェック部４１５は、ベクトル演算器ビジー管理部４０２からのビジー信号と、命令間整合性維持フラグチェック部４１４からの命令発行許可信号と、未発行要素識別フラグ４１２からの未発行要素識別フラグ信号と、ベクトル演算命令情報バッファ４１１からの命令情報を受ける。
【００４４】
ベクトル演算命令発行チェック部４１５は、ベクトル演算命令発行の条件をチェックする。この条件は、ベクトル演算器ビジーでないという条件と、６４要素を分割単位として分割することにより得られた４つの要素番号帯に対応する４ｂｉｔの未発行要素識別フラグ４１２とそれに対応する４ｂｉｔの命令間整合性維持フラグチェック部４１４の信号との桁毎の論理積を取った４ｂｉｔの信号が有効“１”である桁が存在するという条件の両方を満たすという条件である。この条件が満たされた場合、６４要素を分割単位として分割することにより得られた４つの要素番号帯の中から条件が満たされた１つの要素番号帯に対するベクトル演算開始指示１７がベクトル命令処理部５に送出される。
【００４５】
４つの要素番号帯について複数の要素番号帯に対する発行条件が整うケースもある。その場合は複数の中から１つの要素番号帯に対するベクトル演算命令実行開始指示が出される。また、ベクトル演算命令の実行開始指示を出すと同時にベクトル演算器ビジー管理部４０２に対してベクトル演算器ビジーフラグを２クロック間（＝６４要素／［１クロック当たり処理スピード３２要素］）点灯するよう指示を出す。
【００４６】
ベクトルロード命令情報バッファ４２１は、ベクトルロード命令転送先のベクトル演算レジスタ情報を格納する。
【００４７】
未発行要素識別フラグ４２２は、６４要素を分割単位として形成された４つの要素番号帯に対応して設置される。未だロードバッファ転送開始指示が発行されていない要素単位のフラグ値は“１”となるよう制御される。
【００４８】
命令間整合性維持フラグ４２３は、６４要素を分割単位として形成された４つの要素番号帯に対応し、かつベクトルロード命令発行待ちバッファ４２０以外の命令発行待ちバッファ４１０、４３０、４４０に対応して設置される。先行命令とベクトル演算レジスタ競合関係がありデータ整合性を保つ必要性がある場合には対応するフラグ値が“１”（有効）となるよう制御される。
【００４９】
ロードバッファ番号４２４には、ベクトルロード命令転送元のロードバッファ番号が格納される。
【００５０】
ロードバッファ使用箇所指示フラグ４２５は、サブロードバッファ使用箇所指示フラグを格納する。ベクトルロード命令転送元のロードバッファ番号内の複数のサブロードバッファ番号に対応するフラグが有効となるように設定される。
【００５１】
命令間整合性維持フラグチェック部４２６は、命令間整合性維持フラグ４２３のフラグ情報が無効の場合、該当する分割単位に対応する命令発行許可信号をベクトルロード命令発行チェック部４２８に対して送出する機能を持つ。命令間整合性維持フラグ４２３のフラグ情報が有効であった場合は、先行してベクトル演算命令発行待ちバッファ４１０に格納され実行待ちであるベクトル演算命令が使用するベクトル演算レジスタ領域と、後続のベクトルロード命令転送先のベクトル演算レジスタ領域とが一致していて命令発行の順番を守らなければならないことが示されている。この場合、先行のベクトル演算命令が発行されない限りベクトルロード命令発行待ちバッファ４２０に格納された後続のベクトルロード命令は発行しないよう制御する。
【００５２】
本実施の形態では、ベクトルデータを構成する複数（２５６個）の要素の要素を複数の要素群（６４要素を分割単位として分割することにより形成される４つの要素番号帯）に分ける。例えばベクトル演算命令と後続のベクトルロード命令とのデータ整合性を維持する必要があった場合、最初の６４要素に対する先行のベクトル演算命令が発行されると命令間整合性維持フラグ４２３の最初の６４要素に対応するフラグが無効となり、最初の６４要素に対応するベクトルロード命令の発行許可（ロードバッファ転送開始許可）信号がベクトルロード命令発行チェック部４２８に対して送出される。この処理により、ベクトルデータを構成する要素が全て揃っていない場合でも、複数の要素群のうちで全ての要素がメインメモリ７から読み出された要素群から先にベクトル演算レジスタ５−２に転送することが可能となる。
【００５３】
特定ロードバッファ転送条件確認部４２７は、ロードデータ整列判定部３から送られてきた整列通知１５と、ベクトルロード命令発行待ちバッファ４２０に格納されているロードバッファ番号４２４と、ロードバッファ使用箇所指示フラグ４２５に格納されているサブロードバッファ使用箇所指示フラグの情報とをサブロードバッファ毎の整列通知信号と比較する。比較の結果、一致したサブロードバッファがあった場合は、そのサブロードバッファに対応する要素番号帯のベクトルロード命令発行許可（ロードバッファ転送開始許可）をベクトルロード命令発行チェック部４２８に送出する。
【００５４】
本実施の形態において、この時ロードバッファ使用箇所指示フラグ４２５と、６４要素を分割単位として分割することにより形成された４つの要素番号帯別の４２２と、命令間整合性維持フラグ４２３との対応は、ロードバッファ使用箇所指示フラグ４２５の若い順に順番に対応しているものとしている。
【００５５】
例えば２５６要素のベクトルロード命令が４２０にバッファリングされているケースでロードバッファ使用箇所指示フラグ４２５には“１１１０１０００”というパタンが格納されているケースを考える。この場合、ロードデータ要素は以下の対応が成立するようにロードバッファ５−１へ格納されるよう制御が行われる。要素０〜６３に関しては未発行要素識別フラグ４２２の１番目のフラグとロードバッファ使用箇所指示フラグ４２５の１ｂｉｔ目が対応する。要素６４〜１２７に関しては未発行要素識別フラグ４２２の２番目のフラグとロードバッファ使用箇所指示フラグ４２５の２ｂｉｔ目が対応する。要素１２８〜１９１は未発行要素識別フラグ４２２の３番目のフラグとロードバッファ使用箇所指示フラグ４２５の３ｂｉｔ目が対応する。要素１９２〜２５５は未発行要素識別フラグ４２２の４番目のフラグとロードバッファ使用箇所指示フラグ４２５の５ｂｉｔ目のフラグが対応する。
【００５６】
ベクトルロード命令発行チェック部４２８は、ロードバッファ転送パスビジー管理部４０３からのロードバッファ転送パスビジー信号と、命令間整合性維持フラグチェック部４２６からの命令発行許可信号と、特定ロードバッファ転送条件確認部４２７からのベクトルロード命令発行許可信号と、未発行要素識別フラグ４２２からの未発行要素識別フラグ信号と、ベクトルロード命令情報バッファ４２１からの命令情報を受ける。
【００５７】
ベクトルロード命令発行チェック部４２８は、以下の３条件が満たされたときに、６４要素を分割単位として分割することにより形成された４つの要素番号帯の中から１つの要素番号帯に対するベクトル演算開始指示１７をベクトル命令処理部５に送出する。
（１）ロードバッファ転送パスがビジーでない、
（２）ある要素番号帯に着目した時に４ｂｉｔの未発行要素識別フラグ４２２とそれに対応する４ｂｉｔの命令間整合性維持フラグチェック部４２６の信号との桁毎の論理積を取った４ｂｉｔの信号の桁が“１”である、
（３）ロードバッファ転送条件確認部４２７において４つの要素番号帯のいずれかのロードデータが揃ったことが確認された。
この条件が満たされた場合に、６４要素を分割単位として形成された４つの要素番号帯の中から１つの要素番号帯に対するベクトル演算開始指示１７がベクトル命令処理部５に送出される。
【００５８】
４つの要素番号帯について複数の要素番号帯に対する発行条件が整うケースもある。その場合は複数の中から１つの要素番号帯に対するベクトルロード命令実行開始指示（ロードバッファ転送開始指示１６）をベクトル命令発行部５に送出すると同時に、ロードバッファ使用中フラグリセット信号生成部２０４にロードバッファ解放通知１４が送出される。また、ロードバッファ転送開始指示を出すと同時にロードバッファ転送パスビジー管理部４０３に対してビジーフラグを２クロック間（＝６４要素／［１クロック当たり処理スピード３２要素］）点灯するよう指示を出す。
【００５９】
図４は、ベクトルロードリクエスト処理部２を示す。アドレス変換部２０１は、命令デコード部１より受け取ったベクトルロード命令１１を解読する。アドレス変換部２０１は、ベクトルロード命令１１に含まれるロード開始アドレス、要素間アドレスディスタンス、および要素数に基づいて、ベクトルデータの要素数分のアドレスを生成する。このアドレスは、使用するベクトルデータを構成する複数の要素が格納されているメインメモリ７上の位置を示す。アドレス変換部２０１は、生成したアドレスをタグ及びアドレス１８の一部としてメモリアクセス制御部６に送出することにより、１つのベクトルロード命令に基づいて要素数分のロード指示を行う。
【００６０】
使用ロードバッファ決定部２０２は、以下のように、ベクトルデータをロードするロードバッファ５−１上の場所を決定する。まず、命令デコード部１より受け取ったベクトルロード命令１１を解読する。ベクトルロード命令１１には、ロードするベクトルデータの要素数を示す要素数情報が含まれる。その要素数情報に基づいて、ベクトルデータの全要素を格納するために必要な必要サブロードバッファ数を算出する。必要サブロードバッファ数分の空きサブロードバッファがあるロードバッファ５−１が選択される。選択されたロードバッファ５−１の中で未使用のサブロードバッファを必要サブロードバッファ数だけ確保する。確保済みサブロードバッファは、選択されたロードバッファ５−１を特定する確保済みロードバッファ番号と、確保されたサブロードバッファを特定する確保済みサブロードバッファ番号とによって特定される。以上の処理により、あるベクトルロード命令によって使用されるロードバッファ５−１と複数のサブロードバッファが決定され、確保番号通知１３、２３によって通知される。
【００６１】
使用ロードバッファ決定部２０２は、確保番号通知１３、２３と同時に、ロードバッファ使用中フラグ２０３に対してロードバッファ使用中フラグセット信号を送出して、新たに確保したロードバッファ５−１上の場所を示す確保済みロードバッファ番号と確保済みサブロードバッファ番号とに対応するフラグに“１”をセットする。使用ロードバッファ決定部２０２は更に、タグ生成部２０５に対して、確保済みロードバッファ番号と確保済みサブロードバッファ番号とロードするベクトルデータの要素数とを伝達する。
【００６２】
使用ロードバッファ決定部２０２は、全てのロードバッファ番号において必要数のサブロードバッファ（ロードバッファ分割単位）が確保出来なかった場合は、ビジー信号１０を命令デコード部１に送ることで後続のベクトルロード命令の送出を抑止する。
【００６３】
本実施の形態においては最大要素数を２５６として、ロードバッファ分割する単位の要素数を６４としている。要素数が１〜６４までの場合は１個の分割単位を、要素数が６５〜１２８までの場合は２個の分割単位を、要素数が１２９〜１９２までの場合は３個の分割単位を、要素数が１９３〜２５６までの場合は４個の分割単位を使用する。
【００６４】
ロードバッファ使用中フラグ２０３は、全てのロードバッファ分割単位毎のフラグを有している。即ち、全てのサブロードバッファ番号に対応するフラグを有している。これらのフラグは、使用ロードバッファ決定部２０２からのセット信号及びロードバッファ使用中フラグリセット信号生成部２０４からのリセット信号に基づいてセットおよびリセットされる。
【００６５】
ロードバッファ使用中フラグリセット信号生成部２０４は、ロードバッファ転送開始指示が発行されるのに合わせて送出されるロードバッファ解放通知１４をベクトル命令発行部４より受け取る。ロードバッファ解放通知１４は、空きとなったサブロードバッファを特定するサブロードバッファ番号を含んでいる。ロードバッファ使用中フラグリセット信号生成部２０４は、このサブロードバッファ番号に対応するフラグがリセットされるようリセット信号をロードバッファ使用中フラグ２０３に送出する。
【００６６】
タグ生成部２０５は、使用ロードバッファ決定部２０２が確保したロードバッファ番号と複数のサブロードバッファ番号とロードするベクトルデータの要素数の情報から、ロードするベクトルデータの要素の各々の格納先ロードバッファアドレスをタグとして生成し、アドレス変換部２０１で個別に生成されたメインメモリ７上のアドレスであるロードアドレスに１対１で対応するようにタグ及びアドレス１８をメモリアクセス制御部６に送出する。
【００６７】
タグの情報は、確保済みロードバッファ番号と複数の確保済みサブロードバッファ番号とロードデータ各要素の格納先ロードバッファアドレスの情報から成る。格納先ロードバッファアドレスを複数の確保済みサブロードバッファ番号の小さい方から順番に割り当てるように決めておくことで、格納先ロードバッファアドレスをタグとしてメモリアクセス制御部６に送出すれば必要な情報が揃うためインタフェース削減可能となり、望ましい構成となる。
【００６８】
以上に説明した本実施の形態の構成により、以下のようなベクトル処理装置が構成される。
第１に、使用ロードバッファ決定部２０２、要素数セット部３０１、要素数減算カウンタ部３０２、整列判定部３０５、ベクトル演算命令発行待ちバッファ４１０、及びベクトル演算命令発行待ちバッファ４３０により、次のベクトル処理装置が実現される。
【００６９】
ベクトル処理装置は、メインメモリ７とベクトル演算レジスタ５−２との間に、メインメモリ７から読み出されたベクトルデータを一時的に格納するロードバッファ５−１を備える。メインメモリ７から読み出されたベクトルロード命令の解読時に、ロードバッファ５−１の使用領域を確保するとともにメインメモリ７からロードバッファ５−１へのベクトルデータの読み出しが起動される。起動後、ロードバッファ５−１にベクトルデータの要素が格納されたことと、ベクトルロード命令で使用するベクトル演算レジスタ領域が先行するベクトル命令で使用するベクトル演算レジスタ領域と競合しないことを条件に、ロードバッファ５−１からベクトル演算レジスタ５−２へのベクトルデータの転送が開始される。こうしたベクトル処理装置において、最大ベクトル要素数を予め決定した特定の大きさに分割し、その分割した単位でロードされたデータ要素が格納されたことを確認した後に、ロードバッファ５−１からベクトル演算レジスタ５−２へベクトルデータの転送を開始するよう制御が行われる。
【００７０】
第２に、上記構成に加えて、ベクトル演算命令発行待ちバッファ４１０、４３０、ベクトルロード命令発行待ちバッファ４２０、４４０が連携して動作することにより、次の機能を有するベクトル処理装置が実現される。
【００７１】
ベクトル処理装置において、命令解読順番におけるデータ整合性を損なわないように、上記の特定の大きさに分割した単位でチェックを行い、データ整合性に問題が無い場合には命令解読順番によらずに命令を発行するよう制御が行われる。  
【００７２】
第３に、上記構成に加えて、使用ロードバッファ決定部２０２、要素数セット部３０１、及び要素数減算カウンタ部３０２が連携して動作することにより、次の機能を有するベクトル処理装置が実現される。
【００７３】
ベクトル処理装置において、上記の分割した単位のロードバッファを１つまたは複数のグループにまとめて、その中からベクトルロード要素数に応じてロードバッファ分割単位を必要な数だけ確保するとともに、確保した箇所のロードバッファ分割単位をベクトル命令発行部に伝達するよう制御が行われる。
【００７４】
第４に、上記構成に加えて、使用ロードバッファ決定部２０２、ロードバッファ使用中フラグ２０３、ロードバッファ使用中フラグリセット信号生成部２０４、ベクトル演算命令発行待ちバッファ４１０、４３０が連携して動作することにより、次の機能を有するベクトル処理装置が実現される。
【００７５】
ベクトル処理装置において、上記の特定の大きさに分割した単位でロードバッファ５−１からベクトル演算レジスタ５−２へのベクトルデータの転送を開始するのに合わせて分割した単位に対応するロードバッファの解放を行い、後続のベクトルロード命令で使用するよう制御が行われる。
【００７６】
［動作の説明］
次に本実施の形態の動作を図５のタイムチャートと図７の説明用命令列例を使用して説明する。
【００７７】
図７は説明用命令列例で、番号１〜７の順でデコードされるものとする。ＡＤＤ−ＡはＬＤ−Ａで演算レジスタ５−２にロードしたデータを使ってＡＤＤ演算する命令と定義する。ＡＤＤ−ＢはＬＤ−Ｂで演算レジスタ５−２にロードしたデータを使ってＡＤＤ演算する命令と定義する。１番と２番、３番と４番の命令以外は使用するベクトル演算レジスタ領域が異なるため、データ整合性の観点からは命令間の発行順番依存関係は無い。ベクトルデータは全て要素数２５６であると定義する。
【００７８】
ＡＤＤ演算は通常２つのオペランドデータを使って演算処理を行うが、本実施の形態ではロードデータと対となるデータが予め別のベクトル演算レジスタに格納されていることを動作説明の前提とする。また、ロードバッファ５−１からベクトル演算レジスタ５−２への書き込みパスは１つのみである構成とする。
【００７９】
図５は、図７に示された命令列が実行されたケースのタイムチャートを示している。以下、図の上部に記載されたクロック数１−３３を参照しながら、動作を説明する。ベクトルロード命令ＬＤ−Ａが命令デコード部１でデコードされてベクトルロード命令１１およびベクトル命令１２としてベクトルロードリクエスト処理部２とベクトル命令発行部４に出力されたタイミングをクロック１とする。
【００８０】
図７で示した命令列が順次デコードされると、それぞれの命令列で読み込むベクトルデータを格納するために必要な分のサブロードバッファを確保したのち、タグ及びアドレス１８がメモリアクセス制御部６に送出される。
【００８１】
ベクトル命令処理部５は、＃０と＃１で特定される２つのロードバッファ５−１を備えるものとする。命令列の１行目のベクトルロード命令ＬＤ−Ａが使用ロードバッファ決定部２０２で処理されると、ロードバッファ＃０の中のサブロードバッファ０，１，２，３（図２、図４、図６ではＬＤ−Ｂｕｆ＃０−０，＃０−１，＃０−２，＃０−３と、ロードバッファ番号を示す＃０の後に枝番を付けることによって記載されている）の４つが確保される。確保番号通知１３、２３の使用箇所情報には“１１１１００００”という値が出力される。
【００８２】
同様に命令列の２行目のＬＤ−Ｂが使用ロードバッファ決定部２０２で処理されると、ロードバッファ＃０のサブロードバッファ４，５，６，７が確保されて使用箇所情報には“００００１１１１”という値が出力される。命令列の５行目のＬＤ−Ｃが使用ロードバッファ決定部２０２で処理されるとロードバッファ＃１のサブロードバッファ０，１，２，３が確保され、ＬＤ−Ｂが使用ロードバッファ決定部２０２で処理されるとロードバッファ＃１のサブロードバッファ４，５，６，７が確保される。この時点でロードバッファ＃０，＃１は全て使用中となってしまうため、後続のベクトルロード命令ＬＤ−Ｅは処理待ちの状態となり、命令デコード部１にはビジー信号１０が出力される。
【００８３】
要素数セット部３０１は、使用ロードバッファ決定部２０２から確保番号通知１３を受け取り、要素数減算カウンタ部３０２のＬＤ−Ｂｕｆ＃０−０，ＬＤ−Ｂｕｆ＃０−１，ＬＤ−Ｂｕｆ＃０−２，ＬＤ−Ｂｕｆ＃０−３の整列判定カウンタにそれぞれ値６４をセットするとともに、対応する有効フラグに“１”をセットする。
【００８４】
４０１のベクトル命令バッファ部は、ベクトル命令１２として、図７で示すような命令列を順次、受け取る。まずベクトルロード命令ＬＤ−Ａはベクトルロード命令発行待ちバッファ４２０に格納され、次にベクトル演算命令ＡＤＤ−Ａがベクトル演算命令発行待ちバッファ４１０に格納される。続いてＬＤ−Ｂがベクトルロード命令発行待ちバッファ４４０に格納され、ＡＤＤ−Ｂがベクトル演算命令発行待ちバッファ４３０に格納される。ＬＤ−ＣとＬＤ−Ｄはベクトルロード命令発行待ちバッファ４２０またはベクトルロード命令発行待ちバッファ４４０が空くまでベクトル命令バッファ４０１内でバッファリングされる。
【００８５】
ＡＤＤ−ＡがＬＤ−Ａを追い越して実行されてデータ整合性が損なわれないように、ＡＤＤ−Ａがベクトル演算命令発行待ちバッファ４１０に格納される際に、先行してベクトルロード命令発行待ちバッファ４２０に格納されたＬＤ−Ａに対する命令間整合性維持フラグ４１３に“１１１１”がセットされる。このためＡＤＤ−Ａ命令で使用するベクトル演算レジスタ領域がビジーで無かったとしても、命令間整合性維持フラグ４１３が全て“１”なので、６４要素を分割単位として形成された４つの要素番号帯の発行許可信号が一つも有効“１”にならない。その結果、ＡＤＤ−Ａ命令は、ベクトル演算命令発行待ちバッファ４１０で待機状態となる。
【００８６】
ＬＤ−Ａは最初の命令なので先行する命令とのデータ整合性を維持する必要性は無いことから、命令間整合性維持フラグ４２３には“００００”がセットされる。従って、サブロードバッファＬＤ−Ｂｕｆ＃０−０またはＬＤ−Ｂｕｆ＃０−１またはＬＤ−Ｂｕｆ＃０−２またはＬＤ−Ｂｕｆ＃０−３のデータが揃ったことが確認されたら、直ちに演算レジスタ５−２に対してロードバッファ５−１のデータを転送開始可能な状態となっている。この状態がタイムチャートでロードデータ整列待ちの状態として省略されているクロック１４の状態である。この時のロードバッファ使用状態を図６（ａ）に示す。
【００８７】
クロック１５で、ベクトルロード命令ＬＤ−Ａの最若番の確保済みサブロードバッファＬＤ−Ｂｕｆ＃０−０に割り当てられた６４個の要素全てをメモリアクセス制御部６より受け取ったことで、要素数減算カウンタ部３０２のＬＤ−Ｂｕｆ＃０−０の整列判定カウンタの値が“０”となる。整列判定部３０５は、サブロードバッファＬＤ−Ｂｕｆ＃０−０の全てのロード要素が揃ったと判断する。
【００８８】
クロック１６において、特定ロードバッファ転送条件確認部４２７では、ＬＤ−Ａのロードバッファ番号４２４とロードバッファ使用箇所４２５の情報と整列判定部３０５より受け取った整列通知１５を比較する。この比較により、ＬＤ−Ａ用に確保されているＬＤ−Ｂｕｆ＃０−０の整列が完了したことを認識し、更に、一番小さい確保済みサブロードバッファ番号の要素番号帯であることから要素番号００〜６３の整列が完了したことも識別して、ベクトルロード命令発行チェック部４２８に伝える。
【００８９】
ベクトルロード命令発行チェック部４２８は、ＬＤ−Ａの転送先ベクトル演算レジスタ領域がビジーではないことを確認し、サブロードバッファＬＤ−Ｂｕｆ＃０−０に対して命令で指定されたベクトル演算レジスタ領域へのロードバッファ転送開始指示１６を出す。同時に、ＬＤ−Ｂｕｆ＃０−０のロードバッファ解放通知１４をロードバッファ使用中フラグリセット信号生成部２０４に送出し、未発行要素識別フラグ４２２の要素番号００〜６３に対応するフラグをリセットする。さらに、ベクトルロード命令発行待ちバッファ４２０の命令間整合性維持フラグ４１３のＬＤ−Ａ要素番号００〜６３に対応するフラグを“０”にリセットする指示を出す。この結果、未発行要素識別フラグ４２２の値は“０１１１”に、命令間整合性維持フラグ４１３の値は“０１１１”になる。また、ＬＤ−Ａ転送先のベクトル演算レジスタ５−２への書き込みパスが１つのみである構成としているため、転送が終了するまでの２クロック間、ビジーフラグが点灯するようロードバッファ転送パスビジー管理部４０３に指示を出す。
【００９０】
また、本実施の形態では、クロック１６にてサブロードバッファＬＤ−Ｂｕｆ＃０−１の要素が全て揃ったことが識別されている。
【００９１】
クロック１７において、サブロードバッファＬＤ−Ｂｕｆ＃０−０に対するベクトル演算レジスタ５−２への転送命令を受け、ベクトル命令処理部５はサブロードバッファＬＤ−Ｂｕｆ＃０−０からベクトル演算レジスタ５−２へのロードデータ転送を開始する。１クロックで３２要素のロードデータ転送が可能な構成としているため、ロードバッファ転送パスは２クロック間使用する。それに対応して２クロック間、ビジーフラグが点灯するようロードバッファ転送パスビジー管理部４０３に指示を出す。
【００９２】
このタイミングで特定ロードバッファ転送条件確認部４２７は、サブロードバッファＬＤ−Ｂｕｆ＃０−１の整列判定信号を受け、ロードバッファ番号４２４並びにロードバッファ使用箇所指示フラグ４２５と比較を行い、要素番号６４〜１２７のロードデータが転送可能であることをベクトルロード命令発行チェック部４２８に伝達する。ベクトル演算器ビジー管理部４０２内のビジーフラグが点灯しているため、サブロードバッファＬＤ−Ｂｕｆ＃０−１に対する転送開始指示は発行されない。
【００９３】
一方ＬＤ−Ａに対する命令間整合性維持フラグ４１３の値は“０１１１”となっている。そのため、命令間整合性維持フラグチェック部４１４にて要素番号００〜６３のＡＤＤ演算は実行可能と判断され、ベクトル演算命令発行チェック部４１５に命令発行許可信号“１０００”が送られる。ベクトル演算命令発行チェック部４１５は、未発行要素識別フラグ４１２の値“１１１１”という情報と、命令間整合性維持フラグチェック部４１４からの命令発行許可信号“１０００”という情報と、ベクトル演算器ビジーでないという情報から、要素番号００〜６３の要素番号帯に対するＡＤＤ演算開始指示を発行できると判断して、ベクトル演算開始指示１７として要素番号００〜６３に対するＡＤＤ演算開始指示を出す。それと同時にベクトル演算器ビジー管理部４０２内のＡＤＤ−Ａ命令実行結果格納先ベクトル演算レジスタ領域のビジーフラグを２クロック間点灯させる指示を出すとともに、未発行要素識別フラグ４１２の要素番号００〜６３に対応するフラグをリセットする。この結果、未発行要素識別フラグ４１２の値は“０１１１”となる。
【００９４】
クロック１８において、ロードバッファ転送パスビジー管理部４０３のビジーフラグが消灯する。そのため、ベクトルロード命令発行チェック部４２８にて発行条件のチェックを行い、要素番号６４〜１２７のロードデータが格納されているサブロードバッファＬＤ−Ｂｕｆ＃０−１のロードバッファ転送開始指示１６をベクトル命令処理部５に送出する。
【００９５】
このタイミングで、ＬＤ−Ｂｕｆ＃０−１のロードバッファ解放通知１４をロードバッファ使用中フラグリセット信号生成部２０４に送出し、未発行要素識別フラグ４２２の要素番号６４〜１２７に対応するフラグをリセットし、さらにベクトルロード命令発行待ちバッファ４２０に格納されているＬＤ−Ａに対する命令間整合性維持フラグ４１３の要素番号６４〜１２７に対応するフラグにリセット指示を出す。この結果、未発行要素識別フラグ４２２の値は“００１１”に、命令間整合性維持フラグ４１３の値は“００１１”になる。また、ＬＤ−Ａ転送先のベクトル演算レジスタ５−２への書き込みパスが１つのみである構成としているため、ロードバッファ転送パスを使用する２クロックの間、ビジーフラグを点灯させるようロードバッファ転送パスビジー管理部４０３に指示をだす。
【００９６】
クロック１９において、サブロードバッファＬＤ−Ｂｕｆ＃０−１に対するベクトル演算レジスタ５−２への転送命令を受け、ベクトル命令処理部５はサブロードバッファＬＤ−Ｂｕｆ＃０−１からベクトル演算レジスタ５−２へのロードデータ転送を開始する。図５では２クロックでＡＤＤ演算が完了するタイムチャートとなっている。これは１クロックで３２要素のＡＤＤ演算が可能な構成としていることによる。
【００９７】
このタイミングで特定ロードバッファ転送条件確認部４２７はサブロードバッファＬＤ−Ｂｕｆ＃０−２の整列判定信号を受け、ロードバッファ番号４２４並びにロードバッファ使用箇所指示フラグ４２５と比較を行い、要素番号１２８〜１９１のロードデータが転送可能であることを４２８に伝達している。しかし、ロードバッファ転送パスビジー管理部４０３のビジーフラグが点灯しているため、サブロードバッファＬＤ−Ｂｕｆ＃０−２に対する転送開始指示は発行されない。
【００９８】
一方、ＬＤ−Ａに対する命令間整合性維持フラグ４１３の値は“００１１”となっている。そのため、命令間整合性維持フラグチェック部４１４にて要素番号６４〜１２７のＡＤＤ演算は実行可能と判断され、ベクトル演算命令発行チェック部４１５に命令発行許可信号が送られる。
【００９９】
ベクトル演算命令発行チェック部４１５は、要素番号６４〜１２７に着目したときに未発行要素識別フラグ４１２の２ビット目の値が“１”であることと、命令間整合性維持フラグ４１３の２ビット目の値が“１”であることと、ベクトル演算器ビジーでないことをチェックして、要素番号６４〜１２７に対するＡＤＤ演算開始指示をベクトル演算開始指示１７としてベクトル命令処理部５に出力する。それと同時に、ビジーフラグを２クロック間点灯させる指示をベクトル演算器ビジー管理部４０２に出すとともに、未発行要素識別フラグ４１２の要素番号６４〜１２７に対応するフラグをリセットする。この結果、未発行要素識別フラグ４１２の値は“００１１”となる。
【０１００】
このように２５６要素のロードデータを６４要素毎に分割した単位で命令間のデータ整合性を保つ機能を実現することで後続のＡＤＤ演算を効率的に行うことができる。
【０１０１】
クロック２０において、要素番号１２８〜１９１が格納されたサブロードバッファＬＤ−Ｂｕｆ＃０−２に対する転送開始指示とロードバッファ解放指示が出される。それと同時に要素番号１２８〜１９１に対応する命令間整合性維持フラグ４１３の値が“０”にリセットされる。ベクトルロード命令ＬＤ−Ｅは要素数２５６のベクトルロード命令であり、４つのロードバッファ分割単位を確保する必要がある。この時点ではロードバッファ＃０に３つのサブロードバッファしか空きが無いため、命令デコード部１へのビジー信号は有効のままである。
【０１０２】
クロック２１において、要素番号１２８〜１９１に対応する命令間整合性維持フラグ４１３の値が“０”となるので、ＡＤＤ−Ａ命令の要素番号１２８〜１９１に対応する要素番号帯のベクトル演算開始指示が出される。
【０１０３】
クロック２２において、ＬＤ−Ｂ命令の要素番号００〜６３が格納されたサブロードバッファＬＤ−Ｂｕｆ＃０−４に対する転送開始指示とロードバッファ解放指示が出される。ロードバッファ使用中フラグリセット信号生成部２０４は、ベクトルロード命令発行チェック部４２８よりロードバッファ解放通知１４を受け、指示のあったサブロードバッファ番号に対応するロードバッファ使用中フラグをリセットする。
【０１０４】
クロック２３において、ＡＤＤ−Ｂ命令の要素番号００〜６３のＡＤＤ演算の実行指示が出される。この時点におけるロードバッファ使用状態を図６（ｂ）に示す。この時点でロードバッファ＃０に４つの空きができたため、使用ロードバッファ決定部２０２においてベクトルロード命令ＬＤ−Ｅ用のサブロードバッファが確保可能となり、ＬＤ−Ｅのベクトルロード処理を行うことができる。４つの確保済みサブロードバッファに対応するロードバッファ使用中フラグに“１”をセットする。ベクトルロード命令ＬＤ−Ｅが使用ロードバッファ決定部２０２で処理されると、ロードバッファ＃０の中のサブロードバッファ０，１，２，４の４つが確保されて、ロードバッファ確保番号通知１３、２３の使用箇所情報には“１１１０１０００”という値が出力される。
【０１０５】
以降残りのベクトルロード命令ＬＤ−Ａ−３，ＬＤ−Ｂ−１，ＬＤ−Ｂ−２，ＬＤ−Ｂ−３およびＬＤ−Ｃ，ＬＤ−Ｄ，ＬＤ−Ｅの各分割単位毎に全ての要素がロードされてベクトル演算レジスタ５−２へのデータ転送指示が出され、データ整合性を保ちつつ演算命令ＡＤＤ−Ａ−２，ＡＤＤ−Ａ−３およびＡＤＤ−Ｂの各分割単位毎に演算開始指示が全て出されて本実施の形態の命令列の実行が完了するが、動作説明が冗長となるため省略する。
【０１０６】
［変形例］
以下、本発明の実施の形態の変形例を説明する。基本的構成は上記の通りであるが、最大ベクトル要素数が２５６でない構成も可能である。最大ベクトル要素数は、１クロック毎の処理要素数の４倍以上の値であれば特に制限は無く、ＨＷ（Ｈａｒｄｗａｒｅ）量と性能とのトレード・オフによって決定可能である。例えば１クロック毎の処理要素数が４だとしたら、その４倍の１６を最大ベクトル要素数とするような構成であれば、上記の構成が有効に機能して性能が向上する。
【０１０７】
また本実施の形態ではロードバッファの分割単位として最大ベクトル要素数を４で割った６４要素を１つの分割単位としている。この分割単位については、最大ベクトル要素数を２以上の整数で割った値を１つの分割単位として設定することが可能である。
【０１０８】
さらに本実施の形態では、１０２４要素分用意されたロードバッファを２段階に分割している。即ち、まず最大ベクトル長の２倍（＝要素数５１２）の値で分割した単位でロードバッファ番号を付与し、次いで１つのロードバッファ番号を最大ベクトル要素数を４で割った６４要素（＝２５６／４）単位毎の８つに分割している。コレに対して、１０２４要素分用意されたロードバッファをたとえば６４要素分割単位毎の１６個に分割するというように１段階でサブロードバッファ単位に分割する構成を取ることも可能である。この場合は本実施の形態におけるタグ情報中のロードバッファ番号というフィールドが無くなる代わりに、８ｂｉｔのサブロードバッファ使用箇所フィールドが分割数分の１６ｂｉｔに拡張される。
【０１０９】
また、本実施の形態ではロードバッファ容量を１０２４要素としているが、より大きい容量とすることも可能である。ロードバッファ容量は大きければ大きいほどベクトルロード命令を演算命令に先行して発行できるためトータル性能が向上する。ロードバッファ容量は、ＨＷ量と性能とのトレード・オフによって最適な量に決定可能である。
【０１１０】
また、本実施の形態ではロードバッファを最大ベクトル長の２倍（＝要素数５１２）の値で分割した単位でロードバッファ番号を付与しているが、ロードバッファを最大ベクトル長の２倍以上の値で分割した単位にロードバッファ番号を付与しても良い。例えば要素数８９６＝２５６＊３＋１２８など中途半端な要素数で分割しても良い。但し、要素数の分割単位を最大ベクトル長の整数倍にすると使用効率が高くなる。
【０１１１】
また、本実施の形態では２つのベクトルロード命令発行待ちバッファ４２０、４３０と、２つのベクトル演算命令発行待ちバッファ４１０、４７０が用意してあるが、命令間整合性維持フラグも合わせて増やすことで、各命令発行待ちバッファを増やすことも可能である。
【０１１２】
また、本実施の形態ではロードバッファからベクトル演算レジスタへのデータ転送パスは１つのみである構成としたが、複数のデータ転送パスを設けて性能の向上を図ることも可能である。
【０１１３】
また、本実施の形態では機能ブロック間のインタフェース信号の内訳も図示したが、必要な情報が伝達できるならば図示した信号の内訳とは異なる信号を用いてもよい。
【０１１４】
以下、本実施の形態におけるベクトル処理装置、ベクトルロード方法によって達成される効果を説明する。
【０１１５】
第１の効果は、ベクトルロード命令のデータを使った後続のベクトル演算命令を早く実行可能となるためベクトル演算器の使用効率が向上してシステムトータルの性能が向上することである。
その理由は、ベクトルロード命令および後続のベクトル演算命令をデータ整合性を保った上で分割した要素毎に管理ができるようになり、全ての要素が揃わなくても分割した要素単位で要素が揃えばロードバッファからベクトル演算レジスタへの転送とそのデータを使ったベクトル演算命令を開始するよう制御することによる。
【０１１６】
第２の効果は、ロードバッファの使用効率が向上するためベクトルロード命令の処理の開始を早く行うことができることによりメモリからのロードデータ待ちとなる確率が減少するためシステムトータルの性能が向上することである。
その理由は、ベクトルロード命令の全ての要素が揃わなくても分割した要素単位で要素が揃えばロードバッファからベクトル演算レジスタへの転送を開始すると同時に分割した要素単位でロードバッファを解放することにより、あるベクトルロード命令のロードバッファ転送開始指示が全て出されなくても後続のベクトルロード命令で使用する分割単位の数以上解放されれば後続のベクトルロード命令の処理を開始するよう制御することによる。
【図面の簡単な説明】
【０１１７】
【図１】構成概略図
【図２】整列判定部ブロック図
【図３】ベクトル命令発行部
【図４】ベクトルロードリクエスト処理部
【図５】発明構成タイムチャート
【図６】ロードバッファ使用状態推移
【図７】説明用命令列例
【符号の説明】
【０１１８】
１  命令デコード部
２  ベクトルロードリクエスト処理部
３  ロードデータ整列判定部
４  ベクトル命令発行部
５  ベクトル命令処理部
６  メモリアクセス制御部
７  メインメモリ
１０  ビジー信号
１１  ベクトルロード命令
１２  ベクトル命令
１３  確保番号通知
１４  ロードバッファ解放通知
１５  整列通知
１６  ロードバッファ転送開始指示
１７  ベクトル演算開始指示
１８  タグ及びアドレス
１９  タグ
２０  タグ及びデータ
２１  データ読み出しアドレス
２２  読み出しデータ
２０１  アドレス変換部
２０２  使用ロードバッファ決定部
２０３  ロードバッファ使用中フラグ
２０４  ロードバッファ使用中フラグリセット信号生成部
２０５  タグ生成部
３０１  要素数セット部
３０２  要素数減算カウンタ部
３０３  ロードバッファ番号振り分け部
３０４  要素数カウンタ
３０５  整列判定部
３５１  サブロードバッファ格納予定要素数
４０１  ベクトル命令バッファ部
４０２  ベクトル演算器ビジー管理部
４０３  ロードバッファ転送パスビジー管理部
４１０、４３０  ベクトル演算命令発行待ちバッファ
４１１  ベクトル演算命令情報バッファ
４１２  未発行要素識別フラグ
４１３  命令間整合性維持フラグ
４１４  命令間整合性維持フラグチェック部
４１５  ベクトル演算命令発行チェック部
４２０、４４０  ベクトルロード命令発行待ちバッファ
４２１  ベクトルロード命令情報バッファ
４２２  未発行要素識別フラグ
４２３  命令間整合性維持フラグ
４２４  ロードバッファ番号
４２５  ロードバッファ使用箇所指示フラグ
４２６  命令間整合性維持フラグチェック部
４２７  特定ロードバッファ転送条件確認部
４２８  ベクトルロード命令発行チェック部
【図１】
0004789269.tif 000002
【図２】
0004789269.tif 000003
【図３】
0004789269.tif 000004
【図４】
0004789269.tif 000005
【図５】
0004789269.tif 000006
【図６】
0004789269.tif 000007
【図７】
0004789269.tif 000008