JP3540837B2 - コンパイル処理装置 - Google Patents

コンパイル処理装置 Download PDF

Info

Publication number
JP3540837B2
JP3540837B2 JP10261094A JP10261094A JP3540837B2 JP 3540837 B2 JP3540837 B2 JP 3540837B2 JP 10261094 A JP10261094 A JP 10261094A JP 10261094 A JP10261094 A JP 10261094A JP 3540837 B2 JP3540837 B2 JP 3540837B2
Authority
JP
Japan
Prior art keywords
array data
processing device
loop
dimension
data
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
JP10261094A
Other languages
English (en)
Other versions
JPH07311746A (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 JP10261094A priority Critical patent/JP3540837B2/ja
Publication of JPH07311746A publication Critical patent/JPH07311746A/ja
Application granted granted Critical
Publication of JP3540837B2 publication Critical patent/JP3540837B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【産業上の利用分野】
本発明は、ソースプログラムに記述される配列データを複数の物理プロセッサに分散配置するコンパイル処理装置に関し、特に、通信のオーバーヘッドを招くことなく高い並列性を実現する配列データの分散配置を提供するコンパイル処理装置に関する。
【0002】
高速計算機を実現する方式として、複数のプロセッシングエレメント(PE)を集めてネットワークで一体化した構成を採る並列計算機が普及しつつある。この並列計算機を使用するにあたっては、処理対象となるデータをどのようにPEに割り付けるかというデータレイアウトが重要な問題である。なぜならば、このデータレイアウトは、プログラムから抽出できる並列性、通信オーバーヘッド、負荷分散に大きな影響を与えるからである。
【0003】
【従来の技術】
並列計算機の処理の並列を引き出し、かつPE間の通信のオーバーヘッドを小さくするためには、別々のPEで並列に処理すべきデータは異なるPEに割り付けることが好ましく、また、同一の処理に必要となる複数データは同じPEに割り付けることが好ましい。
【0004】
これから、従来の並列計算機のデータレイアウト法では、プログラムで用いる配列データのある次元を、そのまま順番にn次元格子に想定したPEのある次元に割り付けていくという方式を用いている。この場合、PE格子のある次元に割り付けられる配列データはPE間で分散され、そうでない配列データは同一PE内に割り付けられることになる。
【0005】
例えば、図15に示すプログラムで説明するならば、外側のループ(DO 100)にのみ並列性がある場合には、図16(a)に示すような形態に従って、2次元配列Aの1次元目のみを1次元PEアレイに分散的に割り付け、一方、内側のループ(DO 200)にのみ並列性がある場合には、図16(b)に示すような形態に従って、2次元配列Aの2次元目のみを1次元PEアレイに分散的に割り付けていくのである。
【0006】
ここで、配列データのある次元をPE格子のある次元に割り付けるにあたっては、ブロック割付方式によるデータ分散方法と、サイクリック割付方式によるデータ分散方法という2つがある。
【0007】
すなわち、前者のブロック割付方式によるデータ分散方法は、図17に示すように、分散する次元方向のサイズを割付対象のプロセッサ台数で割り算し、等分になるようにと連続した領域に割り付けていく方法である。このデータ分散方法は、連続した複数のデータを用いる処理を行うにあたって、通信量を小さくできるという利点がある。ここで、図17では、8×8サイズの2次元配列の2次元目を分散次元としつつ、ブロック割付方式に従って分散配置する例を示してある。
【0008】
一方、後者のサイクリック割付方式によるデータ分散方法は、図18に示すように、分散する次元方向のデータを1つ(あるいはサイクリックの幅分)ずつ順番にプロセッサに割り付けていって、プロセッサ台数分割り付けたら再び始めから順番に割り付けて、その次元方向のサイズ分がすべて割り付けられるまでこれを行う方法である。このデータ分散方法は、担当するデータの位置により処理の量が違う場合に、負荷分散を良くできるという利点がある。ここで、図18では、8×8サイズの2次元配列の2次元目を分散次元としつつ、サイクリック割付方式に従って分散配置する例を示してある。
【0009】
なお、これらの従来手法については下記の文献に紹介されている。
〔1〕High Performance Fortran Forum. High Performance Fortran Language Specification Ver. 1.0. 1933.
〔2〕S.Hiranandani,K.Kennedy,and C.Tseng. "Compiler optimizations for Fortran D on MIMD Distributed-Memory Machines" in Proc. Supercomputig'91 pp.86-100, Nov. 1991.
〔3〕R.Ruhl and M.Annaratone. "Parallelization of FORTRAN Code on Distributed-memory Parallel Processors" in Proc. International Conference on SUPERCOMPUTING, pp342-353, June. 1990.
〔4〕H.Zima,H.Bast, and M.Gerndt. "SUPERB: A tool for semi-automatic MIMD/SIMD parallelization" in Parallel Computing, 6:1-18, 1988.
〔5〕A.Rogers and K.Pingali. "Process Decomposition Through Locality ofReference" in Proc. ACM SIG-PLAN '89 Conf. Programming Language Desigh and Implementation, pp.69-80, June. 1989.
〔6〕C.Koelbel and P.Mehrotra. "Compiling global Name-Space Parallel Loops for Distributed Execution" in IEEE Transactions on Parallel and Distributed Systems, pp.440-451, Oct. 1991.
〔7〕進藤達也,岩下英俊,土肥実久,萩原純一. "AP1000を対象としたVPP Fortran 処理系の実現と評価” SWoPP鞆の浦'93HPC研究会, Vol.93-HPC-48-2, pp.9-16, Aug. 1993.
【0010】
【発明が解決しようとする課題】
プログラムのある部分にとって、最適な配列データのデータレイアウトであっても、そのプログラムの別の部分では、最適なものとならないことが起こる。
【0011】
例えば、図19に示すプログラムについて考えてみる。ここで、このプログラム中のDOALLループとは、並列実行可能なDOループを意味する。
このプログラムの最初のループネスト(100)内側のループの並列性を活かすためには、2次元配列Aの2次元目を分散させるデータレイアウトが最適である。すなわち、図16(b)に示すようなデータレイアウトが最適である。これに対して、2番目のループネスト(200)外側のループの並列性を活かすためには、この2次元配列Aの1次元目を分散させるデータレイアウトが最適である。すなわち、図16(a)に示すようなデータレイアウトが最適である。
【0012】
このような配列データの最適データレイアウトのコンフクリトが起こる場合に、従来手法で対処するには次の2つのやり方が考えられる。
すなわち、その1つとしては、一方のプログラム部分に最適なデータレイアウトを決定し、そのデータレイアウトに従ってデータ分散を行ってプログラム全体を実行するという方法である。
【0013】
もう1つとしては、一方のプログラム部分に最適なデータレイアウトを決定し、そのデータレイアウトに従ってデータ分散を行って処理を実行し、もう一方のプログラム部分の処理に入る前に、そのプログラム部分に最適なデータレイアウトを決定し、そのデータレイアウトに従ってデータ分散を変更して処理を実行するという方法である。
【0014】
しかしながら、前者の方法に従うと、一方のプログラム部分では、性能が出るものの、もう一方のプログラム部分では、並列性が活かせないことや通信のオーバーヘッドが大きくなることから、性能が出ないという問題点がある。また、後者の方法に従うと、実行時のデータレイアウトの変更に伴う通信のオーバーヘッドにより性能が低下するという問題点がある。
【0015】
本発明はかかる事情に鑑みてなされたものであって、ソースプログラムに記述される配列データを複数の物理プロセッサに分散配置するときにあって、通信のオーバーヘッドを招くことなく高い並列性を実現する配列データの分散配置を提供する新たなコンパイル処理装置の実現を目的とする。
【0016】
【課題を解決するための手段】
図1に本発明の原理構成を図示する。
図中、1は本発明を具備するコンパイル処理装置であって、ソースプログラムに記述される配列データを複数の物理プロセッサに分散配置しつつ、ソースプログラムをコンパイルすることでオブジェクトを生成するもの、2はコンパイル処理装置1に接続されるソースファイルであって、コンパイル対象となるソースプログラムを格納するもの、3はコンパイル処理装置1に接続されるオブジェクトファイルであって、コンパイル結果のオブジェクトを格納するものである。
【0017】
このコンパイル処理装置1は、本発明を実現するために、検出手段10/割付手段11/配置手段12/分割手段13を備えるコンパイラ4を展開する。
この検出手段10は、本発明の分散処理の対象となる配列データ及びその次元を検出する。割付手段11は、検出手段10の検出した配列データを、検出手段10の検出した次元を分散対象の次元(分散次元)としつつ、規定のアルゴリズムに従って複数の仮想プロセッサに割り付ける。配置手段12は、割付手段11の割り付けた配列データを、ツイストする形態でもって各物理プロセッサに割り付ける。分割手段13は、並列実行の対象となるループを、配置手段12の配置した配列データに合わせて分割して各物理プロセッサに割り付ける。
【0018】
【作用】
本発明では、検出手段10が、本発明の分散処理の対象となる配列データ及びその次元を検出すると、割付手段11は、物理プロセッサの台数がn台のときにあって、例えば、分散対象の配列データが2次元であるときには(n×n)台、3次元であるときには(n×n×n)台というような複数の仮想プロセッサを想定して、検出手段10の検出した配列データを、検出手段10の検出した次元を分散次元としつつ、規定のアルゴリズムに従ってこれらの仮想プロセッサに割り付ける処理を行う。例えば、ブロック単位やサイクリックのアルゴリズムに従って割り付けるのである。
【0019】
割付手段11の処理に従って分散対象の配列データが仮想プロセッサに割り付けられると、続いて、配置手段12は、この仮想プロセッサ上の配列データをツイストする形態でもって各物理プロセッサに割り付ける処理を行う。
【0020】
このツイスト分散処理は、仮想プロセッサの集合をV、物理プロセッサの集合をP、仮想プロセッサの次元数をm、分散対象の配列データのk次元目のサイズをlk 、物理プロセッサの台数をn、すなわち、
【0021】
【数1】
Figure 0003540837
【0022】
のように表すならば、
【0023】
【数2】
Figure 0003540837
【0024】
の変換式に従って実行される。
例えば、4×4(l1=4,l2=4 )の2次元配列Aと、4台の物理プロセッサ(p=0,1,2,3)と、次元数2(m=2)の4×4台の仮想プロセッサとを想定して、図2の上段に示すように、これらの仮想プロセッサv1,v2(v1=0,1,2,3/v2=0,1,2,3)の各々に、2次元配列データAの配列要素A(i,j) が割り付けられたとすると、例えば、「v1=2,v2=3 」に割り付けられた配列要素A(2,3) は、この〔数2〕式に従い、
(2+3)mod4=1
が指す「p=1」の物理プロセッサに割り付けられることになる。
【0025】
この変換処理に従って、図2の上段のように仮想プロセッサに割り付けられた2次元配列データAは、図2の下段に示すように、本来の2次元配列データAをツイストした形態で物理プロセッサに割り付けられることになる。従って、2次元配列データAの1次元目と2次元目の双方が物理プロセッサに分散されることとなって、例えば、配列要素A(0,0),A(1,0),A(2,0),A(3,0) がそれぞれ別の物理プロセッサに割り付けられるとともに、配列要素A(0,0),A(0,1),A(0,2),A(0,3) がそれぞれ別の物理プロセッサに割り付けられることになるので、最適なデータ分散のコンフクリトを防止できるようになる。
【0026】
配置手段12の処理に従って配列データがツイストする形態でもって各物理プロセッサに割り付けられると、続いて、分割手段13は、並列実行の対象となるループを、配置手段12の配置した配列データに合わせて分割して各物理プロセッサに割り付ける。
【0027】
このようにして、本発明によれば、ソースプログラムに記述される配列データを複数の物理プロセッサに分散配置するときにあって、通信のオーバーヘッドを招くことなく高い並列性を実現する配列データの分散配置を提供できるようになる。
【0028】
【実施例】
以下、実施例に従って本発明を詳細に説明する。
図3に、本発明を実装する計算機システムのシステム構成を図示する。
【0029】
この図に示すように、本発明を実現する計算機システムは、全体の制御処理や入出力処理を実行するホスト計算機20と、並列処理を実行する複数のプロセッサ21と、ホスト計算機20とプロセッサ21との間を接続するネットワーク22とから構成される。なお、以下では、プロセッサ21のことを物理プロセッサ21と称することがある。
【0030】
このホスト計算機20は、本発明により構成されるコンパイラ23を備えて、このコンパイラ23を使って実行対象のプログラムをコンパイルして、ネットワーク22を介して各プロセッサ21にロードし、このロード処理を受けて、各プロセッサ21は、ネットワーク22を介して他プロセッサ21と通信しつつ、ロードされたプログラムを並列実行していくよう処理することになる。
【0031】
図4に、このコンパイラ23の実行する処理フローの一実施例を図示する。
この図に示すように、本発明により構成されるコンパイラ23は、先ず最初に、ステップ1で、分散対象となる配列データ及びその次元を決定するローカルデータレイアウト決定処理を実行し、続いて、ステップ2で、ツイスト分散対象となる配列データ及びその次元を決定するツイストデータレイアウト決定処理を実行し、続いて、ステップ3で、ツイスト分散対象の配列データを各物理プロセッサ21にどのようにアロケーションするのかを決定するデータ領域計算処理を実行し、続いて、ステップ4で、ツイスト分散対象の配列データを分散して各物理プロセッサ21に割り付けるアドレス変換処理を実行し、続いて、ステップ5で、並列実行対象のループを分割して各物理プロセッサ21に割り付けるループ分割処理を実行する。
【0032】
次に、これらの各処理について詳細に説明する。
図4の処理フローのステップ1で実行するローカルデータレイアウト決定処理では、分散対象となる配列データ及びその次元を決定する。
【0033】
この決定処理は、プログラマに対して、ループネスト毎にそこでアクセス対象となっている配列データの分散方法を指定させる構成を採る場合には、その指定値を検出することで実行する。
【0034】
例えば、プログラマに対して、「!DISTRIBUTE 配列名 次元名」を記述させることで配列データの分散方法を指定させる構成を採る場合には、このディレクティブを検出することで、それぞれのループにおける分散対象の配列データ及びその次元を決定するのである。図5のプログラム例で説明するならば、「!DISTRIBUTE A 2」を検出することで、ループネスト100において配列データAの2次元目を分散する必要があるということを決定するとともに、「!DISTRIBUTE A 1」を検出することで、ループネスト200において配列データAの1次元目を分散する必要があるということを決定することになる。
【0035】
また、この決定処理は、プログラマに対して配列データの分散方法を指定させる構成を採らない場合には、並列実行可能なループの添え字を評価することで実行する。
【0036】
その方法の1つとして、並列実行可能なループの添え字が、ループボディ内に記述される配列データの特定の次元のみに表れるか否かをチェックして、表れる場合には、その配列データをその次元を分散次元にして分散するということを決定するのである。この決定方法に従って、図5のプログラムで「!DISTRIBUTE」が記述されていなくても、ループネスト100において配列データAの2次元目を分散する必要があるということと、ループネスト200において配列データAの1次元目を分散する必要があるということを決定できることになる。
【0037】
また、別の方法として、並列実行可能なループの添え字が、ループボディ内に記述される配列データの複数の次元に表れる場合に、最も出現頻度の高い次元を検出して、その配列データをその次元を分散次元にして分散するということを決定するのである。
【0038】
一方、図4の処理フローのステップ2で実行するツイストデータレイアウト決定処理では、ツイスト分散対象となる配列データ及びその次元を決定する。
この決定処理は、プログラマに対して、配列データのツイスト法を指定させる構成を採る場合には、その指定値を検出することで実行する。
【0039】
例えば、プログラマに対して、「!TWIST 配列名,次元名,・・,次元名」を記述させることで配列データのツイスト法を指定させる構成を採る場合には、このディレクティブを検出することで、ツイスト対象の配列データ及びその次元を決定するのである。例えば、「!TWIST A,1,2」を検出するときには、配列データAの1次元目と2次元目とを処理対象にしてツイストするということを決定することになる。
【0040】
また、この決定処理は、プログラマに対して配列データのツイスト法を指定させる構成を採らない場合には、ローカルデータレイアウト決定処理で決定した配列データ/次元を評価することで実行する。
【0041】
具体的には、ローカルデータレイアウト決定処理で決定した配列データ/次元を配列データ毎に集め、各配列データについて、異なるループネストで異なる次元の分散要求があるか否かをチェックして、ある場合には、その配列データとそれらの次元とをツイスト対象として決定するのである。例えば、ローカルデータレイアウト決定処理に従って、図5のプログラム中のループネスト100において配列データAの2次元目を分散する要求があるということと、ループネスト200において配列データAの1次元目を分散する要求があるということが決定されると、この決定を受けて、配列データAの1次元目と2次元目とをツイスト対象として決定することになる。
【0042】
また、この決定処理は、プログラマに対して配列データのツイスト法を指定させる構成を採らないとともに、ローカルデータレイアウト決定処理で決定した配列データ/次元を用いない場合には、1つのループネストに着目して、並列実行可能なループの添え字が、同一ループボディ内の異なるステートメントで同一配列データの異なる次元に表れる否かをチェックして、表れる場合には、その配列データとそれらの次元とをツイスト対象として決定する。図6のプログラム例で説明するならば、「statement 1」では並列実行可能なループの添え字Jが配列データAの2次元目に表れ、「statement 2」ではこの添え字Jが配列データAの1次元目に表れるので、配列データAの1次元目と2次元目とをツイスト対象として決定するのである。
【0043】
一方、図4の処理フローのステップ3で実行するデータ領域計算処理では、ツイストデータレイアウト決定処理で決定されたツイスト分散対象の配列データを、各物理プロセッサ21にどのようにアロケーションするのかを決定する。
【0044】
この決定処理は、物理プロセッサ21の台数をn、ツイスト分散対象の配列データAの次元数をN、この配列データAの次元iのサイズをDi で表すならば、各次元のサイズがnのm次元仮想プロセッサを想定することで実行されるものであって、先ず最初に、各仮想プロセッサに、
【0045】
【数3】
Figure 0003540837
【0046】
により算出されるサイズMi を持つ配列データA'(M1,・・・ ,N )を割り付け、続いて、m次元の仮想プロセッサから1次元の物理プロセッサ21に対して、
【0047】
【数4】
Figure 0003540837
【0048】
で規定される個数分の下記の配列データ
A''(M1,・・・ ,N ,n,・・・・,n)
但し、nは(m−1)個
をアロケートすることで実行する。
【0049】
この決定処理は、要するに、ツイスト分散対象の配列データAを仮想プロセッサに等分配する形態で割り付けてから、「n×(m−1)」台の仮想プロセッサの持つ配列データAを1台の物理プロセッサ21に割り付けていくことを意味している。
【0050】
例えば、図7の上段に示すような8×8サイズの2次元配列データAがツイスト分散対象であるとすると、物理プロセッサ21が4台である場合、図7の中段に示すように、各次元のサイズが4の2次元仮想プロセッサ(16台)を想定して、〔数3〕式に従って「Mi =2」を求めることで、各仮想プロセッサに、2×2サイズの分割した2次元配列データAを割り付けることを決定し、〔数4〕式に従って、「4×(2−1)=4」を求めることで、図7の下段に示すように、4台の仮想プロセッサの持つ配列データAを1台の物理プロセッサ21に割り付けることを決定するのである。
【0051】
一方、図4の処理フローのステップ4で実行するアドレス変換処理では、データ領域計算処理でのアロケーション結果を踏まえて、ツイストデータレイアウト決定処理で決定されたツイスト分散対象の配列データ(処理対象の次元についても決定されている)を分散して、各物理プロセッサ21に割り付けるアドレス変換処理を実行する。
【0052】
このアドレス変換処理は、先ず最初に、配列データAの配列インデックスを使って、割り付け先となる仮想プロセッサの番号と、その仮想プロセッサ内でのローカル位置番号とを求め、次に、仮想プロセッサの番号を使って、割り付け先となる物理プロセッサ21の番号と、その物理プロセッサ21内でのローカル位置番号とを求めていくことで実行する。
【0053】
すなわち、配列データAの配列インデックスを(I1,・・・,IN )、仮想プロセッサの番号を(V1,・・・,Vm )、仮想プロセッサ内でのローカル位置番号を(I1 ' ・・・,IN ' )、物理プロセッサ21の番号をp、物理プロセッサ21内でのローカル位置番号を(J1,・・・,Jm-1 )で表すならば、
【0054】
【数5】
Figure 0003540837
【0055】
のように、第1段階の変換処理fX に従って、配列データAの配列インデックスから、割り付け先となる仮想プロセッサ番号と、仮想プロセッサ内ローカル位置番号とを求め、次に、第2段階の変換処理fY に従って、仮想プロセッサ番号から、割り付け先となる物理プロセッサ番号と、その物理プロセッサ内ローカル位置番号とを求めていくのである。なお、物理プロセッサ内ローカル位置で、更に、その位置内のどこに割り付けるのかを指定する必要があるが、この位置(以下、ローカル内部位置と称することがある)については、〔数5〕式に記述するように、仮想プロセッサ内ローカル位置番号をそのまま用いている。
【0056】
この第1段階の変換処理fX では、上述したブロック割付方式によるデータ分散方法を用いる場合には、ツイストデータレイアウト決定処理で決定された次元をi次元で表すならば、データ領域計算処理で求めたサイズMi を用いて、
【0057】
【数6】
Figure 0003540837
【0058】
に従って、配列データAの配列インデックス(I1,・・・,IN )から、仮想プロセッサ番号(V1,・・・,Vm )と、仮想プロセッサ内ローカル位置番号(I1 ' ・・・,IN ' )とを求め、一方、上述したサイクリック割付方式によるデータ分散方法を用いる場合には、
【0059】
【数7】
Figure 0003540837
【0060】
に従って、配列データAの配列インデックス(I1,・・・,IN )から、仮想プロセッサ番号(V1,・・・,Vm )と、仮想プロセッサ内ローカル位置番号(I1 ' ・・・,IN ' )とを求めていくことになる。
【0061】
例えば、図8の上段に示す8×8サイズの2次元配列データAが、1次元目及び2次元目を処理対象として指定されブロック分割されて、図7に示した16台の仮想プロセッサに割り付けられる場合には、この2次元配列データAの各配列要素は、図8の下段に示すように仮想プロセッサに割り付けられることになるが、第1段階の変換処理fX では、上述の〔数6〕式に従ってこれを実行するものである。なお、図8の下段に示す仮想プロセッサの番号は、図2に示したものと同じものである。
【0062】
配列データA(3,4)を例にして説明するならば、図7の所で説明したように、この例の場合には「M1 =M2 =2」であることから、〔数6〕式に、「I1 =3,I2 =4,M1 =2,M2 =2」を代入することで、「V1 =1,V2 =2」の仮想プロセッサ番号が求められるとともに、「I1 ' =1,I2 ' =0」の仮想プロセッサ内ローカル位置番号(仮想プロセッサ番号と同様にマトリクス位置で定義される)が求められることで、図8のブロック分割処理が実行されるのである。
【0063】
また、例えば、図9の上段に示すような8×8サイズの2次元配列データAが、1次元目及び2次元目を処理対象として指定されサイクリック分割されて、図7に示した16台の仮想プロセッサに割り付けられる場合には、この2次元配列データAの各配列要素は、図9の下段に示すように仮想プロセッサに割り付けられることになるが、第1段階の変換処理fX では、上述の〔数7〕式に従ってこれを実行するものである。なお、図9の下段に示す仮想プロセッサの番号は、図2に示したものと同じものである。
【0064】
配列データA(3,4)を例にして説明するならば、〔数7〕式に、「I1 =3,I2 =4,n=4」を代入することで、「V1 =3,V2 =0」の仮想プロセッサ番号が求められるとともに、「I1 ' =0,I2 ' =1」の仮想プロセッサ内ローカル位置番号が求められることで、図9のサイクリック分割処理が実行されるのである。
【0065】
一方、この第2段階の変換処理fy では、
【0066】
【数8】
Figure 0003540837
【0067】
に従って、仮想プロセッサ番号(V1,・・・,Vm )から、物理プロセッサ21の番号pと、その物理プロセッサ21内でのローカル位置番号(J1,・・・,Jm-1 )とを求めていくことになる。
【0068】
例えば、図10の上段に示す割付形態で仮想プロセッサに割り付けられた2次元配列データAの各配列要素(図8の下段に示すものと同じ割付形態である)は、この第2段階の変換処理fy で、図10の下段に示すように物理プロセッサ21に割り付けられることになる。
【0069】
仮想プロセッサ番号「V1 =1,V2 =2」、仮想プロセッサ内ローカル位置番号「I1 ' =1,I2 ' =0」に割り付けられた配列データA(3,4)を例にして説明するならば、〔数8〕式に、「V1 =1,V2 =2,n=4」を代入することで、「p=3」の物理プロセッサ番号が求められるとともに、「J1 =1」の物理プロセッサ内ローカル位置(順番位置で定義される)が求められ、そして、上述したように、物理プロセッサ内ローカル位置でのローカル内部位置については、仮想プロセッサ内ローカル位置番号がそのまま用いられるので、「I1 ' =1,I2 ' =0」のローカル内部位置が求められるのである。
【0070】
また、例えば、図11の上段に示す割付形態で仮想プロセッサに割り付けられた2次元配列データの各配列要素(図9の下段に示すものと同じ割付形態である)は、この第2段階の変換処理fy で、図11の下段に示すように物理プロセッサ21に割り付けられることになる。
【0071】
仮想プロセッサ番号「V1 =3,V2 =0」、仮想プロセッサ内ローカル位置番号「I1 ' =0,I2 ' =1」に割り付けられた配列データA(3,4)を例にして説明するならば、〔数8〕式に、「V1 =3,V2 =0,n=4」を代入することで、「p=3」の物理プロセッサ番号が求められるとともに、「J1 =3」の物理プロセッサ内ローカル位置が求められ、そして、上述したように、物理プロセッサ内ローカル位置でのローカル内部位置については、仮想プロセッサ内ローカル位置番号がそのまま用いられるので、「I1 ' =0,I2 ' =1」のローカル内部位置が求められるのである。
【0072】
この第2段階の変換処理fy で用いる〔数8〕式の第1番目の式は、〔作用〕の欄で説明した〔数1〕式と同一のものである。
すなわち、図4の処理フローのステップ4で実行するアドレス変換処理は、要するに、第1段階の変換処理fx で、ツイストデータレイアウト決定処理で決定された配列データを、ツイストデータレイアウト決定処理で決定された次元を分割次元として、ブロック割付方式やサイクリック割付方式に従って仮想プロセッサに割り付け、次に、第2段階の変換処理fy で、仮想プロセッサに割り付けた配列データを、図2に示すようにツイストする形態で物理プロセッサ21に割り付けていくものである。
【0073】
この処理に従って、最適なデータ分散のコンフクリトの防止を実現できるのである。
一方、図4の処理フローのステップ5で実行するループ分割処理では、アドレス変換処理での配列データの分散結果を踏まえて、並列実行対象のループを分割して各物理プロセッサ21に割り付けるループ分割処理を実行する。
【0074】
例えば、図12に示すようなm重ループが与えられ、この内のil が並列ループで、各ループがそれぞれ仮想プロセッサの各次元に割り付けられるとすると、各物理プロセッサ21におけるループが、図13に示すような(m×2−1)重ループとなるようにとコードジェネレーションを行うのである。ここで、il 以外の全てのループは、仮想プロセッサのインデックスを表すループと、その仮想プロセッサ内の配列インデックスを表すループにストリップマインされることになる。
【0075】
このループ分割処理で用いる図13中のL(Vk )/U(Vk )/Vl について説明する。
このループ分割処理で用いるL(Vk )は、仮想プロセッサ内の配列インデックスの下限値、U(Vk )は、仮想プロセッサ内の配列インデックスの上限値を表しており、アドレス変換処理でブロック割付方式を用いる場合には、
【0076】
【数9】
Figure 0003540837
【0077】
の式で導出され、サイクリック割付方式を用いる場合には、
【0078】
【数10】
Figure 0003540837
【0079】
の式で導出される。ここで、Vk は仮想プロセッサ番号、Mk は仮想プロセッサに割り付けられる配列データのブロックサイズ、Nk は配列データのk次元目のサイズから1を引いた値、Sは飛び幅を表している。
【0080】
ブロック割付方式により図10の上段に示す割付形態でもって仮想プロセッサに割り付けられた8×8サイズの2次元配列データで説明するならば、例えば、仮想プロセッサ番号「V1 =1,V2 =0」の仮想プロセッサには、〔数9〕式に、「V1 =1,V2 =0,M1 =2,M2 =2,N1 =7,N2 =7」を代入することで、
L(V1 )=2,U(V1 )=3,L(V2 )=0,U(V2 )=1
という上下限値を持つ配列インデックスが展開されていることが分かる。なお、このときの配列インデックスの飛び幅は1である。
【0081】
また、サイクリック割付方式により図11の上段に示す割付形態でもって仮想プロセッサに割り付けられた8×8サイズの2次元配列データで説明するならば、例えば、仮想プロセッサ番号「V1 =1,V2 =0」の仮想プロセッサには、〔数10〕式に、「V1 =1,V2 =0,N1 =7,N2 =7」を代入することで、
L(V1 )=1,U(V1 )=5,L(V2 )=0,U(V2 )=4
という上下限値を持つ配列インデックスが展開されていることが分かる。なお、このときの配列インデックスの飛び幅は4である。
【0082】
一方、このループ分割処理で用いるVl は、物理プロセッサ21の担当する仮想プロセッサのインデックスを表しており、
【0083】
【数11】
Figure 0003540837
【0084】
の式で導出される。ここで、pは物理プロセッサ番号、nは物理プロセッサ台数、Vk は仮想プロセッサ番号である。
【0085】
上述したように、ループ分割処理では、並列実行対象のループを分割して図13に示すようなコードを生成する処理を実行する。
例えば、図19に示す2重ループのプログラムが、図8の上段に示す8×8サイズの2次元配列データを処理するときにあって、アドレス変換処理で、ブロック割付方式を用いる場合には、このループ分割処理では、図14に示すようなコードを生成するのである。
【0086】
この場合、L(Vk )は、
L(Vk )=2×Vk
と表され、U(Vk )は、
U(Vk )=2×(Vk +1)−1
と表され、〔数11〕式は、
1 =(p+(4−V2 ))mod4
2 =(p+(4−V1 ))mod4
と表される。
【0087】
従って、「p=0」の物理プロセッサ21が担当する仮想プロセッサは、この〔数11〕式に、「p=0,V1 =0」を代入することで特定される「V1 =0,V2 =0」の仮想プロセッサと、「p=0,V1 =1」を代入することで特定される「V1 =1,V2 =3」の仮想プロセッサと、「p=0,V1 =2」を代入することで特定される「V1 =2,V2 =2」の仮想プロセッサと、「p=0,V1 =3」を代入することで特定される「V1 =3,V2 =1」の仮想プロセッサとであることが分かる。すなわち、〔数11〕式に従って、物理プロセッサ21の担当する仮想プロセッサを特定できるのである。
【0088】
このようにして、このループ分割処理では、仮想プロセッサ内の配列インデックスの下限値L(Vk )と、仮想プロセッサ内の配列インデックスの上限値U(Vk )と、物理プロセッサ21の担当する仮想プロセッサのインデックスを特定する〔数11〕式とを使いつつ、要するに、アドレス変換処理での配列データの分散結果を踏まえて、並列実行対象のループを分割して各物理プロセッサ21に割り付けていく処理を実行するのである。
【0089】
図示実施例に従って本発明を詳細に説明したが、本発明はこれに限定されるものではない。例えば、実施例で使用した数値はあくまで一例に過ぎないものである。
【0090】
【発明の効果】
以上説明したように、本発明によれば、ソースプログラムに記述される配列データを複数の物理プロセッサに分散配置するときにあって、最適なデータ分散方法がコンフリクトするときには、配列データをツイストして物理プロセッサに分散配置することで、このコンフリクトを解消するようにとコンパイル処理するものである。
【0091】
これから、通信のオーバーヘッドを招くことなく高い並列性を実現する配列データの分散配置を提供できるようになる。
【図面の簡単な説明】
【図1】本発明の原理構成図である。
【図2】ツイスト分散処理の説明図である。
【図3】本発明を実装する計算機システムのシステム構成図である。
【図4】本発明のコンパイラが実行する処理フローの一実施例である。
【図5】分散方法の指定されるプログラムの一例である。
【図6】ツイスト対象となるプログラムの一例である。
【図7】データ領域計算処理の説明図である。
【図8】アドレス変換処理の説明図である。
【図9】アドレス変換処理の説明図である。
【図10】アドレス変換処理の説明図である。
【図11】アドレス変換処理の説明図である。
【図12】ループ分割処理の説明図である。
【図13】ループ分割処理の説明図である。
【図14】ループ分割処理の説明図である。
【図15】プログラムの一例である。
【図16】従来技術の説明図である。
【図17】従来技術の説明図である。
【図18】従来技術の説明図である。
【図19】最適データ分散がコンフリクトを起こすプログラム例である。
【符号の説明】
1 コンパイル処理装置
2 ソースファイル
3 オブジェクトファイル
4 コンパイラ
10 検出手段
11 割付手段
12 配置手段
13 分割手段

Claims (10)

  1. ソースプログラムに記述される配列データを複数の物理プロセッサに分散配置するコンパイル処理装置において、
    分散配置の対象となる配列データを分割するとともに、この分割配列データをツイストする形態でもって各物理プロセッサに割り付ける配置手段を備えることを、
    特徴とするコンパイル処理装置。
  2. ソースプログラムに記述される配列データを複数の物理プロセッサに分散配置するコンパイル処理装置において、
    分散配置の対象となる配列データを、指定される次元を分散対象の次元としつつ、規定のアルゴリズムに従って複数の仮想プロセッサに割り付ける割付手段(11)と、
    上記割付手段(11)の割り付けた分割配列データを、ツイストする形態でもって各物理プロセッサに割り付ける配置手段(12)とを備えることを、
    特徴とするコンパイル処理装置。
  3. 請求項2記載のコンパイル処理装置において、
    割付手段(11)は、配列データをブロック単位に仮想プロセッサに割り付けるよう処理することを、
    特徴とするコンパイル処理装置。
  4. 請求項2記載のコンパイル処理装置において、
    割付手段(11)は、配列データをサイリックに仮想プロセッサに割り付けるよう処理することを、
    特徴とするコンパイル処理装置。
  5. 請求項2ないし4記載のコンパイル処理装置において、
    並列実行の対象となるループを、配置手段(12)の配置した配列データに合わせて分割して各物理プロセッサに割り付ける分割手段(13)を備えることを、
    特徴とするコンパイル処理装置。
  6. 請求項2ないし5記載のコンパイル処理装置において、
    配列データ名及び次元名を指定する配列データ分散指示のソースプログラム記述を検出する検出手段(10)を備え、
    上記検出手段(10)の検出するプログラム記述が異なるループネストで同一配列データの異なる次元の分散指示を表示するときには、該配列データ及び該次元を指定して割付手段(11)を起動していくよう構成されることを、
    特徴とするコンパイル処理装置。
  7. 請求項2ないし5記載のコンパイル処理装置において、
    ソースプログラムに記述される並列実行可能なループの添え字が、ループボディ内に記述される配列データの特定の次元のみに表れる場合に、その次元を検出する検出手段(10)を備え、
    上記検出手段(10)が異なるループネストで同一配列データの異なる次元を検出するときには、該配列データ及び該次元を指定して割付手段(11)を起動していくよう構成されることを、
    特徴とするコンパイル処理装置。
  8. 請求項2ないし5記載のコンパイル処理装置において、
    ソースプログラムに記述される並列実行可能なループの添え字が、ループボディ内に記述される配列データの複数の次元に表れる場合に、最も出現頻度の高い次元を検出する検出手段(10)を備え、
    上記検出手段(10)が異なるループネストで同一配列データの異なる次元を検出するときには、該配列データ及び該次元を指定して割付手段(11)を起動していくよう構成されることを、
    特徴とするコンパイル処理装置。
  9. 請求項2ないし5記載のコンパイル処理装置において、
    配列データ名及び次元名を指定する配列データツイスト指示のソースプログラム記述を検出する検出手段(10)を備え、
    上記検出手段(10)の検出するプログラム記述が指定する配列データ及び次元を指定して割付手段(11)を起動していくよう構成されることを、
    特徴とするコンパイル処理装置。
  10. 請求項2ないし5記載のコンパイル処理装置において、
    ソースプログラムに記述される並列実行可能なループの添え字が、同一ループボディ内の異なるステートメントで同一配列データの異なる次元に表れる場合に、それらの次元を検出する検出手段(10)を備え、
    上記検出手段(10)の検出する配列データ及び次元を指定して割付手段(11)を起動していくよう構成されることを、
    特徴とするコンパイル処理装置。
JP10261094A 1994-05-17 1994-05-17 コンパイル処理装置 Expired - Fee Related JP3540837B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP10261094A JP3540837B2 (ja) 1994-05-17 1994-05-17 コンパイル処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP10261094A JP3540837B2 (ja) 1994-05-17 1994-05-17 コンパイル処理装置

Publications (2)

Publication Number Publication Date
JPH07311746A JPH07311746A (ja) 1995-11-28
JP3540837B2 true JP3540837B2 (ja) 2004-07-07

Family

ID=14332016

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10261094A Expired - Fee Related JP3540837B2 (ja) 1994-05-17 1994-05-17 コンパイル処理装置

Country Status (1)

Country Link
JP (1) JP3540837B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2925187B1 (fr) * 2007-12-14 2011-04-08 Commissariat Energie Atomique Systeme comportant une pluralite d'unites de traitement permettant d'executer des taches en parallele,en mixant le mode d'execution de type controle et le mode d'execution de type flot de donnees

Also Published As

Publication number Publication date
JPH07311746A (ja) 1995-11-28

Similar Documents

Publication Publication Date Title
US6681388B1 (en) Method and compiler for rearranging array data into sub-arrays of consecutively-addressed elements for distribution processing
Ben-Nun et al. Memory access patterns: The missing piece of the multi-GPU puzzle
Anderson et al. Global optimizations for parallelism and locality on scalable parallel machines
Lee et al. Early evaluation of directive-based GPU programming models for productive exascale computing
Ramanujam et al. Tiling of Iteration Spaces for Multicomputers.
Amarasinghe et al. An overview of a compiler for scalable parallel machines
Agrawal et al. Compiler and runtime support for structured and block structured applications
Hurson et al. Parallelization of doall and doacross loops—a survey
Agrawal et al. Interprocedural compilation of irregular applications for distributed memory machines
Banerjee et al. The PARADIGM compiler for distributed-memory message passing multicomputers
Lobeiras et al. BPLG: A tuned butterfly processing library for GPU architectures
Benkner et al. High-level management of communication schedules in HPF-like languages
Harris et al. Compiling High Performance Fortran for distributed-memory systems
JP3540837B2 (ja) コンパイル処理装置
Shirazi et al. PARSA: A parallel program scheduling and assessment environment
Plata et al. Combining static and dynamic scheduling on distributed-memory multiprocessors
Ejjaaouani et al. , a Programming Model to Decouple Performance from Algorithm in HPC Codes
JP5120778B2 (ja) 分散メモリ型マルチプロセッサシステム、マスク付き逆シフト通信方法及びプログラム
Diavastos et al. Auto-tuning static schedules for task data-flow applications
Wang et al. A divide-and-conquer algorithm for irregular redistribution in parallelizing compilers
Danelutto et al. Parallel programming models based on restricted computation structure approach
DONGEN Compiling distributed loops onto SPMD code
Bozkus et al. Compiling hpf for distributed memory mimd computers
Moreira et al. A system for dynamic resource allocation and data distribution
Ribeiro et al. Minas: Memory Affinity Management Framework

Legal Events

Date Code Title Description
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: 20040323

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040326

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20080402

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090402

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20090402

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100402

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20110402

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20110402

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees