(57)【特許請求の範囲】
【請求項１】
ベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令についてベクトル計算機上で高速実行する命令を生成するメモリアクセス処理装置において、
ソースプログラムを解析してベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令を検出する検出手段と、
上記検出手段により検出された２つのメモリアクセス命令について両者に必要なデータを含むメモリアクセス命令に変換する手段と、
上記変換した命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成する手段と、
上記第１のベクトルレジスタと上記第２のベクトルレジスタとの演算を行なう命令を生成する手段と
を備えたことを特徴とするメモリアクセス処理装置。
【請求項２】
ベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令についてベクトル計算機上で高速実行する命令を生成するメモリアクセス処理装置において、
ソースプログラムを解析してベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令を検出する検出手段と、
上記検出手段により検出された２つのメモリアクセス命令について両者に必要なデータを含むメモリアクセス命令に変換する手段と、
上記変換した命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成する手段と、
上記第２のベクトルレジスタ中の処理不要な要素にマスクする命令を生成する手段と、
上記マスク命令で真（有意）となった要素について上記第１のベクトルレジスタと上記第２のベクトルレジスタとの演算を行なう命令を生成する手段と
を備えたことを特徴とするメモリアクセス処理装置。
【請求項３】
ベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令についてベクトル計算機上で高速実行する命令を生成するメモリアクセス処理装置において、
ソースプログラムを解析してベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令を検出する検出手段と、
上記検出手段により検出された２つのメモリアクセス命令のうち、一方の命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成する手段と、
上記第１のベクトルレジスタと上記第２のベクトルレジスタとの末尾要素以外の部分の演算を行なう命令を生成する手段と、
上記演算の実行されなかった要素についてメモリから読み出してレジスタにそれぞれロードする命令を生成する手段と、
上記ロードしたレジスタの間の演算を行なう命令を生成する手段と
を備えたことを特徴とするメモリアクセス処理装置。
【請求項４】
上記検出手段により検出された２つのメモリアクセス命令が同じ配列であることを特徴とする請求項１から請求項３のいずれかに記載のメモリアクセス処理装置。
【請求項５】
上記検出手段により検出された２つのメモリアクセス命令の要素数が１回のベクトル演算処理で実行し得る最大要素数の整数倍以外のときに請求項１記載のメモリアクセス処理装置もしくは請求項２記載のメモリアクセス処理装置による処理を行なうことを特徴とするメモリアクセス処理システム。
【請求項６】
上記検出手段により検出された２つのメモリアクセス命令の要素数が１回のベクトル演算処理で実行し得る最大要素数の整数倍のときに請求項３記載のメモリアクセス処理装置による処理を行なうことを特徴とするメモリアクセスシステム。
【請求項７】
上記検出手段により検出された２つのメモリアクセス命令が同じ配列であることを特徴とする請求項５あるいは請求項６記載のメモリアクセス処理システム。
【請求項８】
コンピュータを、
ソースプログラムを解析してベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令を検出する検出手段と、
上記検出手段により検出された２つのメモリアクセス命令について両者に必要なデータを含むメモリアクセス命令に変換する手段と、
上記変換した命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成する手段と、
上記第１のベクトルレジスタと上記第２のベクトルレジスタとの演算を行なう命令を生成する手段と
して機能させるプログラムを記録したコンピュータ読取可能な記録媒体。
【請求項９】
コンピュータを、
ソースプログラムを解析してベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令を検出する検出手段と、
上記検出手段により検出された２つのメモリアクセス命令について両者に必要なデータを含むメモリアクセス命令に変換する手段と、
上記変換した命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成する手段と、
上記第２のベクトルレジスタ中の処理不要な要素にマスクする命令を生成する手段と、
上記マスク命令で真（有意）となった要素について上記第１のベクトルレジスタと上記第２のベクトルレジスタとの演算を行なう命令を生成する手段と
して機能させるプログラムを記録したコンピュータ読取可能な記録媒体。
【請求項１０】
コンピュータを、
ソースプログラムを解析してベクトルレジスタにデータをロードする場合に、隣接するアクセス要素位置のデータのアクセスを行なう２つのメモリアクセス命令を検出する検出手段と、
上記検出手段により検出された２つのメモリアクセス命令のうち、一方の命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成する手段と、
上記第１のベクトルレジスタと上記第２のベクトルレジスタとの末尾要素以外の部分の演算を行なう命令を生成する手段と、
上記演算の実行されなかった要素についてメモリから読み出してレジスタにそれぞれロードする命令を生成する手段と、
上記ロードしたレジスタの間の演算を行なう命令を生成する手段と
して機能させるプログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【０００１】
本発明は、隣接するメモリアクセス命令についてベクトル計算機上で高速実行する命令を生成するメモリアクセス処理装置、メモリアクセス処理システム、および記録媒体に関するものである。
【０００２】
【従来の技術】
一般に科学技術計算において、メモリアクセスの性能はプログラムの処理速度を決定する重要な１つの要因である。ベクトル計算機では、メモリ上に配置されているデータをベクトルレジスタ上にロード（メモリアクセス）してそのベクトルレジスタを介して、高速な演算を実現している。このため、メモリ上のデータをいかに効率良くレジスタ上に持ってくるか、データをいかにレジスタ上に保持しつづけられるかが性能の鍵となる。
【０００３】
例えば以下のように２つの隣接するメモリアクセスが存在するＦＯＲＴＲＡＮプログラムを例にとる。
0003817073.tif 000002
データをメモリからベクトルレジスタ上にロードする場合に、上記プログラム中の▲１▼、▲２▼の部分で、アクセス要素位置が１要素づれているときでも、図７に示すように、２つのベクトルアクセス命令でそれぞれ個別にベクトルレジスタ上にロードしていた。
【０００４】
【発明が解決しようとする課題】
このため、図７の▲１▼のアクセス（メモリからベクトルレジスタへのデータのロード）と、▲２▼のアクセスとがメモリ上のほとんど同じ同一箇所をアクセスしているにもかかわらず、個別にそれぞれメモリをアクセスしてベクトルレジスタ上にロードする必要があり、メモリアクセスという非常に遅い処理が重複した部分でも必要となり、全体の処理速度を大幅に低下させてしまうという問題があった。
【０００５】
本発明は、これらの問題を解決するため、ベクトル計算機において、隣接するメモリアクセス命令が存在するときに重複したメモリアクセスを削減して実行性能の向上を図ることを目的としている。
【０００６】
【課題を解決するための手段】
図１を参照して課題を解決するための手段を説明する。
図１において、ソースプログラム１は、コンパイル対象のソースプログラムであって、ここでは、隣接するメモリアクセス命令をベクトル計算機上で高速実行させる対象のソースプログラムである。
【０００７】
コンパイラ２は、ソースプログラム１を解析してベクトル化および最適化を行い、実行可能形式のオブジェクト１０を自動生成するものであって、ここでは、最適化手段６などから構成されるものである。
【０００８】
最適化手段６は、各種最適化を行うものであって、ここでは、隣接するメモリアクセス命令をベクトル計算機上で高速実行させるようにするものであり、隣接アクセス認識手段７およびスライド命令利用手段８などから構成されるものである。
【０００９】
隣接アクセス認識手段７は、隣接するアクセス命令を検出するものである。
スライド命令利用手段８は、隣接するアクセス命令について、メモリから第１のベクトルレジスタにデータをロードした後、スライドして第２のベクトルレジスタに格納し、第１のベクトルレジスタと第２のベクトルレジスタとを演算処理などさせるものである。
【００１０】
次に、動作を説明する。
隣接アクセス認識手段７がソースプログラム１を解析した情報をもとに隣接するメモリアクセス命令を検出し、スライド命令利用手段８が検出された隣接するメモリアクセス命令について両者に必要なデータを含むメモリアクセス命令に変換し、変換した命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成し、第１のベクトルレジスタと第２のベクトルレジスタとの演算を行う命令を生成するようにしている。
【００１１】
また、隣接するメモリアクセス命令の要素数が１回のベクトル演算処理で実行し得る最大要素数の整数倍以外のときに、隣接アクセス認識手段７がソースプログラム１を解析した情報をもとに隣接するメモリアクセス命令を検出し、スライド命令利用手段８が検出された隣接するメモリアクセス命令について両者に必要なデータを含むメモリアクセス命令に変換し、変換した命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成し、第２のベクトルレジスタ中の処理不要な要素にマスクする命令を生成し、更に、マスク命令で真（有意）となった要素について第１のベクトルレジスタと第２のベクトルレジスタとの演算を行う命令を生成するようにしている。
【００１２】
また、隣接するメモリアクセス命令の要素数が１回のベクトル演算処理で実行し得る最大要素数の整数倍のときに、隣接アクセス認識手段７がソースプログラム１を解析した情報をもとに隣接するメモリアクセス命令を検出し、スライド命令利用手段８が隣接するメモリアクセス命令中の１つの命令によってメモリから読み出されてロードされた第１のベクトルレジスタのデータを、スライドさせて第２のベクトルレジスタに格納させる命令を生成し、第１のベクトルレジスタと第２のベクトルレジスタとの有意な部分の演算を行う命令を生成し、更に、演算の実行されなかった要素についてメモリから読み出してレジスタにそれぞれロードする命令を生成し、ロードしたレジスタの間の演算を行う命令を生成するようにしている。
【００１３】
これらの際に、隣接するメモリアクセス命令が同じ配列であるときに、上述した処理を行うようにしている。
従って、ベクトル計算機において、隣接するメモリアクセス命令が存在するときに重複したメモリアクセスを削減して実行性能の向上を図ることが可能となる。
【００１４】
【発明の実施の形態】
次に、図１から図６を用いて本発明の実施の形態および動作を順次詳細に説明する。
【００１５】
図１は、本発明のシステム構成図を示す。
図１において、ソースプログラム１は、ベクトル計算機上で動作させるようにコンパイルする対象のソースプログラム（例えばＦＯＲＴＲＡＮプログラム）である。
【００１６】
コンパイラ２は、ソースプログラム１を入力としてベクトル計算機上で動作する実行可能形式のオブジェクト１０を自動生成するものであって、プログラム入力手段３、ソース解析手段４、ベクトル化手段５、最適化手段６、コード生成手段９から構成されるものである。
【００１７】
プログラム入力手段３は、ソースプログラム１を取り込むものである。
ソース解析手段４は、取り込んだソースプログラム１を形態素解析および構文解析などを行い、処理を行い易い中間言語に変換するものである。尚、ソース解析以降は、実際にはこの中間言語をもとにベクトル化、最適化などを行うが、説明を簡単にするためにソースプログラム１をもとにベクトル化、最適化などを行うとして以下説明する。
【００１８】
ベクトル化手段５は、ソースプログラム１のベクトル化を行い、ベクトル計算機上でベクトルレジスタを利用して高速並列実行可能なプログラムに変換するものである。
【００１９】
最適化手段６は、ベクトル化された後に最適化を行うものであって、ここでは、隣接アクセス認識手段７、およびスライド命令利用手段８などから構成されるものである。
【００２０】
隣接アクセス認識手段７は、隣接するアクセス命令を検出するものである。
スライド命令利用手段８は、隣接するアクセス命令について、メモリから第１のベクトルレジスタにデータをロードした後、スライドして第２のベクトルレジスタに格納し、第１のベクトルレジスタと第２のベクトルレジスタとを演算処理などさせるものである（図２を用いて後述する）。
【００２１】
コード生成手段９は、最適化後に、実行可能形式のオブジェクト１０を生成するものである。
オブジェクト１０は、ベクトル計算機上で実行可能なプログラムである。
【００２２】
次に、図２のフローチャートの順序に従い、図１の構成の動作を詳細に説明する。
図２は、本発明の動作説明フローチャートを示す。
【００２３】
図２において、Ｓ１は、プログラムを入力する。これは、図１のプログラム入力手段３がソースプログラム１を外部記憶装置などから取り込む。
Ｓ２は、ソースプログラムを解析する。これは、図１のソース解析手段４が、Ｓ１で取り込んだソースプログラム１を形態素解析および構文解析を行い、解析結果情報を生成する。
【００２４】
Ｓ３は、ベクトル化を行う。これは、Ｓ２で解析した情報をもとに、ベクトル計算機上のベクトルレジスタを利用して高速並列実行可能なように、プログラムのベクトル化を行う。
【００２５】
Ｓ４は、同じ配列か判別する。これは、Ｓ３でベクトル化したメモリアクセス命令の要素が同じ配列か判別、例えば後述する図３の（ａ）のプログラム中のｂ（ｉ）とｂ（ｉ＋１）とが同じ配列か判別する。ＹＥＳの場合には、Ｓ５に進む。ＮＯの場合には、本発明に係るＳ５以降の処理ができないので、Ｓ１０に進む。
【００２６】
Ｓ５は、隣接アクセスしているか判別する。これは、Ｓ４で同じ配列と判明したメモリアクセス命令が隣接アクセスしているか判別する。ＹＥＳの場合には、Ｓ６に進む。ＮＯの場合には、本発明に係るＳ６以降の処理ができないので、Ｓ１０に進む。
【００２７】
Ｓ６は、ベクトル長増加方式／ベクトル長削減方式の選択処理を行う。これは、隣接するメモリアクセス命令でアクセスする要素数が１回の並列処理で実行可能な要素数、あるいはその整数倍でないか判別する。
【００２８】
Ｓ７は、ベクトル長増加方式か判別する。これは、Ｓ６で隣接するメモリアクセス命令でアクセスする要素数が１回の並列処理で実行可能な要素数、あるいはその整数倍でないベクトル長増加方式（図３）か判別する。ＹＥＳの場合には、Ｓ８でベクトル長増加方式（図３）の処理を行い、Ｓ１０に進む。一方、ＮＯの場合には、Ｓ９でベクトル長削減方式（図４）の処理を行い、Ｓ１０に進む。
【００２９】
Ｓ８は、Ｓ７のＹＥＳでベクトル長増加方式と判明したので、
（１）ベクトル長を＋１する
（２）ｂ（ｉ＋１）に対するｌｏａｄ命令（ロード命令）をｖｓｌｉｄ命令（スライド命令）に置換する
（３）ベクトル長を増加させたことによって、端点ＯＦＦのためのマスク生成する
（４）ｖｓｌｉｄ命令と、そのｖｓｌｉｄ命令の対象となるメモリアクセス（ｖｌｏａｄ）以外のループ内の命令にマスク処理を施す
を実行する（図３を用いて後述する）。
【００３０】
Ｓ９は、Ｓ７のＮＯでベクトル長削減方式と判明したので、
（１）ベクトル長を変更せずに、ｂ（ｉ＋１）に対するｌｏａｄ命令をｖｓｌｉｄ命令に置換する
（２）ベクトル長を−１する
（３）ループ内の最後の要素に対する演算について、スカラ演算を実行する（図４を用いて後述する）。
【００３１】
Ｓ１０は、コードを生成する。
以上によって、ソースプログラム１を入力とし、隣接するアクセス命令の対象となる要素の配列が同じ場合（Ｓ４のＹＥＳ、Ｓ５のＹＥＳの場合）、要素数が１回のベクトル並列演算処理で実行できる最大要素数に等しいあるいはその整数倍に等しくないときにベクトル長増加方式を選択し、一方、等しいときにベクトル長削減方式を選択し、これらベクトル長増加方式／ベクトル長削減方式の処理後にコード生成を行い、オブジェクト１０を自動生成することにより、隣接するメモリアクセス命令について重複したメモリアクセスを削減し、ベクトル計算機上で高速実行可能なオブジェクトを生成することが可能となる。
【００３２】
図３は、本発明の説明図（その１）を示す。これは、既述した図２のＳ８のベクトル長増加方式の場合の具体例の説明図であって、隣接するアクセス命令の対象となる要素の配列が同じ場合のものである。
【００３３】
図３の（ａ）は、ソースプログラム（ＦＯＴＲＡＮプログラム）の例を示す。ここでは、図示の下記の演算を行う。
0003817073.tif 000003
図３の（ｂ）は、オブジェクトの例を示す。これは、図３の（ａ）のソースプログラムを、図２のフローチャート中のＳ８で本発明に係るベクトル長増加方式に従って生成したオブジェクトのイメージを示す。ここで、図中の▲１▼から▲６▼について、図３の（ｃ）の▲１▼から▲６▼で順次詳細に説明する。
【００３４】
図３の（ｃ）において、▲１▼は、ベクトル長が１τで処理できる要素数（例えば１６要素数）で割り切れなかったので、ベクトル長増加方式が選択され、v1v1の値を１１に変更する（要素数１０に＋１して１１に変更する）。
【００３５】
▲２▼は、図３の（ｂ）の▲２▼の命令vload vr1,b(1:11)によって、ｂの要素（１〜１１）を、vr1にロードする。これは、メモリ上の要素１から要素１１のデータ（ここでは、１．０）をベクトルレジスタvr1に図示のようにロードする。
【００３６】
▲３▼は、図３の（ｂ）の▲３▼の命令vslid vr2,1,vr1によって、ベクトルレジスタvr1にロードされた要素を、ベクトルレジスタvr2に例えば１要素スライドして格納する。ここで、ベクトルレジスタvr2の内容は、b(2〜11)の要素であり、(？)は未定義領域である。
【００３７】
▲４▼は、図３の（ｂ）の▲４▼の命令vgsm 11,mr4によって、ベクトルレジスタvr2の末尾要素（？）は処理してはならないため、マスク情報を生成する。
▲５▼は、図３の（ｂ）の▲５▼vadd vr3,vr1,vr2,mr4によって、マスクレジスタmr4の真となったマスク要素分の演算(ベクトルレジスタvr1とベクトルレジスタvr2の内容を加算してその加算結果をベクトルレジスタvr3に格納する演算)を行う。この結果、図示のようにベクトルレジスタvr3には、２．０という値が格納される。
【００３８】
▲６▼は、図３の（ｂ）の▲５▼vstore vr3,a(1,10),mr4によって、マスクレジスタmr4の真となったマスク要素分のベクトルレジスタvr3のデータがメモリ上のa(1,10)にストアされる。
【００３９】
以上によって、図３の（ａ）のソースプログラム１中の隣接するメモリアクセス命令でアクセスする要素数が１τで処理できる要素数あるいはその整数倍に等しくない場合にベクトル長増加方式として、▲１▼から▲６▼の命令列を自動生成することにより、重複したメモリアクセスを無くし（スライド命令によって重複した部分のデータをベクトルレジスタ間でスライドして他のベクトルレジスタに格納し）、隣接したメモリアクセス命令をベクトル計算機上で高速並列実行させることが可能となる。
【００４０】
図４は、本発明の説明図（その２）を示す。これは、既述した図２のＳ９のベクトル長削減方式の場合の具体例の説明図であって、隣接するアクセス命令の対象となる要素の配列が同じ場合のものである。
【００４１】
図４の（ａ）は、ソースプログラム（ＦＯＴＲＡＮプログラム）の例を示す。ここでは、図示の下記の演算を行う。
0003817073.tif 000004
図４の（ｂ）は、オブジェクトの例を示す。これは、図４の（ａ）のソースプログラムを、図２のフローチャート中のＳ９で本発明に係るベクトル長削減方式に従って生成したオブジェクトのイメージを示す。ここで、図中の▲１▼から▲９▼、〇10について、図４の（ｃ）の▲１▼から▲９▼、〇10で順次詳細に説明する。
【００４２】
図４の（ｃ）において、▲１▼は、ベクトル長が１τで処理できる要素数（例えば１６要素数）で割り切れたので、ベクトル長削減方式が選択され、v1v1の値を１０とする（要素数１０のままとする）。
【００４３】
▲２▼は、図４の（ｂ）の▲２▼の命令vload vr1,b(1:10)によって、ｂの要素（１〜１０）を、vr1にロードする。これは、メモリ上の要素１から要素１０のデータ（ここでは、１．０）をベクトルレジスタvr1に図示のようにロードする。
【００４４】
▲３▼は、図４の（ｂ）の▲３▼の命令vslid vr2,1,vr1によって、ベクトルレジスタvr1にロードされた要素を、ベクトルレジスタvr2に例えば１要素スライドして格納する。ここで、ベクトルレジスタvr2の末尾要素(？)は格納されていない。
【００４５】
▲４▼は、図４の（ｂ）の▲４▼の命令v1v1 9によって、ベクトル長を−１し、９とする。
▲５▼は、図４の（ｂ）の▲５▼の命令vadd vr3,vr1,vr2によって、ベクトルレジスタvr1とベクトルレジスタvr2の内容を加算してその加算結果をベクトルレジスタvr3に格納する演算を行う。この結果、図示のようにベクトルレジスタvr3には、９要素分の加算結果、２．０という値が格納される。
【００４６】
▲６▼は、図４の（ｂ）の▲６▼vstore vr3,a(1,9)によって、ベクトルレジスタvr3のデータがメモリ上のa(1,9)にストアされる。
▲７▼は、図４の（ｂ）の▲７▼load r1,b(10)によって、ベクトルレジスタvr1の１０要素目の演算が不足しているのでその演算に対しては、スカラ命令で演算する。ここでは、b(10)要素をメモリからレジスタ(スカラレジスタ)にロードする。
【００４７】
▲８▼は、図４の（ｂ）の▲８▼load r2,b(11)によって、ベクトルレジスタvr1の１１要素目の演算が不足しているのでその演算に対しては、スカラ命令で演算する。ここでは、b(11)要素をメモリからレジスタ(スカラレジスタ)にロードする。
【００４８】
▲９▼は、図４の（ｂ）の▲９▼add r3,r1,r2によって、レジスタr1とレジスタr2の内容を加算してその加算結果をレジスタr3に格納する演算を行う。この結果、図示のようにレジスタr3には、１０要素目と１１要素目の加算結果、２．０という値が格納される。
【００４９】
〇10は、図４の（ｂ）の〇10 store r3,a(10)によって、レジスタr3のデータをメモリのa(10)にストアする。
以上によって、図４の（ａ）のソースプログラム１中の隣接するメモリアクセス命令でアクセスする要素数が１τで処理できる要素数あるいはその整数倍に等しい場合にベクトル長削減方式として、▲１▼から▲９▼、〇10の命令列を自動生成することにより、重複したメモリアクセスを無くし（スライド命令によって重複した部分のデータをベクトルレジスタ間でスライドして他のベクトルレジスタに格納し）、隣接したメモリアクセス命令をベクトル計算機上で高速並列実行させることが可能となる。特に、ベクトル長削減方式では、隣接するメモリアクセス命令が１回で処理する要素数が１τで処理できる要素数の整数倍のときに適用し、ベクトル演算よりも、スカラ演算の方が高速実行できるのでこの特質を有効に利用し、より高速実行可能な命令列を自動生成したものである。
【００５０】
図５は、本発明の説明図（その３）を示す。これは、既述した図３のベクトル長増加方式および図４のベクトル長削減方式のメリットおよびデメリットを表にまとめたものであって、図示の下記の通りである。
【００５１】
0003817073.tif 000005
したがって、これらメリット／デメリットを考慮して最適なベクトル長増加方式あるいはベクトル長削減方式を選択使用すればよい。例えば既述したように、ベクトルレジスタを使用して１τで並列処理できる要素数（例えば１６）に等しいときはベクトル削減方式を採用し、マスク生成を不用とし、スカラ演算補充（図４の▲７▼〜▲９▼、〇10)を行い、高速化を図る。一方、等しくないときにベクトル長増加方式を採用し、スカラ演算補充を不用とし、マスク生成（図３の▲４▼）を行い、高速化を図る。尚、ベクトルレジスタを使用して１τで並列処理できる要素数（例えば１６）に等しいか等しくないかで、ベクトル長削減方式あるいはベクトル長増加方式のいずれかを選択したが、他の基準によっていずれかを選択するようにしてもよい。
【００５２】
図６は、本発明のハードウェアブロック図を示す。これは、既述した図１から図５によって生成したオブジェクト１０を、ベクトル計算機上で実行するときに必要な本発明に係るハードウェアのブロック図である。
【００５３】
図６において、ＣＰＵ２１は、オブジェクト１０を読み込んで各種処理を行うものである。ここでは、ＣＰＵ２１は、オブジェクト１０を解析して既述したベクトル命令を検出したときに図示のベクトル命令をベクトルプロセッサ（コプロセッサ）２２に通知したり、既述したスカラレジスタ命令を検出したときに図示のスカラレジスタ読み出しデータを通知したり、スカラレジスタ書き込みデータを通知したりなどする。
【００５４】
ベクトルプロセッサ２２は、ベクトル命令に従い処理を行うものであって、ＣＰＵ２１との間でデータの授受を行うＣＰＵインタフェース手段２３、受信したベクトル命令を解析して該当制御を指示する命令制御手段２４、命令制御手段２４からの指示に従い演算する演算手段２５、ＶＲ／ＭＲ（ベクトルレジスタなどのレジスタ）２６、主記憶アクセス手段２７、ＶＣＲ（ベクトルコントロール手段）２８などから構成されるものである。
【００５５】
主記憶２９は、各種データなどを格納するメモリである。
ここで、ＣＰＵ２１がオブジェクトを読み込んで解析し、ベクトル命令と判明したときにベクトルプロセッサ２２に当該ベクトル命令を通知し、通知を受けたベクトルプロセッサ２２の命令制御手段２４がこのベクトル命令を解析して指示を行い、この指示に従い演算手段２５がＶＲ／ＭＲ２６上のデータの演算を行い、その結果を格納したり、ＣＰＵ２１に通知したりなどし、一連の処理を実行する。
【００５６】
【発明の効果】
以上説明したように、本発明によれば、ソースプログラム１中の隣接するメモリアクセス命令についてベクトル計算機上で動作するスライド命令によって重複した部分のデータをベクトルレジスタ間でスライドして他のベクトルレジスタに格納する命令を自動生成したオブジェクト１０を出力する構成を採用しているため、隣接するメモリアクセス命令が存在するときに重複したメモリアクセスを削減してベクトル計算機の実行性能の向上を図ることが可能となる。また、隣接するメモリアクセス命令が１τで処理できる要素数の整数倍と一致したときにベクトル長削減方式を選択し、不一致のときにベクトル長増加方式を選択することで、並列処理する要素数に最適な方式を自動選択し、より高速化を図ることが可能となる。
【図面の簡単な説明】
【図１】本発明のシステム構成図である。
【図２】本発明の動作説明フローチャートである。
【図３】本発明の説明図（その１）である。
【図４】本発明の説明図（その２）である。
【図５】本発明の説明図（その３）である。
【図６】本発明のハードウェアブロック図である。
【図７】従来技術の説明図である。
【符号の説明】
１：ソースプログラム
２：コンパイラ
３：プログラム入力手段
４：ソース解析手段
５：ベクトル化手段
６：最適化手段
７：隣接アクセス認識手段
８：スライド命令利用手段
９：コード生成手段
１０：オブジェクト
【図１】
0003817073.tif 000006
【図２】
0003817073.tif 000007
【図３】
0003817073.tif 000008
【図４】
0003817073.tif 000009
【図５】
0003817073.tif 000010
【図６】
0003817073.tif 000011
【図７】
0003817073.tif 000012