(57)【要約】【課題】  リスト総和演算の高速化を可能とする。【解決手段】  計算機は、１つのラインが複数の要素を含み、ラインを複数に亘って処理するベクトルギャザー命令を実行するにあたり、１つのライン内におけるアドレス重複数である第１アドレス重複数を求めるとともに、該当するリクエストを統合する第１重複処理手段と、複数のライン間におけるアドレス重複があるか否かを判定し、当該判定結果と第１アドレス重複数とに基づいて、ライン間のアドレス重複数である第２アドレス重複数を求める第２重複処理手段と、ベクトルギャザー命令ごとに第２アドレス重複数を積算し、積算された重複数をスカラ演算部に通知する重複アドレス数計算手段と、を備える。【選択図】  図１４
2020052862.tif 000002
【特許請求の範囲】
【請求項１】
１つのラインが複数の要素を含み、前記ラインを複数に亘って処理するベクトルギャザー命令を実行するにあたり、１つの前記ライン内におけるアドレス重複数である第１アドレス重複数を求めるとともに、該当するリクエストを統合する第１重複処理手段と、
複数の前記ライン間におけるアドレス重複があるか否かを判定し、当該判定結果と前記第１アドレス重複数とに基づいて、前記ライン間のアドレス重複数である第２アドレス重複数を求める第２重複処理手段と、
前記ベクトルギャザー命令ごとに前記第２アドレス重複数を積算し、積算された重複数をスカラ演算部に通知する重複アドレス数計算手段と
を備えることを特徴とする計算機。
【請求項２】
請求項１記載の前記計算機において前記ベクトルギャザー命令を実行する際のニーモニックは、前記ベクトルギャザー命令をＶＧＴとし、ソースベクトルレジスタをＶＲ０とし、デスティネーションベクトルレジスタをＶＲ１とし、スカラレジスタをＳＲ０とする場合、
ＶＧＴ    ＶＲ０、ＶＲ１、ＳＲ０
であることを特徴とする計算機。
【請求項３】
前記第２重複処理手段は、前記要素ごとに設けられる１ビットのビットマップレジスタの集合である重複ビットマップレジスタを備えることを特徴とする請求項１または２記載の計算機。
【請求項４】
前記第２重複処理手段は、所定の前記要素が重複していることを検出すると、前記重複ビットマップレジスタにおける、当該要素に対応する前記ビットマップレジスタをアサートし、前記ベクトルギャザー命令の処理終了を示す終了要素を受理した場合、前記重複ビットマップレジスタを、前記重複アドレス数計算手段へ通知することを特徴とする請求項３記載の計算機。
【請求項５】
請求項３または４に記載の前記計算機において前記ベクトルギャザー命令を実行する際のニーモニックは、ベクトルマスクレジスタをＶＭ０とした場合、
ＶＧＴ    ＶＲ０、ＶＲ１、ＳＲ０、ＶＭ０
であることを特徴とする計算機。
【請求項６】
１つのラインが複数の要素を含み、前記ラインを複数に亘って処理するベクトルギャザー命令を実行するにあたり、１つの前記ライン内におけるアドレス重複数である第１アドレス重複数を求めるとともに、該当するリクエストを統合し、
複数の前記ライン間におけるアドレス重複があるか否かを判定し、当該判定結果と前記第１アドレス重複数とに基づいて、前記ライン間のアドレス重複数である第２アドレス重複数を求め、
前記ベクトルギャザー命令ごとに前記第２アドレス重複数を積算し、積算された重複数をスカラ演算部に通知する
ことを特徴とする計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機および計算方法に関する。
【背景技術】
【０００２】
ハイパフォーマンスコンピューティングのプログラムにおいて、高速化が求められる演算の一つに、たとえば、以下のようなリスト総和演算がある。
【０００３】
ｘ（ｌ（ｉ））＝ｘ（ｌ（ｉ））＋ｙ（ｉ）
しかしながら、上記のリスト総和演算の計算時にループを回る中で、ｌ（ｉ）に同一要素が入り、ｘ（ｌ（ｉ））のアドレスが重複することがある。
【０００４】
そのため、リスト総和演算の計算時には、実際の総和演算以外に重複を検出するための命令が別途必要となる。具体的には、１つの計算ループ（コアループとも呼ぶ）中に、ベクトルギャザー命令およびベクトルスキャッター命令のそれぞれが別途必要となる。
【０００５】
具体的な例を図１に示す命令列で説明する。図１は、以下のプログラム
ｄｏ  ｉ  ＝１、ｎｙ
ｘ（ｌ（ｉ））＝ｘ（ｌ（ｉ））＋ｙ（ｉ）
ｅｎｄ  ｄｏ
をアセンブラで記述した命令列の１例である。
【０００６】
本命令列におけるリスト総和演算の本質的な部分は、１０行目のｖｌｄ（ベクトルロード命令）、１３行目のｖｇｔ（ベクトルギャザー命令）、１６行目のｖｆａｄｄ（ベクトル加算命令）、および１７行目のｖｓｃ（ベクトルスキャッター命令）である。
【０００７】
ｖｇｔは、ソースであるｘ（ｌ（ｉ））を読み込む命令である。ｖｌｄは、ｙ（ｉ）を読み込む命令である。ｖｆａｄｄは、足し算を行う命令である。ｖｓｃは、結果を書き戻す命令である。
【０００８】
しかしながら、この命令列では、上記本質的部分の他に、アドレス重複を検出する以下の命令が存在する。
【０００９】
１行目：２５６要素ベクトルレジスタにそれぞれ、０、１、２、３、・・・、２５５を格納するｖｓｅｑ（ベクトルシーケンシャルナンバー命令）
１４行目：ｖｓｅｑで付与したベクトルレジスタをｘ（ｌ（ｉ））に書き込むｖｓｃ（ベクトルスキャッター命令）
１５行目：１４行目で書きだしたアドレスｘ（ｌ（ｉ））から読み戻すｖｇｔ（ベクトルギャザー命令）
１８行目：１５行目で読み戻した値と、元のシーケンシャル番号を比較するｖｃｍｐｓ（ベクトルコンペア命令）。
【００１０】
１９行目：１８行目で検出した重複箇所をベクトルマスクレジスタにビットマップで示すｖｆｍｋ（ベクトルフォームマスク命令）
２０行目：１９行目で示したビットマップの数を数えるｐｃｖｍ（ベクトルマスクポピュレーションカウント命令）
上記に関連して、特許文献１には、格納先アドレスが一致している場合に、要素番号が若い要素リクエストで生成されるライト信号の、リクエスト分配回路への出力を抑止する技術が記載されている。特許文献２には、ｖｓｃが発行された場合、ｖｓｃの開始アドレスと、終了アドレスが、ｖｓｃアドレス一致検出部に送られ、ｖｓｃアドレス一致検出部が、後続のメモリアクセス命令とアクセスするアドレス領域が重なっているか判定する技術が記載されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００４−０６２３１１号公報
【特許文献２】特開２００２−０２４２０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
アドレス重複を検出するために必要な上記命令群の中でも、特に、ベクトルギャザー命令、ベクトルスキャッター命令、ポピュレーションカウント命令は、実行コストが高い（実行時間が長い）。すなわち、これらの命令がコアループに入っているため、リスト総和演算自体の実行時間が長くなってしまう課題がある。
【００１３】
特許文献１、２の技術は、いずれも、リスト総和演算を高速化させるための技術ではない。
【００１４】
本発明は、上記課題を解決するためになされたものであり、リスト総和演算の高速化を可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の計算機は、１つのラインが複数の要素を含み、前記ラインを複数に亘って処理するベクトルギャザー命令を実行するにあたり、１つの前記ライン内におけるアドレス重複数である第１アドレス重複数を求めるとともに、該当するリクエストを統合する第１重複処理手段と、複数の前記ライン間におけるアドレス重複があるか否かを判定し、当該判定結果と前記第１アドレス重複数とに基づいて、前記ライン間のアドレス重複数である第２アドレス重複数を求める第２重複処理手段と、前記ベクトルギャザー命令ごとに前記第２アドレス重複数を積算し、積算された重複数をスカラ演算部に通知する重複アドレス数計算手段と
を備える。
【００１６】
本発明の計算方法は、１つのラインが複数の要素を含み、前記ラインを複数に亘って処理するベクトルギャザー命令を実行するにあたり、１つの前記ライン内におけるアドレス重複数である第１アドレス重複数を求めるとともに、該当するリクエストを統合し、複数の前記ライン間におけるアドレス重複があるか否かを判定し、当該判定結果と前記第１アドレス重複数とに基づいて、前記ライン間のアドレス重複数である第２アドレス重複数を求め、前記ベクトルギャザー命令ごとに前記第２アドレス重複数を積算し、積算された重複数をスカラ演算部に通知することを特徴とする。
【発明の効果】
【００１７】
本発明によれば、リスト総和演算の高速化が可能となる。
【図面の簡単な説明】
【００１８】
【図１】本発明を適用する前の、リスト総和演算の命令列の一例である。
【図２】ベクトルギャザー命令を拡張する前のニーモニックの例を示している。
【図３】本発明の第１の実施形態によって、ベクトルギャザー命令を拡張した後のニーモニックの例を示している。
【図４】第１の実施形態を適用した後の、リスト総和演算の命令列の一例である。
【図５】図５は、第１の実施形態に係る計算機の構成例を示すブロック図である。
【図６】ベクトルギャザー命令のイメージを説明する図である。
【図７】ベクトルギャザー命令の実際の発行のイメージを説明する図である。
【図８】リクエストクロスバにおける調停方法を説明する図である。
【図９】ベクトルギャザー・スキャッター圧縮部における、同一ライン内の重複を検出する方法を説明する図である。
【図１０】ライン間圧縮検出部における、ライン間のアドレス重複検出を説明する図である。
【図１１】図５に示す計算機の動作例（計算方法）を説明するためのフローチャートである。
【図１２】本発明の第２の実施形態に関する説明であって、詳細には、ベクトルギャザー命令を更に拡張した後のニーモニックの例を示している。
【図１３】第２の実施形態のライン間圧縮検出部が新たに備える重複ビットマップレジスタの図である。
【図１４】図１４は、本発明の第３の実施形態に係る計算機の構成例を示すブロック図である。
【図１５】図１５は、図１４に示す計算機の動作例（計算方法）を説明するためのフローチャートである。
【発明を実施するための形態】
【００１９】
［第１の実施形態］
（１）ベクトルギャザー命令の一般的な動作についての説明
本実施形態を説明する前に、ベクトルギャザー命令の一般的な動作について説明する。ベクトルギャザー命令のニーモニックは、以下のようになる。
【００２０】
ＶＧＴ  ＶＲ０、ＶＲ１
上記において、ＶＲ０およびＶＲ１は、ベクトルレジスタである。ベクトルレジスタは複数の要素を保持しており、本実施形態では、２５６個の要素が保持されるものと仮定する。すなわち、１つのベクトルレジスタは、８Ｂ（８×８＝６４ビット）のデータ幅のレジスタを２５６個分持っている。
【００２１】
図６は、ベクトルギャザー命令のイメージを説明するための図である。ソースベクトルレジスタであるＶＲ０の各要素（ＶＲ０（０）乃至ＶＲ０（ｎ）のそれぞれ：ｎは整数）には、アクセス先アドレスが入っている。図６において、メモリ空間から当該アドレスが指し示すデータが読み出される。読み出したデータは、デスティネーションベクトルレジスタであるＶＲ１のそれぞれの要素に格納される。
【００２２】
図７は、ベクトルギャザー命令の実際の発行のイメージを説明するための図である。ハードウェア量の観点から、一般的には、２５６要素は、１サイクルですべて処理されるのではなく、複数サイクルに分けて処理される。図７の例では、１サイクルで１６要素を処理し、全２５６要素を１６サイクルで処理する方式が示される。以下、１サイクルで処理される要素の列は、「ライン」とする。
【００２３】
図８は、リクエストクロスバにおける調停方法を説明するための図である。図８において、上段のＰ００〜Ｐ１５は入力ポートであり、下段のＰ００〜Ｐ１５は出力ポートである。
【００２４】
まず、図８では、入力ポートＰ００〜Ｐ１５にリクエストが来ている状態が示されている。１ライン目には、要素ｅ０００〜ｅ０１５が来ており、２ライン目には、要素ｅ０１６〜ｅ０３１が続いている。それぞれの要素には行先アドレスが入っており、そのアドレスに応じて、インタリーブされた出力ポートに向けてクロスバにて調停される。
【００２５】
また、図８では、調停された要素ｅ０００〜ｅ０３１が出力ポートＰ００〜Ｐ１５に発行された状態が示されている。たとえば、１ライン目のｅ０００、ｅ００２と、２ライン目のｅ０１７、ｅ０１９、ｅ０３１とは、出力ポートＰ００に調停されている。このようにベクトルレジスタの各要素に格納されたアドレスに応じて、ベクトルギャザー命令の各要素がアクセスする先が決定される。
（２）本実施形態を適用することにより拡張されるベクトルギャザー命令についての説明
次に、本発明の実施形態を適用することにより拡張されるベクトルギャザー命令について説明する。以下で説明する本実施形態は、ベクトルギャザー命令にアドレス重なり検出機能を追加することにより、前述の重なり検出の命令をなくし、リスト総和演算の高速化を図っている。重なり検出機能の実装ポイントは、以下の（２−１）（２−２）である。
（２−１）ベクトルギャザー命令（ｖｇｔ）の拡張
図２は、ベクトルギャザー命令を拡張する前のニーモニックの例を示し、図３は、本実施形態によりベクトルギャザー命令を拡張した後のニーモニックの例を示している。図３に示されるように、本実施形態では、スカラレジスタ（ＳＲ０）が引数に追加される。命令完了時、ＳＲ０にはｖｇｔ（最大２５６要素）中で、何回のアドレスの重なりがあったかが格納される。
（２−２）２種類のアドレス重なり検出
（２−２−１）ｖｇｔの同一ライン内における同一アドレスの重なり検出
（２−２−２）ｖｇｔのクロスバ通過時における、同一ポート内の、前後のライン間での同一アドレスの重なり検出
（２−２−１）および（２−２−２）でのカウント数は積算される。この積算値は、当該ｖｇｔ命令のアドレス重複数である。
【００２６】
図４は、本実施形態を適用した後の、リスト総和演算の命令列の一例である。図４に示されるように、アドレス重複を検出するための命令が、命令列（特に、コアループ）から削除されている。削除されている命令は、１行目のｖｓｅｑ、１４行目のｖｓｃ、１５行目のｖｇｔ、１８行目のｖｃｍｐｓ、１９行目のｖｆｍｋ、および２０行目のｐｃｖｍである。
【００２７】
すなわち、以上のようにしてｖｇｔを拡張することにより、ｖｇｔ単体にてアドレス重複を検出することができるため、アドレス重複を検出するための命令を別途実行する必要が無くなる。
（３）本実施形態に係る計算機についての説明
（構成の説明）
図５は、本発明の第１の実施形態に係る計算機１００の構成例を示すブロック図である。
【００２８】
計算機１００は、スカラ制御部１と、ベクトル制御部２と、アドレス計算部３と、リクエストクロスバ制御部４と、リプライクロスバ制御部５と、キャッシュ・メインメモリ６と、を備える。
【００２９】
スカラ制御部１は、プログラム命令列を最初に処理するユニットである。具体的には、スカラ制御部１は、図１や図４に示すような命令列について、フェッチ、解読、命令発行を行う。
【００３０】
ベクトル制御部２は、ベクトル演算を実施するユニットである。ベクトル制御部２は、演算オペランドを格納するベクトルレジスタ２１と、ベクトルマスクレジスタ２２と、これらのレジスタを使った演算を行うベクトル演算器２３とを、有する。ベクトル制御部２で実行する命令は、スカラ制御部１から発行され、アドレス計算部３を経由してベクトル制御部２へと至る。上記において、演算オペランドとは、ベクトル演算の対象となる値や変数のことである。
【００３１】
アドレス計算部３は、論理アドレスから物理アドレスへの変換を実施する。アドレス計算部３は、重複アドレス数計算部３１と、ベクトルギャザー・スキャッター圧縮部３２と、を有する。重複アドレス数計算部３１は、１６個のライン間圧縮検出部４１０１〜４１１６（後述）から通知される重複数をベクトルギャザー命令ごとに積算する。積算終了後、重複アドレス数計算部３１は、スカラ制御部１に対して、その積算した値を通知する。さらに、重複アドレス数計算部３１は、リプライクロスバ制御部５から返信されるベクトルギャザー命令を、ベクトルレジスタ２１に中継する。
【００３２】
ベクトルギャザー・スキャッター圧縮部３２は、「同一ライン内のアドレス重複数」を検出するとともに、リクエスト数を減らす機能を有する。具体的には、同一ライン内１６要素のうちで同じアドレスと認められた場合、ベクトルギャザー・スキャッター圧縮部３２は、リクエストを統合（圧縮とも呼ぶ）する。これにより、リクエスト数が減らされる。統合されたリクエストは、どの要素番号を何要素分統合したかの情報、すなわち、「同一ライン内のアドレス重複数」を保持する。
【００３３】
図９は、ベクトルギャザー・スキャッター圧縮部３２における、「同一ライン内のアドレス重複数」を検出する方法を説明する図である。この場合、ベクトルギャザー・スキャッター圧縮部３２は、図９に示すように（図９では、説明をより明瞭なものとするために、１６要素ではなく４要素が図示されている）、後方の要素から順に前方の要素と比較（図９の（ａ）→（ｂ）→（ｃ）の順に比較）し、一致していた場合に統合を行うとともに、「同一ライン内の重複数」を求める。
【００３４】
リクエストクロスバ制御部４は、図８で説明したように、アドレス計算部３から渡されたベクトルギャザー命令の各要素を行先ごとに調停、発行するクロスバ機能を有する。リクエストクロスバ制御部４は、それぞれの出力ポートごとにライン間圧縮検出部４１０１〜４１１６を持つ。図５では、出力ポートが１６個の場合が例示される。従って、ライン間圧縮検出部４１０１〜４１１６は、出力ポートの数に合わせて１６個存在する。
【００３５】
ライン間圧縮検出部４１０１〜４１１６は、ベクトルギャザー・スキャッター圧縮部３２で検出できなかった「ライン間のアドレス重複数」を検出する。通常、本検出は、同一命令内の全２５６要素分について実施される。
【００３６】
図１０は、ライン間圧縮検出部４１０１〜４１１６における、「ライン間のアドレス重複数」の検出方法を説明する図である。ライン間圧縮検出部４１０１〜４１１６は、２５６要素分のアドレスを保持するレジスタを有する。なお、図１０では、説明を明瞭なものとするために、各ラインが４要素である場合が例示される。
【００３７】
ライン間圧縮検出部４１０１〜４１１６は、２ライン目に相当するｅ０１６〜ｅ０１９と前方のラインｅ０００〜ｅ００３とそれぞれ比較し、重複するか否かをチェックする。また、ライン間圧縮検出部４１０１〜４１１６は、３ライン目のｅ０３２〜ｅ０３５と前方のラインｅ０１６〜ｅ０１９とをそれぞれ比較し一致を検出する。なお、図１０では示されていないが、３ライン目の要素は、１ライン目の要素とも比較される。なぜならば、ライン間のアドレス重複検出は、前方の全要素と比較する必要があるためである。
【００３８】
ライン間圧縮検出部４１０１〜４１１６は、「ライン間のアドレス重複数」を、以下のようにして求める。前方の要素との一致がなかった場合、ライン間圧縮検出部４１０１〜４１１６は、当該要素の数（図１０中の各要素において括弧内の番号、すなわち、「同一ライン内のアドレス重複数」）から−１した値を「ライン間のアドレス重複数」として求め、重複アドレス数計算部３１に通知する。一方、前方の要素との一致があった場合、ライン間圧縮検出部４１０１〜４１１６は、当該要素の「同一ライン内のアドレス重複数」を「ライン間のアドレス重複数」として重複アドレス数計算部３１に通知する。
【００３９】
具体的には、たとえば、１ライン目に関して、図１０のｅ０００については、「同一ライン内のアドレス重複数」が１（非統合）のため、０（＝１−１）が「ライン間のアドレス重複数」として通知される。また、図１０のｅ００２については、「同一ライン内のアドレス重複数」が３であり、且つ、ｅ００２自体が１ライン目でありアドレス重複はないため、２（＝３−１）が「ライン間のアドレス重複数」として通知される。
【００４０】
２ライン目については、ｅ０１６が前方のラインとの一致が無い場合、１（＝２−１）が「ライン間のアドレス重複数」として通知される。
【００４１】
一方、ｅ０１６が前方のｅ００２と重複していた場合、「ライン間のアドレス重複数」として２が通知される。すなわち、ｅ００２とｅ０１６が同じアドレスであった場合、ｅ００２自体で２つの重複、さらに、ｅ０１５で２つの重複になるため合計４つの重複が存在することになる。以下、同様の処理が、当該ベクトルギャザー命令の要素分だけ繰り返される。
【００４２】
全要素の調停が終了すると、リクエストクロスバ制御部４は、全てのライン間圧縮検出部４１０１〜４１１６に対して、ベクトルギャザー命令の処理終了を示す疑似要素（終了要素）を通知する。終了要素を受理すると、ライン間圧縮検出部４１０１〜４１１６は、重複アドレス数計算部３１に対して、それぞれのライン間圧縮検出部４１０１〜４１１６での重複検出が終了したことを示す終了通知を発行する。また、ライン間圧縮検出部４１０１〜４１１６は、アドレスを保持している要素をクリアし、次の命令に備える。なお、ライン間圧縮検出部４１０１〜４１１６は、それぞれの要素のアドレスを保持している最中に、ギャザー命令の各要素のリクエストは後続要素を待つことなくキャッシュ・メインメモリ６に発行することができる。
【００４３】
キャッシュ・メインメモリ６は、各要素のアドレスに基づき、キャッシュもしくはメインメモリから当該アドレスのデータを読み出し、リプライクロスバ制御部５に返信する。
【００４４】
リプライクロスバ制御部５は、クロスバを保持し戻り先に応じて調停し、リプライデータをアドレス計算部３に返信する。
（動作の説明）
図１１は、図５に示す計算機１００の動作例（計算方法）を説明するためのフローチャートである。
■ステップＳ１（命令発行）
スカラ制御部１によりフェッチ・デコードされたベクトルギャザー命令は、アドレス計算部３に発行される。
■ステップＳ２（ライン内圧縮）
アドレス計算部３は、ベクトルギャザー命令のアドレスを論理アドレスから物理アドレスへと変換し、ベクトル制御部２に対して、ベクトルギャザー命令が発行されたことを通知する。そして、ベクトルギャザー・スキャッター圧縮部３２は、ライン内圧縮の検出を行う。ベクトルギャザー・スキャッター圧縮部３２は、圧縮した要素に、どの要素を圧縮したかの情報（「同一ライン内のアドレス重複数」）を付与する。圧縮されたベクトルギャザー命令は、リクエストクロスバ制御部４に順次送られる。
■ステップＳ３（行先別の調停／終了要素の調停）
リクエストクロスバ制御部４は、行先別に調停を行い、行先に応じた出力ポートに当該要素を送信する。そして、当該ベクトルギャザー命令の全要素の調停発行後には、リクエストクロスバ制御部４は、当該命令の処理の終了を示す疑似要素（終了要素）を、ライン間圧縮検出部４１０１〜４１１６へ送信する。
■ステップＳ４（終了要素の判定）
ライン間圧縮検出部４１０１〜４１１６は、終了要素か否かの判定を行う。終了要素の場合は、ステップＳ９の処理が実行される。終了要素でなければ、ステップＳ５の処理が実行される。
■ステップＳ５（アドレスの保持）
ライン間圧縮検出部４１０１〜４１１６は、当該ポートにアクセスされた要素のアドレスを保持する。
■ステップＳ６（先行要素内に同一アドレスがあるか否かの判定）
ライン間圧縮検出部４１０１〜４１１６は、保持している先行要素と新規に調停されてきた要素とのライン間の比較を行い、同一アドレスがあるか否かを判定する。同一アドレスがない場合にはステップＳ７の処理が実行され、同一アドレスがある場合にはステップＳ８の処理が実行される。
■ステップＳ７（当該要素の「同一ライン内のアドレス重複数」から１を減じた値の通知）
同一アドレスがない場合、ライン間圧縮検出部４１０１〜４１１６は、当該要素の「同一ライン内のアドレス重複数」から１を減算した値を「ライン間のアドレス重複数」として求め、これを重複アドレス数計算部３１に通知する。
■ステップＳ８（当該要素の「同一ライン内のアドレス重複数」の通知）
同一アドレスがある場合、ライン間圧縮検出部４１０１〜４１１６は、当該要素の「同一ライン内のアドレス重複数」の値を「ライン間のアドレス重複数」として求め、これを重複アドレス数計算部３１に通知する。
■ステップＳ９（終了通知の発行）
全要素の調停が終了すると、リクエストクロスバ制御部４は、全てのライン間圧縮検出部４１０１〜４１１６に対して、終了要素を通知する。ライン間圧縮検出部４１０１〜４１１６は、終了要素を受理すると、重複アドレス数計算部３１に対して、それぞれのライン間圧縮検出部４１０１〜４１１６での重複検出が終了したことを示す終了通知を発行する。
■ステップＳ１０（保持アドレスのクリア）
その後、ライン間圧縮検出部４１０１〜４１１６は、アドレスを保持している要素をクリアし、次の命令に備える。
■ステップＳ１１（メインメモリにメモリアクセスを発行）
各要素のアクセス先が決まったため、キャッシュ・メインメモリ６では実際のデータアクセスが行われる。
■ステップＳ１２（リプライクロスバ制御部経由でリプライ）
キャッシュ・メインメモリ６にアクセスした各要素のリプライは、リプライクロスバ制御部５を経由して、アドレス計算部３に返信される。このとき、ライン内で圧縮しているアクセスが展開される（具体的には、圧縮前のアクセス要素数が復元される）。
■ステップＳ１３（リプライデータをベクトルレジスタに返送）
アドレス計算部３は、リプライクロスバ制御部５から返信された要素に対するリプライをベクトルレジスタ２１に返送する。アクセスのあった要素分が返送されると、ベクトル制御部２に対する処理は終了となる。
■ステップＳ１４（重複数の返送）
重複アドレス数計算部３１は、ライン間圧縮検出部４１０１〜４１１６から通知される値（「ライン間のアドレス重複数」）を１６ポート分まとめて積算し続ける。この積算は、ライン間圧縮検出部４１０１〜４１１６からの終了通知が届くまで続けられる。終了通知の受理により、「ベクトルギャザー命令に対する重複数」の計算は完了する。重複アドレス数計算部３１は、「ベクトルギャザー命令に対する重複数」をスカラ制御部１に返送する。スカラ制御部１は、受理した重複数をスカラレジスタに保持する。これにより、当該ベクトルギャザー命令は完了となる。
（効果の説明）
以上説明した第１の実施形態のようにベクトルギャザー命令（ｖｇｔ）を拡張することにより、ｖｇｔ単体にてアドレス重複を検出することができる。従って、コアループ内における、アドレス重複を検出するための命令（たとえば、図４において取り消し線が引かれた命令）を不要とすることができ、結果として、リスト総和演算の高速化が可能なる。
【００４５】
なお、以上説明した第１の実施形態は、ベクトルギャザー命令をもつベクトル型の計算機だけでなく、ベクトルギャザー命令と同等の機能をもつＳＩＭＤ（Single Instruction Multiple Data）命令を実装しているスカラ型の計算機にも適用可能である。
［第２の実施形態］
図１２は、本発明の第２の実施形態に関する説明であって、詳細には、ベクトルギャザー命令を更に拡張した後のニーモニックの例を示している。
【００４６】
第１の実施形態は、ベクトルギャザー命令の重複数をカウントしている。しかしながら、後のスカラ命令による補正処理において、全２５６要素中の重複箇所を必要とする場合がある。その時のために、ベクトルギャザー命令は、図１２のように拡張される。そして、アドレスの重複数だけでなく、重複箇所がベクトルマスクレジスタ（図１２で示されるＶＭ０）へ格納される。具体的には、重複アドレス数計算部３１およびライン間圧縮検出部４１０１〜４１１６の機能が一部変更される。
【００４７】
図１３は、本変形例に係るライン間圧縮検出部４１０１〜４１１６が新たに備える重複ビットマップレジスタ４２の図である。
【００４８】
重複ビットマップレジスタ４２は、要素ごとに設けられる１ビットのビットマップレジスタの集合である。所定の要素が重複していることを検出すると、ライン間圧縮検出部４１０１〜４１１６は、重複ビットマップレジスタにおいて当該要素に対応するビットをアサートする。リクエストクロスバ制御部４から終了要素を受け取ると、ライン間圧縮検出部４１０１〜４１１６は、重複ビットマップレジスタを、重複アドレス数計算部３１に通知する。重複アドレス数計算部３１は、全１６ポートからの重複ビットマップレジスタをＯＲしたのち、ベクトル制御部２が持つ指定されたベクトルマスクレジスタ２２に重複箇所を示す値を格納する。
【００４９】
以上説明した第２の実施形態によれば、第１の実施形態と同等の効果を得ることができる。さらに、第２の実施形態によれば、スカラ命令による補正処理において全要素（たとえば、２５６要素）中の重複箇所の情報が必要となる状況になったとしてもその状況に対応することができる。
［第３の実施形態］
図１４は、本発明の第３の実施形態に係る計算機２００の構成例を示すブロック図である。
【００５０】
計算機２００は、第１重複処理部２０２（第１重複処理手段の一例）と、第２重複処理部２０４（第２重複処理手段の一例）と、重複アドレス数計算部２０６（重複アドレス数計算手段の一例）と、を備える。
【００５１】
第１重複処理部２０２は、１つのラインが複数の要素を含み、ラインを複数に亘って処理するベクトルギャザー命令を実行するにあたり、１つのライン内におけるアドレス重複数である第１アドレス重複数を求めるとともに、該当するリクエストを統合する。第１重複処理部２０２は、たとえば、第１の実施形態のベクトルギャザー・スキャッター圧縮部３２（図５参照）に相当する。また、第１アドレス重複数は、たとえば、第１の実施形態の「同一ライン内のアドレス重複数」に相当する。
【００５２】
第２重複処理部２０４は、複数のライン間におけるアドレス重複があるか否かを判定し、当該判定結果と第１アドレス重複数とに基づいて、ライン間のアドレス重複数である第２アドレス重複数を求める。第２重複処理部２０４は、たとえば、第１の実施形態のライン間圧縮検出部４１０１〜４１１６（図５参照）に相当する。また、第２アドレス重複数は、たとえば、第１の実施形態の「ライン間のアドレス重複数」に相当する。
【００５３】
重複アドレス数計算部２０６は、ベクトルギャザー命令ごとに第２アドレス重複数を積算し、積算された重複数をスカラ演算部（図１４において不図示）に通知する。重複アドレス数計算部２０６は、たとえば、第１の実施形態の重複アドレス数計算部３１（図５参照）に相当する。また、積算された重複数は、たとえば、第１の実施形態の「ベクトルギャザー命令に対する重複数」に相当する。
【００５４】
図１５は、図１４に示す計算機２００の動作例（計算方法）を説明するためのフローチャートである。
【００５５】
第１重複処理部２０２は、上記ベクトルギャザー命令を実行するにあたり、１つのライン内におけるアドレス重複数である第１アドレス重複数を求めるとともに、該当するリクエストを統合する（ステップＳ３０）。第２重複処理部２０４は、複数のライン間におけるアドレス重複があるか否かを判定し、当該判定結果と第１アドレス重複数とに基づいて、ライン間のアドレス重複数である第２アドレス重複数を求める（ステップＳ３１）。
【００５６】
重複アドレス数計算部２０６は、ベクトルギャザー命令ごとに第２アドレス重複数を積算し、積算された重複数をスカラ演算部に通知する（ステップＳ３２）。
【００５７】
以上説明した第３の実施形態によれば、ベクトルギャザー命令単体にてアドレス重複を検出することができる。従って、コアループ内における、アドレス重複を検出するための命令（たとえば、図４において取り消し線が引かれた命令）を不要とすることができ、結果として、リスト総和演算の高速化が可能なる。
【００５８】
以上、各実施形態を用いて本発明を説明したが、本発明の技術的範囲は、上記各実施形態の記載に限定されない。上記各実施形態に多様な変更又は改良を加えることが可能であることは当業者にとって自明である。従って、そのような変更又は改良を加えた形態もまた本発明の技術的範囲に含まれることは説明するまでもない。また、以上説明した各実施形態において使用される、数値や各構成の名称等は例示的なものであり適宜変更可能である。
【符号の説明】
【００５９】
１    スカラ制御部
２    ベクトル制御部
２１    ベクトルレジスタ
２２    ベクトルマスクレジスタ
２３    ベクトル演算器
３    アドレス計算部
３１    重複アドレス数計算部
３２    ベクトルギャザー・スキャッター圧縮部
４    リクエストクロスバ制御部
４１０１〜４１１６    ライン間圧縮検出部
４２    重複ビットマップレジスタ
５    リプライクロスバ制御部
６    キャッシュ・メインメモリ
１００    計算機
２００    計算機
２０２    第１重複処理部
２０４    第２重複処理部
２０６    重複アドレス数計算部
【図１】
2020052862.tif 000003
【図２】
2020052862.tif 000004
【図３】
2020052862.tif 000005
【図４】
2020052862.tif 000006
【図５】
2020052862.tif 000007
【図６】
2020052862.tif 000008
【図７】
2020052862.tif 000009
【図８】
2020052862.tif 000010
【図９】
2020052862.tif 000011
【図１０】
2020052862.tif 000012
【図１１】
2020052862.tif 000013
【図１２】
2020052862.tif 000014
【図１３】
2020052862.tif 000015
【図１４】
2020052862.tif 000016
【図１５】
2020052862.tif 000017