JP4819442B2 - コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム - Google Patents

コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム Download PDF

Info

Publication number
JP4819442B2
JP4819442B2 JP2005252969A JP2005252969A JP4819442B2 JP 4819442 B2 JP4819442 B2 JP 4819442B2 JP 2005252969 A JP2005252969 A JP 2005252969A JP 2005252969 A JP2005252969 A JP 2005252969A JP 4819442 B2 JP4819442 B2 JP 4819442B2
Authority
JP
Japan
Prior art keywords
loop
statement
data
sparse matrix
loop statement
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.)
Expired - Fee Related
Application number
JP2005252969A
Other languages
English (en)
Other versions
JP2007066128A (ja
Inventor
浩子 杉山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2005252969A priority Critical patent/JP4819442B2/ja
Publication of JP2007066128A publication Critical patent/JP2007066128A/ja
Application granted granted Critical
Publication of JP4819442B2 publication Critical patent/JP4819442B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、ソースプログラムをコンパイルするコンパイル処理方法及びその装置と、そのコンパイル処理方法の実現に用いられるコンパイル処理プログラムとに関し、特に、ソースプログラムが疎行列の演算を実行するループを持つ場合に、その実行時間を短縮できるようにするコンパイル処理方法及びその装置と、そのコンパイル処理方法の実現に用いられるコンパイル処理プログラムとに関する。
従来技術では、ソースプログラムが疎行列(0を多く持つ行列)の演算を実行するループを持つ場合に、実行不要な演算があるにもかかわらず、それを実行していることから実行時間が長くなるという問題がある。
例えば、
DO J=1,N
DO I=1,M
A(I,J)=A(I,J)+B(J)*C
ENDDO
ENDDO
という行列Bの演算を実行する2重ループでは、図7に示すように、内側ループをM回実行することになる。
この場合に、従来技術では、行列Bが疎行列であるのか否かを考慮しないで、そのまま内側ループをM回実行するようにしている。しかるに、B(J)の値が0である場合、内側ループの演算結果は“A(I,J)”となり、内側ループは演算不要ということを意味する。
行列Bが疎行列である場合、B(J)の値は0である場合が多い。これから、従来技術のように、行列Bが疎行列であるのか否かを考慮しないで、そのまま内側ループをM回実行するようにしていると、演算不要な場合が多いにも関わらず内側ループを実行することになることから、その実行時間が長くなるという問題があるのである。
この問題は、上述の2重ループを単純に並列化しても解決できない問題である。
すなわち、通常、このような多重ループは一番外側の次元で並列化されることになるので、このループを2つのCPU1,2の並列プロセッサ向けに並列化すると、CPU1とCPU2とでは、それぞれ図8に示すようなループが実行されることになる。
このように並列化した場合の実行時間は、n並列で実行した場合、
MAX(CPU1の実行時間 ,CPU2の実行時間 ,・・ ,CPUnの実行時間)
で求めることができる。
これから、内側ループの実行時間をTとすると、上述の2重ループの実行時間は、
並列化しない場合 : T*N
並列化する場合 : T*(N/2)
となる。
このように、ソースプログラムが2重ループなどのような多重ループを持つ場合には、それを並列化することで実行時間を大幅に短縮できるようになる。
しかしながら、このような並列化を行っても、個々のCPUでは演算不要な場合が多いにも関わらずそのまま内側ループを実行するということに変わりはなく、これから、実行時間が長くなるという問題は解決できないことになる。
ここで、本発明に関連する従来技術として、下記に示す特許文献1,2がある。
この特許文献1に記載された発明では、大部分の行列要素が0であるという特性をもつスパース行列(疎行列)の行列演算を実行する場合に、前処理でスパース行列の演算過程で現れる全ての非零要素位置を検出してビットマップを作成し、このビットマップが示す行列要素位置のみを計算して無駄のない反復行列求解を行うようにしている。
また、特許文献2に記載された発明では、複数のタスクを複数のプロセッサ上で並行して実行することで手続内ループの実行速度の向上を図るときにあって、割り当てられたループの実行を終えたプロセッサが未処理のループの実行を行うようにすることで、その実行速度の向上を一層確かなものにするようにしている。
特開昭60−247782号公報 特開平3−218556号公報
上述したように、従来技術では、ソースプログラムが疎行列の演算を実行するループを持つ場合に、実行不要な演算が含まれているものの、そのようなことを考えずに、そのままソースプログラムをコンパイルするようにしている。
これから、従来技術に従っていると、ソースプログラムが疎行列の演算を実行するループを持つ場合に、実行不要な演算があるにもかかわらず、それを実行していることから実行時間が長くなるという問題がある。
本発明はかかる事情に鑑みてなされたものであって、ソースプログラムをコンパイルするときにあって、ソースプログラムが疎行列の演算を実行するループを持つ場合に、その実行時間を短縮できるようにする新たなコンパイル処理技術の提供を目的とする。
この目的を達成するために、本発明のコンパイル処理装置は、(1)ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出する検出手段と、(2)検出手段が検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断する判断手段と、(3)判断手段が値の更新されないデータであることを判断した最内ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する挿入手段と、(4)挿入手段が命令文を挿入した多重ループ文をサイクリック方式の形で並列化する並列化手段とを備えるように構成する。
このように構成されるときにあって、検出手段は、ソースプログラムに記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出することがある。
この場合には、判断手段は、検出手段が検出した1重ループ文について、その1重ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断し、挿入手段は、判断手段が値の更新されないデータであることを判断した1重ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入し、並列化手段は、挿入手段が命令文を挿入した1重ループ文をサイクリック方式の形で並列化するように処理する。
以上の各処理手段が動作することで実現される本発明のコンパイル処理方法はコンピュータプログラムでも実現できるものであり、このコンピュータプログラムは、適当なコンピュータ読み取り可能な記録媒体に記録して提供されたり、ネットワークを介して提供され、本発明を実施する際にインストールされてCPUなどの制御手段上で動作することにより本発明を実現することになる。
このように構成される本発明のコンパイル処理装置では、ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出すると、その検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断する。
続いて、その値の更新されないデータであることを判断した最内ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入して、その命令文を挿入した多重ループ文をサイクリック方式の形で並列化する。
このようにして、本発明のコンパイル処理装置では、
DO J=1,N
DO I=1,M
A(I,J)=A(I,J)+B(J)*C
ENDDO
ENDDO
という疎行列Bの演算を実行する2重ループ文で説明するならば、図1(a)に示すように、疎行列BのデータB(J)が0である場合には内側ループ文の実行を省略でき、かつ、このデータB(J)が内側ループの回転により値が更新されないので、この内側ループ文の直前に、B(J)の値が0であるのかを検査して、0である場合には内側ループ文を実行しないようにするという命令文(図中に示す*部分の命令文)を挿入するという構成を採る。
このように、本発明のコンパイル処理装置では、ソースプログラムに対して不要な演算の実行を省略可能にする命令文を挿入することで不要な演算を実行しないで済むようにし、これにより実行時間の短縮を図るようにするという構成を採るものである。
しかるに、図1(b)に示すように、
DO I=1,M
A(I)=A(I)+B(I)*C
ENDDO
という1重ループ文に上記の命令文(図中に示す*部分の命令文:不要な演算の実行を省略可能にする命令文)を挿入すると、B(I)の値が0であるかどうかに関わらずに、ループが1回転する毎に、この命令文を実行しなければならないことから、B(I)の値がほとんど0であっても、この命令文を実行することによるオーバヘッドにより実行時間を短縮することが難しくなる。
これから、本発明のコンパイル処理装置では、1重ループ文については原則として上記の命令文を挿入しないことになるが、図1(c)に示すように、1重ループ文ではあるものの、そのループ内で演算データがスカラーデータであることにより不変である場合には、上述した多重ループ文の最内ループ文と同様に、上記の命令文をループの外に出せることで、その命令文の前の演算(図中の:で表した部分)に紛れて実行できることになることから、その命令文(図中に示す*部分の命令文)を実行することによるオーバヘッドを意識する必要はない。
そこで、本発明のコンパイル処理装置では、ソースプログラムに記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出すると、その検出した1重ループ文について、その1重ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断し、その値の更新されないデータであることを判断した1重ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入し、その命令文を挿入した1重ループ文をサイクリック方式の形で並列化するようにしている。
一方、ソースプログラムが多重ループを持つ場合には、それを並列化することで実行時間を大幅に短縮できるようになる。
例えば、
DO J=1,N
DO I=1,M
A(I,J)=A(I,J)+B(J)*C
ENDDO
ENDDO
という疎行列Bの演算を実行する2重ループについて、2つのCPU1,2の並列プロセッサ向けに並列化すると、図8に示すようなループが実行されることになり、上述したように、CPU台数に応じて実行時間を大幅に短縮できるようになる。
しかしながら、例えば、疎行列BのデータB(J)の値の内、前半の値は全て0で、後半の値は全て0以外であったとすると、CPU2では内側ループの演算を“N/2”回実行しなければならないのに対して、CPU1では内側ループの演算を全く実行しなくてもよいことになる。
この場合、図7に示すような通常の方式(均等に分割して並列化する方式)で並列化を行っていると、その実行時間は、一番長いCPU実行時間により決められることになるので、内側ループの実行時間をTとすると、その実行時間は“T*(N/2)”となり、結局のところCPU台数に基づく効果でしか実行時間を短縮できないことになる。
そこで、本発明のコンパイル処理装置では、多重ループ文や1重ループ文を並列化する場合に、疎行列の0の出現位置が偏ることがある場合を考慮して、それらのループ文をサイクリック方式の形で並列化するようにしている。
このサイクリック方式の並列化では、2つのCPU1,2の並列プロセッサ向けに並列化する場合には、例えば、J=1,3,5,・・・についてはCPU1で実行し、J=2,4,6,・・・についてはCPU2で実行するというように、1回転毎にループを分割して他方のCPUに実行させるという構成を採る。
これから、疎行列BのデータB(J)の値の内、前半の値は全て0で、後半の値は全て0以外であったとすると、CPU1とCPU2とで平均してループの実行を行えるようになることから、内側ループの実行時間をTとすると、その実行時間は“T*(N/2)*(1/2)”となり、図8に示すような通常の方式で並列化を行うのに比べて、その実行時間を短縮できることになる。
なお、疎行列の0の出現位置が偏らない場合には、通常の方式で並列化を行う場合の実行時間と、サイクリック方式で並列化を行う場合の実行時間とに差はなく、したがって、サイクリック方式で並列化を行うことによる不利益は生じないない。
以上説明したように、本発明よれば、ソースプログラムをコンパイルするときにあって、ソースプログラムが疎行列の演算を実行するループを持つ場合に、その実行時間を大幅に短縮できるようになる。
以下、実施の形態に従って本発明を詳細に説明する。
図2に、本発明を具備するコンパイル処理装置1の一実施形態例を図示する。
この図に示すように、本発明のコンパイル処理装置1は、ソースプログラム2をコンパイルすることでオブジェクトプログラム3を生成するために、ソースプログラム2を入力するプログラム入力部10と、プログラム入力部10の入力したソースプログラム2の最適化処理を実行する最適化処理部11と、最適化処理部11の最適化処理結果に基づいてオブジェクトプログラム3を生成するオブジェクト生成部12とを備える。
最適化処理部11は、本発明を実現するために、検出部110と、判断部111と、挿入部112と、並列化部113とを備える。
この検出部110は、ソースプログラム2に記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出したり、ソースプログラム2に記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出するという処理を行う。
判断部111は、検出部110が検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断したり、検出部110が検出した1重ループ文について、その1重ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断するという処理を行う。
挿入部112は、判断部111が値の更新されないデータであることを判断した最内ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入したり、判断部111が値の更新されないデータであることを判断した1重ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入するという処理を行う。
並列化部113は、挿入部112が命令文を挿入した多重ループ文を図3に示すような形態であるサイクリック方式の形で並列化したり、挿入部112が命令文を挿入した1重ループ文を図3に示すような形態であるサイクリック方式の形で並列化するという処理を行う。
ここで、ソースプログラム2に記述される行列の中に含まれる行列(配列)の内、どれが疎行列であり、どれが疎行列でないということについては、例えば、ソースプログラム2に記述される情報に従って取得したり、プログラマからの入力情報に従って取得することになる。
図4及び図5に、最適化処理部11が本発明を実現するために実行する処理フローの一実施形態例を図示する。
次に、この処理フローに従って、本発明により実現されるコンパイル最適化処理について説明する。
最適化処理部11は、ソースプログラム2を受け取ると、本発明を実現するために、図4及び図5の処理フローに示すように、先ず最初に、ステップ10で、ソースプログラム2に未処理のループ文が残っているのか否かを判断して、未処理のループ文が残っていることを判断するときには、ステップ11に進んで、ソースプログラム2に記述される未処理のループ文を1つ選択する。
続いて、ステップ12で、その選択したループ文が多重ループ文であるのか1重ループ文であるのかを判断して、多重ループ文であることを判断するときには、ステップ13に進んで、その多重ループ文の最内ループ文内に、疎行列Bについての演算である
A=A+B*C,A=A−B*C,A=A+B/C,A=A−B/C
という演算パターンがあるのかを調べる。
ここで、これらの演算パターンは、疎行列Bのデータが0である場合に、その実行を省略できる演算パターンを示している。
したがって、このステップ13では、選択した多重ループ文の最内ループ文に、疎行列Bを含み、かつ、その疎行列Bのデータが0である場合に実行を省略できる演算が含まれているのかを調べるのである。
続いて、ステップ14で、ステップ13のチェック処理に従って、選択した多重ループ文の最内ループ文に上述の演算パターンが存在しないことを判断するときには、実行を省略できる演算が含まれていないので、次のループ文を処理すべくステップ10に戻る。
一方、ステップ14で上述の演算パターンが存在することを判断するときには、ステップ15に進んで、最内ループ文に記述される疎行列Bに該当する演算データは、最内ループが回転しても値が更新されない不変のデータ(ベクトルデータ)であるのかを調べる。
続いて、ステップ16で、ステップ15のチェック処理に従って、最内ループ文に記述される疎行列Bに該当する演算データが不変のデータでないことを判断するときには、ステップ17で説明する命令文を挿入すると、いちいちその命令文を実行しなければならないことにより実行時間がかえって長くなることを考慮して、次のループ文を処理すべくステップ10に戻る。
一方、ステップ16で不変のデータであることを判断するときには、ステップ17に進んで、最内ループ文の直前に、演算データの値が0であるのかを検査して、0である場合には、最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する。
すなわち、図6中の*1で示すように、
IF(B(k−1).EQ .0) GOTO 10
という命令文を挿入したり、図6中の*2で示すように、
IF(B(k).EQ .0) GOTO 20
という命令文を挿入するのである。
続いて、ステップ18で、ステップ11で選択した多重ループのループ文(ステップ17の処理に従って命令文が挿入されている)をサイクリック方式で並列化してから、次のループ文を処理すべくステップ10に戻る。
一方、ステップ12で、選択したループ文が1重ループ文であることを判断するときには、ステップ19に進んで、その1重ループ文内に、疎行列Bについての演算である
A=A+B*C,A=A−B*C,A=A+B/C,A=A−B/C
という演算パターンがあるのかを調べる。
ここで、これらの演算パターンは、疎行列Bのデータが0である場合に、その実行を省略できる演算パターンを示している。
したがって、このステップ19では、選択した1重ループ文に、疎行列Bを含み、かつ、その疎行列Bのデータが0である場合に実行を省略できる演算が含まれているのかを調べるのである。
続いて、ステップ20で、ステップ19のチェック処理に従って、選択した1重ループ文に上述の演算パターンが存在しないことを判断するときには、実行を省略できる演算が含まれていないので、次のループ文を処理すべくステップ10に戻る。
一方、ステップ20で上述の演算パターンが存在することを判断するときには、ステップ21に進んで、1重ループ文に記述される疎行列Bに該当する演算データは、1重ループが回転しても値が更新されない不変のデータ(スカラデータ)であるのかを調べる。
続いて、ステップ22で、ステップ21のチェック処理に従って、1重ループ文に記述される疎行列Bに該当する演算データが不変のデータでないことを判断するときには、ステップ23で説明する命令文を挿入すると、いちいちその命令文を実行しなければならないことにより実行時間がかえって長くなることを考慮して、次のループ文を処理すべくステップ10に戻る。
一方、ステップ22で不変のデータであることを判断するときには、ステップ23に進んで、1重ループ文の直前に、演算データの値が0であるのかを検査して、0である場合には、1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する。
続いて、ステップ24で、ステップ11で選択した1重ループのループ文(ステップ23の処理に従って命令文が挿入されている)をサイクリック方式で並列化してから、次のループ文を処理すべくステップ10に戻る。
このようにして、ステップ10〜ステップ24の処理を繰り返していくことで、ステップ10で、ソースプログラム2に記述される全てのループ文を処理したことを判断すると、本発明によるコンパイルの最適化処理を終了する。
以上に説明したように、本発明のコンパイル処理装置1は、疎行列の性質を考慮して、ソースプログラム2に対して不要な演算の実行を省略可能にする命令文を挿入することで不要な演算を実行しないで済むようにし、これにより実行時間の短縮を実現するのである。
そして、本発明のコンパイル処理装置1は、この命令文を挿入したソースプログラム2を並列化することで実行時間の短縮を図るときに、疎行列の0の出現位置に偏りがあるような場合に、その実行時間の短縮を図れないことが起こることを考慮して、通常の均等に分割する方式に基づいた並列化を行うのではなくて、サイクリック方式に基づいた並列化を行うようにし、これにより並列化で実行時間の短縮を図るときに、その実行時間の短縮をより大きなものとすることを実現するのである。
(付記1)ソースプログラムをコンパイルするコンパイル処理方法において、ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出する過程と、上記検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断する過程と、上記値の更新されないデータであることを判断した最内ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する過程と、上記命令文を挿入した多重ループ文をサイクリック方式の形で並列化する過程とを備えることを、特徴とするコンパイル処理方法。
(付記2)付記1に記載のコンパイル処理方法において、上記検出する過程では、ソースプログラムに記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出し、上記判断する過程では、上記検出した1重ループ文について、その1重ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断し、上記挿入する過程では、上記値の更新されないデータであることを判断した1重ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入し、上記並列化する過程では、上記命令文を挿入した1重ループ文をサイクリック方式の形で並列化することを、特徴とするコンパイル処理方法。
(付記3)ソースプログラムをコンパイルするコンパイル処理装置において、ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出する検出手段と、上記検出手段が検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断する判断手段と、上記判断手段が値の更新されないデータであることを判断した最内ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する挿入手段と、上記挿入手段が命令文を挿入した多重ループ文をサイクリック方式の形で並列化する並列化手段とを備えることを、特徴とするコンパイル処理装置。
(付記4)付記3に記載のコンパイル処理装置において、上記検出手段は、ソースプログラムに記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出し、上記判断手段は、上記検出手段が検出した1重ループ文について、その1重ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断し、上記挿入手段は、上記判断手段が値の更新されないデータであることを判断した1重ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入し、上記並列化手段は、上記挿入手段が命令文を挿入した1重ループ文をサイクリック方式の形で並列化することを、特徴とするコンパイル処理装置。
(付記5)ソースプログラムをコンパイルするコンパイル処理プログラムにおいて、ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出する処理と、上記検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断する処理と、上記値の更新されないデータであることを判断した最内ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する処理と、上記命令文を挿入した多重ループ文をサイクリック方式の形で並列化する処理とをコンピュータに実行させるためのコンパイル処理プログラム。
(付記6)付記5に記載のコンパイル処理プログラムにおいて、上記検出する処理では、ソースプログラムに記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列のデータが0である場合に実行を省略できる演算を持つものを検出し、上記判断する処理では、上記検出した1重ループ文について、その1重ループ文の持つ演算の疎行列のデータがループの回転により値の更新されないデータであるのかを判断し、上記挿入する処理では、上記値の更新されないデータであることを判断した1重ループ文の直前に、疎行列のデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入し、上記並列化する処理では、上記命令文を挿入した1重ループ文をサイクリック方式の形で並列化することを、特徴とするコンパイル処理プログラム。
本発明の説明するためのソースプログラムの説明図である。 本発明のコンパイル処理装置の一実施形態例である。 サイクリック方式による並列化の説明図である。 最適化処理部の実行する処理フローの一実施形態例である。 最適化処理部の実行する処理フローの一実施形態例である。 本発明による命令文挿入の説明図である。 従来技術を説明するためのソースプログラムの説明図である。 従来技術を説明するためのソースプログラムの説明図である。
符号の説明
1 コンパイル処理装置
2 ソースプログラム
3 オブジェクトプログラム
10 プログラム入力部
11 最適化処理部
12 オブジェクト生成部
110 検出部
111 判断部
112 挿入部
113 並列化部

Claims (5)

  1. ソースプログラムをコンパイルするコンパイル処理方法において、
    ンピュータを検出手段として機能させて、ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列の値であるデータが0である場合に実行を省略できる演算を持つものを検出する過程と、
    前記コンピュータを判断手段として機能させて、上記検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列の値であるデータがループの回転により値の更新されないデータであるのかを判断する過程と、
    前記コンピュータを挿入手段として機能させて、上記値の更新されないデータであることを判断した最内ループ文の直前に、疎行列の値であるデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する過程と、
    前記コンピュータを並列化手段として機能させて、上記命令文を挿入した多重ループ文のうちの前記最内ループ分よりも外側のループ分について1回転毎にループを分割し、前記ソースプログラムをコンパイルして得られるプログラムを実行する複数の処理装置の各処理装置に、分割された各ループを割り当てて、前記各処理装置に割り当てた各ループの命令を実行させるようにサイクリック方式の形で並列化する過程とを備えることを、
    特徴とするコンパイル処理方法。
  2. 請求項1に記載のコンパイル処理方法において、
    上記検出する過程では、ソースプログラムに記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列の値であるデータが0である場合に実行を省略できる演算を持つものを検出し、
    上記判断する過程では、上記検出した1重ループ文について、その1重ループ文の持つ演算の疎行列の値であるデータがループの回転により値の更新されないデータであるのかを判断し、
    上記挿入する過程では、上記値の更新されないデータであることを判断した1重ループ文の直前に、疎行列の値であるデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入し、
    上記並列化する過程では、上記命令文を挿入した1重ループ文を1回転毎にループを分割して複数の処理装置に周期的に命令を実行させるようにサイクリック方式の形で並列化することを、
    特徴とするコンパイル処理方法。
  3. ソースプログラムをコンパイルするコンピュータによるコンパイル処理装置において、
    ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列の値であるデータが0である場合に実行を省略できる演算を持つものを検出する検出手段と、
    上記検出手段が検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列の値であるデータがループの回転により値の更新されないデータであるのかを判断する判断手段と、
    上記判断手段が値の更新されないデータであることを判断した最内ループ文の直前に、疎行列の値であるデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する挿入手段と、
    上記挿入手段が命令文を挿入した多重ループ文のうちの前記最内ループ分よりも外側のループ分について1回転毎にループを分割し、前記ソースプログラムをコンパイルして得られるプログラムを実行する複数の処理装置の各処理装置に、分割された各ループを割り当てて、前記各処理装置に割り当てた各ループの命令を実行させるようにサイクリック方式の形で並列化する並列化手段とを備えることを、
    特徴とするコンパイル処理装置。
  4. 請求項3に記載のコンパイル処理装置において、
    上記検出手段は、ソースプログラムに記述される1重ループ文について、その1重ループ文に、疎行列を含み、かつ、その疎行列の値であるデータが0である場合に実行を省略できる演算を持つものを検出し、
    上記判断手段は、上記検出手段が検出した1重ループ文について、その1重ループ文の持つ演算の疎行列の値であるデータがループの回転により値の更新されないデータであるのかを判断し、
    上記挿入手段は、上記判断手段が値の更新されないデータであることを判断した1重ループ文の直前に、疎行列の値であるデータが0であるのかを検査して、0である場合には1重ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入し、
    上記並列化手段は、上記挿入手段が命令文を挿入した1重ループ文を1回転毎にループを分割して複数の処理装置に周期的に命令を実行させるようにサイクリック方式の形で並列化することを、
    特徴とするコンパイル処理装置。
  5. ソースプログラムをコンパイルするコンパイル処理プログラムにおいて、
    コンピュータを、
    ソースプログラムに記述される多重ループ文について、その多重ループ文の最内ループ文に、疎行列を含み、かつ、その疎行列の値であるデータが0である場合に実行を省略できる演算を持つものを検出する処理を行う検出手段と、
    上記検出した多重ループ文の最内ループ文について、その最内ループ文の持つ演算の疎行列の値であるデータがループの回転により値の更新されないデータであるのかを判断する処理を行う判断手段と、
    上記値の更新されないデータであることを判断した最内ループ文の直前に、疎行列の値であるデータが0であるのかを検査して、0である場合には最内ループ文内の演算を行わずに次の回転に進むことを指示する命令文を挿入する処理を行う挿入手段と、
    上記命令文を挿入した多重ループ文のうちの前記最内ループ分よりも外側のループ分について1回転毎にループを分割し、前記ソースプログラムをコンパイルして得られるプログラムを実行する複数の処理装置の各処理装置に、分割された各ループを割り当てて、前記各処理装置に割り当てた各ループの命令を実行させるようにサイクリック方式の形で並列化する並列化手段と
    して機能させるためのコンパイル処理プログラム。
JP2005252969A 2005-09-01 2005-09-01 コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム Expired - Fee Related JP4819442B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005252969A JP4819442B2 (ja) 2005-09-01 2005-09-01 コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005252969A JP4819442B2 (ja) 2005-09-01 2005-09-01 コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム

Publications (2)

Publication Number Publication Date
JP2007066128A JP2007066128A (ja) 2007-03-15
JP4819442B2 true JP4819442B2 (ja) 2011-11-24

Family

ID=37928218

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005252969A Expired - Fee Related JP4819442B2 (ja) 2005-09-01 2005-09-01 コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム

Country Status (1)

Country Link
JP (1) JP4819442B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113672232B (zh) * 2021-07-09 2024-06-11 华为技术有限公司 程序编译方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0475139A (ja) * 1990-07-18 1992-03-10 Toshiba Corp ループ並列化装置
JP4565201B2 (ja) * 2003-03-28 2010-10-20 独立行政法人科学技術振興機構 計算装置、計算方法、プログラムおよび記録媒体

Also Published As

Publication number Publication date
JP2007066128A (ja) 2007-03-15

Similar Documents

Publication Publication Date Title
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
TWI733798B (zh) 在執行向量操作時管理位址衝突的設備及方法
US9753727B2 (en) Partial vectorization compilation system
US9195444B2 (en) Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction
JP5479942B2 (ja) 並列化方法、システム、及びプログラム
EP2799986B1 (en) Apparatus and method for translating multithread program code
Saumya et al. DARM: control-flow melding for SIMT thread divergence reduction
JP4819442B2 (ja) コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム
EP2181389A2 (en) Data processing with protection against soft errors
JP3196625B2 (ja) 並列化コンパイル方式
Shao et al. Map-reduce inspired loop parallelization on CGRA
Chandraiah et al. Designer-controlled generation of parallel and flexible heterogeneous MPSoC specification
JP6558310B2 (ja) 並列化方法、並列化ツール
Saumya et al. DARM: Control-Flow Melding for SIMT Thread Divergence Reduction--Extended Version
KR102025694B1 (ko) 재구성 가능한 프로세서의 검증 방법
JP6600888B2 (ja) 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法
US20230176851A1 (en) Computer-readable recording medium storing conversion program and conversion method
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
JP6810380B2 (ja) ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム
JPH02132525A (ja) コンパイル方法
JP2870218B2 (ja) 並列実行命令列生成方式
JP2022011264A (ja) ソフトウェア開発支援装置及びソフトウェア開発支援方法
JP2009140451A (ja) コンパイラ装置、コンパイル方法およびそのプログラム
JP5821697B2 (ja) コンパイル方法、コンパイルプログラム及びコンパイル装置
JP2004139369A (ja) 定数アドレス領域を指示するポインタ解析方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080324

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100426

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110322

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110523

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20110523

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20110523

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110614

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110812

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110830

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110901

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140909

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees