JPWO2017086391A1 - ベクトル化装置、ベクトル化方法、及び、ベクトル化プログラムが格納された記録媒体 - Google Patents
ベクトル化装置、ベクトル化方法、及び、ベクトル化プログラムが格納された記録媒体 Download PDFInfo
- Publication number
- JPWO2017086391A1 JPWO2017086391A1 JP2017551923A JP2017551923A JPWO2017086391A1 JP WO2017086391 A1 JPWO2017086391 A1 JP WO2017086391A1 JP 2017551923 A JP2017551923 A JP 2017551923A JP 2017551923 A JP2017551923 A JP 2017551923A JP WO2017086391 A1 JPWO2017086391 A1 JP WO2017086391A1
- Authority
- JP
- Japan
- Prior art keywords
- loop
- array
- value
- extension
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30065—Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
集約演算を含む多重ループ処理をベクトル化する。ベクトル化装置30は、ソフトウェアの二重ループ処理について、内側ループのループ長が外側ループのループ変数に依存し、二重ループ処理の結果を表す第一配列が内側ループのループ変数をインデックス値として含まない構成を検出する検出部31と、当該構成が検出された場合に、内側ループのループ長として、固定値を決定する固定値決定部32と、第一配列の値の算出に用いる第二配列の配列サイズを拡張することにより、二重ループ処理がループ長が当該固定値である内側ループを処理できるようにする拡張部33と、追加された第二配列の要素に対して要素値を設定することにより、これらの処理が行われる前後において二重ループ処理の結果が等しくなるようにする拡張要素設定部34と、これらの処理結果に基づいて、ソフトウェアを更新する更新部35と、を備える。
Description
本願発明は、ソフトウェアに含まれる多重ループ処理をベクトル化する技術に関する。
ベクトル演算器、あるいは、SIMD(Single Instruction Multiple Data)演算器を用いて高速に演算を行うためには、ベクトル演算命令を有効に適用できるように、ソフトウェア(プログラム)をベクトル化することが重要である。ソフトウェアのベクトル化とは、ベクトル化の対象とするプログラムによって記述されたループ処理(反復処理)から、共通な演算を抽出したり、あるいは、ループ処理に関するループ長(反復回数)を長くしたりする処理などを行うことである。
ソフトウェアは、一般的に、二重ループ処理等の多重ループ処理を含むことが多いが、多重ループ処理に関するベクトル化は、単ループ(一重ループ)処理に関するベクトル化と比較して、その処理が複雑である。したがって、多重ループ処理をベクトル化する技術に対する期待が高まっている。
このような技術の一例として、特許文献1には、構文解析部、構造解析部、データ依存関係解析部、ループ入れ替え解析部、ベクトルテキスト生成部、及び、コード生成部を備えたコンパイル方式が開示されている。このコンパイル方式は、二重ループ処理をベクトル化するために、二重ループ処理を解析して、二重ループにおける外側ループと内側ループとを入れ換える処理を行う。
図21は、特許文献1が示す技術を備える一般的なベクトル化装置が、二重ループ処理における内側ループと外側ループとを入れ換えることにより、二重ループ処理をベクトル化する例を示す。図21(a)に示す通り、このベクトル化装置がベクトル化する元のプログラムは、外側ループのループ長が10000、内側ループのループ長が10である二重ループ処理を含んでいる。この場合、図21(a)に示すプログラムを実行するベクトル演算器は、ループ長が10である内側ループによるベクトル演算を10000回行うことになるので、ベクトル演算の効率がよいとはいえない。したがって、このベクトル化装置は、元のプログラムにおける内側ループと外側ループとを入れ換えた、図21(b)に示すプログラムを生成する。図21(b)に示すプログラムを実行するベクトル演算器は、ループ長が10000である内側ループによるベクトル演算を10回行えばよいので、ベクトル演算の効率が改善される。
また、特許文献2には、次元不一致配列検出手段、次元不一致配列複写手段、展開手段、及び、ベクトル化実施手段を備えたベクトル化装置が開示されている。このベクトル化装置は、プログラム内の多重ループ処理に含まれる演算式が使用する複数の配列変数について、次元数が異なる配列変数を検出する。このベクトル化装置は、検出した配列変数について、配列の大きさを均一化したのち、多重ループを単ループに変換する処理を行う。
図22は、特許文献2が示す技術を備える一般的なベクトル化装置が、二重ループを単ループに変換することにより、二重ループ処理をベクトル化する例を示す。図22(a)に示す通り、このベクトル化装置がベクトル化する元のプログラムは、配列の大きさが100x100(本願においてxは乗算を表す)である2次元の配列変数X及びY、及び、配列の大きさが100である1次元の配列変数Zを使用する。このベクトル化装置は、配列変数Zの配列の大きさが配列変数X及びYと異なることを検出したのち、配列変数Zを、配列の大きさが100x100である2次元の配列に拡張する。そして、このベクトル化装置は、配列変数X、Y、及び、Zを、大きさが100x100である2次元の配列から、大きさが10000である1次元の配列に変換した図22(b)に示すプログラムを生成する。
また、特許文献3には、二重ループ処理における内側ループのループ長が固定値ではなく外側ループのループ変数の値に依存する場合であっても、二重ループ処理をベクトル化することが可能な、コンパイラのベクトル化処理方式が開示されている。
図23は、特許文献3が示す技術を備える一般的なベクトル化装置が、ベクトル化するプログラムの例を示す。図23におけるNI及びNJは、順に、外側ループのループ長を表す変数、及び、内側ループのループ長を表す配列変数である。図23に示すプログラムは、内側ループのループ長が固定値ではなく、外側ループのループ変数の値に依存するプログラムである。このベクトル化装置は、外側ループのループ変数に依存した内側ループのループ長がとり得る最大値を求め、内側ループのループ長をその最大値に置き換える。そして、このベクトル化装置は、内側ループのループ長を固定値化した二重ループ処理をベクトル化する。
ベクトル化することが困難なプログラムの1つとして、多重ループ処理において集約演算を行うプログラムがある。このような集約演算を行うプログラムの一例を図24に示す。図24に示す二重ループ処理により値が算出される1次元の配列変数Xは、内側ループのループ変数j(jは0以上の整数)をインデックス値として含まず、外側ループのループ変数i(iは0以上の整数)のみをインデックス値として含んでいる。図24に示す二重ループ処理は、変数iがある値の場合において、内側ループの処理を繰り返し実行することにより、2次元の配列変数Yの総和を配列変数Xとして算出する演算である。このように、配列変数Y(第2の配列変数)に含まれる複数の要素について演算を行った結果を、配列変数X(第2の配列変数とは異なる第1の配列変数)の何れかの要素とする演算を、本願では「集約演算」と称する。このような集約演算を多重ループ処理により行うプログラムをベクトル化することは一般的に困難であり、特許文献1乃至3は、この問題を解決可能な技術を開示していない。本願発明の主たる目的は、この問題を解決したベクトル化装置を提供することである。
本願発明の一態様に係るベクトル化装置は、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出手段と、前記検出手段が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定手段と、前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張手段と、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定手段及び前記拡張手段による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定手段と、前記固定値決定手段、前記拡張手段、及び、前記拡張要素設定手段による処理結果に基づいて、前記ソフトウェアを更新する更新手段と、を備える。
上記目的を達成する他の見地において、本願発明の一態様に係るベクトル化方法は、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能であり、前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定し、前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにし、前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値の決定及び前記配列サイズの拡張が行われる前後において前記二重ループ処理の結果が等しくなるようにし、前記固定値の決定、前記配列サイズの拡張、及び、前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対する前記要素値の設定に関する処理結果に基づいて、前記ソフトウェアを更新する。
また、上記目的を達成する更なる見地において、本願発明の一態様に係るベクトル化プログラムは、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出処理と、前記検出処理が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定処理と、前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張処理と、前記拡張処理によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定処理及び前記拡張処理による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定処理と、前記固定値決定処理、前記拡張処理、及び、前記拡張要素設定処理による処理結果に基づいて、前記ソフトウェアを更新する更新処理と、をコンピュータに実行させるためのプログラムである。
更に、本願発明は、係るベクトル化プログラム(コンピュータプログラム)が格納された、コンピュータ読み取り可能な、不揮発性の記録媒体によっても実現可能である。
本願発明は、第2の配列変数に含まれる複数の要素について演算を行った結果を、第2の配列変数とは異なる第1の配列変数の何れかの要素とする演算(集約演算)を含む多重ループ処理をベクトル化することを可能とする。
以下、本願発明の実施の形態について図面を参照して詳細に説明する。
<第1の実施形態>
図1は、本願発明の第1の実施の形態に係るベクトル化装置10を概念的に示すブロック図である。ベクトル化装置10は、記憶装置20に格納されたソースプログラム200をベクトル化し、ベクトル化した結果をベクトル化されたソースプログラム210として記憶装置20に格納する装置である。記憶装置20は、ベクトル化装置10に内蔵される場合もある。本実施形態に係るベクトル化装置10は、以下の構成を備えている。
・検出部11、
・固定値決定部12、
・拡張部13、
・拡張要素設定部14、
・更新部15。
図1は、本願発明の第1の実施の形態に係るベクトル化装置10を概念的に示すブロック図である。ベクトル化装置10は、記憶装置20に格納されたソースプログラム200をベクトル化し、ベクトル化した結果をベクトル化されたソースプログラム210として記憶装置20に格納する装置である。記憶装置20は、ベクトル化装置10に内蔵される場合もある。本実施形態に係るベクトル化装置10は、以下の構成を備えている。
・検出部11、
・固定値決定部12、
・拡張部13、
・拡張要素設定部14、
・更新部15。
検出部11、固定値決定部12、拡張部13、拡張要素設定部14、及び、更新部15は、電子回路の場合もあれば、コンピュータプログラムとそのコンピュータプログラムに従って動作するプロセッサによって実現される場合もある。
図2は、本実施形態においてベクトル化の対象であるソースプログラム200の例として、ソースプログラム201を示す。図2に示す通り、配列X、Y、及び、Zは2次元の配列(配列変数)であり、配列NJは1次元の配列である。配列X、Y、及び、Zの1次元目の配列サイズ、及び、配列NJの配列サイズはNIである。配列X、Y、及び、Zに関するi(iは0以上の整数)番目の1次元配列であるX[i]、Y[i]、及び、Z[i]の2次元目の配列サイズは、配列NJのi番目の値であるNJ[i]と等しい。図2における「*」は乗算を表す(以降の図についても同様)。
図1に示す検出部11は、ソースプログラム200の構成を解析することによって、ソースプログラム200に含まれる二重ループ処理の構成が以下の3つの条件を満たす構成であることを検出する。二重ループ処理とは、内側ループと、その内側ループを内包する外側ループとによって構成される繰り返し処理のことである。本実施形態において、検出部11が行う解析は、例えば、プログラムの構文を定義する情報に基づく構文解析等、既存の技術を用いることとする。
・二重ループ処理の内側ループのループ長が、外側ループのループ変数の値に依存した変動値である。
・二重ループ処理における配列の配列サイズが、二重ループのループ長と等しい。
・二重ループ処理における演算結果の代入先が、二重ループ処理の中で宣言された一時変数を除いて、配列である。
・二重ループ処理の内側ループのループ長が、外側ループのループ変数の値に依存した変動値である。
・二重ループ処理における配列の配列サイズが、二重ループのループ長と等しい。
・二重ループ処理における演算結果の代入先が、二重ループ処理の中で宣言された一時変数を除いて、配列である。
ソースプログラム201は、その内側ループのループ長がNJ[i]であり外側ループのループ変数iの値に依存するので、上述した1番目の条件を満たす。図2に示すソースプログラム201における「#pragma array_size」という指示子が示す通り、配列X、Y、及び、Zの配列サイズが、二重ループ処理のループ長と等しいので、ソースプログラム201は、上述した2番目の条件を満たす。そして、ソースプログラム201の二重ループ処理における演算結果の代入先は配列X[i][j](jは0以上の整数)であるので、ソースプログラム201は、上述した3番目の条件を満たす。検出部11は、この検出結果を、固定値決定部12へ通知する。
図1に示す固定値決定部12は、検出部11が、ソースプログラム200が上述した3つの条件を満たすことを検出した場合、ソースプログラム200が含む二重ループ処理における内側ループのループ長として、所定の基準に基づく固定値(以下「LLEN」と称する)を決定する。固定値決定部12は、LLENを、例えば、「二重ループ処理における内側ループのループ長を表す配列の最大値」に決定する。固定値決定部12は、あるいはLLENを、「(内側ループのループ長を表す配列の総和)÷(外側ループのループ長)xN≧所定の値(例えば0.9)を満たす最大の整数N」に決定する。すなわちこの場合、固定値決定部12は、外側ループのループ長に特定の整数値を乗算することによって求めた値に対する、内側ループのループ長の総和の比が、所定の値以上となることを満たす当該特定の整数値の最大値を、LLENとして決定する。あるいは、固定値決定部12は、LLENを、ソースプログラム200の中にユーザにより記載された指示文にしたがって決定する。
図3は、ソースプログラム201が使用する配列の構成を例示する。図3における塗りつぶされた四角形は、配列X、Y、及び、Zの要素を表す。これらの要素は、個々に、所定の値が設定されていることとする。ここでは、固定値決定部12は、LLENを、「二重ループ処理における内側ループのループ長を表す配列の最大値」に決定することとする。図3に示す例では、ソースプログラム201が含む二重ループ処理における内側ループのループ長を表す配列NJの最大値は4である。したがって、固定値決定部12は、LLENを4に決定する。固定値決定部12は、決定したLLENの値を、拡張部13及び更新部15へ通知する。
図1に示す拡張部13は、ソースプログラム200が含む二重ループ処理が、ループ長がLLENである内側ループを処理することが可能となるように、当該二重ループ処理が使用する配列の配列サイズを拡張する。
図4は、図2に示すソースプログラム201が使用する配列について、拡張部13が配列サイズを拡張する例を示す。図4における点線により描かれた四角形は、拡張部13が行う拡張処理によって追加された要素を示す。図3及び4に示す通り、拡張部13は、配列X、Y、及び、Zについて、拡張処理を行う前の要素を全て含めた状態で、配列サイズをNIxLLENに拡張する。拡張部13は、ソースプログラム200が含む二重ループ処理が使用する配列に関して拡張処理を行った内容を、拡張要素設定部14及び更新部15へ通知する。
図1に示す拡張要素設定部14は、固定値決定部12及び拡張部13による処理が行われる前後において、ソースプログラム200が含む二重ループ処理の結果が等しくなるように、拡張部13によって新たに追加された配列の要素に対して、値(要素値)を設定する。ソースプログラム201について、拡張部13によって新たに追加された配列の要素は、二重ループ処理の結果として使用されない要素である。したがって、拡張要素設定部14は、この場合、新たに追加された配列の要素に対して、どのような要素値を設定してもよい。拡張要素設定部14は、新たに追加された配列の要素に対して設定した要素値の内容を、更新部15へ通知する。
図1に示す更新部15は、固定値決定部12、拡張部13、及び、拡張要素設定部14が行った処理の内容に基づいて、ソースプログラム200を更新する。図5は、更新部15がソースプログラム201を更新することによって生成した、ベクトル化されたソースプログラム211を示す。図5に示す通り、二重ループ処理における内側ループのループ長は、更新部15によって、図2に示す「NJ[i]」から固定値決定部12がLLENとして決定した「4」に更新されている。更新部15は、生成したベクトル化されたソースプログラム211を、ベクトル化されたソースプログラム210として、記憶装置20へ格納する。
更新部15は、ベクトル化されたソースプログラム211に対して、さらにベクトル最適化処理を行ってもよい。ベクトル化されたソースプログラム211では、二重ループ処理における内側ループのループ長が「4」である。この二重ループ処理における外側ループのループ長である「NI」が「4」よりも十分に大きな値である場合、外側ループによってベクトル演算を行うことによって、演算の効率が向上する。したがって、更新部15は、ベクトル化されたソースプログラム211における二重ループ処理を、図6に示す通り、単ループ処理に変換したベクトル化されたソースプログラム212を生成する。更新部15は、生成したベクトル化されたソースプログラム212を、ベクトル化されたソースプログラム210として、記憶装置20へ格納する。
上述した本実施形態では、固定値決定部12は、LLENを、「二重ループ処理における内側ループのループ長を表す配列の最大値」に設定するので、二重ループ処理が使用する配列の中に、配列サイズがLLENより大きい配列は存在しない。しかしながら、固定値決定部12が、LLENをこれとは異なる基準によって決定した場合、二重ループ処理が使用する配列の中に、配列サイズがLLENより大きい配列が存在する場合がある。この場合、更新部15は、配列サイズがLLENより大きい配列について処理を行う二重ループを生成する。
<第1の実施形態の第1の変形例>
次に、本実施形態の第1の変形例について詳細に説明する。本実施形態の第1の変形例に係るベクトル化装置10の構成は図1を参照して上述した通りである。
次に、本実施形態の第1の変形例について詳細に説明する。本実施形態の第1の変形例に係るベクトル化装置10の構成は図1を参照して上述した通りである。
本変形例において、検出部11は、ソースプログラム200を解析することによって、ソースプログラム200に含まれる二重ループ処理の構成が以下の2つの条件を満たす構成であることを検出する。
・二重ループ処理の内側ループのループ長が、外側ループのループ変数の値に依存した変動値である。
・二重ループ処理の結果を表す第一の配列が、内側ループのループ変数をインデックス値として含まない集約演算である。
・二重ループ処理の内側ループのループ長が、外側ループのループ変数の値に依存した変動値である。
・二重ループ処理の結果を表す第一の配列が、内側ループのループ変数をインデックス値として含まない集約演算である。
図7は、本変形例に係るソースプログラム200の第1の例として、ソースプログラム203を示す。図7に示す通り、配列X及び配列NJは、1次元の配列であり、配列Yは2次元の配列である。ソースプログラム203は、変数iがある値の場合において、内側ループの処理を繰り返し実行することにより、2次元の配列Y[i][j]の二乗の総和を配列X[i]として算出する集約演算である。
図9(a)は、配列演算の総和を算出する集約演算を表す二重ループの一般的な構成を示す。図9(a)に示す集約演算では、2次元の配列In0、In1等に関する演算fによる演算結果について、内側ループを繰り返し実行することにより求めた総和を、1次元の配列Outとして算出する。
図8は、本変形例に係るソースプログラム200の第2の例として、ソースプログラム204を示す。ソースプログラム204は、変数iがある値の場合において、内側ループの処理を繰り返し実行することにより、2次元の配列Y[i][j]の総乗を配列X[i]として算出する集約演算である。
図9(b)は、配列演算の総乗を算出する集約演算を表す二重ループの一般的な構成を示す。図9(b)に示す集約演算では、2次元の配列In0、In1等に関する演算fによる演算結果について、内側ループを繰り返し実行することにより求めた総乗を、1次元の配列Outとして算出する。
ソースプログラム203(図7)及び204(図8)は、これらの2つの条件を満たす。検出部11は、この判定結果を、固定値決定部12へ通知する。
固定値決定部12は、検出部11が、ソースプログラム200が上述した2つの条件を満たすことを検出した場合、ソースプログラム200が含む二重ループ処理における内側ループのループ長として、上述の手順により、LLENを決定する。固定値決定部12は、ソースプログラム203あるいは204が使用する配列の構成が例えば図3に示す通りである場合、上述の通り、LLENを「4」に決定する。固定値決定部12は、ソースプログラム203あるいは204が使用する配列の構成が図3に示す例とは異なる場合、LLENを例えば「4」ではない別の値に決定する。
拡張部13は、ソースプログラム200が含む二重ループ処理が、ループ長がLLENである内側ループを処理することが可能となるように、当該二重ループ処理が使用する配列の配列サイズを拡張する。
拡張要素設定部14は、固定値決定部12及び拡張部13による処理が行われる前後において、ソースプログラム200が含む二重ループ処理の結果が等しくなるように、拡張部13によって新たに追加された配列の要素に対して、要素値を設定する。ソースプログラム203あるいは204は、集約演算を行うプログラムであるので、拡張要素設定部14は、ソースプログラム201の場合とは異なり、新たに追加された配列の要素に、適切な値を設定する必要がある。そこで以下の説明では、拡張要素設定部14が、新たに追加された配列の要素に、適切な値を設定する方法について、詳述する。
拡張要素設定部14は、二重ループが行う集約演算に応じて、一時変数(以下、「PRVAL」と称する)に値を設定する。拡張要素設定部14は、例えばソースプログラム203のように、二重ループが行う集約演算が総和を算出する演算である場合、PRVALを0に設定する。拡張要素設定部14は、例えばソースプログラム204のように、二重ループが行う集約演算が総乗を算出する演算である場合、PRVALを1に設定する。
拡張要素設定部14は、図9に示す構成において、f(In0,In1,・・・)の値がPRVALと等しくなるように、拡張部13によって新たに追加された配列の要素に対して、値を設定する。より具体的には、拡張要素設定部14は、ソースプログラム203について、拡張部13によって新たに追加された配列の要素に「0」を設定する。拡張要素設定部14は、ソースプログラム204について、拡張部13によって新たに追加された配列の要素に「1」を設定する。
図10は、更新部15がソースプログラム203を更新することによって生成した、ベクトル化されたソースプログラム213を示す。図11は、更新部15がソースプログラム204を更新することによって生成した、ベクトル化されたソースプログラム214を示す。図10及び11に示す通り、二重ループ処理における内側ループのループ長は、更新部15によって、図7及び8に示す「NJ[i]」からLLENに更新されている。
更新部15は、ベクトル化されたソースプログラム213及び214に対して、さらにベクトル最適化処理を行ってもよい。ソースプログラム213及び214に含まれる二重ループ処理における外側ループのループ長であるNIがLLENよりも十分に大きな値である場合、内側ループと外側ループとを入れ換えることによって、演算の効率が向上する。より具体的には、更新部15は、図12に示す通り、図10に示すベクトル化されたソースプログラム213における二重ループ処理について、内側ループと外側ループとを入れ換えることによって生成した、ベクトル化されたソースプログラム215を生成する。更新部15は、図13に示す通り、図11に示すベクトル化されたソースプログラム214における二重ループ処理について、内側ループと外側ループとを入れ換えることによって生成した、ベクトル化されたソースプログラム216を生成する。
次に図18のフローチャートを参照して、本実施形態(第1の変形例を含む)に係るベクトル化装置10の動作(処理)について詳細に説明する。
検出部11は、ソースプログラム200に含まれる二重ループ処理の構成を解析する(ステップS101)。二重ループ処理の構成が所定の条件(上述した3つあるいは2つの条件)を満たさない場合(ステップS102でNo)、全体の処理は終了する。二重ループ処理の構成が所定の条件を満たす場合(ステップS102でYes)、固定値決定部12は、内側ループのループ長として固定値(LLEN)を決定する(ステップS103)。
拡張部13は、二重ループ処理の中に、配列サイズがLLENより小さい配列が存在するか確認する(ステップS104)。配列サイズがLLENより小さい配列が存在しない場合(ステップS105でNo)、処理はステップS108へ進む。配列サイズがLLENより小さい配列が存在する場合(ステップS105でYes)、拡張部13は、該当する配列の配列サイズを、LLENまで拡張する(ステップS106)。
拡張要素設定部14は、内側ループのループ長をLLENに決定したのち、配列サイズを拡張する処理が行われる前後において、二重ループ処理の結果が等しくなるように、拡張された配列の要素に対して、要素値を設定する(ステップS107)。更新部15は、固定値決定部12、拡張部13、及び、拡張要素設定部14による処理結果に基づき、ソースプログラム200を更新する(ステップS108)。更新部15は、更新したソースプログラム200をベクトル最適化し、ベクトル化されたソースプログラム210として、記憶装置20へ格納し(ステップS109)、全体の処理は終了する。
本実施形態に係るベクトル化装置10は、第2の配列変数に含まれる複数の要素について演算を行った結果を、第2の配列変数とは異なる第1の配列変数の何れかの要素とする演算(集約演算)を含む多重ループ処理をベクトル化することができる。その理由は、ベクトル化装置10が以下の通りに動作するからである。すなわち、
・固定値決定部12は、ソースプログラム200に含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
・固定値決定部12は、ソースプログラム200に含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
・拡張部13は、二重ループ処理が、ループ長が固定値に設定された内側ループを処理することが可能となるように、二重ループ処理が使用する配列の配列サイズを拡張する。
・拡張要素設定部14は、固定値決定部12及び拡張部13による処理が行われる前後において二重ループ処理の結果が等しくなるように、拡張部13によって新たに追加された配列の要素に対して、要素値を設定する。
以下に、本実施形態及びその第1の変形例に係るベクトル化装置10によって実現される効果について、詳細に説明する。
多重ループ処理において集約演算(即ち、第2の配列変数に含まれる複数の要素について演算を行った結果を、第2の配列変数とは異なる第1の配列変数の何れかの要素とする演算)を行うソフトウェアをベクトル化することは、その構造の特性から困難である。したがって、ベクトル演算器がこのようなソフトウェアを実行する場合、そのベクトル演算器が有するベクトル演算機能を十分に活かすことができないという問題がある。
これに対して、本実施形態及びその第1の変形例に係るベクトル化装置10では、検出部11がソースプログラム200に集約演算を行う二重ループが含まれることを検出した場合、固定値決定部12は、内側ループのループ長として、所定の基準に基づく固定値を決定する。拡張部13は、固定値決定部12によりループ長が固定値に決定された内側ループを二重ループ処理が処理することが可能となるように、使用される配列の配列サイズを拡張する。拡張要素設定部14は、拡張部13によって新たに追加された配列の要素に対して、要素値を設定する。このとき設定される要素値は、固定値決定部12及び拡張部13による処理が行われたことによって、ソースプログラム200の実行結果が変わらない(すなわち、実行結果に影響を及ぼすことがない)ことを満たす値である。そして、更新部15は、固定値決定部12、拡張部13、及び、拡張要素設定部14による処理結果に基づいて、前記ソフトウェアを更新する。これにより、本実施形態及びその第1の変形例に係るベクトル化装置10は、集約演算を含む多重ループ処理をベクトル化することができる。
また、本実施形態及びその第1の変形例に係るベクトル化装置10は、多重ループ処理に含まれる集約演算が、1以上の配列に関する演算結果の総和あるいは総乗を求める場合に応じて、新たに追加した配列の要素に対して、適切に値を設定する。これにより、本実施形態及びその第1の変形例に係るベクトル化装置10は、集約演算の内容に応じた柔軟な処理を行うことができる。
また、本実施形態及びその第1の変形例に係るベクトル化装置10では、固定値決定部12は、内側ループのループ長の最大値を内側ループのループ長として決定する。固定値決定部12は、あるいは、外側ループのループ長に特定の整数値を乗算することによって求めた値に対する、内側ループのループ長の総和の比が、所定の値以上となることを満たす当該特定の整数値の最大値を、その固定値として決定する。すなわち、本実施形態及びその第1の変形例に係るベクトル化装置10は、内側ループのループ長を固定値化する際に、柔軟な処理を行うことができる。
上述した本実施形態及びその第1の変形例では、ベクトル化装置10が、集約演算を含む二重ループ処理に対してベクトル化を行う例を説明したが、ベクトル化装置10は、集約演算を含む三重以上の多重ループ処理についても、ベクトル化することは可能である。この場合、ベクトル化装置10は、上述した二重ループ処理に対してベクトル化を行う処理を、複数階層にわたって順次行えばよい。
<第1の実施形態の第2の変形例>
次に、本実施形態の第2の変形例について詳細に説明する。本実施形態の第2の変形例に係るベクトル化装置10の構成は図1を参照して上述した通りである。
次に、本実施形態の第2の変形例について詳細に説明する。本実施形態の第2の変形例に係るベクトル化装置10の構成は図1を参照して上述した通りである。
図14は、本変形例に係るソースプログラム200の例として、ソースプログラム207を示す。図14に示す通り、ソースプログラム207は、図9(a)に示す二重ループにおける演算fの部分を、配列の要素をインデックスとした配列に置き換えた集約演算を含むプログラムである。図14に示す通り、配列X、配列NJ、及び、配列Aは、1次元の配列であり、配列Yは2次元の配列である。
図15は、ソースプログラム207が使用する配列の構成を例示する。図15に示す通り、配列Yの構成は、図3に示すソースプログラム201が使用する配列Yと同様である。配列Aの要素数は、配列Yがとり得る値に応じて定まる値である「NA」である。
図16は、ベクトル化装置10がソースプログラム207をベクトル化することにより生成した、ベクトル化されたソースプログラム217を示す。図17は、ベクトル化されたソースプログラム217が使用する配列の構成を例示する。
検出部11、及び、固定値決定部12は、第1の実施形態の第1の変形例について説明した通り動作する。
拡張部13は、図17に示す通り、配列Yについて、上述した通り配列サイズを拡張する。拡張部13は、配列Aについて、(NA+1)番目の要素であるA[NA]を追加する。
拡張要素設定部14は、固定値決定部12及び拡張部13による処理が行われる前後において、ソースプログラム200が含む二重ループ処理の結果が等しくなるように、拡張部13によって新たに追加された配列の要素に対して、要素値を設定する。この場合、拡張要素設定部14は、拡張部13によって新たに追加された配列Yの要素に対して、「NA」を設定する。拡張要素設定部14は、拡張部13によって新たに追加されたA[NA]に「0」を設定する。
更新部15は、図16に示す通り、ソースプログラム207について、二重ループ処理における内側ループのループ長をLLENに更新したのち、内側ループと外側ループとを入れ換えることによって生成した、ベクトル化されたソースプログラム217を生成する。
本第2の変形例に係るベクトル化装置10は、第2の配列変数に含まれる複数の要素について演算を行った結果を、第2の配列変数とは異なる第1の配列変数の何れかの要素とする演算(集約演算)を含む多重ループ処理をベクトル化することができる。その理由は、ベクトル化装置10が以下の通りに動作するからである。すなわち、
・固定値決定部12は、ソースプログラム200に含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
・固定値決定部12は、ソースプログラム200に含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
・拡張部13は、二重ループ処理が、ループ長が固定値に設定された内側ループを処理することが可能となるように、二重ループ処理が使用する配列の配列サイズを拡張する。
・拡張要素設定部14は、固定値決定部12及び拡張部13による処理が行われる前後において二重ループ処理の結果が等しくなるように、拡張部13によって新たに追加された配列の要素に対して、要素値を設定する。
また、本第2の変形例に係るベクトル化装置10は、多重ループ処理に含まれる集約演算が、配列の要素をインデックスとした配列を含む演算であっても、使用される配列の配列サイズを適切に拡張し、新たに追加した配列の要素に対して、適切に値を設定する。これにより、本第2の変形例に係るベクトル化装置10は、集約演算の内容に応じた、より柔軟な処理を行うことができる。
<第2の実施形態>
図19は、第2の実施形態に係るベクトル化装置30の構成を概念的に示すブロック図である。
図19は、第2の実施形態に係るベクトル化装置30の構成を概念的に示すブロック図である。
本実施形態に係るベクトル化装置30は、検出部31、固定値決定部32、拡張部33、拡張要素設定部34、及び、更新部35を備えている。
検出部31は、ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、その二重ループ処理の結果を表す第一の配列変数が当該内側ループのループ変数をインデックス値として含まない構成であることを検出することができる。
固定値決定部32は、検出部31が上述した構成を検出した場合に、当該内側ループのループ長として、所定の基準に基づく固定値を決定する。
拡張部33は、第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張する。これにより、拡張部33は、二重ループ処理が、ループ長が固定値決定部32により決定された固定値である内側ループを処理できるようにする。
拡張要素設定部34は、拡張部33によって新たに追加された第二の配列変数の要素に対して、要素値を設定する。これにより、拡張要素設定部34は、固定値決定部32及び拡張部33による処理が行われる前後において二重ループ処理の結果が等しくなるようにする。
更新部35は、固定値決定部32、拡張部33、及び、拡張要素設定部34による処理結果に基づいて、当該ソフトウェアを更新する。
本実施形態に係るベクトル化装置30は、第2の配列変数に含まれる複数の要素について演算を行った結果を、第2の配列変数とは異なる第1の配列変数の何れかの要素とする演算(集約演算)を含む多重ループ処理をベクトル化することができる。その理由は、ベクトル化装置30が以下の通りに動作するからである。すなわち、
・固定値決定部32は、ソフトウェアに含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
・固定値決定部32は、ソフトウェアに含まれる集約演算を行う二重ループについて、内側ループのループ長として、所定の基準に基づく固定値を決定する。
・拡張部33は、二重ループ処理が、ループ長が固定値に設定された内側ループを処理することが可能となるように、二重ループ処理が使用する配列の配列サイズを拡張する。
・拡張要素設定部34は、固定値決定部32及び拡張部33による処理が行われる前後において二重ループ処理の結果が等しくなるように、拡張部33によって新たに追加された配列の要素に対して、要素値を設定する。
<ハードウェア構成例>
上述した各実施形態において図1、及び、図19に示した各部は、専用のHW(HardWare)(電子回路)によって実現することができる。また、図1及び図19において、少なくとも、下記構成は、ソフトウェアプログラムの機能(処理)単位(ソフトウェアモジュール)と捉えることができる。
・検出部11及び31、
・固定値決定部12及び32、
・拡張部13及び33、
・拡張要素設定部14及び34、
・更新部15及び35。
上述した各実施形態において図1、及び、図19に示した各部は、専用のHW(HardWare)(電子回路)によって実現することができる。また、図1及び図19において、少なくとも、下記構成は、ソフトウェアプログラムの機能(処理)単位(ソフトウェアモジュール)と捉えることができる。
・検出部11及び31、
・固定値決定部12及び32、
・拡張部13及び33、
・拡張要素設定部14及び34、
・更新部15及び35。
但し、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。この場合のハードウェア環境の一例を、図20を参照して説明する。
図20は、本願発明の各実施形態に係るベクトル化装置を実行可能な情報処理装置900(コンピュータ)の構成を例示的に説明する図である。即ち、図20は、図1及び図19に示したベクトル化装置を実現可能なコンピュータ(情報処理装置)の構成であって、上述した実施形態における各機能を実現可能なハードウェア環境を表す。
図20に示した情報処理装置900は、構成要素として下記を備えている。
・CPU(Central_Processing_Unit)901、
・ROM(Read_Only_Memory)902、
・RAM(Random_Access_Memory)903、
・ハードディスク(記憶装置)904、
・外部装置との通信インタフェース905、
・バス906(通信線)、
・CD−ROM(Compact_Disc_Read_Only_Memory)等の記録媒体907に格納されたデータを読み書き可能なリーダライタ908、
・入出力インタフェース909。
・CPU(Central_Processing_Unit)901、
・ROM(Read_Only_Memory)902、
・RAM(Random_Access_Memory)903、
・ハードディスク(記憶装置)904、
・外部装置との通信インタフェース905、
・バス906(通信線)、
・CD−ROM(Compact_Disc_Read_Only_Memory)等の記録媒体907に格納されたデータを読み書き可能なリーダライタ908、
・入出力インタフェース909。
即ち、上記構成要素を備える情報処理装置900は、これらの構成がバス906を介して接続された一般的なコンピュータである。情報処理装置900は、CPU901を複数備える場合もあれば、マルチコアにより構成されたCPU901を備える場合もある。
そして、上述した実施形態を例に説明した本願発明は、図20に示した情報処理装置900に対して、次の機能を実現可能なコンピュータプログラムを供給する。その機能とは、その実施形態の説明において参照したブロック構成図(図1及び図19)における上述した構成、或いはフローチャート(図18)の機能である。本願発明は、その後、そのコンピュータプログラムを、当該ハードウェアのCPU901に読み出して解釈し実行することによって達成される。また、当該装置内に供給されたコンピュータプログラムは、読み書き可能な揮発性のメモリ(RAM903)またはハードディスク904等の不揮発性の記憶デバイスに格納すれば良い。
また、前記の場合において、当該ハードウェア内へのコンピュータプログラムの供給方法は、現在では一般的な手順を採用することができる。その手順としては、例えば、CD−ROM等の各種記録媒体907を介して当該装置内にインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等がある。そして、このような場合において、本願発明は、係るコンピュータプログラムを構成するコード或いは、そのコードが格納された記録媒体907によって構成されると捉えることができる。
以上、上述した実施形態を模範的な例として本願発明を説明した。しかしながら、本願発明は、上述した実施形態には限定されない。即ち、本願発明は、本願発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
この出願は、2015年11月20日に出願された日本出願特願2015−227256を基礎とする優先権を主張し、その開示の全てをここに取り込む。
10 ベクトル化装置
11 検出部
12 固定値決定部
13 拡張部
14 拡張要素設定部
15 更新部
20 記憶装置
200 ソースプログラム
201 ソースプログラム
203 ソースプログラム
204 ソースプログラム
207 ソースプログラム
210 ベクトル化されたソースプログラム
211 ベクトル化されたソースプログラム
212 ベクトル化されたソースプログラム
213 ベクトル化されたソースプログラム
214 ベクトル化されたソースプログラム
215 ベクトル化されたソースプログラム
216 ベクトル化されたソースプログラム
217 ベクトル化されたソースプログラム
30 ベクトル化装置
31 検出部
32 固定値決定部
33 拡張部
34 拡張要素設定部
35 更新部
900 情報処理装置
901 CPU
902 ROM
903 RAM
904 ハードディスク(記憶装置)
905 通信インタフェース
906 バス
907 記録媒体
908 リーダライタ
909 入出力インタフェース
11 検出部
12 固定値決定部
13 拡張部
14 拡張要素設定部
15 更新部
20 記憶装置
200 ソースプログラム
201 ソースプログラム
203 ソースプログラム
204 ソースプログラム
207 ソースプログラム
210 ベクトル化されたソースプログラム
211 ベクトル化されたソースプログラム
212 ベクトル化されたソースプログラム
213 ベクトル化されたソースプログラム
214 ベクトル化されたソースプログラム
215 ベクトル化されたソースプログラム
216 ベクトル化されたソースプログラム
217 ベクトル化されたソースプログラム
30 ベクトル化装置
31 検出部
32 固定値決定部
33 拡張部
34 拡張要素設定部
35 更新部
900 情報処理装置
901 CPU
902 ROM
903 RAM
904 ハードディスク(記憶装置)
905 通信インタフェース
906 バス
907 記録媒体
908 リーダライタ
909 入出力インタフェース
Claims (10)
- ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出手段と、
前記検出手段が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定手段と、
前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張手段と、
前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定手段及び前記拡張手段による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定手段と、
前記固定値決定手段、前記拡張手段、及び、前記拡張要素設定手段による処理結果に基づいて、前記ソフトウェアを更新する更新手段と、
を備えるベクトル化装置。 - 前記拡張要素設定手段は、前記二重ループ処理が、前記内側ループによる反復処理によって、1つ以上の前記第二の配列変数に関する演算結果の総和を、前記外側ループの1回ごとに求める場合に、前記第二の配列変数に関する演算結果が0となるように、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、前記要素値を設定する、
請求項1に記載のベクトル化装置。 - 前記拡張要素設定手段は、前記二重ループ処理が、前記内側ループによる反復処理によって、1つ以上の前記第二の配列変数に関する演算結果の総乗を、前記外側ループの1回ごとに求める場合に、前記第二の配列変数に関する演算結果が1となるように、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、前記要素値を設定する、
請求項1に記載のベクトル化装置。 - 前記拡張要素設定手段は、前記内側ループによる反復処理によって、1つの前記第二の配列変数の総和を前記外側ループの1回ごとに求める場合に、前記拡張手段によって新たに追加された前記第二の配列変数の前記要素値として0を設定する、
請求項2に記載のベクトル化装置。 - 前記拡張要素設定手段は、前記内側ループによる反復処理によって、1つの前記第二の配列変数の総乗を前記外側ループの1回ごとに求める場合に、前記拡張手段によって新たに追加された前記第二の配列変数の前記要素値として1を設定する、
請求項3に記載のベクトル化装置。 - 前記拡張手段は、前記第二の配列変数をインデックス値として含む第三の配列変数が前記第一の配列変数の値の算出に用いられる場合、前記第三の配列変数の配列サイズを拡張し、
前記拡張要素設定手段は、前記拡張手段によって新たに追加された前記第二の配列変数の要素に対して、前記拡張手段によって新たに追加された前記第三の配列変数の要素のいずれかを示すインデックス値を設定し、前記拡張手段によって新たに追加された前記第三の配列変数の要素に対して、前記拡張手段による処理が行われる前後において前記二重ループ処理の結果が等しくなるように前記要素値を設定する、
請求項1乃至5のいずれか一項に記載のベクトル化装置。 - 前記固定値決定手段は、前記外側ループに応じて値が異なる前記内側ループのループ長の最大値を、前記固定値として決定する、
請求項1乃至6のいずれか一項に記載のベクトル化装置。 - 前記固定値決定手段は、前記外側ループのループ長に特定の整数値を乗算することによって求めた値に対する、前記内側ループのループ長の総和の比が、所定の値以上となることを満たす前記特定の整数値の最大値を、前記固定値として決定する、
請求項1乃至6のいずれか一項に記載のベクトル化装置。 - 情報処理装置によって、
ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能であり、
前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定し、
前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにし、
前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値の決定及び前記配列サイズの拡張が行われる前後において前記二重ループ処理の結果が等しくなるようにし、
前記固定値の決定、前記配列サイズの拡張、及び、前記配列サイズの拡張によって新たに追加された前記第二の配列変数の要素に対する前記要素値の設定に関する処理結果に基づいて、前記ソフトウェアを更新する、
ベクトル化方法。 - ソフトウェアに含まれる二重ループ処理について、内側ループのループ長が外側ループのループ変数の値に依存した変動値であり、かつ、前記二重ループ処理の結果を表す第一の配列変数が前記内側ループのループ変数をインデックス値として含まない構成であることを検出可能な検出処理と、
前記検出処理が前記構成を検出した場合に、前記内側ループのループ長として、所定の基準に基づく固定値を決定する固定値決定処理と、
前記第一の配列変数の値の算出に用いられる第二の配列変数の配列サイズを拡張することによって、前記二重ループ処理が、ループ長が前記固定値である前記内側ループを処理できるようにする拡張処理と、
前記拡張処理によって新たに追加された前記第二の配列変数の要素に対して、要素値を設定することによって、前記固定値決定処理及び前記拡張処理による処理が行われる前後において前記二重ループ処理の結果が等しくなるようにする拡張要素設定処理と、
前記固定値決定処理、前記拡張処理、及び、前記拡張要素設定処理による処理結果に基づいて、前記ソフトウェアを更新する更新処理と、
をコンピュータに実行させるためのベクトル化プログラムが格納された記録媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015227256 | 2015-11-20 | ||
JP2015227256 | 2015-11-20 | ||
PCT/JP2016/084115 WO2017086391A1 (ja) | 2015-11-20 | 2016-11-17 | ベクトル化装置、ベクトル化方法、及び、ベクトル化プログラムが格納された記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2017086391A1 true JPWO2017086391A1 (ja) | 2018-09-06 |
Family
ID=58717428
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017551923A Pending JPWO2017086391A1 (ja) | 2015-11-20 | 2016-11-17 | ベクトル化装置、ベクトル化方法、及び、ベクトル化プログラムが格納された記録媒体 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10572233B2 (ja) |
JP (1) | JPWO2017086391A1 (ja) |
WO (1) | WO2017086391A1 (ja) |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0497484A (ja) * | 1990-08-16 | 1992-03-30 | Nec Corp | コンパイラのベクトル化処理方式 |
US5710913A (en) * | 1995-12-29 | 1998-01-20 | Atmel Corporation | Method and apparatus for executing nested loops in a digital signal processor |
JP3657414B2 (ja) | 1998-01-20 | 2005-06-08 | 富士通株式会社 | 多重ループのベクトル化装置および記録媒体 |
JP2001043209A (ja) | 1999-07-30 | 2001-02-16 | Nec Corp | 多重ネストループプログラムコンパイル方式 |
JP3924256B2 (ja) * | 2003-03-12 | 2007-06-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ装置、コンパイラプログラム、記録媒体、コンパイル方法、実行時情報生成装置、及び実行時情報生成プログラム |
US8458685B2 (en) * | 2009-06-12 | 2013-06-04 | Cray Inc. | Vector atomic memory operation vector update system and method |
US9244677B2 (en) * | 2012-09-28 | 2016-01-26 | Intel Corporation | Loop vectorization methods and apparatus |
EP2972781A4 (en) * | 2013-03-15 | 2016-10-19 | Intel Corp | METHOD AND SYSTEMS FOR VECTORIZING SCALAR COMPUTER PROGRAM GRINDINGS WITH GRINDING DEPENDENCIES |
US9760356B2 (en) * | 2014-09-23 | 2017-09-12 | Intel Corporation | Loop nest parallelization without loop linearization |
US20160139901A1 (en) * | 2014-11-18 | 2016-05-19 | Qualcomm Incorporated | Systems, methods, and computer programs for performing runtime auto parallelization of application code |
-
2016
- 2016-11-17 JP JP2017551923A patent/JPWO2017086391A1/ja active Pending
- 2016-11-17 US US15/770,524 patent/US10572233B2/en active Active
- 2016-11-17 WO PCT/JP2016/084115 patent/WO2017086391A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
US20190056920A1 (en) | 2019-02-21 |
WO2017086391A1 (ja) | 2017-05-26 |
US10572233B2 (en) | 2020-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Laguna et al. | Gpumixer: Performance-driven floating-point tuning for gpu scientific applications | |
Li et al. | Efficient parallel implementations of sparse triangular solves for GPU architectures | |
US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
JP6666554B2 (ja) | 情報処理装置、変換プログラム、及び変換方法 | |
Phillips et al. | A CUDA implementation of the High Performance Conjugate Gradient benchmark | |
Gao et al. | Automatically optimizing the latency, area, and accuracy of c programs for high-level synthesis | |
CN108920149B (zh) | 编译方法和编译装置 | |
US9658938B2 (en) | Iterative test generation based on data source analysis | |
US9182960B2 (en) | Loop distribution detection program and loop distribution detection method | |
Su et al. | HCG: optimizing embedded code generation of simulink with SIMD instruction synthesis | |
US10545741B2 (en) | Information processing apparatus, method of compiling, and storage medium | |
WO2017086391A1 (ja) | ベクトル化装置、ベクトル化方法、及び、ベクトル化プログラムが格納された記録媒体 | |
JP5227646B2 (ja) | コンパイラ及びそのコード生成方法 | |
CN106933665A (zh) | 预测mpi程序运行时间的方法 | |
JP6897213B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
JP6548848B2 (ja) | 情報処理装置、情報処理方法及び情報処理プログラム | |
Yang | Fastad: expression template-based c++ library for fast and memory-efficient automatic differentiation | |
JP6409639B2 (ja) | コンパイラプログラム、システム、方法、及び装置 | |
JP7115563B2 (ja) | コンパイル装置、コンパイル方法、及び制御プログラム | |
JP2014137657A (ja) | コード生成方法、コンパイラ及び計算機 | |
JP6810380B2 (ja) | ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム | |
JP2020135464A (ja) | プログラム変換装置、プログラム変換方法、及び、プログラム変換のプログラム | |
JP2018049461A (ja) | コンパイル装置、コンパイル方法、および、コンパイルプログラム | |
Kähkönen | Implementing Delegable Inference for Graphical Models | |
Ecker et al. | Comparing different programming approaches for SpMV-operations on GPUs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20180417 |