(57)【特許請求の範囲】
【請求項１】
複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データを実部と虚部とで異なるロードバッファに一時格納した後に該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方式であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出し、読み出したデータの前記記憶手段におけるアドレスに基づいて、実部のデータと虚部のデータとを異なるロードバッファに格納するロードバッファ制御手段を有することを特徴とするベクトルロード処理方式。
【請求項２】
複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データをロードバッファに一時格納した後に該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方式であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出し、読み出した実部のデータと虚部のデータとを前記ロードバッファに格納し、前記ロードバッファに格納されたデータを、前記ロードバッファにおける格納順に基づいて実部と虚部とで異なる前記レジスタに転送するロードバッファ制御手段を有することを特徴とするベクトルロード処理方式。
【請求項３】
複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データを実部と虚部とで異なるロードバッファに一時格納し、その後、該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方法であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出す処理と、
前記読み出したデータの前記記憶手段におけるアドレスに基づいて、実部のデータと虚部のデータとを異なるロードバッファに格納する処理とを有することを特徴とするベクトルロード処理方法。
【請求項４】
複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データをロードバッファに一時格納し、その後、該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方法であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出す処理と、
前記読み出した実部のデータと虚部のデータとを前記ロードバッファに格納する処理と、
前記ロードバッファに格納されたデータを、前記ロードバッファにおける格納順に基づいて実部と虚部とで異なる前記レジスタに転送する処理とを有することを特徴とするベクトルロード処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複素数データ構造を有するプログラムにおいて複素数のベクトルロードを行う際のベクトルロード処理方式及びベクトルロード処理方法に関する。
【０００２】
【従来の技術】
従来より、ベクトル計算機で利用されるＦＯＲＴＲＡＮプログラムにおいては、複素数を利用した複素数データ構造を有するものが多数存在する。
【０００３】
図５は、従来のベクトル処理方式の一例を示す図である。
【０００４】
本従来例は図５に示すように、ベクトル演算器１０１と、ベクトルレジスタ１０２と、演算器クロスバ１０３と、ロードバッファ１０４と、主記憶クロスバ１０６と、主記憶部１０７−１〜１０７−４とから構成されている。
【０００５】
ベクトル演算器１０１は、ベクトルレジスタ１０２に格納されている値を用いてベクトル演算を行う演算器群であり、通常、複数種類の演算器を備えている。計算結果はベクトルレジスタ１０２に格納される。
【０００６】
ベクトルレジスタ１０２は、ベクトル演算を実行するのに用いられるレジスタ群であり、通常、複数個のレジスタを備えている。１つのレジスタ当たり複数個の要素を格納できる。
【０００７】
演算器クロスバ１０３は、ベクトル演算器１０１及びベクトルレジスタ１０２と、ロードバッファ１０４とを相互に結合するネットワークである。
【０００８】
ロードバッファ１０４は、主記憶部１０７−１〜１０７−４から読み出された値を一時的に格納しておくためのバッファである。主記憶部１０７−１〜１０７−４からの読み出しが非同期データ転送方式となっているため、このようなバッファが必要となっている。１つのベクトルロード命令に対して１つのロードバッファ１０４が用いられ、通常、複数のロードバッファ１０４を備えている。また、ロードバッファ１０４の１つ当たりの大きさはベクトルレジスタ１０２の１つ当たりの大きさと同等である。本従来例においてはベクトルレジスタ１０２の要素数を８とする。
【０００９】
主記憶クロスバ１０６は、ロードバッファ１０４と主記憶部１０７−１〜１０７−４とを相互に結合するネットワークである。
【００１０】
主記憶部１０７−１〜１０７−４は、インターリーブされている主記憶である。本従来例においては、主記憶部１０７−１〜１０７−４は４つに分割されており、主記憶部１０７−１には主記憶アドレス０，４，８，１２，…が記憶されており、主記憶部１０７−２には主記憶アドレス１，５，９，１３，…が記憶されており、主記憶部１０７−３には主記憶アドレス２，６，１０，１４，…が記憶されており、主記憶部１０７−４には主記憶アドレス３，７，１１，１５，…が記憶されているものとする。
【００１１】
主記憶部１０７−１〜１０７−４に対する主記憶読み出しリクエストは、１クロックあたりインターリーブされた４つの主記憶部１０７−１〜１０７−４それぞれに対して１つずつ、即ち最大４つの同時発行を可能とする。
【００１２】
以下に、上記のように構成されたベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法について説明する。
【００１３】
図６は、図５に示したベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法を説明するための図であり、２つのベクトルロード命令の動作時のそれぞれのロードバッファ１０４の内容と、あるクロック時間に発行される主記憶読み出しのリクエストの主記憶アドレスを示す。
【００１４】
図５に示したベクトルロード処理方式において複素数の計算を行うためには、実部と虚部のそれぞれを独立して計算するために別々のベクトルレジスタ１０２に格納する必要がある。
【００１５】
その場合、第３オペランドの開始アドレスに主記憶アドレス０、第２オペランドの距離が２と指定されたベクトルロード命令による実部の読み出しと、第３オペランドの開始アドレスに主記憶アドレス１、第２オペランドの距離が２と指定された虚部読み出しを行う２つのベクトルロード命令を発行する必要がある。
【００１６】
図６に示すように、クロック時間１〜４で実部を読み出すためのベクトルロード命令の主記憶読み出しリクエストが発行される。即ち、クロック時間１で主記憶アドレス０，２、クロック時間２で主記憶アドレス４，６、クロック時間３で主記憶アドレス８，１０、クロック時間４で主記憶アドレス１２，１４を読み出すための主記憶読み出しリクエストがそれぞれ発行される。
【００１７】
それにより、ロードバッファ１０４に格納される内容は３０１のようになる。
【００１８】
同様にして、クロック時間５〜８で虚部を読み出すためのベクトルロード命令の主記憶読み出しリクエストが発行される。即ち、クロック時間５で主記憶アドレス１，３、クロック時間６で主記憶アドレス５，７、クロック時間７で主記憶アドレス９，１１、クロック時間８で主記憶アドレス１３，１５を読み出すための主記憶読み出しリクエストがそれぞれ発行される。
【００１９】
それにより、ロードバッファ１０４に格納される内容は３０２のようになる。
【００２０】
これらのロードバッファ１０４に格納された内容３０１，３０２それぞれが異なるベクトルレジスタ１０２に転送され、その後、ベクトル演算器１０１においうて、実部、虚部それぞれの演算がなされることになる。
【００２１】
【発明が解決しようとする課題】
しかしながら、上述したような従来のベクトルロード処理方式においては、実部、虚部それぞれについてベクトル演算を行う際、それぞれの主記憶を別々なベクトルレジスタに格納するため、実部のベクトルロード命令、虚部のベクトルロード命令の２つの命令を発行することになる。そのため、１つあたりのベクトルロード命令の主記憶部読み出しのリクエスト発行が、主記憶アドレスに対して１つ飛びにしか発行することができず、例えば、図５に示したものにおいては、１クロック時間あたりに同時に４つの主記憶部に対するリクエストを発行する能力があるにも関わらず、１クロック時間あたり主記憶読み出しリクエストを同時に２つしか発行することができず、本来の性能の半分しか発揮することができないという問題点がある。これは、複素数データ構造を有するプログラムにおいて複素数のベクトルロードを行う際のスループットの低下の原因となっている。
【００２２】
本発明は、上述したような従来の技術が有する問題点に鑑みてなされたものであって、複素数データ構造を有するプログラムにおいて複素数のベクトルロードを行う際のスループットを向上させることができるベクトルロード処理方式及びベクトルロード処理方法を提供することを目的とする。
【００２３】
【課題を解決するための手段】
上記目的を達成するために本発明は、
複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データを実部と虚部とで異なるロードバッファに一時格納した後に該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方式であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出し、読み出したデータの前記記憶手段におけるアドレスに基づいて、実部のデータと虚部のデータとを異なるロードバッファに格納するロードバッファ制御手段を有することを特徴とする。
【００２４】
また、複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データをロードバッファに一時格納した後に該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方式であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出し、読み出した実部のデータと虚部のデータとを前記ロードバッファに格納し、前記ロードバッファに格納されたデータを、前記ロードバッファにおける格納順に基づいて実部と虚部とで異なる前記レジスタに転送するロードバッファ制御手段を有することを特徴とする。
【００２５】
また、複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データを実部と虚部とで異なるロードバッファに一時格納し、その後、該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方法であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出す処理と、
前記読み出したデータの前記記憶手段におけるアドレスに基づいて、実部のデータと虚部のデータとを異なるロードバッファに格納する処理とを有することを特徴とする。
【００２６】
また、複素数データ構造を有し、実部と虚部とがインターリーブされた互いに異なる記憶手段に記憶されているプログラムからデータを読み出し、該データをロードバッファに一時格納し、その後、該データを実部と虚部とで異なるレジスタに転送し、該レジスタ内にて前記データを用いて演算を行うベクトルロード処理方法であって、
前記記憶手段から１クロックにつきインターリーブのバンク数の前記実部と虚部のデータを同時に読み出す処理と、
前記読み出した実部のデータと虚部のデータとを前記ロードバッファに格納する処理と、
前記ロードバッファに格納されたデータを、前記ロードバッファにおける格納順に基づいて実部と虚部とで異なる前記レジスタに転送する処理とを有することを特徴とする。
【００２７】
（作用）
上記のように構成された本発明においては、複素数データ構造向けのベクトルロード命令が発行された場合、まず、ロードバッファ制御手段が２つのロードバッファを確保する。続いて、ロードバッファ制御手段が記憶手段に対して開始アドレスから連続するアドレスの主記憶読み出しリクエストを発行する。そのリプライがロードバッファに返ってきたとき、ロードバッファ制御手段は、実部（開始アドレス＋８Ｂ*n）の主記憶アクセスリクエストのリプライと、虚部（開始アドレス＋８Ｂ*(n+1)）の主記憶アクセスリクエストのリプライとを振り分けて、確保した２つのロードバッファのしかるべき方に書き込む。
【００２８】
これにより、２つのロードバッファそれぞれにおいて、実部のデータ、虚部のデータが書き込まれたことになる。その後、それぞれのロードバッファに書き込まれたデータをそのまま実部と虚部とで異なるレジスタに転送することにより、ベクトルロードの処理が完了する。
【００２９】
このように本発明においては、記憶手段から実部と虚部のデータを同時に読み出し、読み出した実部のデータと虚部のデータとを異なるロードバッファに格納、あるいは、同一のロードバッファに格納した後にロードバッファに格納されたデータを実部と虚部とで異なるレジスタに転送するので、複素数データ構造向けのベクトルロードのスループットを向上させることができる。
【００３０】
【発明の実施の形態】
以下に、本発明の実施の形態について図面を参照して説明する。
【００３１】
図１は、本発明のベクトルロード処理方式の実施の一形態を示す図である。
【００３２】
本形態は図１に示すように、ベクトル演算器１と、ベクトルレジスタ２と、演算器クロスバ３と、ロードバッファ４と、ロードバッファ制御部５と、主記憶クロスバ６と、記憶手段である主記憶部７−１〜７−４とから構成されている。
【００３３】
ベクトル演算器１は、ベクトルレジスタ２に格納されている値を用いてベクトル演算を行う演算器群であり、通常、複数種類の演算器を備えている。計算結果はベクトルレジスタ２に格納される。
【００３４】
ベクトルレジスタ２は、ベクトル演算を実行するのに用いられるレジスタ群であり、通常、複数個のレジスタを備えている。１つのレジスタ当たり複数個の要素を格納できる。
【００３５】
演算器クロスバ３は、ベクトル演算器１及びベクトルレジスタ２と、ロードバッファ４とを相互に結合するネットワークである。
【００３６】
ロードバッファ４は、主記憶部７−１〜７−４から読み出された値を一時的に格納しておくためのバッファである。主記憶部７−１〜７−４からの読み出しが非同期データ転送方式となっているため、このようなバッファが必要となっている。１つのベクトルロード命令に対して１つのロードバッファ４が用いられ、通常、複数のロードバッファ４を備えている。また、ロードバッファ４の１つ当たりの大きさはベクトルレジスタ２の１つ当たりの大きさと同等である。本形態においてはベクトルレジスタ２の要素数を８とする。
【００３７】
ロードバッファ制御部５は、主記憶部７−１〜７−４に対する主記憶読み出しリクエストの発行や主記憶部７−１〜７−４からの読み出しのリプライ制御を行う。
【００３８】
主記憶クロスバ６は、ロードバッファ４と主記憶部７−１〜７−４とを相互に結合するネットワークである。
【００３９】
主記憶部７−１〜７−４は、インターリーブされている主記憶である。本形態においては、主記憶部７−１〜７−４は４つに分割されており、主記憶部７−１には主記憶アドレス０，４，８，１２，…が記憶されており、主記憶部７−２には主記憶アドレス１，５，９，１３，…が記憶されており、主記憶部７−３には主記憶アドレス２，６，１０，１４，…が記憶されており、主記憶部７−４には主記憶アドレス３，７，１１，１５，…が記憶されているものとする。
【００４０】
主記憶部７−１〜７−４に対する主記憶読み出しリクエストは、１クロックあたりインターリーブされた４つの主記憶部７−１〜７−４それぞれに対して１つずつ、即ち最大４つの同時発行を可能とする。
【００４１】
以下に、上記のように構成されたベクトルロード処理方式における処理方法について説明する。
【００４２】
図２は、図１に示したベクトルロード処理方式における処理方法を説明するための図であり、ベクトルロード命令の動作時のロードバッファ４の内容と、あるクロック時間に発行される主記憶読み出しのリクエストの主記憶アドレスを示す。
【００４３】
本形態におけるベクトルロード命令とは、第３オペランドで指定されるアドレスを主記憶上の開始アドレスとし、第２オペランドで指定される値を距離として、第１オペランドに指定されたベクトルレジスタの各要素に連続で格納する命令である。例えば、第３オペランドの開始アドレスに主記憶アドレス０、第２オペランドの距離が１と指定されたベクトルロード命令が発行されたとする。
【００４４】
このとき、ロードバッファ制御部５は、そのベクトルロード命令のためにロードバッファ４を１つ確保する。本形態においては、１クロック時間あたり、インターリーブされた４つの主記憶部それぞれに対して１つずつの主記憶読み出しリクエストを発行できることから、図２において、クロック時間１では主記憶アドレス０，１，２，３の主記憶読み出しリクエストが発行され、クロック時間２では主記憶アドレス４，５，６，７の主記憶読み出しリクエストが発行される。
【００４５】
主記憶クロスバ６は、競合調停などを行って指定された主記憶アドレスの内容を主記憶部７−１〜７−４から読み出し、ロードバッファ４へ格納する。なお、ロードバッファ４と主記憶部７−１〜７−４は、非同期データ転送方式のため、ロードバッファ４へのリプライはリクエストの発行順とは必ずしも一致しない。
【００４６】
ロードバッファ４からは第１オペランドに指定されたベクトルレジスタ２の各要素に順次内容が転送され、全て転送し終わるとベクトルロード命令は完了となる。
【００４７】
以下に、上述したベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法について説明する。
【００４８】
図３は、図１に示したベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法の一例を説明するための図であり、２つのベクトルロード命令の動作時のそれぞれのロードバッファ４の内容と、あるクロック時間に発行される主記憶読み出しのリクエストの主記憶アドレスを示す。
【００４９】
ＦＯＲＴＲＡＮにおける複素数のデータ構造は、実部１ワードと虚部１ワードとを１つの組みとして主記憶上に展開される。例えば、図１に示したものにおいては、アドレス１に実部、アドレス２に虚部が置かれ、この２つが一組として複素数の一要素となる。以下では、主記憶部７−１〜７−４の偶数アドレス（０，２，４，…アドレス）に実部がおかれ、奇数アドレス（１，３，５，…アドレス）に虚部がおかれているものとして説明する。
【００５０】
複素数データ構造向けのベクトルロード命令が発行されると、まず、ロードバッファ制御部５はロードバッファ４を２つ確保する。
【００５１】
図３において、クロック時間１で実部、虚部の両方を読み出す、即ち主記憶アドレス０，１，２，３を読み出すリクエストを発行する。続いて、クロック時間２で主記憶アドレス４，５，６，７を読み出すリクエストを発行し、クロック時間３で主記憶アドレス８，９，１０，１１を読み出すリクエストを発行し、クロック時間４で主記憶アドレス１２，１３，１４，１５を読み出すリクエストを発行する。
【００５２】
主記憶に実部が格納されている主記憶アドレス、即ち開始アドレス＋８Ｂ*nのアドレスをアクセスするリクエストのリプライが返ったら、ロードバッファ４０１に格納し、主記憶に虚部が格納されている主記憶アドレス、即ち開始アドレス＋８Ｂ*（n+1）のアドレスをアクセスするリクエストのリプライが返ったらロードバッファ４０２に格納するように、ロードバッファ制御部５が振り分け制御を行う。ロードバッファ４０１，４０２それぞれが、順次別々のベクトルレジスタ２に内容を転送することにより、従来方式と同じ結果を得ることができる。
【００５３】
上記一連の処理によって本形態においては、実部、虚部の主記憶アクセスを同時に行える、即ち連続アドレスで主記憶読み出しリクエストの発行が行えるため、主記憶リクエスト発行が従来の半分の時間で終了させることができる。
【００５４】
（他の実施の形態）
図４は、図１に示したベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法の他の例を説明するための図であり、２つのベクトルロード命令の動作時のそれぞれのロードバッファ４の内容と、あるクロック時間に発行される主記憶読み出しのリクエストの主記憶アドレスを示す。
【００５５】
複素数データ構造向けのベクトルロード命令が発行されると、まず、ロードバッファ制御部５は、ロードバッファ４を２つ確保する。
【００５６】
図４において、クロック時間１で実部、虚部の両方を読み出す、即ち主記憶アドレス０，１，２，３を読み出すリクエストを発行する。続いて、クロック時間２で主記憶アドレス４，５，６，７を読み出すリクエストを発行し、クロック時間３で主記憶アドレス８，９，１０，１１を読み出すリクエストを発行し、クロック時間４で主記憶アドレス１２，１３，１４，１５を読み出すリクエストを発行する。
【００５７】
主記憶部７−１〜７−４よりリプライが返ったら、主記憶アドレス順にロードバッファ５０１，５０２の各要素に格納する。
【００５８】
ロードバッファ制御部５は、ロードバッファ５０１，５０２それぞれの各要素からベクトルレジスタ２の各要素に内容を転送するときに、ロードバッファ４のｎ番目の要素である実部と、（ｎ＋１）番目の要素である虚部との振り分け制御を行い、それぞれを別々のベクトルレジスタ２の各要素に格納する。
【００５９】
これにより、従来方式と同じ結果を得ることができる。
【００６０】
上記一連の処理によって本形態においては、実部、虚部の主記憶アクセスを同時に行える、即ち連続アドレスで主記憶読み出しリクエストの発行が行えるため、主記憶リクエスト発行が従来の半分の時間で終了させることができる。
【００６１】
【発明の効果】
以上説明したように本発明においては、１つの命令発行により２つのロードバッファを制御して主記憶読み出しリクエストの発行時間を従来の半分にすることにより、ＦＯＲＴＲＡＮにおける複素数データ構造に対するベクトルロード命令のスループットを向上させることができる。
【図面の簡単な説明】
【図１】本発明のベクトルロード処理方式の実施の一形態を示す図である。
【図２】図１に示したベクトルロード処理方式における処理方法を説明するための図である。
【図３】図１に示したベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法の一例を説明するための図である。
【図４】図１に示したベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法の他の例を説明するための図である。
【図５】従来のベクトル処理方式の一例を示す図である。
【図６】図５に示したベクトルロード処理方式において複素数の計算を行う場合のベクトルロード処理方法を説明するための図である。
【符号の説明】
１    ベクトル演算器
２    ベクトルレジスタ
３    演算器クロスバ
４    ロードバッファ
５    ロードバッファ制御部
６    主記憶クロスバ
７−１〜７−４    主記憶部
【図１】
0003786182.tif 000002
【図２】
0003786182.tif 000003
【図３】
0003786182.tif 000004
【図４】
0003786182.tif 000005
【図５】
0003786182.tif 000006
【図６】
0003786182.tif 000007