(57)【要約】【課題】添字配列の値の偏りにより各ベクトル実行における重複アクセスの割合が多い場合に対応して、添字配列の値の偏りを緩和し、リダクションループのベクトル演算の割合を向上させられるようにする。【解決手段】添字配列シャッフル装置が、プログラム中でベクトル化対象のループの範囲を検出するループ検出部と、前記ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する添字配列検出部と、ベクトル演算における前記添字配列のアクセス順序を前記アクセス範囲の範囲内でシャッフルするコードを前記プログラムに挿入するシャッフルコード挿入部と、を備える。【選択図】図３
2020160621.tif 000002
【特許請求の範囲】
【請求項１】
プログラム中でベクトル化対象のループの範囲を検出するループ検出部と、
前記ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する添字配列検出部と、
ベクトル演算における前記添字配列のアクセス順序を前記アクセス範囲の範囲内でシャッフルするコードを前記プログラムに挿入するシャッフルコード挿入部と、
を備える添字配列シャッフル装置。
【請求項２】
前記ベクトル化対象のループと完全入れ子になっているループがある場合、それらのループのうち最外側のループの直前の位置を添字配列のシャッフル位置として決定するシャッフル位置決定部をさらに備え、
前記シャッフルコード挿入部は、前記シャッフル位置決定部が決定した位置に、前記コードを挿入する、
請求項１に記載の添字配列シャッフル装置。
【請求項３】
前記シャッフルコード挿入部は、前記添字配列のアクセス範囲を最大ベクトル長個の要素からなるセグメントに分割し、現在のセグメントより後方にある添字配列の要素を最大ベクトル長個の小区分に分割し、セグメント内の各要素と、対応する番号の小区分から乱数により選択した要素とをベクトル命令によりシャッフルする前記コードを挿入する、
請求項１または請求項２に記載の添字配列シャッフル装置。
【請求項４】
請求項１から３の何れか一項に記載の添字配列シャッフル装置を含むベクトル化計算機。
【請求項５】
プログラム中でベクトル化対象のループの範囲を検出する工程と、
前記ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する工程と、
ベクトル演算における前記添字配列のアクセス順序を前記アクセス範囲の範囲内でシャッフルするコードを前記プログラムに挿入する工程と、
を含む添字配列シャッフル方法。
【請求項６】
コンピュータに、
プログラム中でベクトル化対象のループの範囲を検出する工程と、
前記ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する工程と、
ベクトル演算における前記添字配列のアクセス順序を前記アクセス範囲の範囲内でシャッフルするコードを前記プログラムに挿入する工程と、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、添字配列シャッフル装置、ベクトル化計算機、添字配列シャッフル方法およびプログラムに関する。
【背景技術】
【０００２】
プログラムのベクトル実行に関して技術が提案されている。
例えば、特許文献１には、内側ループがベクトル化不可かつ外側ループがベクトル化可能な２重ループに対して、内側ループのループ範囲を固定して内側ループと外側ループの入れ替えを行い、入替え後の内側ループが、元のプログラムの実行範囲のみを実行するようＩＦ構文を挿入することにより、ベクトル実行可能にすることが記載されている。
また、特許文献２には、一重化できないベクトル化可能な多重ループに対して、ループの実行範囲を限定するマスク配列を直前に生成し、マスク配列が真の繰返しのみを実行するＩＦ構文を最内側ループの外側に挿入することで、ループ一重化を可能にすることが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０４−０９７４８４号公報
【特許文献２】特開平０３−２２０６６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
プログラムのベクトル実行の阻害要因の１つに重複アクセスがある。また、重複アクセスに対する対応方法の１つにリトライ（Retry）法がある。リトライ法では、プログラムをベクトル実行し、重複があった要素だけをスカラ演算で再実行する。ただし、リトライ法では、添字配列の値の偏りにより、各ベクトル実行における重複アクセスの割合が多い場合、スカラ演算の割合が増え性能が低下してしまう。
【０００５】
本発明は、上述の課題を解決することのできる添字配列シャッフル装置、ベクトル化計算機、添字配列シャッフル方法およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
本発明の第１の態様によれば、添字配列シャッフル装置は、プログラム中でベクトル化対象のループの範囲を検出するループ検出部と、前記ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する添字配列検出部と、ベクトル演算における前記添字配列のアクセス順序を前記アクセス範囲の範囲内でシャッフルするコードを前記プログラムに挿入するシャッフルコード挿入部と、を備える。
【０００７】
本発明の第２の態様によれば、添字配列シャッフル方法は、プログラム中でベクトル化対象のループの範囲を検出する工程と、前記ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する工程と、ベクトル演算における前記添字配列のアクセス順序を前記アクセス範囲の範囲内でシャッフルするコードを前記プログラムに挿入する工程と、を含む。
【０００８】
本発明の第３の態様によれば、プログラムは、コンピュータに、プログラム中でベクトル化対象のループの範囲を検出する工程と、前記ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する工程と、ベクトル演算における前記添字配列のアクセス順序を前記アクセス範囲の範囲内でシャッフルするコードを前記プログラムに挿入する工程と、を実行させるためのプログラムである。
【発明の効果】
【０００９】
この発明によれば、添字配列の値の偏りにより各ベクトル実行における重複アクセスの割合が多い場合に対応して、添字配列の値の偏りを緩和し、リダクションループのベクトル演算の割合を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係る添字配列シャッフル装置の機能構成の例を示す概略ブロック図である。
【図２】実施形態に係るベクトル化の対象のＦｏｒｔｒａｎプログラムの例を示す図である。
【図３】実施形態に係るシャッフルコード挿入部がコードを挿入したプログラムの例を示す図である。
【図４】実施形態に係るシャッフルコード挿入部が生成したコードによる、配列のアクセス範囲の分割およびシャッフルの例を示す図である。
【図５】実施形態に係る添字配列シャッフル装置の構成の例を示す図である。
【図６】実施形態に係る添字配列シャッフル方法における処理手順の例を示す図である。
【図７】少なくとも１つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図１は、実施形態に係る添字配列シャッフル装置の機能構成の例を示す概略ブロック図である。図１に示す構成で、添字配列シャッフル装置１００は、ループ検出部１０１と、添字配列検出部１０２と、シャッフル位置決定部１０３と、シャッフルコード挿入部１０４とを備える。
【００１２】
ここで、間接アクセス（Indirection、または、Indirection Reference）を含むリダクションループに、ベクトル化の阻害要因である重複アクセスが存在する場合に、ループをベクトル実行するための方法の１つにＲｅｔｒｙ法がある。
ここでいう間接アクセスとは、配列へのアクセスに際して、その配列の添字（Index）の指定に、さらに配列が用いられることである。間接アクセスで配列の添字の指定に用いられる配列を、添字配列と称する。後述する図２の「ｄｏ  ｉｉ＝・・・」のループ内で、配列ｗｏｒｋｐの添字ｉｘｉｄｘの計算に、配列ｘｍが用いられていることが、間接アクセスの例に該当する。この場合の配列ｘｍは、添字配列の例に該当する。
また、ここでいうリダクションループとは、同じデータに対して繰り返し同じ種類の演算が行われるループである。後述する図２の「ｄｏ  ｉｉ＝・・・」のループによって、配列ｗｏｒｋｐに対して加算が繰り返し行われることが、リダクションループの例に該当する。
【００１３】
Ｒｅｔｒｙ法では、ベクトル演算時に重複アクセスをチェックし、重複があった要素だけをスカラ演算で再実行する。
ただし、Ｒｅｔｒｙ法では、添字配列の値の偏りにより、各ベクトル実行における重複アクセスの割合が多い場合、スカラ演算の割合が増え性能が低下してしまう。
ここでいう添字配列の偏りとは、間接アクセスにおいて添字配列の値が繰り返し同じ値になることである。添字配列の値が繰り返し同じ値になることで、同じ配列要素へのアクセスが繰り返される。後述する図２の「ｄｏ  ｉｉ＝・・・」のループがｉｉ＝ｉｔｏｐｐからｉｉ＝ｉｅｎｄｐまで繰り返される場合、ｘｍ（ｉｔｏｐｐ）、ｘｍ（ｉｔｏｐｐ＋１）、ｘｍ（ｉｔｏｐｐ＋２）、・・・の値が、１０、１０、９、１０、９、・・・となっていると、配列ｗｏｒｋｐの同じ要素が繰り返しアクセスされる。このことが、添字配列の偏りの例に該当する。添字配列ｘｍの値が全体でみればそれほど偏っていない場合でも、局所的に同じ値が繰り返されれば、添字配列の偏りの例に該当する。
【００１４】
なお、間接アクセスによるリダクションループをベクトル化するＲｅｔｒｙ法以外の手法として、Ｗｏｒｋ  Ｖｅｃｔｏｒ法が知られているが、Ｗｏｒｋ  Ｖｅｃｔｏｒ法は、巨大な作業領域を必要とする。このため、プログラムの規模が大きくなるとＷｏｒｋ  Ｖｅｃｔｏｒ法の適用は難しい。
【００１５】
これに対し、添字配列シャッフル装置１００は、間接アクセスによるリダクションループをＲｅｔｒｙ法でベクトル実行したときのベクトル化率が低い場合、事前に添字配列をシャッフルすることにより、リダクションループのベクトル化率を上げ、実行性能を向上させる。添字配列シャッフル装置１００によれば、間接アクセスによるリダクションループの前に、添字配列の要素をシャッフルすることで、追加のメモリ領域や利用者による複雑なプログラミング無しで、添字配列の値の偏りを緩和し、リダクションループのベクトル演算の割合を向上させることができる。
添字配列シャッフル装置１００は、コンピュータを用いて構成される。添字配列シャッフル装置１００が、ベクトル化計算機として構成されていてもよい。
【００１６】
ループ検出部１０１は、添字配列シャッフル装置１００が間接アクセスリダクションループをベクトル実行する場合に、プログラム中におけるそのループの範囲を検出する。
添字配列検出部１０２は、ループ検出部１０１が検出したループ範囲中において、リダクション対象配列の添字として使用されている配列及びそのアクセス範囲（添字の最小値および最大値）を検出する。
ここでいうリダクション対象配列は、リダクションループで繰り返される同じ種類の演算の対象となる配列である。後述する図２のプログラムで繰り返し行われる加算の対象となる配列Ｗｏｒｋｐが、リダクション対象配列の例に該当する。
【００１７】
シャッフル位置決定部１０３は、ループ検出部１０１が検出したループと完全に入れ子になっているループを検出し、それらのループのうち、最外側ループの直前の位置を、添字配列シャッフル位置として決定する。ループ検出部１０１が検出したループと完全に入れ子になっているループが無い場合は、シャッフル位置決定部１０３は、ループ検出部１０１が検出したループの直前の位置を、添字配列シャッフル位置として決定する。
【００１８】
シャッフルコード挿入部１０４は、シャッフル位置決定部１０３が決定した添字配列シャッフル位置に、添字配列検出部１０２が検出した添字配列のアクセス範囲をシャッフルするコードを挿入する。添字配列のアクセス範囲をシャッフルするコードをシャッフルコードとも称する。
特に、シャッフルコード挿入部１０４は、添字配列検出部１０２が検出した添字配列のアクセス範囲を高速にシャッフルするシャッフルコードを挿入する。これにより、シャッフルによる遅延を回避することができ、ループのベクトル実行およびその前処理の、全体での処理速度の向上幅が大きくなる。
【００１９】
以上により、添字配列シャッフル装置１００では、添字配列の値の偏りにより、Ｒｅｔｒｙ法によるベクトル実行のベクトル化率が低い間接アクセスリダクションループでも、直前に添字配列をシャッフルすることで、追加のメモリ領域や利用者による複雑なプログラミング無しで、添字配列の値の偏りを緩和し、ベクトル化率上げることにより、実行性能を向上させることができる。
【００２０】
次に、本実施例の全体の動作について、図２のＦｏｒｔｒａｎプログラムを利用して、詳細に説明する。
図２は、ベクトル化の対象のＦｏｒｔｒａｎプログラムの例を示す図である。
添字配列シャッフル装置１００が、図２のＦｏｒｔｒａｎプログラムにおける、配列ｗｏｒｋｐに対する添字配列ｘｍによる間接アクセスを含むリダクションループをＲｅｔｒｙ法によりベクトル実行する場合に、まず、ループ検出部１０１が、間接アクセスリダクションループの範囲が、ＤＯ文ｄｏ  ｉｉから、対応するＥＮＤＤＯ文までであることを検出する。
【００２１】
なお、図２の例では、Ｒｅｔｒｙ法によるベクトル実行を指示するＬＩＳＴＶＥＣ指示行（"!CDIR LISTVEC, SHUFFLE"）が指定され、この行の位置によって次の行のＤＯ文ｄｏ  ｉｉのループが、Ｒｅｔｒｙ法によるベクトル実行対象のループに指定されている。ただし、添字配列シャッフル装置１００の処理における、Ｒｅｔｒｙ法によるベクトル実行対象のループの決定方法は、かかる指定によるものに限定されない。例えば、コンパイル時のオプションによる指定、または、コンパイラによる自動的な判断でも、Ｒｅｔｒｙ法によるベクトル化の決定、およびその対象のループの決定は可能である。
【００２２】
次に、添字配列検出部１０２は、ループ検出部１０１が検出したｄｏ  ｉｉのループ範囲中において、リダクション対象配列の添字として使用されている配列がｘｍであり、配列ｘｍのアクセス範囲（添字の最小値から最大値までの範囲）がｉｔｏｐｐからｉｅｎｄｐまでであることを検出する。ｉｔｏｐｐからｉｅｎｄｐまでの範囲を（ｉｔｏｐｐ：ｉｅｎｄｐ）とも表記する。
【００２３】
次に、シャッフル位置決定部１０３は、ループ検出部１０１が検出したループと完全に入れ子になっているループを検出し、それらのループのうち、最外側ループの直前の位置を、添字配列シャッフル位置として決定する。
図２の例の場合、シャッフル位置決定部１０３は、ループ検出部１０１が検出した、ｄｏｉｉのループと完全に入れ子になっている、ｄｏ  ｉｘのループを検出する。そして、シャッフル位置決定部１０３は、それらのループのうち、最外側ループであるｄｏ  ｉｘのループの直前の位置を、添字配列シャッフル位置として決定する。
【００２４】
なお、図２においては、初回実行時に添字配列をシャッフルすることを指示するＳＨＵＦＦＬＥ指示句（上述した"!CDIR   LISTVEC, SHUFFLE"）が指定されているが、コンパイル時のオプションによる指定、または、初回の実行におけるベクトル化率の高低により、シャッフル処理を行うか否かを切り替えることもできる。
【００２５】
次に、シャッフルコード挿入部１０４は、添字配列検出部１０２が検出した添字配列ｘｍのアクセス範囲（ｉｔｏｐｐ：ｉｅｎｄｐ）を、ループ検出部１０１が検出したループの初回実行直前にシャッフルするコードを、シャッフル位置決定部１０３が決定した添字配列シャッフル位置に挿入する。シャッフルコード挿入部１０４がコードを挿入した例を図３に示す。
【００２６】
図３は、シャッフルコード挿入部１０４がコードを挿入したプログラムの例を示す図である。図３は、図２のプログラムにシャッフルコード挿入部１０４がコードを挿入した場合の例を示している。
図３のプログラムのうちＡ１１の部分（"integer :: shuffled = 0"の行（最上行）から、"endif"の行まで）が、シャッフルコード挿入部１０４が送入したコードの例に該当する。Ａ１２の部分（"do ix=0,1"の行から"enddo"の行（最下行）まで）は、図２のプログラムのコードから変更されていない。
【００２７】
図４は、シャッフルコード挿入部１０４が生成したコードによる、配列のアクセス範囲の分割およびシャッフルの例を示す図である。
図３でシャッフルコード挿入部１０４が挿入したコードの例（Ａ１１の部分）では、図４に示すように、シャッフル対象の配列ｘｍのアクセス範囲を最大ベクトル長個（図２〜４の例では２５６個）の要素からなるセグメントに分割し、各セグメントの要素をベクトル命令により、シャッフルする。ここでいう最大ベクトル長は、ループをベクトル実行する際に、１度のベクトル実行で実行可能な、ループの繰り返し実行回数である。
【００２８】
シャッフル対象の要素としては、現在のセグメントより後方にある配列ｘｍの要素を、最大ベクトル長個の小区分に分割し、セグメント内の各要素と、対応する番号の小区分から乱数により選択した要素とを交換（シャッフル）する。ここでいう現在のセグメントは、各回のベクトル命令において、シャッフル処理の対象となっているセグメントである。上記のように、セグメントは、配列要素の集合である。
図４の例では、セグメント中の２番目の要素と、２番目の小区分中の要素とが交換されている。
なお、配列要素のシャッフル方法は、図３及び図４に示した例に限らず、高速に実行できるいろいろな公知のシャッフル方法を用いることができる。
【００２９】
シャッフルコード挿入部１０４が生成するコードによる配列のアクセス範囲のシャッフルにより、添字配列の値の偏りが原因でＲｅｔｒｙ法によるベクトル実行のベクトル化率が低いループでも、直前に添字配列をシャッフルすることで、追加のメモリ領域や利用者による複雑なプログラミングなしで、ベクトル化率の低下を抑止し、実行性能を向上させることができる。
【００３０】
すなわち、添字配列シャッフル装置１００によれば、添字配列の値の偏りにより重複アクセスの割合が多いリダクションループをＲｅｔｒｙ法によりベクトル実行する場合に、プログラムの実行性能が向上する。その理由は、各ベクトル命令実行時の重複アクセスの減少によりベクトル化率の向上が期待できるからである。
【００３１】
以上のように、ループ検出部１０１は、プログラム中でベクトル化対象のループの範囲を検出する。添字配列検出部１０２は、ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する。シャッフルコード挿入部１０４は、ベクトル演算における添字配列のアクセス順序をアクセス範囲の範囲内でシャッフルするコードをプログラムに挿入する。
【００３２】
これにより、添字配列シャッフル装置１００では、添字配列の値の偏りが原因でＲｅｔｒｙ法によるベクトル実行のベクトル化率が低いループでも、直前に添字配列をシャッフルすることで、追加のメモリ領域や利用者による複雑なプログラミングなしで、ベクトル化率の低下を抑止し、実行性能を向上させることができる。また、添字配列シャッフル装置１００による処理では、ループの入れ替えやＩＦ構文の挿入のような実行構文の変形も行われない。
【００３３】
また、シャッフル位置決定部１０３は、ベクトル化対象のループと完全入れ子になっているループがある場合、それらのループのうち最外側のループの直前の位置を添字配列のシャッフル位置として決定する。シャッフルコード挿入部１０４は、シャッフル位置決定部１０３が決定した位置に、シャッフルコードを挿入する。
仮に、ループの内側でシャッフルが行われるとすると、そのループの回数だけシャッフルが行われオーバーヘッドが生じる。これに対し、シャッフル位置決定部１０３が、最外側のループの直前の位置（したがって、最外側のループのさらに外側）をシャッフル位置に決定することで、シャッフルが繰り返されるオーバーヘッドを回避できる。
【００３４】
また、シャッフルコード挿入部１０４は、添字配列のアクセス範囲を最大ベクトル長個の要素からなるセグメントに分割し、現在のセグメントより後方にある添字配列の要素を最大ベクトル長個の小区分に分割し、セグメント内の各要素と、対応する番号の小区分から乱数により選択した要素とをベクトル命令によりシャッフルするコードを挿入する。
図４のように、シャッフルコード挿入部１０４が、添字配列のアクセス範囲をセグメントに分割し、セグメント単位で添字配列の要素の順序（添字配列のアクセス順序）をシャッフルすることで、アクセスされる配列要素に重なりがなくなってループをベクトル実行可能になり、ループを高速に実行できるようになる。
【００３５】
上述したように、添字配列シャッフル装置１００がベクトル化計算機の一部として構成されていてもよい。この場合、添字配列シャッフル装置１００は、ベクトル化計算機の例に該当する。
シャッフルコード挿入部１０４が、Ｆｏｒｔｒａｎプログラムなどのソースコードのレベルでシャッフルコードを挿入するようにしてもよい。あるいは、シャッフルコード挿入部１０４が、コンパイル後のコードのレベルでシャッフルコードを挿入するようにしてもよい。
ベクトル化計算機である添字配列シャッフル装置１００は、シャッフルコード挿入部１０４がシャッフルコードを挿入したプログラム（ソースコードでも、コンパイル後のコードでもよい）を用いて、必要に応じて添字配列のシャッフルを行い、ループをベクトル実行する。
【００３６】
次に、図５および図６を参照して、実施形態の構成について説明する。
図５は、実施形態に係る添字配列シャッフル装置の構成の例を示す図である。図５に示す構成で、添字配列シャッフル装置１０は、ループ検出部１１と、添字配列検出部１２と、シャッフルコード挿入部１３と、を備える。
かかる構成で、ループ検出部１１は、プログラム中でベクトル化対象のループの範囲を検出する。添字配列検出部１２は、ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する。シャッフルコード挿入部１３は、ベクトル演算における添字配列のアクセス順序をアクセス範囲の範囲内でシャッフルするコードをプログラムに挿入する。
【００３７】
これにより、添字配列シャッフル装置１０では、添字配列の値の偏りが原因でＲｅｔｒｙ法によるベクトル実行のベクトル化率が低いループでも、直前に添字配列をシャッフルすることで、追加のメモリ領域や利用者による複雑なプログラミングなしで、ベクトル化率の低下を抑止し、実行性能を向上させることができる。また、添字配列シャッフル装置１０による処理では、ループの入れ替えやＩＦ構文の挿入のような実行構文の変形も行われない。
そして、添字配列シャッフル装置１０による添字配列のシャッフルは、多重ループに限らず１重ループについても適用可能である。すなわち、添字配列シャッフル装置１０によれば、２重ループに限らず１重ループについても、ループをベクトル実行するための技術を適用可能である。
【００３８】
図６は、実施形態に係る添字配列シャッフル方法における処理手順の例を示す図である。図６に示す添字配列シャッフル方法は、ループ検出工程（ステップＳ１１）と、添字配列検出工程（ステップＳ１２）と、シャッフルコード挿入工程（ステップＳ１３）とを含む。
ループ検出工程（ステップＳ１１）では、プログラム中でベクトル化対象のループの範囲を検出する。添字配列検出工程（ステップＳ１２）では、ベクトル化対象のループの範囲中において、配列の添字として使用されている配列である添字配列及びその添字配列のアクセス範囲を検出する。シャッフルコード挿入工程（ステップＳ１３）では、ベクトル演算における添字配列のアクセス順序をアクセス範囲の範囲内でシャッフルするコードをプログラムに挿入する。
【００３９】
図６に示す添字配列シャッフル方法によれば、添字配列の値の偏りが原因でＲｅｔｒｙ法によるベクトル実行のベクトル化率が低いループでも、直前に添字配列をシャッフルすることで、追加のメモリ領域や利用者による複雑なプログラミングなしで、ベクトル化率の低下を抑止し、実行性能を向上させることができる。また、図６に示す添字配列シャッフル方法によれば、ループの入れ替えやＩＦ構文の挿入のような実行構文の変形も行われない。
そして、図６に示す添字配列シャッフル方法による添字配列のシャッフルは、多重ループに限らず１重ループについても適用可能である。すなわち、図６に示す添字配列シャッフル方法によれば、２重ループに限らず１重ループについても、ループをベクトル実行するための技術を適用可能である。
【００４０】
図７は、少なくとも１つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
図７に示す構成で、コンピュータ７００は、ＣＰＵ７１０と、主記憶装置７２０と、補助記憶装置７３０と、インタフェース７４０とを備える。
上記の添字配列シャッフル装置１０および１００のうち何れか１つ以上が、コンピュータ７００に実装されてもよい。その場合、上述した各処理部の動作は、プログラムの形式で補助記憶装置７３０に記憶されている。ＣＰＵ７１０は、プログラムを補助記憶装置７３０から読み出して主記憶装置７２０に展開し、当該プログラムに従って上記処理を実行する。また、ＣＰＵ７１０は、プログラムに従って、上述した各記憶部に対応する記憶領域を主記憶装置７２０に確保する。
【００４１】
添字配列シャッフル装置１０または１００と他の装置との通信は、インタフェース７４０が通信機能を有し、ＣＰＵ７１０の制御に従って通信を行うことで実行される。添字配列シャッフル装置１０または１００のユーザインタフェースは、インタフェース７４０が表示デバイスを備えてデータ表示し、また、入力デバイスを備えてデータの入力を受け付けることで実行される。
【００４２】
添字配列シャッフル装置１０がコンピュータ７００に実装される場合、ループ検出部１１、添字配列検出部１２、および、シャッフルコード挿入部１３の各部の動作は、プログラムの形式で補助記憶装置７３０に記憶されている。ＣＰＵ７１０は、プログラムを補助記憶装置７３０から読み出して主記憶装置７２０に展開し、当該プログラムに従って上記処理を実行する。
【００４３】
添字配列シャッフル装置１００がコンピュータ７００に実装される場合、ループ検出部１０１、添字配列検出部１０２、シャッフル位置決定部１０３、および、シャッフルコード挿入部１０４の各部の動作は、プログラムの形式で補助記憶装置７３０に記憶されている。ＣＰＵ７１０は、プログラムを補助記憶装置７３０から読み出して主記憶装置７２０に展開し、当該プログラムに従って上記処理を実行する。
【００４４】
なお、添字配列シャッフル装置１０および１００が行う処理の全部または一部を実行するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各部の処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳ（Operating System）や周辺機器等のハードウェアを含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ（Read Only Memory）、ＣＤ−ＲＯＭ（Compact Disc Read only memory）等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【００４５】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００４６】
１０、１００  添字配列シャッフル装置
１１、１０１  ループ検出部
１２、１０２  添字配列検出部
１３、１０４  シャッフルコード挿入部
１０３  シャッフル位置決定部
【図１】
2020160621.tif 000003
【図２】
2020160621.tif 000004
【図３】
2020160621.tif 000005
【図４】
2020160621.tif 000006
【図５】
2020160621.tif 000007
【図６】
2020160621.tif 000008
【図７】
2020160621.tif 000009