(57)【特許請求の範囲】
【請求項１】
第１及び第２のベクトル演算パイプを備える第１の処理ユニットと、
第２の処理ユニットと、
前記第１の処理ユニットと前記第２の処理ユニットとの間でデータを転送できるよう構成されたデータ転送回路と、
前記第１の処理ユニットと前記データ転送回路の間を接続するとともに、前記第１及び第２のベクトル演算パイプの出力データを前記データ転送回路に供給するため、又は前記データ転送回路から前記第１及び第２のベクトル演算パイプに入力データを供給するために使用される第１のデータパスと、
を備え、
前記第１の処理ユニットは、前記第１及び第２のベクトル演算パイプと前記第１のデータパスとの間に配置され、前記出力データ又は前記入力データを保持するデータバッファを備え、
前記第１及び第２のベクトル演算パイプは、他方のベクトル演算パイプが前記データバッファへアクセス中であるか否か及び前記第１のデータパスが使用中であるか否かに依存することなく、前記データバッファにアクセス可能に構成されており、
前記データバッファは、前記第１のベクトル演算パイプと前記第１のデータパスの間に配置された第１のデータバッファと、前記第２のベクトル演算パイプと前記第１のデータパスの間に配置された第２のデータバッファとを備える、
ベクトル演算処理装置。
【請求項２】
前記第１のデータバッファは、前記第１のベクトル演算パイプの出力データを保持するよう構成され、
前記第２のデータバッファは、前記第２のベクトル演算パイプの出力データを保持するよう構成され、
前記第１の処理ユニットは、前記第１のデータバッファ又は前記第２のデータバッファに保持されたデータを選択的に前記第１のデータパスに供給する選択回路をさらに備える、請求項１に記載のベクトル演算処理装置。
【請求項３】
前記第１の処理ユニットは、前記第１のベクトル演算パイプに命令を発行する発行制御部をさらに備え、
前記第１のベクトル演算パイプは、当該演算パイプでの演算に使用されるデータ及び演算結果データを格納する第１のレジスタを備え、
前記第１のデータバッファは、前記第１のベクトル演算パイプへの入力データを保持するよう構成され、
前記発行制御部は、前記第１のデータバッファを介する前記データ転送回路から前記第１のレジスタへのデータ書き込みをもたらす先行命令を前記第１のベクトル演算パイプが実行中であるか否かに依存することなく、前記先行命令の実行に起因する前記データ転送回路から前記第１のデータバッファへのデータ転送および前記第１のデータバッファから前記第１のレジスタへのデータ転送がともに行われていないことを条件として、後続命令を前記第１のベクトル演算パイプに発行する、
請求項１に記載のベクトル演算処理装置。
【請求項４】
前記第１のレジスタへのデータ書き込みを行うためのライトパスが使用中であるか否かを示す第１のフラグと、
前記データ転送回路から前記第１のデータバッファにデータ転送を行うための前記第１のデータパスが使用中であるか否かを示す第２のフラグと、
をさらに備え、
前記発行制御部は、前記第１及び第２のフラグを参照することで、前記データ転送回路から前記第１のデータバッファへのデータ転送および前記第１のデータバッファから前記第１のレジスタへのデータ転送がともに行われていないことを判定する、請求項３に記載のベクトル演算処理装置。
【請求項５】
前記発行制御部は、前記第１のフラグがセットされておらず、かつ前記データ転送回路から前記第１のデータバッファへのデータ転送が開始されている場合、
前記データバッファから前記第１のレジスタへのデータ転送を開始させるとともに、前記第１のフラグをセットする、請求項４に記載のベクトル演算処理装置。
【請求項６】
前記第２のフラグは、前記データ転送回路から前記第１の処理ユニットに供給され、前記データ転送回路から前記第１のデータバッファへのデータ転送の開始を示す制御信号に応じて設定される、請求項４または請求項５に記載のベクトル演算処理装置。
【請求項７】
前記データバッファは、前記第１及び第２のベクトル演算パイプによる前記出力データの出力と、前記第１のデータパスへの前記出力データの転送とを独立化する請求項１乃至請求項６のいずれか１項に記載のベクトル演算処理装置。
【請求項８】
前記データバッファは、前記第１のデータパスから前記データバッファへの前記入力データの供給と、前記データバッファから前記第１及び第２のベクトル演算パイプに対する前記入力データの供給とを独立化する請求項１乃至請求項６のいずれか１項に記載のベクトル演算処理装置。
【請求項９】
前記データ転送回路は、クロスバスイッチである、請求項１乃至請求項８のいずれか１項に記載のベクトル演算処理装置。
【請求項１０】
第１及び第２のベクトル演算パイプを備える第１の処理ユニットと、
第２の処理ユニットと、
前記第１の処理ユニットと前記第２の処理ユニットとの間でデータを転送できるよう構成されたデータ転送回路と、
前記第１の処理ユニットと前記データ転送回路の間を接続するとともに、前記第１及び第２のベクトル演算パイプの出力データを前記データ転送回路に供給するため、又は前記データ転送回路から前記第１及び第２のベクトル演算パイプに入力データを供給するために使用される第１のデータパスと、
を備えたベクトル処理装置における処理方法であって、
前記第１の処理ユニットは、前記第１及び第２のベクトル演算パイプと前記第１のデータパスとの間に配置され、前記出力データ又は前記入力データを保持するデータバッファを備え、
前記データバッファは、前記第１のベクトル演算パイプと前記第１のデータパスの間に配置された第１のデータバッファと、前記第２のベクトル演算パイプと前記第１のデータパスの間に配置された第２のデータバッファとを備え、
前記第１及び第２のベクトル演算パイプは、他方のベクトル演算パイプが前記データバッファへアクセス中であるか否か及び前記第１のデータパスが使用中であるか否かに依存することなく、前記データバッファにアクセスするベクトル演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はベクトル処理装置及びベクトル演算処理方法に関する。
【背景技術】
【０００２】
近年、大量のベクトルデータを高速かつ正確に処理するために、さまざまな技術が開示されている。
【０００３】
特許文献１に記載のベクトル処理装置は、複数の演算パイプラインと接続するベクトルレジスタと、主記憶装置との間にデータバッファを配置している。当該ベクトル処理装置は、ベクトルレジスタからデータバッファに読み出されたデータ数をカウントし、カウントされたデータ数に基づいてベクトルユニットから主記憶装置に対するアクセス要求の送出を中断する。これにより、演算パイプラインの動作を停止する必要がある場合に、必要最小限のアクセス要求のみを中断させる。
【０００４】
特許文献２に記載のベクトル処理装置は、ベクトルデータのメモリアクセス命令の発行時に、入力ポートの偶数入力ポートと奇数入力ポートについて、それぞれ出力ポートの競合調停を行うアービタを設ける。当該ベクトル処理装置は競合調停処理を分割したため、競合調停処理のスループットの低下を抑止する。
【０００５】
特許文献３に記載のベクトル処理装置は、ベクトルデータの圧縮、拡張する変換命令を実現している。当該ベクトル処理装置は、ベクトルデータ要素数よりも少ない格納領域を有するデータバッファを設けている。当該ベクトル処理装置はベクトルデータ間の演算を必要としないもの、または演算結果が０になるもの等をデータから除外したベクトルデータをデータバッファに書き込む。上述の構成により、データバッファサイズを小さくすることを可能としている。
【０００６】
特許文献４に記載のベクトル処理装置は、同期が必要なベクトル命令の処理の高速化を実現している。当該ベクトル処理装置は、ベクトルパイプライン演算部に割り当てられたベクトル要素の数を算出し、ベクトル命令の発行タイミングを事前に予測する。これにより、同期制御信号のやりとり等が不要となり、処理の高速化が図れる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平６−１６８２６４号公報
【特許文献２】特開平９−６７５９号公報
【特許文献３】特開２０００−３５９５８号公報
【特許文献４】特開２０００−２２２３９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述のベクトル処理装置では、ベクトルレジスタからのデータの読み出し及び書き出しの処理が性能上の問題となる可能性がある。以下に詳細を説明する。
【０００９】
一般にベクトル処理装置は、複数のベクトル処理ユニット（ベクトルパイプサブユニット）から構成される。ベクトルパイプサブユニットは、ベクトル演算処理を行うベクトル演算パイプを複数有する構成とできる。ベクトル演算パイプは、相互にベクトルデータの入出力をすることができる（以下の記載では、ベクトル演算パイプ間でデータの入出力が発生する処理をベクトルパイプ間動作命令と記載する。）。
【００１０】
図８に本発明が解決しようとする課題の１つに関連するベクトル処理装置の構成を示す。ベクトル処理装置は、パイプ間クロスバユニット１０と、ベクトルパイプサブユニット２０と、信号線３０と、を備える。ベクトルパイプユニット２０は複数のベクトルパイプサブユニット２００から構成される。ベクトルパイプサブユニット２００は、ベクトル演算パイプ２１０を備える。
【００１１】
一般にベクトルパイプサブユニット２００内のベクトル演算パイプ２１０の数が増えた場合、ベクトルパイプユニット２０とパイプ間クロスバユニット１０とを結ぶ信号線の数が増える。これにより、配線収容性が圧迫されることになり、ＬＳＩ設計が困難になる。そこで、図８に示すようにベクトルパイプサブユニット２００内のベクトル演算パイプ２１０が相互にベクトルデータ読み出しをインターリーブして行う（交互に行う）制御を行う。しかし、当該処理はインターリーブを行うことにより早期の処理終了が困難な傾向がある。
【００１２】
ある命令に基づいてベクトルパイプサブユニット内にあるベクトル演算パイプからのデータ読み出し処理を行っている間は、当該命令と関連するリソースへの処理は禁止される。そのため、インターリーブ制御により処理が長時間かかり、ベクトル演算パイプで処理すべき後続処理が待ち状態となり、全体の処理が遅延する恐れがある。
【００１３】
本発明は、このような問題点を解決するためになされたものであり、ベクトル処理装置内のベクトル演算命令がベクトルパイプ間動作命令により遅延する問題を解決したベクトル処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明にかかるベクトル処理装置の一態様は、第１及び第２のベクトル演算パイプを備える第１の処理ユニットと、第２の処理ユニットと、前記第１の処理ユニットと前記第２の処理ユニットとの間でデータを転送できるよう構成されたデータ転送回路と、前記第１の処理ユニットと前記データ転送回路の間を接続するとともに、前記第１及び第２のベクトル演算パイプの出力データを前記データ転送回路に供給するため、又は前記データ転送回路から前記第１及び第２のベクトル演算パイプに入力データを供給するために使用される第１のデータパスと、を備え、前記第１の処理ユニットは、前記第１及び第２のベクトル演算パイプと前記第１のデータパスとの間に配置され、前記出力データ又は前記入力データを保持するデータバッファを備え、前記第１及び第２のベクトル演算パイプは、他方のベクトル演算パイプが前記データバッファへアクセス中であるか否か及び前記第１のデータパスが使用中であるか否かに依存することなく、前記データバッファにアクセス可能に構成されている、ものである。
【発明の効果】
【００１５】
本発明によれば、ベクトル処理装置内のベクトル演算命令がベクトルパイプ間動作命令により遅延する問題を解決することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１にかかるベクトル処理装置のブロック図である。
【図２】実施の形態１にかかるベクトル処理装置のブロック図である。
【図３】実施の形態１にかかるベクトルパイプサブユニットの構成を示すブロック図である。
【図４】実施の形態１にかかるベクトルレジスタの構成を示すブロック図である。
【図５】実施の形態１にかかる発行制御部の構成を示すブロック図である。
【図６】実施の形態１にかかるベクトル処理装置の命令実行時の動作を示すタイミングチャートである。
【図７】実施の形態１にかかるベクトル処理装置の命令実行時の動作を示すタイミングチャートである。
【図８】本発明が解決しようとする課題の１つに関連するベクトル処理装置を示すブロック図である。
【図９】本発明が解決しようとする課題の１つに関連するベクトル処理装置の命令実行時の動作を示すタイミングチャートである。
【発明を実施するための形態】
【００１７】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。まず、図１を参照して、本実施の形態１にかかるベクトル処理装置の基本構成と、その動作の概略について説明する。
【００１８】
ベクトル処理装置内にあるベクトルサブユニット２００は、ベクトル演算パイプ２１０と、送信データバッファ２２０と、受信データバッファ２３０と、ベクトルデータ選択回路２７０と、を備える。ベクトル演算パイプ２１０のデータ入出力は、送信データバッファ２２０及び受信データバッファ２３０を用いて行う。ベクトル演算パイプ２１０は、対応する送信データバッファ２２０にベクトルデータを出力のみを行い、他の処理はベクトル演算パイプ２１０の外部で行う。すなわち、ベクトルデータ選択回路２７０が各送信データバッファ２２０に格納されたデータをインターリーブして出力する。
【００１９】
図１に示したベクトル処理装置の構成により、ベクトル演算パイプ２１０はベクトル演算パイプ毎にベクトルデータの入出力のみを実行し、他の処理（インターリーブ処理等）はベクトル演算パイプ２１０の外部で行う。そのため、ベクトル演算パイプ２１０でのベクトルデータの入出力時間が短縮でき、ベクトル演算パイプ２１０内での後続の処理を早期に開始できる。
【００２０】
続いて、図２を参照して、本実施の形態１にかかるベクトル処理装置の基本構成について説明する。ベクトル処理装置は、パイプ間クロスバユニット１０と、ベクトルパイプユニット２０と、信号線３０と、を備える。パイプ間クロスバユニット１０は、ベクトルパイプサブユニット２００間のデータ転送を行うための処理部である。
【００２１】
ベクトルパイプユニット２０は複数のベクトルパイプサブユニット２００から構成される。ベクトルパイプサブユニット２００は、ベクトル演算パイプ２１０と、送信データバッファ２２０と、受信データバッファ２３０と、を備える。ベクトルパイプサブユニット２００は、複数（図中では２つ）のベクトル演算パイプ２１０を備える。ベクトルパイプサブユニット２００はベクトル演算を行うための処理ユニットである。ベクトルパイプサブユニット２００の詳細な構成は後述する。
【００２２】
信号線３０は、ベクトルパイプサブユニット２００と、パイプ間クロスバユニット１０と、の間を結ぶ信号線である。信号線３０は、ベクトルパイプサブユニット２００からの出力データをパイプ間クロスバユニット１０に入力するための信号線と、パイプ間クロスバユニット１０からの出力データをベクトルパイプサブユニット２００に入力するための信号線とを含む。
【００２３】
続いて、図３を用いて、ベクトルパイプサブユニット２００の詳細な構成を説明する。ベクトルパイプサブユニット２００は、ベクトル演算パイプ２１０と、送信データバッファ２２０と、受信データバッファ２３０と、ベクトルデータ選択回路２７０と、を備える。
【００２４】
ベクトル演算パイプ２１０は、ベクトル命令の処理を行う。ベクトル命令の処理とは、ベクトルレジスタを読み出し、読み出した値を用いた演算を行い、演算結果をレジスタに書き込む、という一連の処理を示す。また、ベクトル演算パイプ２１０は、他のベクトル演算パイプ２１０にデータを出力する処理を行う場合、送信データバッファ２２０に送信データを書き込む。
【００２５】
送信データバッファ２２０は、他のベクトル演算パイプ２１０にデータを出力する処理を行う場合に、出力データを一時的に記憶するためのデータバッファである。送信データバッファ２２０は、ベクトルパイプサブユニット２００内の各ベクトル演算パイプ２１０と対応して配置される。受信データバッファ２３０は、パイプ間クロスバユニット１０から入力されるデータを一時的に記憶するためのデータバッファである。受信データバッファ２３０は、ベクトルパイプサブユニット２００内の各ベクトル演算パイプ２１０と対応して配置される。
【００２６】
ベクトルデータ選択回路２７０は、各受信データバッファ２２０から出力されたデータをインターリーブして、パイプ間クロスバユニット１０に出力するための選択回路である。
【００２７】
ベクトル演算パイプ２１０は、パイプ内クロスバ２４０と、ベクトルレジスタ２５０と、演算器２６０と、を備える。パイプ内クロスバ２４０は、演算器２６０から出力された値をベクトルレジスタ２５０に入力する。ベクトルレジスタ２５０は、演算器２６０の演算結果を一時的に記憶するレジスタであり、ベクトル演算パイプ２１０内に複数存在する（図３では、ベクトル演算パイプ２１０に対して８つのベクトルレジスタ２５０で構成されている）。演算器２６０は、ベクトル演算を行うための処理部である。
【００２８】
図４は、ベクトルレジスタ２５０の詳細を示す図である。ベクトルレジスタ２５０は、ベクトルレジスタ２５０へのデータ書き込みにかかるベクトルレジスタライトパスと、ベクトルレジスタ２５０からのデータ読み込みにかかるベクトルレジスタリードパスと、を有する。各ベクトルレジスタ２５０は、ベクトルレジスタ番号を持つ複数のレジスタから構成される。図４ではベクトルレジスタ２５０は、ベクトルレジスタ番号ＶＲ０、ＶＲ８、ＶＲ１６、ＶＲ２４、ＶＲ３２、ＶＲ４０、ＶＲ４８、ＶＲ５６を持つレジスタから構成されている。また、図４に示したベクトルレジスタ２５０とは異なるベクトルレジスタ２５０（例えば、図４に示したベクトルレジスタ２５０の隣に配置されているベクトルレジスタ２５０）は異なるベクトルレジスタ番号（例えばＶＲ１等）を持つレジスタから構成される。ここで、同一のベクトルレジスタ２５０内にあるレジスタ（例えばＶＲ０とＶＲ８）からのデータ読み出しは、同一のベクトルレジスタリードパスを使用するため、競合関係（他方の処理を待たなければならない関係）となる。同様に、同一のベクトルレジスタ２５０内にあるレジスタ（例えばＶＲ０とＶＲ８）へのデータ書き込みは、同一のベクトルレジスタライトパスを使用するため、競合関係（他方の処理を待たなければならない関係）となる。（なお、以下の説明では、ベクトルレジスタ番号の差が８の倍数である場合には競合関係にあるものとする。）
【００２９】
続いて、図５を用いてベクトル処理装置にベクトルデータの処理命令を発行する発行制御部４００の構成を説明する。発行制御部４００は、命令リクエストＡ格納部４０１と、命令リクエストＢ格納部４０２と、発行チェック回路Ａ４０３と、発行チェック回路Ｂ４０４と、ＧＯＡ４０５と、ＧＯＢ４０６と、ビジーフラグ記憶部４０７と、ベクトルレジスタライトバスビジーフラグ記憶部４０８と、ＷＳレジスタ４０９と、ベクトルレジスタライトパス使用抑止フラグ記憶部４１０と、ＶＴＢリード抑止フラグ４１１と、ＰＸＢ命令２次リクエスト格納部４１２と、発行チェック回路Ｃ４１３と、ＲＧＯ４１４と、を備える。
【００３０】
命令リクエストＡ格納部４０１は、発行予定のベクトル命令を一時的に格納する格納部である。同様に、命令リクエストＢ格納部４０２は、発行予定のベクトル命令を一時的に格納する格納部である。
【００３１】
ビジーフラグ記憶部４０７は、各リソースの使用状態を示すビジーフラグを記憶する。ただし、ビジーフラグにはベクトルレジスタ２５０のベクトルレジスタライトパスの使用状況に関する状態の情報は含まない。ベクトルレジスタライトパスビジーフラグ記憶部４０８は、ベクトルレジスタ２５０内のベクトルレジスタライトパスの使用状況に関する状態を示すベクトルレジスタライトパスビジーフラグを記憶する。
【００３２】
発行チェック回路Ａ４０３は、命令リクエストＡ格納部４０１に格納された命令リクエストの内容をチェックする。そして、発行チェック回路Ａ４０３は、命令リクエストに応じて使用するリソースの状態をビジーフラグ記憶部４０７に問い合わせる。発行チェック回路Ａ４０３は、当該リソースが使用状態か否かのチェック結果をＧＯＡ４０５に書き込む。発行チェック回路Ａ４０３は、リソースの使用状況が空き状態であれば発行すべき命令をＧＯＡ４０５に通知する。ここで、発行チェック回路Ａ４０３は、ベクトルレジスタ２５０への書き込みを含む処理（ＶＭＶ命令等）の場合、命令を分離して（一次命令、二次命令）、ベクトルレジスタ２５０への書き込み以外の命令（一次命令）をＧＯＡ４０５に通知する。たとえばＶＭＶ命令であれば、一次命令とは、ＶＭＶ命令のうちベクトルレジスタ２５０への書き込み処理の前段階での処理（ベクトルレジスタ２５０からパイプ間クロスバユニット１０への書き出し等）の命令であり、二次命令はベクトルレジスタ２５０への書き込みを指示する命令である。また、発行チェック回路Ａ４０３は、二次命令をＰＸＢ命令２次リクエスト格納部４１２に格納する。
【００３３】
発行チェック回路Ｂ４０４は、命令リクエストＢ格納部４０２に格納された命令リクエストの内容をチェックする。そして、発行チェック回路Ｂ４０４は、命令リクエストに応じて使用するリソースの状態をビジーフラグ記憶部４０７に問い合わせる。発行チェック回路Ｂ４０４は、当該リソースが使用状態か否かのチェック結果をＧＯＢ４０６に書き込む。発行チェック回路Ｂ４０４は、リソースの使用状況が空き状態であれば発行すべき命令をＧＯＢ４０６に通知する。ここで、発行チェック回路Ｂ４０４は、発行チェック回路Ａ４０３と同様に、ベクトルレジスタ２５０への書き込みを含む処理（ＶＭＶ命令等）を分離して一次命令をＧＯＢ４０６に通知する。
【００３４】
ＧＯＡ４０５は、発行チェック回路Ａ４０３によるリソースのチェック結果が書き込まれるレジスタである。また、ＧＯＡ４０５を管理する処理部は、リソースのチェック結果の書き込みと同時に全てのベクトル演算パイプ２１０にベクトル命令の実行指示を発行する。
【００３５】
ＧＯＢ４０６は、発行チェック回路Ｂ４０４によるリソースのチェック結果が書き込まれるレジスタである。また、ＧＯＢ４０６を管理する処理部は、リソースのチェック結果の書き込みと同時に全てのベクトル演算パイプ２１０にベクトル命令の実行指示を発行する。
【００３６】
ＷＳレジスタ４０９は、制御信号であるＶＴＢライトスタート信号を格納するレジスタである。ＶＴＢライトスタート信号は、ベクトルパイプ間命令動作時に、ベクトルデータがパイプ間クロスバユニット１０から受信データバッファ２３０に書き込まれることを通知する制御信号である。
【００３７】
ベクトルレジスタライトパス使用抑止フラグ記憶部４１０は、ベクトルレジスタ２５０内のベクトルレジスタライトパスの使用を抑止するか否かを示すベクトルレジスタライトパス使用抑止フラグを記憶する。ベクトルレジスタライトパス使用抑止フラグは、ＶＴＢライトスタート信号が入力された場合、他の命令によりベクトルレジスタライトパスが使用されることを禁止するために更新される。
【００３８】
ＶＴＢリード抑止フラグ記憶部４１１は、受信データバッファ２３０の読み込みを抑止するか否かを示すＶＴＢリード抑止フラグを記憶する。ＶＴＢリード抑止フラグは、ベクトルデータがパイプ間クロスバユニット１０から入力されるベクトルデータが受信バッファ２３０に格納される前に受信バッファ２３０を読み出すことを禁止するために用いられる。
【００３９】
ＰＸＢ命令２次リクエスト格納部４１２は、命令リクエストＡ格納部４０１又は命令リクエストＢ格納部４０２に格納された命令リクエストがベクトル間動作命令である場合、ベクトルレジスタ２５０にベクトルデータを書き込むために必要な命令リクエスト（二次命令）を格納する。
【００４０】
発行チェック回路Ｃ４１３は、受信データバッファ２３０からベクトルレジスタ２５０に書き込みを行う場合に動作する。発行チェック回路Ｃ４１３は、ＰＸＢ命令２次リクエスト格納部４１２に格納された命令リクエストに対応するベクトルレジスタライトパスビジーフラグと、ＶＴＢリード抑止フラグと、ＷＳレジスタ４０９の値と、をチェックする。発行チェック回路Ｃ４１３は、チェック結果をＲＧＯ４１４に書き込む。
【００４１】
ＲＧＯ４１４は、発行チェック回路Ｃ４１３によるチェック結果を書き込むためのレジスタである。また、ＲＧＯ４１４を管理する処理部は、発行チェック回路Ｃ４１３によるチェック結果の書き込みと同時に、全てのベクトル演算パイプ２１０に受信データバッファ２３０からベクトルレジスタ２５０へのデータ書き込みの実行を指示する。
【００４２】
続いて、本実施の形態にかかるベクトル処理装置が以下の２つのベクトルパイプ間動作命令（ＶＭＶ：パイプ間ムーブ命令、ＶＡＤＤ：ベクトル加算命令、ＶＲ：ベクトルレジスタ番号、Ｓ：定数）を実行した際の動作について説明する。
（１） ＶＭＶ  ＶＲｍ←ＶＲｎ  
（２） ＶＡＤＤ  ＶＲｏ←Ｓｙ＋ＶＲｐ
【００４３】
まず、ＶＭＶ命令を発行した後に、ＶＡＤＤ命令を発行した際の本実施の形態にかかるベクトル処理装置の一般的な動作を以下に説明する。まず、ＶＭＶ命令は、命令リクエストＡ格納部４０１に格納される。発行チェック回路Ａ４０３は、当該ＶＭＶ命令が使用するリソースの使用状況をチェックする。具体的には、発行チェック回路Ａ４０３は、ビジーフラグ記憶部４０７と、ベクトルレジスタライトパスビジーフラグ記憶部４０８と、ベクトルレジスタライトパス使用抑止フラグ記憶部４１０と、をチェックしてリソースの使用状況を確認する。
【００４４】
発行チェック回路Ａ４０３は、リソースの使用状況が空き状態であればＶＭＶ命令をＧＯＡ４０５に設定するとともに、ＧＯＡ４０３を介してＶＭＶ命令の処理開始をベクトルパイプサブユニット２００に命令する（一次命令発行）。すなわち、発行チェック回路Ａ４０３はＶＭＶ命令をベクトルレジスタ２５０への書き込みの前段階の処理（ベクトルレジスタ２５０からパイプ間クロスバユニット１０への書き出し等）の命令（一次命令）を発行する。また、ＶＭＶ命令の処理開始と同時に、ビジーフラグ記憶部４０７に格納されたビジーフラグの値を更新する。これにより、当該ＶＭＶ命令で使用するリソースに対する後続命令の発行を抑止する。また、ＶＭＶ命令を構成する命令のうち、ベクトルレジスタ２５０へのベクトルデータ書き込み処理に必要な情報（二次命令）をＰＸＢ命令２次リクエスト格納部４１２に格納する。
【００４５】
ベクトル演算パイプ２１０によるＶＭＶ命令の実行が終了した後に、パイプ間クロスバユニット１０はＷＳレジスタ４０９にＶＴＢライトスタート信号を入力する。ＷＳレジスタ４０９にＶＴＢライトスタート信号が入力された場合、ベクトルレジスタライトパス使用抑止フラグ記憶部４１０内のベクトルレジスタライトパス使用抑止フラグを更新する。ベクトルレジスタライトパス使用抑止フラグの更新により、当該ＶＭＶ命令とは異なる命令によるベクトルレジスタ２５０への書き込みが抑止された状態になる。これは、パイプ間クロスバユニット１０から入力されたデータを入力先のベクトルレジスタ２５０に書き込むための準備である。
【００４６】
パイプ間クロスバユニット１０は、出力先のベクトル演算パイプ２１０に対応した受信データバッファ２３０にベクトルデータを書き込む。ここで、受信データバッファ２３０からベクトル演算パイプ２１０への書き込みのタイミングは、ＶＴＢリード抑止フラグ記憶部４１１内のＶＴＢリード抑止フラグにより管理される。
【００４７】
発行チェック回路Ｃ４１３は、ベクトル間クロスバユニット１０から受信データバッファ２３０に入力されたベクトルデータをベクトル演算パイプ２１０に入力できるか否かをチェックする。言い換えると、発行チェック回路Ｃ４１３は、当該入力処理にかかるリソースが空き状態か否かをチェックする。発行チェック回路Ｃ４１３は、ベクトルレジスタライトパスビジーフラグ記憶部４０８に格納されたベクトルレジスタライトパスビジーフラグと、ＶＴＢリード抑止フラグ記憶部４１１に格納されたＶＴＢリード抑止フラグと、ＷＳレジスタ４０９の保持する値とをチェックする。ここで、ベクトルレジスタライトパスビジーフラグは、ＰＸＢ命令２次リクエスト格納部４１２に格納した命令リクエストに関連するベクトルレジスタ２５０についての使用状況についてチェックする。
【００４８】
発行チェック回路Ｃ４１３は、リソースの使用状況が空き状態であれば受信データバッファ２３０からベクトル演算パイプ２１０への書き込み命令をＲＧＯ４１４に書き込む。また、発行チェック回路Ｃ４１３は、ＲＧＯ４１４への書き込みとともに、受信データバッファ２３０からベクトル演算パイプ２１０へのベクトルデータの書き込み命令を発行する（二次命令発行）。さらに、ＰＸＢ２次リクエスト格納部４１２内に格納されたＰＸＢ２次リクエストに対応するリソースにかかるベクトルレジスタライトパスビジーフラグを設定する。ベクトルレジスタライトパスビジーフラグの設定により、同一リソースに対する後続命令の実行を抑止する。加えて、ＲＧＯ４１４の設定の後に、ベクトルレジスタライトパス使用抑止フラグ記憶部４１０と、ＷＳレジスタ４０９の値と、をリセットする。
【００４９】
後続のＶＡＤＤ命令は、命令リクエストＢ格納部４０２に格納される。発行チェック回路Ｂ４０４は、当該ＶＭＶ命令が使用するリソースの対応状況をチェックする。具体的には、発行チェック回路Ｂ４０４は、ビジーフラグ記憶部４０７と、ベクトルレジスタライトパスビジーフラグ記憶部４０８と、ベクトルレジスタライトパス使用抑止フラグ記憶部４１０と、をチェックしてリソースの使用状況を確認する。
【００５０】
発行チェック回路Ｂ４０４は、リソースの使用状況が空き状態であればＶＡＤＤ命令をＧＯＢ４０６に設定するとともに、ＶＡＤＤ命令の処理開始を命令する。ここで、ＶＡＤＤ命令はＶＭＶ命令の後続命令であるが、使用するリソースが空き状態であれば命令発行の時点でＶＡＤＤ命令の実行を開始する。また、ＶＡＤＤ命令の処理開始と同時に、ビジーフラグ記憶部４０７に格納されたビジーフラグの値と、ベクトルレジスタライトパスビジーフラグ記憶部４０８に格納されたベクトルレジスタライトパスビジーフラグの値と、を更新する。一般にＶＡＤＤ命令はＶＭＶ命令に比べて処理時間が短い。そのため、ＶＭＶ命令実行後に待ち状態とならずに直ちにＶＡＤＤ命令が発行された場合、ＶＡＤＤ命令はＶＭＶ命令よりも先に終了する場合がある。すなわち、ＶＡＤＤ命令の実行はＶＭＶ命令の実行を追い越した形で終了する。
【００５１】
次に、図６を用いて、本実施の形態にかかるベクトル処理装置がＶＭＶ命令と、ＶＡＤＤ命令を実行した際の処理について説明する。図６は以下の命令を実行した際のタイミングチャートである。ＶＲ０とＶＲ８は、ベクトルレジスタ２５０への書き込みについて競合関係となる。なお、図中のマシンサイクルとは、クロックと同義である。
（１） ＶＭＶ  ＶＲ０←ＶＲ１４  
（２） ＶＡＤＤ  ＶＲ８←Ｓｙ＋ＶＲ７
【００５２】
最初に発行制御部４００はＶＭＶ命令を一次発行する（Ｓ１）。この場合に、当該ＶＭＶ命令に関連するリソースの使用を抑止するビジーフラグを設定する。当該一次発行にかかる命令ではベクトルレジスタ２５０への書き込みは行わないため、ベクトルレジスタライトパスビジーフラグは設定しない。
【００５３】
その後、全てのベクトル演算パイプ２１０が処理状態となり、ベクトル演算パイプ２１０はベクトルデータを読み出す（Ｓ１１）。当該読み出す処理は、インターリーブを要することのない処理である。そのため、当該処理は短い時間での終了が可能である。ベクトル演算パイプ２１０は、読み出したベクトルデータを送信データバッファ２２０に格納する（Ｓ１２）。パイプ間クロスバユニット１０は、送信バッファ２２０のリード制御に基づいて送信データバッファ２２０を読み出す。ここで、ベクトルパイプサブユニット２００は２つのベクトル演算パイプ２１０を備えるため、送信データバッファ２２０のリード制御にはデータのインターリーブを考慮する。パイプ間クロスバユニット１０は、それぞれのベクトルパイプサブユニット２００からベクトルデータを取得し、処理を行う（Ｓ１４）。
【００５４】
一方、ＶＡＤＤ命令は、ＶＭＶ命令の一次発行終了後に実行が開始される（Ｓ２）。これは、ＶＲ０とＶＲ８が同一のベクトルレジスタライトパスを使用する競合関係であってもベクトルレジスタライトパスビジーフラグが設定されていないため、ＶＡＤＤ命令を実行可能と判断されるためである。ＶＡＤＤ命令の実行では、ベクトル演算パイプ２１０からのベクトルデータの読み出しと、ベクトルデータの加算処理と、ベクトル演算パイプ２１０へのベクトルデータの書き込みとが実行される。
【００５５】
パイプ間クロスバユニット１０からのＶＴＢライトスタート信号がＷＳレジスタ４０９に入力される。ここで、ベクトルレジスタライトパス使用抑止フラグと、ＶＴＢリード抑止フラグも同時に設定する。その後、ベクトル間クロスバユニット１０は、受信データバッファ２３０にベクトルデータを書き込む（Ｓ１５）。受信データバッファ２３０のデータの読み出しが可能となった時点で、ＶＴＢリード抑止フラグがリセットされる（Ｓ１６）。発行チェック回路Ｃ４１３は、ベクトルレジスタライトパスビジーフラグと、ＶＴＢリード抑止フラグと、ＷＳレジスタ４０９の値とをチェックする。発行チェック回路Ｃ４１３は、ＶＭＶ命令の二次発行が可能であることをチェックし、チェック後に受信データバッファ２３０に格納されたベクトルデータをベクトルレジスタ２５０に書き込むこと指示する命令を発行する（ＶＭＶ二次発行）。ＶＭＶ二次発行をした場合には、ベクトルレジスタライトパス使用抑止フラグをリセットする。また、ベクトルレジスタライトビジーフラグを設定し、同一ベクトルレジスタライトパスの使用を抑止する。
【００５６】
上述のように、ベクトル演算パイプ２１０のベクトルデータの読み出し、書き込み（ＶＲ  Ｒｅａｄ、ＶＲ  Ｗｒｉｔｅ）はデータの読み書きのみの処理で処理を終了できる。これは、各ベクトル演算パイプ２１０が送信データバッファ２２０及び受信データバッファ２３０を用いてデータを送受信することによるため、ベクトル演算パイプ２１０がインターリーブ処理を行う必要がないためである。
【００５７】
また、上述のようにベクトルレジスタライトパスビジーフラグによりベクトルレジスタ２５０への書き込みを制御している。本実施の形態にかかる命令発行部４００は、ＶＭＶ命令をベクトルレジスタ２５０への書き込みが発生しない１次命令とベクトルレジスタ２５０への書き込みが生じる２次命令に分離して発行する。ベクトルレジスタライトパスビジーフラグは、２次命令の発行時のみしか使用中として設定されない。これにより、先行するＶＭＶ命令がベクトルレジスタ２５０への書き込み処理を行っていない間に後続のＶＡＤＤ命令を終了することができ、効率的なベクトル演算処理が実現されている。
【００５８】
次に、図７を用いて、本実施の形態にかかるベクトル処理装置が以下のＶＭＶ命令と、ＶＡＤＤ命令を実行した際の処理について説明する。図７は以下の命令を実行した際のタイミングチャートである。ＶＲ６とＶＲ１４は、ベクトルレジスタ２５０からの読み出しについて競合関係となる。なお、ベクトルレジスタ２５０の書き込みについては競合関係にないため、図７及び以下の説明では、ベクトルレジスタ２５０への書き込み処理にかかる記載は省略する。
（１）     ＶＭＶ  ＶＲ０←ＶＲ１４  
（２） '  ＶＡＤＤ  ＶＲ４←ＶＲ６＋ＶＲ７
【００５９】
最初に発行制御部４００はＶＭＶ命令の一次命令を発行する（Ｓ１）。この場合に、当該ＶＭＶ命令に関連するリソースの使用を抑止するビジーフラグを設定する。その後、全てのベクトル演算パイプ２１０が処理状態となり、ベクトル演算パイプ２１０はベクトルデータを読み出す（Ｓ１１）。当該読み出す処理は、インターリーブを要することのない処理である。そのため、当該処理は短い時間での終了が可能である。当該読み出し処理の実行中は、ベクトルレジスタリードパスビジーフラグが設定され、他の命令による読み出し処理が禁止される。ベクトル演算パイプ２１０は、読み出したベクトルデータを送信データバッファ２２０に格納する（Ｓ１２）。
【００６０】
パイプ間クロスバユニット１０は、送信バッファ２２０のリード制御に基づいて送信データバッファ２２０を読み出す。ここで、ベクトルパイプサブユニット２００は２つのベクトル演算パイプ２１０を備えるため、送信データバッファ２２０のリード制御にはデータのインターリーブの処理を要する。パイプ間クロスバユニット１０は、それぞれのベクトルパイプサブユニット２００からベクトルデータを取得し、処理を行う（Ｓ１４）。
【００６１】
一方、ＶＡＤＤ命令は、先行するＶＭＶ命令とベクトルレジスタリードパスの競合（Ｖ６とＶ１４）がある。そのため、ＶＡＤＤ命令はベクトルレジスタリードパスビジーフラグがリセットした後に発行可能となる。ここで、ＶＭＶ命令のベクトルデータの読み出し処理（Ｓ１１）は、インターリーブを要することのない処理のため、早期の処理終了が可能である。そのため、ＶＡＤＤ命令は、ＶＭＶ命令の発行から早期に発行される。以降の処理は、図６に示すものと同様のため、説明は省略する。
【００６２】
上述のように、送信データバッファ２２０を備えたことにより、ベクトルデータの読み出し処理（Ｓ１１）がインターリーブを要することのない処理のため、早期の処理終了が可能である。よって、ベクトルレジスタの読み込みについて競合関係にある場合であっても、ベクトルデータの読み出し処理後に後続の命令が実行可能となる。
【００６３】
続いて、本実施の形態にかかるベクトル処理装置との比較のため、図９に本発明が解決しようとする課題の１つに関連するベクトル処理装置の構成（図８）においてベクトルレジスタ２５０の読み込み処理及び書き込み処理の競合がある場合の動作を示す。本実施の形態にかかるベクトル処理装置ではベクトルレジスタからの読み込み処理はインターリーブ処理を行うため、相当の処理時間を要する（図中の（１））。そのため、ベクトルレジスタリードパスが競合している場合、本実施の形態にかかるベクトル処理装置ではＶＡＤＤ命令の実行開始が遅れる。
【００６４】
ベクトルレジスタライトパスが競合している場合、ＶＭＶ命令発行時からベクトルレジスタライトパスビジーフラグが設定される。実際のベクトルレジスタへの書き込み処理は、パイプ間クロスバユニット１０からベクトルレジスタへの書き込み（Ｓ１３）の時点で実行される。しかし、他の命令によるＶＭＶ命令発行時点からベクトルレジスタの書き込みはＶＭＶ命令発行時点から禁止された状態となる。これは、ＶＭＶ命令を一の命令として発行しているため、ベクトルレジスタライトパスビジーフラグが長時間書き変わらないことに起因する。
【００６５】
以下に本実施の形態にかかるベクトル処理装置による効果についてまとめる。図６及び図７の例で示したように、送信データバッファ２２０及び受信データバッファ２３０をベクトルパイプサブユニット２００内に設けたことにより、ベクトル演算パイプ２１０からのベクトルデータの読み出し、書き出しが早期に終了する。これは、ベクトル演算パイプ２１０毎に出力先を設け、ベクトル演算パイプ２１０での処理を早期に終了できるようにしたためである。これにより、通常インターリーブ処理の時間もかかっていた処理が短縮できる。ベクトル演算パイプ２１０からのベクトルデータの読み出し、書き出しの時間が短縮されることにより、後続の命令を開始できるタイミングが早まり、処理時間の短縮につながる。
【００６６】
また、図６に示したように、ベクトルレジスタライトパスビジーフラグによりベクトルレジスタ２５０への書き込みを制御している。本実施の形態にかかる命令発行部４００は、ＶＭＶ命令をベクトルレジスタ２５０への書き込みが発生しない１次命令とベクトルレジスタ２５０への書き込みが生じる２次命令に分離して発行する。ベクトルレジスタライトパスビジーフラグは、２次命令の発行時のみしか使用中として設定されない。これにより、先行するＶＭＶ命令がベクトルレジスタ２５０への書き込み処理を行っていない間に後続のＶＡＤＤ命令を終了することができ、効率的なベクトル演算処理が実現されている。
【００６７】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００６８】
１０    パイプ間クロスバユニット
２０    ベクトルパイプユニット
２００  ベクトルパイプサブユニット
２１０  ベクトル演算パイプ
２２０  送信データバッファ
２３０  受信データバッファ
２４０  パイプ内クロスバ
２５０  ベクトルレジスタ
２６０  演算器
２７０  ベクトルデータ選択回路
３０    信号線
４００  発行制御部
４０１  命令リクエストＡ格納部
４０２  命令リクエストＢ格納部
４０３  発行チェック回路Ａ
４０４  発行チェック回路Ｂ
４０５  ＧＯＡ
４０６  ＧＯＢ
４０７  ビジーフラグ記憶部
４０８  ベクトルレジスタライトパスビジーフラグ記憶部
４０９  ＷＳレジスタ
４１０  ベクトルレジスタライトパス使用抑止フラグ記憶部
４１１  ＶＴＢリード抑止フラグ記憶部
４１２  ＰＸＢ命令２次リクエスト格納部
４１３  発行チェック回路Ｃ
４１４  ＲＧＯ
【図１】
0005505963.tif 000002
【図２】
0005505963.tif 000003
【図３】
0005505963.tif 000004
【図４】
0005505963.tif 000005
【図５】
0005505963.tif 000006
【図６】
0005505963.tif 000007
【図７】
0005505963.tif 000008
【図８】
0005505963.tif 000009
【図９】
0005505963.tif 000010