以下、本発明の実施の形態について図面を参照して詳細に説明する。図1を参照すると、本発明の一実施の形態としての構成概略図が示されている。本実施の形態におけるベクトル処理装置は、命令デコード部1、ベクトルロードリクエスト処理部2、ロードデータ整列判定部3、ベクトル命令発行部4、ベクトル命令処理部5、メモリアクセス制御部6及びメインメモリ7を備える。
命令デコード部1は入力した命令列をデコードする。命令デコード部1は、デコードした命令がベクトルロード命令を含むベクトル命令の場合は、そのベクトル命令12と付随情報とをベクトル命令発行部4に送出する。命令デコード部1は、デコードした命令がベクトルロード命令の場合は、そのベクトルロード命令11と付随情報とをベクトルロードリクエスト処理部2に送出する。命令デコード部1は、ベクトルロードリクエスト処理部2からビジー信号10を受け取った場合は、ベクトルロード命令の送出を一時的に止める機能を持つ。
ベクトルロードリクエスト処理部2は、命令デコード部1よりベクトルロード命令11と付随情報とを受信すると、その命令によってロードされるベクトルデータを格納するためのロードバッファを確保する処理を行う。この処理は、以下のように行われる。
受信した命令によってロードされるベクトルデータを構成する要素の数に基づいて、そのベクトルデータを格納するために必要なサブロードバッファ(例示:256bitのロードバッファを4個に分けることによって用意される64bit単位のサブロードバッファ)の数が算出される。複数存在するロードバッファの中から、算出された数のサブロードバッファの空きがあるロードバッファが、ロードをリクエストする宛先である確保済みロードバッファとして指定される。更に、確保済みロードバッファが有する空きサブロードバッファの中から、ベクトルデータを格納するために必要な数のサブロードバッファが確保済みサブロードバッファとして指定される。確保済みロードバッファを示す確保済みロードバッファ番号と、確保済みサブロードバッファを示す確保済みサブロードバッファ番号とを含むロードバッファ確保番号通知13、23がロードデータ判定部3とベクトル命令発行部4に送出される。
ベクトルロードリクエスト処理部2は、タグ及びアドレス18を生成してメモリアクセス制御部6に送出する。アドレスは、ロードするベクトルデータを構成する複数の要素が格納されているメインメモリ7上の場所を示す。タグは、ロードするベクトルデータが格納されるロードバッファ上の宛先を示す確保済みロードバッファ番号と確保済みサブロードバッファ番号とを含む。必要な数のロードバッファが確保できなかった場合には、ベクトルロードリクエスト処理部2は、ビジー信号10を命令デコード部1に送信する。
ロードデータ整列判定部3は、サブロードバッファ毎にロードされるベクトルデータの要素数を予め記憶し、メインメモリ7からサブロードバッファへベクトル要素が送出されたときにその要素数をデクリメントして残り要素数をモニタすることによって、サブロードバッファ単位ですべてのレジスタ領域にデータが送信されたことを認識する整列判定処理を行う。
より詳しくは、ロードデータ整列判定部3は、受信した確保番号通知13で指定されている確保済みサブロードバッファ番号に対応する整列判定カウンタに、リプライ要素数分の値をセットする。メモリアクセス制御部6は、メインメモリ7からベクトルデータの要素を読み出してロードバッファの方に送出したときに、その宛先をタグ19としてロードデータ整列判定部3に送出する。ロードデータ整列判定部3は、そのタグ19をデコードし、サブロードバッファ番号毎に集計した値を整列判定カウンタにセットされた値から減算する。減算の結果が0となったら、リプライ予定の要素が全て揃ったと判定し、ベクトル命令発行部4に整列通知15を送出する。
ベクトル命令発行部4は、以下のようにベクトル命令発行処理とロードバッファ解除処理とを行う。ベクトル命令発行部4は、命令デコード部1より、ベクトル演算命令やベクトルロード命令を含むベクトル命令12を受け取る。ベクトル演算命令を受け取った場合は、必要に応じてベクトル演算レジスタなどの各種資源のビジー状況ならびに命令間の整合性を確認した上で、適切なタイミングでベクトル演算開始指示17をベクトル命令処理部5に送出する。ベクトルロード命令を受け取った場合は、そのベクトルロード命令に対応するロードバッファ確保番号通知23を受け取り、対応するロードバッファの整列通知15ならびに転送先ベクトル演算レジスタ領域のビジー状況ならびに命令間の整合性を確認した上で、適切なタイミングでロードバッファ転送開始指示16をベクトル命令処理部5に送出する。その際に転送を開始したロードバッファ番号をロードバッファ解放通知14としてベクトルロードリクエスト処理部2に送出する。
ベクトル命令処理部5は、ロードバッファ5−1と、ベクトル演算レジスタ5−2とを備え、ベクトル演算レジスタ5−2に格納されたデータに対してベクトル演算処理を行う機能を有する。ベクトル命令処理部5は、以下のようにベクトル命令処理を行う。ロードバッファ転送開始指示16を受け取ると、ロードバッファ5−1の指定された領域からロードデータを読み出して指定されたベクトル演算レジスタ領域に格納する。ベクトル演算開始指示17を受け取ると、指定されたベクトル演算レジスタ領域からデータを読み出して所定のベクトル演算を行った結果を、指定されたベクトル演算レジスタ領域に格納する処理を行う。
メモリアクセス制御部6は、タグ及びアドレス18を受け取る。タグ及びアドレス18のアドレスには、読み出されるベクトルデータの各要素のメインメモリ7上のアドレスを示す情報であるデータ読み出しアドレス21が示されている。受け取ったタグ及びアドレス18に基づいて、データ読み出しアドレス21がメインメモリ7に送出される。メモリアクセス制御部6は、メインメモリ7から読み出しデータ22を受け取る。受け取った読み出しデータ22と、タグ及びアドレス18のタグに示される読み出しデータ22の宛先とを含むタグ及びデータ20が、ベクトル命令処理部5に送出される。更に、タグ及びアドレス18において読み出しデータ22に対応するタグ19が、ロードデータ整列判定部3に送出される。メモリアクセス制御部6はインタリーブ機能を有しており、メインメモリ7上の分割された領域に対して並列的にアクセスすることが可能な機能を持つ。
メインメモリ7は、プログラムおよびベクトルデータを格納する。メインメモリ7は、メモリアクセス制御部6からデータ読み出しアドレス21を受け取ると、そのアドレスのメモリ素子からデータを読み出して読み出しデータ22としてメモリアクセス制御部6に送出する。メインメモリ7は、インタリーブ構成をとることができるように、複数に分割されたメモリ領域のそれぞれにアクセスポートを有する。
図2は、ロードデータ整列判定部3の詳細を示す。要素数セット部301は、受け取った確保番号通知13に含まれる確保済みロードバッファ番号と確保済みサブロードバッファ番号により、ロードバッファ及びサブロードバッファの使用箇所を特定する。要素数セット部301は、受け取ったベクトルロード命令11によりロードされるベクトルデータを構成する複数の要素を複数の確保済みサブロードバッファに分配して格納するために、各々の確保済みサブロードバッファに格納する要素の数であるサブロードバッファ格納予定要素数351を算出して、要素数減算カウンタ部302に送出する。
本実施の形態においては、ベクトルデータの最大要素数を256とし、ベクトルデータを分割してロードする分割単位であるサブロードバッファの要素数を64とする。ロードするベクトルデータの要素数が1〜64までの場合は1個の分割単位を、要素数が65〜128までの場合は2個の分割単位を、要素数が129〜192までの場合は3個の分割単位を、要素数が193〜256までの場合は4個の分割単位を使用する。
メインメモリ7から読み出されたデータは、一つのロードバッファ5−1に対して、そのロードバッファ5−1の領域を所定の分割単位で分割したサブ領域であるサブロードバッファを単位として転送される。一つのロードバッファ5−1に対応する複数のサブロードバッファは、サブロードバッファ番号によってそれぞれ特定される。要素数セット部301は、ロードするベクトルデータの要素数を分割して、確保番号通知13により指定されたサブロードバッファに割り当てることにより、サブロードバッファ格納予定要素数351を生成する。この割り当ては、サブロードバッファ番号がより若番の確保済みサブロードバッファから要素が64個ずつ詰められるように行われる。要素数が64で割り切れず端数が生じるケースでは、最も番号の大きい確保済みサブロードバッファ番号に端数が割り当てられる。
要素数減算カウンタ部302は、サブロードバッファと等しい数の整列判定カウンタと、整列判定カウンタの各々に対応する有効フラグとを備える。要素数減算カウンタ部302は、未確保のサブロードバッファの各々の有効フラグに“0”をセットし、確保済みサブロードバッファの各々に対応する有効フラグに“1”をセットする。要素数減算カウンタ部302は、有効フラグが“1”である各々の整列判定カウンタに、サブロードバッファ格納予定要素数351をセットする。
ロードバッファ番号振り分け部303は、複数のタグ19を受け取る。複数のタグ19の各々には、ロードするベクトルデータを構成する要素のうち、メインメモリ7から読み出された要素が格納されるロードバッファ5−1を特定する確保済みロードバッファ番号と確保済みサブロードバッファ番号とが含まれる。ロードバッファ番号振り分け部303は、複数のタグ19をそれぞれデコードしてサブロードバッファ番号毎に振り分けて要素数カウンタ304に送る機能を有する。
要素数カウンタ304は、複数のロードバッファ5−1が備える複数のサブロードバッファのそれぞれに対応したカウンタを有する。それぞれのカウンタは、ロードバッファ番号振り分け部303がタグ19を受け取る毎に、ロードバッファ番号振り分け部303で対応するサブロードバッファが振り分けの宛先となった回数352をカウントアップして、要素数減算カウンタ部302に送出する。ロードバッファ番号振り分け部303が同時に受け取り可能なタグ19の数をNとすると(即ちベクトルデータを構成するN個の要素に対応するタグを同時に受け取り可能であるとすると)、全てのタグ19が同一サブロードバッファ番号宛であった場合にはカウントした値はNとなる(最大値はN)。
整列判定部305は、各々のサブロードバッファに予定数(サブロードバッファ格納予定要素数351と同じ)のロードデータが格納されたことを判定する機能を持つ。この判定は、要素数減算カウンタ部302の各整列判定カウンタの値が“0”であることと、それに対応する有効フラグが“1”であることとを条件として成立する。この条件が成立すると、整列判定部305は、サブロードバッファに予定数の要素が全てロードされたことを示す整列通知15をベクトル命令発行部4に通知する。
図3は、ベクトル命令発行部4を示す。ベクトル命令発行部4は、2つのベクトル演算命令発行待ちバッファ410、430と、2つのベクトルロード命令発行待ちバッファ420、440とを備えるものとする。命令バッファ部401は、命令デコード部1からベクトルロード命令を含むベクトル命令12を受け取り、ベクトル演算命令発行待ちバッファ410、430にベクトル命令を、ベクトルロード命令発行待ちバッファ420、440にベクトルロード命令を格納するように制御する。
ベクトル命令バッファ部401は、ベクトル演算命令発行待ちバッファ410、430またはベクトルロード命令発行待ちバッファ420、440が発行待ちで使用中のため命令を格納できない場合は、ベクトル命令を受け取った順に(First In First Outで)バッファリングする。このとき未発行要素識別フラグ412または未発行要素識別フラグ422に1つでも“1”がある場合は、未処理の要素番号帯があると判断して、ベクトル演算命令発行待ちバッファ410、430またはベクトルロード命令発行待ちバッファ420、440が発行待ちで使用中であると判断される。
ベクトル演算器ビジー管理部402は、図示していないベクトル演算器を使用中であることを示すビジーフラグを管理する機能を持つ。ベクトル演算器を使用中であることを示すベクトル演算器ビジー情報はベクトル演算命令発行チェック部415に送出されてベクトル演算命令発行チェックに使用される。ベクトル演算命令発行チェックにより、ベクトル演算器使用中に他の要素番号帯や別の命令によるベクトル演算が始まらないよう制御される。
ロードバッファ転送パスビジー管理部403は、ベクトル処理部5内にあるロードバッファ5−1からベクトル演算レジスタ5−2へロードデータを転送するために使用されるパスであるロードバッファ転送パスが使用中であることを示すビジーフラグを管理する機能を持つ。ロードバッファ転送パスのビジー状態を示すビジー情報はロードバッファ転送開始を行う際の発行チェックに使用される。この発行チェックにより、ロードバッファ転送中に同命令の別要素番号帯や別のベクトルロード命令によるロードバッファ転送が始まらないよう制御される。
ベクトル演算命令発行待ちバッファ410、430は、それぞれ、ベクトル演算命令情報バッファ411、未発行要素識別フラグ412、命令間整合性維持フラグ413、命令間整合性維持フラグチェック部414、及びベクトル演算命令発行チェック部415を含む。
ベクトルロード命令発行待ちバッファ420、440は、それぞれ、ベクトルロード命令情報バッファ421、未発行要素識別フラグ422、命令間整合性維持フラグ423、ロードバッファ番号424、ロードバッファ使用箇所指示フラグ425、命令間整合性維持フラグチェック部426、特定ロードバッファ転送条件確認部427、及びベクトルロード命令発行チェック部428を含む。
ベクトル演算命令情報バッファ411は、演算種別とベクトル演算命令で読み書きするベクトル演算レジスタ情報とを格納する。
未発行要素識別フラグ412は、256の要素の帯からなるベクトルデータを64要素を分割単位として分割することにより形成された4つの要素番号帯に対応して設置される。未だ演算開始指示が発行されていない要素番号帯に対応するフラグ値が“1”となるよう制御される。
命令間整合性維持フラグ413は、64要素を分割単位として形成された4つの要素番号帯に対応し、かつ410以外の命令発行待ちバッファ420、430、440に対応して設置される。先行命令とデータ整合性上命令実行順序を守る必要がある(ベクトル演算レジスタ競合関係がある)場合には、対応するフラグ値が有効となるよう制御される。
命令間整合性維持フラグチェック部414は、以下のように命令間整合性処理を行う。命令間整合性維持フラグ413のフラグ情報が無効の場合、該当する分割単位に対応する命令発行許可信号をベクトル演算命令発行チェック部415に対して送出する。
命令間整合性維持フラグ413のフラグ情報が有効であった場合は、先行してベクトルロード命令発行待ちバッファ420に格納され実行待ちであるベクトルロード命令転送先のベクトル演算レジスタ領域と、後続のベクトル演算命令で読み込むまたは書き込むベクトル演算レジスタ領域とが一致しているために、データ整合性を保つ必要性から命令発行の順番を守らなければならないことが示されている。従って、先行のベクトルロード命令が発行されない限りベクトル演算命令発行待ちバッファ410に格納された後続のベクトル演算命令は発行されない。こうした処理により、仕掛かり中のベクトルロード命令が使用するベクトル演算レジスタが先行するベクトル処理と競合するときには、後続のベクトル演算命令の実行を保留することが可能である。
本実施の形態ではベクトルデータを構成する256の要素を64要素を分割単位として分割することにより4つの要素番号帯が形成される。例えばベクトルロード命令と後続のベクトル演算命令のデータ整合性を維持する必要があった場合、最初の64要素に対する先行のベクトルロード命令が発行されると最初の64要素に対応する命令間整合性維持フラグ413が無効となり、ベクトル演算命令の最初の64要素に対応する命令発行許可信号がベクトル演算命令発行チェック部415に対して送出される。
ベクトル演算命令発行チェック部415は、ベクトル演算器ビジー管理部402からのビジー信号と、命令間整合性維持フラグチェック部414からの命令発行許可信号と、未発行要素識別フラグ412からの未発行要素識別フラグ信号と、ベクトル演算命令情報バッファ411からの命令情報を受ける。
ベクトル演算命令発行チェック部415は、ベクトル演算命令発行の条件をチェックする。この条件は、ベクトル演算器ビジーでないという条件と、64要素を分割単位として分割することにより得られた4つの要素番号帯に対応する4bitの未発行要素識別フラグ412とそれに対応する4bitの命令間整合性維持フラグチェック部414の信号との桁毎の論理積を取った4bitの信号が有効“1”である桁が存在するという条件の両方を満たすという条件である。この条件が満たされた場合、64要素を分割単位として分割することにより得られた4つの要素番号帯の中から条件が満たされた1つの要素番号帯に対するベクトル演算開始指示17がベクトル命令処理部5に送出される。
4つの要素番号帯について複数の要素番号帯に対する発行条件が整うケースもある。その場合は複数の中から1つの要素番号帯に対するベクトル演算命令実行開始指示が出される。また、ベクトル演算命令の実行開始指示を出すと同時にベクトル演算器ビジー管理部402に対してベクトル演算器ビジーフラグを2クロック間(=64要素/[1クロック当たり処理スピード32要素])点灯するよう指示を出す。
ベクトルロード命令情報バッファ421は、ベクトルロード命令転送先のベクトル演算レジスタ情報を格納する。
未発行要素識別フラグ422は、64要素を分割単位として形成された4つの要素番号帯に対応して設置される。未だロードバッファ転送開始指示が発行されていない要素単位のフラグ値は“1”となるよう制御される。
命令間整合性維持フラグ423は、64要素を分割単位として形成された4つの要素番号帯に対応し、かつベクトルロード命令発行待ちバッファ420以外の命令発行待ちバッファ410、430、440に対応して設置される。先行命令とベクトル演算レジスタ競合関係がありデータ整合性を保つ必要性がある場合には対応するフラグ値が“1”(有効)となるよう制御される。
ロードバッファ番号424には、ベクトルロード命令転送元のロードバッファ番号が格納される。
ロードバッファ使用箇所指示フラグ425は、サブロードバッファ使用箇所指示フラグを格納する。ベクトルロード命令転送元のロードバッファ番号内の複数のサブロードバッファ番号に対応するフラグが有効となるように設定される。
命令間整合性維持フラグチェック部426は、命令間整合性維持フラグ423のフラグ情報が無効の場合、該当する分割単位に対応する命令発行許可信号をベクトルロード命令発行チェック部428に対して送出する機能を持つ。命令間整合性維持フラグ423のフラグ情報が有効であった場合は、先行してベクトル演算命令発行待ちバッファ410に格納され実行待ちであるベクトル演算命令が使用するベクトル演算レジスタ領域と、後続のベクトルロード命令転送先のベクトル演算レジスタ領域とが一致していて命令発行の順番を守らなければならないことが示されている。この場合、先行のベクトル演算命令が発行されない限りベクトルロード命令発行待ちバッファ420に格納された後続のベクトルロード命令は発行しないよう制御する。
本実施の形態では、ベクトルデータを構成する複数(256個)の要素の要素を複数の要素群(64要素を分割単位として分割することにより形成される4つの要素番号帯)に分ける。例えばベクトル演算命令と後続のベクトルロード命令とのデータ整合性を維持する必要があった場合、最初の64要素に対する先行のベクトル演算命令が発行されると命令間整合性維持フラグ423の最初の64要素に対応するフラグが無効となり、最初の64要素に対応するベクトルロード命令の発行許可(ロードバッファ転送開始許可)信号がベクトルロード命令発行チェック部428に対して送出される。この処理により、ベクトルデータを構成する要素が全て揃っていない場合でも、複数の要素群のうちで全ての要素がメインメモリ7から読み出された要素群から先にベクトル演算レジスタ5−2に転送することが可能となる。
特定ロードバッファ転送条件確認部427は、ロードデータ整列判定部3から送られてきた整列通知15と、ベクトルロード命令発行待ちバッファ420に格納されているロードバッファ番号424と、ロードバッファ使用箇所指示フラグ425に格納されているサブロードバッファ使用箇所指示フラグの情報とをサブロードバッファ毎の整列通知信号と比較する。比較の結果、一致したサブロードバッファがあった場合は、そのサブロードバッファに対応する要素番号帯のベクトルロード命令発行許可(ロードバッファ転送開始許可)をベクトルロード命令発行チェック部428に送出する。
本実施の形態において、この時ロードバッファ使用箇所指示フラグ425と、64要素を分割単位として分割することにより形成された4つの要素番号帯別の422と、命令間整合性維持フラグ423との対応は、ロードバッファ使用箇所指示フラグ425の若い順に順番に対応しているものとしている。
例えば256要素のベクトルロード命令が420にバッファリングされているケースでロードバッファ使用箇所指示フラグ425には“11101000”というパタンが格納されているケースを考える。この場合、ロードデータ要素は以下の対応が成立するようにロードバッファ5−1へ格納されるよう制御が行われる。要素0〜63に関しては未発行要素識別フラグ422の1番目のフラグとロードバッファ使用箇所指示フラグ425の1bit目が対応する。要素64〜127に関しては未発行要素識別フラグ422の2番目のフラグとロードバッファ使用箇所指示フラグ425の2bit目が対応する。要素128〜191は未発行要素識別フラグ422の3番目のフラグとロードバッファ使用箇所指示フラグ425の3bit目が対応する。要素192〜255は未発行要素識別フラグ422の4番目のフラグとロードバッファ使用箇所指示フラグ425の5bit目のフラグが対応する。
ベクトルロード命令発行チェック部428は、ロードバッファ転送パスビジー管理部403からのロードバッファ転送パスビジー信号と、命令間整合性維持フラグチェック部426からの命令発行許可信号と、特定ロードバッファ転送条件確認部427からのベクトルロード命令発行許可信号と、未発行要素識別フラグ422からの未発行要素識別フラグ信号と、ベクトルロード命令情報バッファ421からの命令情報を受ける。
ベクトルロード命令発行チェック部428は、以下の3条件が満たされたときに、64要素を分割単位として分割することにより形成された4つの要素番号帯の中から1つの要素番号帯に対するベクトル演算開始指示17をベクトル命令処理部5に送出する。
(1)ロードバッファ転送パスがビジーでない、
(2)ある要素番号帯に着目した時に4bitの未発行要素識別フラグ422とそれに対応する4bitの命令間整合性維持フラグチェック部426の信号との桁毎の論理積を取った4bitの信号の桁が“1”である、
(3)ロードバッファ転送条件確認部427において4つの要素番号帯のいずれかのロードデータが揃ったことが確認された。
この条件が満たされた場合に、64要素を分割単位として形成された4つの要素番号帯の中から1つの要素番号帯に対するベクトル演算開始指示17がベクトル命令処理部5に送出される。
4つの要素番号帯について複数の要素番号帯に対する発行条件が整うケースもある。その場合は複数の中から1つの要素番号帯に対するベクトルロード命令実行開始指示(ロードバッファ転送開始指示16)をベクトル命令発行部5に送出すると同時に、ロードバッファ使用中フラグリセット信号生成部204にロードバッファ解放通知14が送出される。また、ロードバッファ転送開始指示を出すと同時にロードバッファ転送パスビジー管理部403に対してビジーフラグを2クロック間(=64要素/[1クロック当たり処理スピード32要素])点灯するよう指示を出す。
図4は、ベクトルロードリクエスト処理部2を示す。アドレス変換部201は、命令デコード部1より受け取ったベクトルロード命令11を解読する。アドレス変換部201は、ベクトルロード命令11に含まれるロード開始アドレス、要素間アドレスディスタンス、および要素数に基づいて、ベクトルデータの要素数分のアドレスを生成する。このアドレスは、使用するベクトルデータを構成する複数の要素が格納されているメインメモリ7上の位置を示す。アドレス変換部201は、生成したアドレスをタグ及びアドレス18の一部としてメモリアクセス制御部6に送出することにより、1つのベクトルロード命令に基づいて要素数分のロード指示を行う。
使用ロードバッファ決定部202は、以下のように、ベクトルデータをロードするロードバッファ5−1上の場所を決定する。まず、命令デコード部1より受け取ったベクトルロード命令11を解読する。ベクトルロード命令11には、ロードするベクトルデータの要素数を示す要素数情報が含まれる。その要素数情報に基づいて、ベクトルデータの全要素を格納するために必要な必要サブロードバッファ数を算出する。必要サブロードバッファ数分の空きサブロードバッファがあるロードバッファ5−1が選択される。選択されたロードバッファ5−1の中で未使用のサブロードバッファを必要サブロードバッファ数だけ確保する。確保済みサブロードバッファは、選択されたロードバッファ5−1を特定する確保済みロードバッファ番号と、確保されたサブロードバッファを特定する確保済みサブロードバッファ番号とによって特定される。以上の処理により、あるベクトルロード命令によって使用されるロードバッファ5−1と複数のサブロードバッファが決定され、確保番号通知13、23によって通知される。
使用ロードバッファ決定部202は、確保番号通知13、23と同時に、ロードバッファ使用中フラグ203に対してロードバッファ使用中フラグセット信号を送出して、新たに確保したロードバッファ5−1上の場所を示す確保済みロードバッファ番号と確保済みサブロードバッファ番号とに対応するフラグに“1”をセットする。使用ロードバッファ決定部202は更に、タグ生成部205に対して、確保済みロードバッファ番号と確保済みサブロードバッファ番号とロードするベクトルデータの要素数とを伝達する。
使用ロードバッファ決定部202は、全てのロードバッファ番号において必要数のサブロードバッファ(ロードバッファ分割単位)が確保出来なかった場合は、ビジー信号10を命令デコード部1に送ることで後続のベクトルロード命令の送出を抑止する。
本実施の形態においては最大要素数を256として、ロードバッファ分割する単位の要素数を64としている。要素数が1〜64までの場合は1個の分割単位を、要素数が65〜128までの場合は2個の分割単位を、要素数が129〜192までの場合は3個の分割単位を、要素数が193〜256までの場合は4個の分割単位を使用する。
ロードバッファ使用中フラグ203は、全てのロードバッファ分割単位毎のフラグを有している。即ち、全てのサブロードバッファ番号に対応するフラグを有している。これらのフラグは、使用ロードバッファ決定部202からのセット信号及びロードバッファ使用中フラグリセット信号生成部204からのリセット信号に基づいてセットおよびリセットされる。
ロードバッファ使用中フラグリセット信号生成部204は、ロードバッファ転送開始指示が発行されるのに合わせて送出されるロードバッファ解放通知14をベクトル命令発行部4より受け取る。ロードバッファ解放通知14は、空きとなったサブロードバッファを特定するサブロードバッファ番号を含んでいる。ロードバッファ使用中フラグリセット信号生成部204は、このサブロードバッファ番号に対応するフラグがリセットされるようリセット信号をロードバッファ使用中フラグ203に送出する。
タグ生成部205は、使用ロードバッファ決定部202が確保したロードバッファ番号と複数のサブロードバッファ番号とロードするベクトルデータの要素数の情報から、ロードするベクトルデータの要素の各々の格納先ロードバッファアドレスをタグとして生成し、アドレス変換部201で個別に生成されたメインメモリ7上のアドレスであるロードアドレスに1対1で対応するようにタグ及びアドレス18をメモリアクセス制御部6に送出する。
タグの情報は、確保済みロードバッファ番号と複数の確保済みサブロードバッファ番号とロードデータ各要素の格納先ロードバッファアドレスの情報から成る。格納先ロードバッファアドレスを複数の確保済みサブロードバッファ番号の小さい方から順番に割り当てるように決めておくことで、格納先ロードバッファアドレスをタグとしてメモリアクセス制御部6に送出すれば必要な情報が揃うためインタフェース削減可能となり、望ましい構成となる。
以上に説明した本実施の形態の構成により、以下のようなベクトル処理装置が構成される。
第1に、使用ロードバッファ決定部202、要素数セット部301、要素数減算カウンタ部302、整列判定部305、ベクトル演算命令発行待ちバッファ410、及びベクトル演算命令発行待ちバッファ430により、次のベクトル処理装置が実現される。
ベクトル処理装置は、メインメモリ7とベクトル演算レジスタ5−2との間に、メインメモリ7から読み出されたベクトルデータを一時的に格納するロードバッファ5−1を備える。メインメモリ7から読み出されたベクトルロード命令の解読時に、ロードバッファ5−1の使用領域を確保するとともにメインメモリ7からロードバッファ5−1へのベクトルデータの読み出しが起動される。起動後、ロードバッファ5−1にベクトルデータの要素が格納されたことと、ベクトルロード命令で使用するベクトル演算レジスタ領域が先行するベクトル命令で使用するベクトル演算レジスタ領域と競合しないことを条件に、ロードバッファ5−1からベクトル演算レジスタ5−2へのベクトルデータの転送が開始される。こうしたベクトル処理装置において、最大ベクトル要素数を予め決定した特定の大きさに分割し、その分割した単位でロードされたデータ要素が格納されたことを確認した後に、ロードバッファ5−1からベクトル演算レジスタ5−2へベクトルデータの転送を開始するよう制御が行われる。
第2に、上記構成に加えて、ベクトル演算命令発行待ちバッファ410、430、ベクトルロード命令発行待ちバッファ420、440が連携して動作することにより、次の機能を有するベクトル処理装置が実現される。
ベクトル処理装置において、命令解読順番におけるデータ整合性を損なわないように、上記の特定の大きさに分割した単位でチェックを行い、データ整合性に問題が無い場合には命令解読順番によらずに命令を発行するよう制御が行われる。
第3に、上記構成に加えて、使用ロードバッファ決定部202、要素数セット部301、及び要素数減算カウンタ部302が連携して動作することにより、次の機能を有するベクトル処理装置が実現される。
ベクトル処理装置において、上記の分割した単位のロードバッファを1つまたは複数のグループにまとめて、その中からベクトルロード要素数に応じてロードバッファ分割単位を必要な数だけ確保するとともに、確保した箇所のロードバッファ分割単位をベクトル命令発行部に伝達するよう制御が行われる。
第4に、上記構成に加えて、使用ロードバッファ決定部202、ロードバッファ使用中フラグ203、ロードバッファ使用中フラグリセット信号生成部204、ベクトル演算命令発行待ちバッファ410、430が連携して動作することにより、次の機能を有するベクトル処理装置が実現される。
ベクトル処理装置において、上記の特定の大きさに分割した単位でロードバッファ5−1からベクトル演算レジスタ5−2へのベクトルデータの転送を開始するのに合わせて分割した単位に対応するロードバッファの解放を行い、後続のベクトルロード命令で使用するよう制御が行われる。
[動作の説明]
次に本実施の形態の動作を図5のタイムチャートと図7の説明用命令列例を使用して説明する。
図7は説明用命令列例で、番号1〜7の順でデコードされるものとする。ADD−AはLD−Aで演算レジスタ5−2にロードしたデータを使ってADD演算する命令と定義する。ADD−BはLD−Bで演算レジスタ5−2にロードしたデータを使ってADD演算する命令と定義する。1番と2番、3番と4番の命令以外は使用するベクトル演算レジスタ領域が異なるため、データ整合性の観点からは命令間の発行順番依存関係は無い。ベクトルデータは全て要素数256であると定義する。
ADD演算は通常2つのオペランドデータを使って演算処理を行うが、本実施の形態ではロードデータと対となるデータが予め別のベクトル演算レジスタに格納されていることを動作説明の前提とする。また、ロードバッファ5−1からベクトル演算レジスタ5−2への書き込みパスは1つのみである構成とする。
図5は、図7に示された命令列が実行されたケースのタイムチャートを示している。以下、図の上部に記載されたクロック数1−33を参照しながら、動作を説明する。ベクトルロード命令LD−Aが命令デコード部1でデコードされてベクトルロード命令11およびベクトル命令12としてベクトルロードリクエスト処理部2とベクトル命令発行部4に出力されたタイミングをクロック1とする。
図7で示した命令列が順次デコードされると、それぞれの命令列で読み込むベクトルデータを格納するために必要な分のサブロードバッファを確保したのち、タグ及びアドレス18がメモリアクセス制御部6に送出される。
ベクトル命令処理部5は、#0と#1で特定される2つのロードバッファ5−1を備えるものとする。命令列の1行目のベクトルロード命令LD−Aが使用ロードバッファ決定部202で処理されると、ロードバッファ#0の中のサブロードバッファ0,1,2,3(図2、図4、図6ではLD−Buf#0−0,#0−1,#0−2,#0−3と、ロードバッファ番号を示す#0の後に枝番を付けることによって記載されている)の4つが確保される。確保番号通知13、23の使用箇所情報には“11110000”という値が出力される。
同様に命令列の2行目のLD−Bが使用ロードバッファ決定部202で処理されると、ロードバッファ#0のサブロードバッファ4,5,6,7が確保されて使用箇所情報には“00001111”という値が出力される。命令列の5行目のLD−Cが使用ロードバッファ決定部202で処理されるとロードバッファ#1のサブロードバッファ0,1,2,3が確保され、LD−Bが使用ロードバッファ決定部202で処理されるとロードバッファ#1のサブロードバッファ4,5,6,7が確保される。この時点でロードバッファ#0,#1は全て使用中となってしまうため、後続のベクトルロード命令LD−Eは処理待ちの状態となり、命令デコード部1にはビジー信号10が出力される。
要素数セット部301は、使用ロードバッファ決定部202から確保番号通知13を受け取り、要素数減算カウンタ部302のLD−Buf#0−0,LD−Buf#0−1,LD−Buf#0−2,LD−Buf#0−3の整列判定カウンタにそれぞれ値64をセットするとともに、対応する有効フラグに“1”をセットする。
401のベクトル命令バッファ部は、ベクトル命令12として、図7で示すような命令列を順次、受け取る。まずベクトルロード命令LD−Aはベクトルロード命令発行待ちバッファ420に格納され、次にベクトル演算命令ADD−Aがベクトル演算命令発行待ちバッファ410に格納される。続いてLD−Bがベクトルロード命令発行待ちバッファ440に格納され、ADD−Bがベクトル演算命令発行待ちバッファ430に格納される。LD−CとLD−Dはベクトルロード命令発行待ちバッファ420またはベクトルロード命令発行待ちバッファ440が空くまでベクトル命令バッファ401内でバッファリングされる。
ADD−AがLD−Aを追い越して実行されてデータ整合性が損なわれないように、ADD−Aがベクトル演算命令発行待ちバッファ410に格納される際に、先行してベクトルロード命令発行待ちバッファ420に格納されたLD−Aに対する命令間整合性維持フラグ413に“1111”がセットされる。このためADD−A命令で使用するベクトル演算レジスタ領域がビジーで無かったとしても、命令間整合性維持フラグ413が全て“1”なので、64要素を分割単位として形成された4つの要素番号帯の発行許可信号が一つも有効“1”にならない。その結果、ADD−A命令は、ベクトル演算命令発行待ちバッファ410で待機状態となる。
LD−Aは最初の命令なので先行する命令とのデータ整合性を維持する必要性は無いことから、命令間整合性維持フラグ423には“0000”がセットされる。従って、サブロードバッファLD−Buf#0−0またはLD−Buf#0−1またはLD−Buf#0−2またはLD−Buf#0−3のデータが揃ったことが確認されたら、直ちに演算レジスタ5−2に対してロードバッファ5−1のデータを転送開始可能な状態となっている。この状態がタイムチャートでロードデータ整列待ちの状態として省略されているクロック14の状態である。この時のロードバッファ使用状態を図6(a)に示す。
クロック15で、ベクトルロード命令LD−Aの最若番の確保済みサブロードバッファLD−Buf#0−0に割り当てられた64個の要素全てをメモリアクセス制御部6より受け取ったことで、要素数減算カウンタ部302のLD−Buf#0−0の整列判定カウンタの値が“0”となる。整列判定部305は、サブロードバッファLD−Buf#0−0の全てのロード要素が揃ったと判断する。
クロック16において、特定ロードバッファ転送条件確認部427では、LD−Aのロードバッファ番号424とロードバッファ使用箇所425の情報と整列判定部305より受け取った整列通知15を比較する。この比較により、LD−A用に確保されているLD−Buf#0−0の整列が完了したことを認識し、更に、一番小さい確保済みサブロードバッファ番号の要素番号帯であることから要素番号00〜63の整列が完了したことも識別して、ベクトルロード命令発行チェック部428に伝える。
ベクトルロード命令発行チェック部428は、LD−Aの転送先ベクトル演算レジスタ領域がビジーではないことを確認し、サブロードバッファLD−Buf#0−0に対して命令で指定されたベクトル演算レジスタ領域へのロードバッファ転送開始指示16を出す。同時に、LD−Buf#0−0のロードバッファ解放通知14をロードバッファ使用中フラグリセット信号生成部204に送出し、未発行要素識別フラグ422の要素番号00〜63に対応するフラグをリセットする。さらに、ベクトルロード命令発行待ちバッファ420の命令間整合性維持フラグ413のLD−A要素番号00〜63に対応するフラグを“0”にリセットする指示を出す。この結果、未発行要素識別フラグ422の値は“0111”に、命令間整合性維持フラグ413の値は“0111”になる。また、LD−A転送先のベクトル演算レジスタ5−2への書き込みパスが1つのみである構成としているため、転送が終了するまでの2クロック間、ビジーフラグが点灯するようロードバッファ転送パスビジー管理部403に指示を出す。
また、本実施の形態では、クロック16にてサブロードバッファLD−Buf#0−1の要素が全て揃ったことが識別されている。
クロック17において、サブロードバッファLD−Buf#0−0に対するベクトル演算レジスタ5−2への転送命令を受け、ベクトル命令処理部5はサブロードバッファLD−Buf#0−0からベクトル演算レジスタ5−2へのロードデータ転送を開始する。1クロックで32要素のロードデータ転送が可能な構成としているため、ロードバッファ転送パスは2クロック間使用する。それに対応して2クロック間、ビジーフラグが点灯するようロードバッファ転送パスビジー管理部403に指示を出す。
このタイミングで特定ロードバッファ転送条件確認部427は、サブロードバッファLD−Buf#0−1の整列判定信号を受け、ロードバッファ番号424並びにロードバッファ使用箇所指示フラグ425と比較を行い、要素番号64〜127のロードデータが転送可能であることをベクトルロード命令発行チェック部428に伝達する。ベクトル演算器ビジー管理部402内のビジーフラグが点灯しているため、サブロードバッファLD−Buf#0−1に対する転送開始指示は発行されない。
一方LD−Aに対する命令間整合性維持フラグ413の値は“0111”となっている。そのため、命令間整合性維持フラグチェック部414にて要素番号00〜63のADD演算は実行可能と判断され、ベクトル演算命令発行チェック部415に命令発行許可信号“1000”が送られる。ベクトル演算命令発行チェック部415は、未発行要素識別フラグ412の値“1111”という情報と、命令間整合性維持フラグチェック部414からの命令発行許可信号“1000”という情報と、ベクトル演算器ビジーでないという情報から、要素番号00〜63の要素番号帯に対するADD演算開始指示を発行できると判断して、ベクトル演算開始指示17として要素番号00〜63に対するADD演算開始指示を出す。それと同時にベクトル演算器ビジー管理部402内のADD−A命令実行結果格納先ベクトル演算レジスタ領域のビジーフラグを2クロック間点灯させる指示を出すとともに、未発行要素識別フラグ412の要素番号00〜63に対応するフラグをリセットする。この結果、未発行要素識別フラグ412の値は“0111”となる。
クロック18において、ロードバッファ転送パスビジー管理部403のビジーフラグが消灯する。そのため、ベクトルロード命令発行チェック部428にて発行条件のチェックを行い、要素番号64〜127のロードデータが格納されているサブロードバッファLD−Buf#0−1のロードバッファ転送開始指示16をベクトル命令処理部5に送出する。
このタイミングで、LD−Buf#0−1のロードバッファ解放通知14をロードバッファ使用中フラグリセット信号生成部204に送出し、未発行要素識別フラグ422の要素番号64〜127に対応するフラグをリセットし、さらにベクトルロード命令発行待ちバッファ420に格納されているLD−Aに対する命令間整合性維持フラグ413の要素番号64〜127に対応するフラグにリセット指示を出す。この結果、未発行要素識別フラグ422の値は“0011”に、命令間整合性維持フラグ413の値は“0011”になる。また、LD−A転送先のベクトル演算レジスタ5−2への書き込みパスが1つのみである構成としているため、ロードバッファ転送パスを使用する2クロックの間、ビジーフラグを点灯させるようロードバッファ転送パスビジー管理部403に指示をだす。
クロック19において、サブロードバッファLD−Buf#0−1に対するベクトル演算レジスタ5−2への転送命令を受け、ベクトル命令処理部5はサブロードバッファLD−Buf#0−1からベクトル演算レジスタ5−2へのロードデータ転送を開始する。図5では2クロックでADD演算が完了するタイムチャートとなっている。これは1クロックで32要素のADD演算が可能な構成としていることによる。
このタイミングで特定ロードバッファ転送条件確認部427はサブロードバッファLD−Buf#0−2の整列判定信号を受け、ロードバッファ番号424並びにロードバッファ使用箇所指示フラグ425と比較を行い、要素番号128〜191のロードデータが転送可能であることを428に伝達している。しかし、ロードバッファ転送パスビジー管理部403のビジーフラグが点灯しているため、サブロードバッファLD−Buf#0−2に対する転送開始指示は発行されない。
一方、LD−Aに対する命令間整合性維持フラグ413の値は“0011”となっている。そのため、命令間整合性維持フラグチェック部414にて要素番号64〜127のADD演算は実行可能と判断され、ベクトル演算命令発行チェック部415に命令発行許可信号が送られる。
ベクトル演算命令発行チェック部415は、要素番号64〜127に着目したときに未発行要素識別フラグ412の2ビット目の値が“1”であることと、命令間整合性維持フラグ413の2ビット目の値が“1”であることと、ベクトル演算器ビジーでないことをチェックして、要素番号64〜127に対するADD演算開始指示をベクトル演算開始指示17としてベクトル命令処理部5に出力する。それと同時に、ビジーフラグを2クロック間点灯させる指示をベクトル演算器ビジー管理部402に出すとともに、未発行要素識別フラグ412の要素番号64〜127に対応するフラグをリセットする。この結果、未発行要素識別フラグ412の値は“0011”となる。
このように256要素のロードデータを64要素毎に分割した単位で命令間のデータ整合性を保つ機能を実現することで後続のADD演算を効率的に行うことができる。
クロック20において、要素番号128〜191が格納されたサブロードバッファLD−Buf#0−2に対する転送開始指示とロードバッファ解放指示が出される。それと同時に要素番号128〜191に対応する命令間整合性維持フラグ413の値が“0”にリセットされる。ベクトルロード命令LD−Eは要素数256のベクトルロード命令であり、4つのロードバッファ分割単位を確保する必要がある。この時点ではロードバッファ#0に3つのサブロードバッファしか空きが無いため、命令デコード部1へのビジー信号は有効のままである。
クロック21において、要素番号128〜191に対応する命令間整合性維持フラグ413の値が“0”となるので、ADD−A命令の要素番号128〜191に対応する要素番号帯のベクトル演算開始指示が出される。
クロック22において、LD−B命令の要素番号00〜63が格納されたサブロードバッファLD−Buf#0−4に対する転送開始指示とロードバッファ解放指示が出される。ロードバッファ使用中フラグリセット信号生成部204は、ベクトルロード命令発行チェック部428よりロードバッファ解放通知14を受け、指示のあったサブロードバッファ番号に対応するロードバッファ使用中フラグをリセットする。
クロック23において、ADD−B命令の要素番号00〜63のADD演算の実行指示が出される。この時点におけるロードバッファ使用状態を図6(b)に示す。この時点でロードバッファ#0に4つの空きができたため、使用ロードバッファ決定部202においてベクトルロード命令LD−E用のサブロードバッファが確保可能となり、LD−Eのベクトルロード処理を行うことができる。4つの確保済みサブロードバッファに対応するロードバッファ使用中フラグに“1”をセットする。ベクトルロード命令LD−Eが使用ロードバッファ決定部202で処理されると、ロードバッファ#0の中のサブロードバッファ0,1,2,4の4つが確保されて、ロードバッファ確保番号通知13、23の使用箇所情報には“11101000”という値が出力される。
以降残りのベクトルロード命令LD−A−3,LD−B−1,LD−B−2,LD−B−3およびLD−C,LD−D,LD−Eの各分割単位毎に全ての要素がロードされてベクトル演算レジスタ5−2へのデータ転送指示が出され、データ整合性を保ちつつ演算命令ADD−A−2,ADD−A−3およびADD−Bの各分割単位毎に演算開始指示が全て出されて本実施の形態の命令列の実行が完了するが、動作説明が冗長となるため省略する。
[変形例]
以下、本発明の実施の形態の変形例を説明する。基本的構成は上記の通りであるが、最大ベクトル要素数が256でない構成も可能である。最大ベクトル要素数は、1クロック毎の処理要素数の4倍以上の値であれば特に制限は無く、HW(Hardware)量と性能とのトレード・オフによって決定可能である。例えば1クロック毎の処理要素数が4だとしたら、その4倍の16を最大ベクトル要素数とするような構成であれば、上記の構成が有効に機能して性能が向上する。
また本実施の形態ではロードバッファの分割単位として最大ベクトル要素数を4で割った64要素を1つの分割単位としている。この分割単位については、最大ベクトル要素数を2以上の整数で割った値を1つの分割単位として設定することが可能である。
さらに本実施の形態では、1024要素分用意されたロードバッファを2段階に分割している。即ち、まず最大ベクトル長の2倍(=要素数512)の値で分割した単位でロードバッファ番号を付与し、次いで1つのロードバッファ番号を最大ベクトル要素数を4で割った64要素(=256/4)単位毎の8つに分割している。コレに対して、1024要素分用意されたロードバッファをたとえば64要素分割単位毎の16個に分割するというように1段階でサブロードバッファ単位に分割する構成を取ることも可能である。この場合は本実施の形態におけるタグ情報中のロードバッファ番号というフィールドが無くなる代わりに、8bitのサブロードバッファ使用箇所フィールドが分割数分の16bitに拡張される。
また、本実施の形態ではロードバッファ容量を1024要素としているが、より大きい容量とすることも可能である。ロードバッファ容量は大きければ大きいほどベクトルロード命令を演算命令に先行して発行できるためトータル性能が向上する。ロードバッファ容量は、HW量と性能とのトレード・オフによって最適な量に決定可能である。
また、本実施の形態ではロードバッファを最大ベクトル長の2倍(=要素数512)の値で分割した単位でロードバッファ番号を付与しているが、ロードバッファを最大ベクトル長の2倍以上の値で分割した単位にロードバッファ番号を付与しても良い。例えば要素数896=256*3+128など中途半端な要素数で分割しても良い。但し、要素数の分割単位を最大ベクトル長の整数倍にすると使用効率が高くなる。
また、本実施の形態では2つのベクトルロード命令発行待ちバッファ420、430と、2つのベクトル演算命令発行待ちバッファ410、470が用意してあるが、命令間整合性維持フラグも合わせて増やすことで、各命令発行待ちバッファを増やすことも可能である。
また、本実施の形態ではロードバッファからベクトル演算レジスタへのデータ転送パスは1つのみである構成としたが、複数のデータ転送パスを設けて性能の向上を図ることも可能である。
また、本実施の形態では機能ブロック間のインタフェース信号の内訳も図示したが、必要な情報が伝達できるならば図示した信号の内訳とは異なる信号を用いてもよい。
以下、本実施の形態におけるベクトル処理装置、ベクトルロード方法によって達成される効果を説明する。
第1の効果は、ベクトルロード命令のデータを使った後続のベクトル演算命令を早く実行可能となるためベクトル演算器の使用効率が向上してシステムトータルの性能が向上することである。
その理由は、ベクトルロード命令および後続のベクトル演算命令をデータ整合性を保った上で分割した要素毎に管理ができるようになり、全ての要素が揃わなくても分割した要素単位で要素が揃えばロードバッファからベクトル演算レジスタへの転送とそのデータを使ったベクトル演算命令を開始するよう制御することによる。
第2の効果は、ロードバッファの使用効率が向上するためベクトルロード命令の処理の開始を早く行うことができることによりメモリからのロードデータ待ちとなる確率が減少するためシステムトータルの性能が向上することである。
その理由は、ベクトルロード命令の全ての要素が揃わなくても分割した要素単位で要素が揃えばロードバッファからベクトル演算レジスタへの転送を開始すると同時に分割した要素単位でロードバッファを解放することにより、あるベクトルロード命令のロードバッファ転送開始指示が全て出されなくても後続のベクトルロード命令で使用する分割単位の数以上解放されれば後続のベクトルロード命令の処理を開始するよう制御することによる。