JP3544565B2 - データ転送方法とその装置 - Google Patents
データ転送方法とその装置 Download PDFInfo
- Publication number
- JP3544565B2 JP3544565B2 JP16790594A JP16790594A JP3544565B2 JP 3544565 B2 JP3544565 B2 JP 3544565B2 JP 16790594 A JP16790594 A JP 16790594A JP 16790594 A JP16790594 A JP 16790594A JP 3544565 B2 JP3544565 B2 JP 3544565B2
- Authority
- JP
- Japan
- Prior art keywords
- transfer
- data
- stride
- pattern
- data transfer
- 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
Links
Images
Landscapes
- Multi Processors (AREA)
- Devices For Executing Special Programs (AREA)
Description
【産業上の利用分野】
本発明は情報処理装置におけるデータ転送に係り、さらに詳しくは、分散メモリ型並列計算機システムにおいて不連続に格納されたデータの転送方法とその装置に関する。
【0002】
【従来の技術】
近年、計算機の計算性能向上に対する要求は日増しに高くなり、この要求に答えるために複数のプロセッサが並列に処理を行う並列計算機が作られるようになってきた。初期においては複数のプロセッサがメモリを共有する共有メモリ型並列計算機が主流であったが、今日ではより並列性の高いプログラムに対して多くのプロセッサを実装するために、各プロセッサがそれぞれ別のメモリを持つ分散メモリ型並列計算機が作られるようになってきている。
【0003】
このような分散メモリ型並列計算機では、1種類のデータを格納した変数を複数のプロセッサのメモリに分散して持たせ、それぞれのプロセッサが極力自己のメモリ内に持っているデータに関してのみ計算を行うようプログラミングをして高速化を図っている(プロセッサローカル)。
【0004】
しかし実際には、一般的なプログラムの場合に全ての演算をプロセッサローカルで計算することはできず、他のプロセッサの持っているデータを必要とすることがある。このとき、必要なデータを持っているプロセッサからそのデータを必要としているプロセッサへの通信が必要だが、この通信に要する時間は本来の計算処理に対するオーバヘッドとなる。
【0005】
一般に分散メモリ型並列計算機の通信には、1回毎に送信先を指定したり、ネットワークとの接続を指定したりする処理等の立ち上がりオーバヘッドが存在する。このため、通信により転送されるデータの総量が等しければ、その通信回数が少ないほど全体の通信時間を短縮することができる。そこで、従来から1回の通信でより多くのデータを送れるように、メモリ上の連続領域内のデータはまとめて転送し、不連続な幾つかの領域にまたがるデータ(不連続データ)はソフトウェアによりパッキングして転送していた。
【0006】
【発明が解決しようとする課題】
しかしながら、従来の不連続データ転送方法では、送信側でデータをパッキングしたり、受信側でパッキングされたデータを展開したりする処理のオーバヘッドが必要であり、高速な通信を行うことができないという問題がある。
【0007】
また、トランスポーズ転送に代表される規則的なパターンで表現されるような不連続データを転送するハードウェアであるストライドデータ転送機構を持っていても、プログラマにより直接その機構を用いた転送処理が記述されなければ使用することはできなかった。
【0008】
このため、このような規則的なパターンの通信であっても、一般には不規則な不連続データの通信と同様に、送信側でデータのパッキングを行い、受信側でパッキングされたデータを展開するような転送を指示するコードをコンパイラが生成していた。したがって、ストライドデータ転送機構が十分に活用されず、規則的なパターンの通信時間が短縮されていなかった。
【0009】
本発明は、情報処理装置における不連続データの転送を高速に行うデータ転送方法とその装置を提供することを目的とする。さらに詳しくは、ストライドデータ転送機構を用いるための通信コードをコンパイラが出力することにより高速な通信を行い、分散メモリ型並列計算機システム等のパフォーマンスを向上させることを目的とする。
【0010】
【課題を解決するための手段】
本発明は、ループなどにより規則的なパターンとして表現される不連続データをストライドデータ転送機構などのハードウェアにより転送する方法とその装置である。
【0011】
図1は、本発明のデータ転送方法を示す原理図である。
本発明のデータ転送方法においては、まずデータ転送を伴う処理を記述し(ステップST1)、記述された処理から転送対象データを指定するパラメータを生成し(ステップST2)、ハードウェアがサポートする転送パターンを求める演算式を生成する(ステップST3)。
【0012】
そして、生成されたパラメータと演算式とを用いて転送パターンを生成し、得られた転送パターンをハードウェアに与えて、転送対象データの転送を行わせる(ステップST4)。
【0013】
転送対象データを指定するパラメータは、例えばループの開始インデックス、終了インデックス、連続する2つのインデックスの間隔等に対応する値であり、転送パターンは、例えばストライドデータ転送機構がサポートする不連続データの転送単位の大きさ、転送単位の数、最初の転送単位の位置、2つの転送単位の間隔等により指定される。
【0014】
本発明では、データ転送を伴う処理のコンパイル時にコンパイラが転送パターンを生成するか、またはプログラムの実行時に自動的に転送パターンを生成させるコードを生成する。後者の場合には、そのコードの実行時にライブラリ等が必要な転送パターンを生成する。
本発明の第1のデータ転送方法では、情報処理装置が、ソースプログラムのコンパイル時に、ソースプログラムの記述にしたがって転送対象データを指定するパラメータを生成し、そのパラメータと演算式を用いてストライドデータ転送機構の転送パターンを生成し、その転送パターンとストライドデータ転送機構を用いたデータ転送を指示するストライド転送コードを生成する。そして、並列計算機システムが、生成されたストライド転送コードの実行時に、転送パターンをストライドデータ転送機構に与えて、転送対象データの転送を行わせる。
本発明の第2のデータ転送方法では、情報処理装置が、ソースプログラムのコンパイル時に、ストライドデータ転送機構の転送パターンの生成を指示する転送パターン生成コードを生成する。そして、並列計算機システムが、生成された転送パターン生成コードの実行時に、転送対象データを指定するパラメータと演算式を用いて転送パターンを生成し、その転送パターンをストライドデータ転送機構に与えて、転送対象データの転送を行わせる。
【0015】
【作用】
コンパイラまたはプログラム実行時のライブラリ等が、転送対象データを指定するパラメータと転送パターンを求める演算式とを自動的に生成するので、個々の転送対象データに応じた転送パターンを計算することができる。
【0016】
また、転送パターンを自動的に生成して、ストライドデータ転送機構などのハードウェアに与えるので、プログラム実行時にハードウェアによる不連続データの転送が可能になり、ハードウェアの利用率が向上する。
【0017】
さらに、不連続領域のデータをパッキングした後に展開するという処理が不要になり、高速なデータ転送が行われる。したがって、情報処理装置のパフォーマンスが大きく向上する。
【0018】
【実施例】
以下図面を参照しながら、本発明の実施例について説明する。
図2は、本発明のデータ転送方法を用いる分散メモリ型並列計算機システムの構成図である。図2において、N個のプロセッサ1−1、1−2、・・・、1−Nはそれぞれに接続されたメモリ2−1、2−2、・・・、2−Nを有し、これらのN個のメモリはネットワーク3により接続されている。
【0019】
各メモリ2−1、2−2、・・・、2−Nの一部はそれぞれローカルメモリ5−1、5−2、・・・、5−Nとして各プロセッサ1−1、1−2、・・・、1−Nが用いるローカル変数等を格納する。また、メモリ2−1、2−2、・・・、2−Nの残りの領域はグローバルメモリ4としてプロセッサ1−1、1−2、・・・、1−Nが共有するグローバル変数等を格納する。
【0020】
N個のプロセッサはグローバルメモリ4と自己の持つローカルメモリにアクセスしながら並列に処理を行い、他のプロセッサの有するデータが必要になるとネットワーク3を介して通信を行う。
【0021】
本実施例では、多次元のデータパターンのうち、各次元についてループインデックスを持ち、お互いに独立なdoループによって記述されるものを対象とする。そして、メモリに格納されたこのデータを処理するソースプログラムをコンパイルするとき、またはそのプログラムを実行したときに、配列の各次元について、メモリ上でのループの開始位置を指定するパラメータと、ループの終了位置を指定するパラメータと、転送すべき配列要素の間隔を指定するパラメータと、対象となる配列データの格納パターンにしたがって解析を行い、ストライドデータ転送のための転送パターン(ストライド転送パターン)を生成する。
【0022】
図3は、本実施例における1次元のデータのストライド転送パターンを示している。本実施例におけるストライドデータ転送では、通信に関わる2つのプロセッサ(ローカルとリモート)のメモリ上で共通の大きさを持つ連続領域を転送単位(斜線部分)とし、この転送単位の大きさをSizeとする。また、ローカル、リモートのそれぞれのメモリ上で、1つの転送単位が現れてから次の転送単位が現れるまでの大きさをStrideとし、転送単位の数mをCount とする。さらに、ストライド転送パターンのメモリ上での開始アドレスをStart として、これらの4つのパラメータStart 、Size、Stride、Count によりストライド転送パターンを指定する。
【0023】
複数次元についてデータが規則的に配置された多次元のストライド転送パターンの場合には、その次元の1つ下の次元のストライド転送パターンを、その次元における転送単位として考える。例えば、2次元のストライド転送パターンにおける転送単位は1次元のストライド転送パターンであり、この1次元のストライド転送パターンの数が2次元のストライド転送パターンにおけるCount となる。
【0024】
Fortranに代表される既存言語における配列変数間のデータ転送のパターンは多くの場合、各次元毎に独立なループインデックスを持ちお互いに独立なdoループによって記述され得るため、このパターンはこれらのループにより規則的に表現できる。また、各次元に対応するストライド転送パターンは互いに直交しているため、各次元毎にStart 、Size、Stride、Count で示されるストライド転送パターンを求めれば、1次元のストライド転送パターンを任意のn次元にまで拡張することもできる。
【0025】
図4は、 Fortranにおけるdoループの一例を示している。図4(a)のdoループは、インデックスiの1から5までの各値について、2次元の配列変数a(1,2*i)の値を1次元の配列変数b(i+1)に書き込む処理を表す。もし、配列変数a(1,2*i)とb(i+1)が同じプロセッサのメモリ内になければ、ネットワーク3を介したデータ転送が必要になる。図4(a)に記述された処理は、並列処理言語の表記による一括データ転送に相当する。
【0026】
図4(b)、(c)のdoループは、それぞれ配列変数a(j,k)、b(h)を有するプロセッサのプログラムにおいて、図4(a)のdoループを標準化した結果を示している。ループの標準化はコンパイラにより行われる。図4(b)、(c)のインデックスiG 、iL はそれぞれ配列変数a(j,k)、b(h)のインデックスk、hに対応しており、インデックスの添字G 、L はそれぞれ図5におけるグローバル変数、ローカル変数に対応している。
【0027】
図4(b)において、iG =2,10,2はdoループの開始位置がiG =2、doループの終了位置がiG =10、doループのインデックスの間隔が2であることを表す。また、図4(c)において、iL =2,6はdoループの開始位置がiL =2、doループの終了位置がiL =6、doループのインデックスの間隔が1であることを表す。doループのインデックスの間隔が1であるときは、このパラメータは省略される。
【0028】
図4(b)のdoループの中の四角は、メモリから読み出されたa(1,iG )の値を送信するために一時格納する記憶域、または直接通信の場合はネットワーク3を表す。図4(c)のdoループの中の四角は、受信したa(1,iG )の値を一時格納する記憶域、または直接通信の場合はネットワーク3を表す。
【0029】
本実施例では、ストライド転送がグローバル変数とローカル変数の2変数間で行われるものとする。ここで、ローカル変数はプロセッサが有するローカルメモリを指すローカル空間にある変数であり、グローバル変数はグローバルメモリ4を指すグローバル空間にある変数である。グローバル変数ではインデックスを指定するとそのオーナーであるプロセッサとメモリ上の格納アドレスは一意に決定される。この条件の下でグローバル変数について、転送対象となる次元の分割形状に応じたストライド転送パターンを生成する。
【0030】
図5は、図4の配列変数a(j,k)、b(h)の格納構造の一例とそれらの間のストライド転送を示している。図5において、a(j,k)(j=1,10、k=1,10)はグローバル変数としてグローバルメモリ4に格納されており、b(h)(h=1,10)はローカル変数としてローカルメモリ5−1〜5−Nのいずれかに格納されている。
【0031】
この場合、変数a(j,k)の最初のインデックスjはメモリ上でデータが連続して格納される方向(1次元方向)のインデックスで、2番目のインデックスkはこれに直交する方向(2次元方向)のインデックスである。また、変数b(h)のインデックスhはメモリ上の連続方向を表す。
【0032】
変数a(j,k)から変数b(h)へ転送すべき配列要素は、i=1、2、3、4、5に対応して斜線で示されたa(1,2)、a(1,4)、a(1,6)、a(1,8)、a(1,10)の5つである。これらのデータは、それぞれb(2)、b(3)、b(4)、b(5)、b(6)に格納される。
【0033】
したがって、図5の1つの枡目に対応するデータが転送単位となり、そのメモリ上の大きさがSizeで、Count は5である。また、グローバル変数におけるStrideは、メモリ上で例えば転送単位a(1,2)が現れてから次の転送単位a(1,4)が現れるまでの大きさであり、ここではSizeの20倍に相当する。グローバル変数におけるStart は転送単位a(1,2)の先頭アドレスである。
【0034】
一方、ローカル変数におけるStrideは、例えばb(2)からb(3)までの大きさでSizeに一致する。ローカル変数におけるStart はb(2)の先頭アドレスである。
【0035】
次に、グローバル変数の転送対象となる次元がそれぞれ異なるプロセッサに属するメモリにブロック分割されている場合のストライド転送パターンの導出方法を説明する。
【0036】
図6は、グローバル変数a(j,k)がブロック分割されている場合のストライド転送を示している。グローバル変数がブロック分割されているときは、アクセス対象のデータ領域を持つプロセッサは分割境界で切り替わる。
【0037】
図6において、グローバル変数a(j,k)はプロセッサ1−1、1−2、1−3によりインデックスkの方向(2次元方向)に3つのブロックに分割されている。k=1〜4の要素はプロセッサ1−1のメモリ2−1に格納され、k=5〜8の要素はプロセッサ1−2のメモリ2−2に格納され、k=9、10の要素はプロセッサ1−3のメモリ2−3に格納されている。そして、k=4とk=5、k=8とk=9の間がそれぞれブロックの分割境界となっている。
【0038】
グローバル変数がブロック分割されているとき、そのローカル変数へのストライド転送パターンのパラメータは、一般に次式により求められる。
【0039】
【数1】
【0040】
(1)式において、elementSize はグローバル変数とローカル変数の双方におけるデータの格納単位の大きさを表し、これがそのままストライド転送パターンにおけるSizeとなる。例えば図6においてはSize=1である。
【0041】
整数m、dに対するLACK(m,d)を定義する(2−1)、(2−2)式において、MOD(m,d)はmをdで割ったときの整数剰余を表す。MOD(m,d)=0のときは(2−1)式によりLACK(m,d)=0であり、MOD(m,d)≠0のときは(2−2)式によりLACK(m,d)=d−MOD(m,d)である。(2−1)、(2−2)式を用いて、LACKG は(2−3)式により定義される。
【0042】
(2−3)、(2−4)、(2−5)式において、 loopStartG はグローバル変数におけるdoループの開始位置を表し、blockStartG は対応するプロセッサに割り当てられたブロックの開始位置を表す。ここで開始位置とは、メモリ上のアドレスに対応する変数のインデックスを意味する。loopStrideG はグローバル変数におけるdoループのインデックスの間隔を表す。
【0043】
グローバル変数におけるアドレス Startに対応する開始位置 StartG を求めるとき、対応するプロセッサのメモリ内に loopStartG があれば(2−4)式を用い、 loopStartG が他のプロセッサのメモリ内にあれば(2−5)式を用いる。
【0044】
図6においては、図4(b)に示されるように loopStartG =2であり、 loopStartG はメモリ2−1内にあるので、プロセッサ1−1については(2−4)式により StartG =2となる。
【0045】
また、図4(b)に示されるようにloopStrideG =2であり、プロセッサ1−2については、図6からblockStartG =5であるので、(2−3)式によりLACKG =LACK(5−2,2)=LACK(3,2)となる。ここで、MOD(3,2)=1≠0であるから、(2−2)式によりLACK(3,2)=2−1=1となる。したがって、プロセッサ1−2については(2−5)式により StartG =5+1=6となる。
【0046】
プロセッサ1−2については図6からblockStartG =9であるので、同様に(2−5)式により StartG =9+LACK(9−2,2)=10となる。逆に StartG が決まると、対応するプロセッサの識別子も特定される。
【0047】
(3)式において、 blocksizeG は隣の要素までのメモリ上の大きさを表す。グローバル変数におけるStrideを表すStrideG は、loopStrideG と blocksizeG の積により求められる。ここでは、 blocksizeG はメモリ上でa(1,k)からa(10,k)までの要素数10に等しいので、(3)式によりStrideG =20となる。
【0048】
(4)式において、loopStrideL はローカル変数におけるdoループのインデックスの間隔を表し、 blocksizeL は隣の要素までのメモリ上の大きさを表す。ローカル変数におけるStrideを表すStrideL は、これらの積により求められる。ここでは、図4(c)に示されるようにloopStrideL =1であり、図6から明らかなように blocksizeL =1であるので、(4)式によりStrideL =1となる。
【0049】
(5−1)式において、 loopEndG はグローバル変数におけるdoループの終了位置を表し、(5−2)式において、blockEndG は対応するブロックの終了位置を表す。ここでの終了位置も開始位置と同様に、メモリ上のアドレスに対応する変数のインデックスを意味する。これらの式において、 WidthG は対応するプロセッサに割り当てられたグローバル変数の転送データが存在する範囲の要素数を表している。ここでは、図4(b)に示されるように loopEndG =10である。
【0050】
グローバル変数におけるdoループの終了位置が対応するブロック内にあるときは(5−1)式により、終了位置が他のブロック内にあるときは(5−2)式により、 WidthG が求められる。
【0051】
ここでは、プロセッサ1−1については、 loopEndG が対応するブロック内にはなく、 StartG =2、blockEndG =4なので、(5−2)式により WidthG =3となる。プロセッサ1−2についても loopEndG がなく、 StartG =6、blockEndG =8なので、(5−2)式により WidthG =3となる。また、プロセッサ1−3については、 loopEndG =10が対応するブロック内にあり、 StartG =10なので、(5−1)式により WidthG =1となる。
【0052】
ストライド転送パターンにおけるCount は、(6)式により求められる。ここでは、プロセッサ1−1、1−2については WidthG =3、loopStrideG =2であるので、(6)式によりCount =2となる。また、プロセッサ1−3については WidthG =1であるから、(6)式によりCount =1となる。
【0053】
このようにして、プロセッサのメモリにdoループの開始位置のみがある場合(プロセッサ1−1)と、終了位置のみがある場合(プロセッサ1−3)と、どちらもない場合(プロセッサ1−2)とについて、ストライド転送パターンを求めることができる。
【0054】
グローバル変数の転送対象となる次元がブロックに分割されていない場合は、転送対象となる全ての要素が同じプロセッサのメモリにあるので、doループの開始位置と終了位置の両方が対応するブロック内にあるものとして扱うことができる。
【0055】
例えば図5のグローバル変数a(j,k)がこの場合に相当し、(2−4)式により StartG = loopStartG =2となり、 loopEndG =10なので(5−1)により WidthG =9となる。またloopStrideG =2なので、(6)式によりCount =5となる。SizeとStrideG は(1)式と(3)式により求められ、それぞれ1と20になる。
【0056】
尚、ローカル変数は常に1つのプロセッサのメモリに格納されるので、そのストライド転送パターンの開始位置 StartL は、グローバル変数の分割形態に依らずにローカル変数のdoループの開始位置に一致する。例えば、図5、図6の場合には StartL =2である。
【0057】
図7は、グローバル変数a(j,k)がサイクリック分割されている場合のストライド転送を示している。グローバル変数の転送対象となる次元がサイクリック分割されている場合、隣合う要素はそのオーナーが別プロセッサとなる。
【0058】
図7においては、グローバル変数a(j,k)は3台のプロセッサ1−1、1−2、1−3によりインデックスkの方向にサイクリックに分割されている。k=1、4、7、10の要素はプロセッサ1−1のメモリ2−1に格納され、k=2、5、8の要素はプロセッサ1−2のメモリ2−2に格納され、k=3、6、9の要素はプロセッサ1−3のメモリ2−3に格納されている。そして、k=3とk=4、k=6とk=7、k=9とk=10の間がそれぞれ分割周期の境界となっている。
【0059】
グローバル変数がサイクリック分割されているとき、そのローカル変数へのストライド転送パターンのパラメータは、一般に次式により求められる。
【0060】
【数2】
【0061】
(7)〜(14)式において、(1)〜(6)式で用いたものと同じ記号は(1)〜(6)式と同様の意味を持つ。また、Sizeを求める(7)式は(1)式と同じである。例えば図7の場合は(7)式によりSize=1となる。
【0062】
(8)、(9)式において、 procNumG はグローバル変数をサイクリック分割しているプロセッサの数を表し、GCD( procNumG , loopStrideG ) は procNumG とloopStrideG の最大公約数、LCM( procNumG , loopStrideG ) は procNumG とloopStrideG の最小公倍数を表す。GCDCS、LCMCSは(8)、(9)式により定義される。
【0063】
図7の場合は、 procNumG =3、loopStrideG =2であるので、(8)、(9)式によりGCDCS=1、LCMCS=6となる。
(10)式のnは整数を表し、offsetは{ }内の不等式を満たすnの値を表す。
【0064】
ここでは、(10)式の{ }内の不等式は0<n<2となるので、offset=0、1、2となる。このとき、 loopStartG =2なので、(11)式によりoffsetの各値に対応して StartG =2、4、6となる。これらの StartG の値は、それぞれメモリ2−2、2−1、2−3に格納されているストライド転送パターンの開始位置に対応している。したがって、 StartG が決まれば、対応するプロセッサの識別子も特定される。
【0065】
また、StrideG とStrideL は(12)式と(13)式により求められ、それぞれ20と3になる。(12)式の右辺のLCMCS/ procNumG は、実際のプロセッサのメモリ上でのdoループのインデックスの間隔を表している。StrideG の値は図6のブロック分割の場合と同じであるが、StrideL の値は異なる。これは、例えばメモリ2−2において、転送単位a(1,2)の位置から次の転送単位a(1,8)の位置までの大きさが20であるが、変数b(h)においては、これらの転送単位に対応する格納位置がb(2)とb(5)であって、必ずしも隣接していないことに対応している。
【0066】
(14)式においては、右辺の商をCount の値とする。これは、( loopEndG − StartG +1)/LCMCSが割り切れない時に、その商に1を加算した値をCount とすることに相当する。図7の場合には、 loopEndG =10、 StartG =2、4、6、LCMCS=6なので、(14)式により StartG の各値に対応してCount =2、2、1となる。これらのCount の値は、それぞれメモリ2−2、2−1、2−3に格納されている転送単位の数に対応している。
【0067】
図8は、9台のプロセッサによりサイクリック分割されたグローバル変数を示している。図8において、グローバル変数a(j,k)(j=1,10、k=1,20)は、プロセッサ1−1〜1−9のメモリ2−1〜2−9にサイクリックに分割されて格納されており、k=9とk=10、k=18とk=19の間がそれぞれ分割周期の境界となっている。ストライド転送パターンの転送単位は斜線で示された5つであり、メモリ2−2、2−5、2−8に分かれて格納されている。
【0068】
この場合、(7)式によりSize=1であり、例えば転送単位a(1,2)とa(1,5)の間隔に対応してloopStrideG =3である。また、 procNumG =9なので、(8)、(9)式によりGCDCS=3、LCMCS=9となる。
【0069】
このとき、(10)式よりoffset=0、1、2となり、 loopStartG =2なので、(11)式によりoffsetの各値に対応して StartG =2、5、8となる。これらの StartG の値は、それぞれメモリ2−2、2−5、2−8に格納されているストライド転送パターンの開始位置に対応している。他のメモリには転送単位が格納されていない。
【0070】
そして、 blocksizeG =10、 loopEndG =14なので、(12)によりStrideG =10となり、(14)式により StartG の各値に対応してCount =2、2、1となる。これらのCount の値は、それぞれメモリ2−2、2−5、2−8に格納されている転送単位の数に対応している。
【0071】
次に、図9から図12までを参照しながら、本実施例の並列計算機システムが実行するプログラムのコンパイルを行うコンパイラの処理と、実行時のプログラムおよびライブラリの処理について説明する。図9および図10は本実施例におけるコンパイラの処理を示すフローチャートであり、図11は実行時のプログラムによる処理を示すフローチャートであり、図12は実行時のライブラリの処理を示すフローチャートである。
【0072】
本実施例において、ストライド転送パターンをコンパイラが生成する場合はコンパイラは図9の処理を行い、ストライド転送パターンを実行時ライブラリが生成する場合はコンパイラは図10の処理を行う。
【0073】
図9において処理が開始されると、コンパイラはまずソースプログラムの中の対象とするループの標準化を行って、プログラマにより記述されたループを変数の格納構造に対応したインデックスにより表されるループに変換する(ステップS1)。このとき、例えば図4(a)のようなdoループは、図4(b)、(c)のようなdoループに変換される。
【0074】
次に、ストライド転送パターンを計算するために必要なパラメータの値が静的に決定可能かどうかを判定する(ステップS2)。ここで、必要なパラメータには、標準化されたループに関するループパラメータと変数の格納パターンに関する格納パターンパラメータとが含まれる。
【0075】
ループパラメータは、標準化されたループの開始位置( loopStartG 、 loopStartL )、終了位置( loopEndG 、 loopEndL )、およびインデックスの間隔(loopStrideG 、loopStrideL )等を指し、格納パターンパラメータは、(1)〜(14)式におけるelementSize 、blockStartG 、blockEndG 、 blocksizeG 、blocksizeL 、blockWidthG 、 procNumG 等を指す。この格納パターンパラメータは、複数のプロセッサによるグローバル変数の分割形態に関する情報を含んでいる。
【0076】
これらのパラメータの値がコンパイル時において決定され、プログラム実行時に変化しない場合は(ステップS2、YES)、ソースプログラムの記述にしたがって各パラメータを生成する(ステップS3)。そして、グローバル変数の分割形態に応じて(1)〜(14)式により、生成されたパラメータの値からストライド転送パターンを計算して出力する(ステップS4)。このとき同時に、対応するプロセッサの識別子も出力する。
【0077】
次に、プログラム実行時にストライドデータ転送機構を用いたデータ転送を行う通信コードであるストライド転送コードを出力して(ステップS5)、処理を終了する。
【0078】
ストライド転送パターンを計算するために必要なパラメータの値がコンパイル時において決定されないとき、あるいはプログラム実行時に動的に変化する場合は(ステップS2、NO)、(1)〜(14)に示したストライド転送パターンの一般的な演算式を出力する(ステップS6)。そして、プログラム実行時にストライド転送パターンを生成するコードである転送パターン生成コードを出力して(ステップS7)、処理を終了する。
【0079】
一方、図2の並列計算機システムによるプログラム実行時にストライド転送コードが現れると、データ転送に関与するプロセッサはコンパイラの出力したストライド転送パターンをストライドデータ転送機構に与える。これにより、ストライドデータ転送機構がデータ転送を行う。
【0080】
また、プログラム実行時に転送パターン生成コードが現れると、プログラムは図11に示す処理を行う。図11において、まず必要なパラメータを生成し(ステップS21)、生成したパラメータを引数としてライブラリを呼び出す(ステップS22)。
【0081】
プログラムから呼び出されたライブラリは図12に示す処理を行う。図12において、まず与えられたパラメータとコンパイラの出力したストライド転送パターン演算式を用いてストライド転送パターンを計算する(ステップS31)。このとき同時に、対応するプロセッサの識別子も決定する。そして、得られたストライド転送パターンをストライドデータ転送機構に与える(ステップS32)。これにより、ストライドデータ転送機構がデータ転送を行う。
【0082】
コンパイラがストライド転送パターンの生成を行わない場合は、図10の処理を行う。図10において処理が開始されると、コンパイラはまず図9のステップS1と同様のループの標準化を行い(ステップS11)、標準化されたループのループパラメータを出力する(ステップS12)。そして、ストライド転送パターンを生成する転送パターン生成コードを出力して(ステップS13)、処理を終了する。
【0083】
一方、転送パターン生成コードが現れると、実行時のプログラムは図11のフローにしたがって、まず格納パターンパラメータを生成する(ステップS21)。次に、生成した格納パターンパラメータとコンパイラの出力したループパラメータとを引数としてライブラリを呼び出す(ステップS22)。
【0084】
呼び出されたライブラリは図12のフローにしたがって、与えられたパラメータと(1)〜(14)式のストライド転送パターン演算式を用いてストライド転送パターンを計算する(ステップS31)。
【0085】
この場合、ライブラリが必要なストライド転送パターン演算式を生成してもよく、また、あらかじめストライド転送パターン演算式をライブラリに組み込んでおいてもよい。また、このとき同時に、対応するプロセッサの識別子も決定する。次に、得られたストライド転送パターンをストライドデータ転送機構に与える(ステップS32)。これにより、ストライドデータ転送機構がデータ転送を行う。
【0086】
【発明の効果】
本発明によれば、コンパイラまたは実行時のライブラリが必要に応じて個々のストライド転送パターンを生成するので、規則的なパターンとして表現される不連続領域のデータを転送するときにストライドデータ転送機構を利用することができる。したがって、不連続領域のデータをパッキングした後に展開するという処理を行うことなく、通信回数を大幅に減少させることが可能となる。
【0087】
これにより、従来プログラマが指定しなければ利用されなかったストライドデータ転送機構の利用率が著しく向上し、高速な通信が実現される。ひいては分散メモリ型並列計算機システム等の情報処理装置のパフォーマンス向上に大きく寄与する。
【図面の簡単な説明】
【図1】本発明の原理図である。
【図2】一実施例における並列計算機システムの構成図である。
【図3】実施例におけるストライド転送パターンを示す図である。
【図4】実施例におけるdoループの一例を示す図である。
【図5】実施例におけるグローバル変数のストライド転送を示す図である。
【図6】実施例におけるブロック分割されたグローバル変数のストライド転送を示す図である。
【図7】実施例におけるサイクリック分割されたグローバル変数のストライド転送を示す図である。
【図8】実施例における9台のプロセッサによりサイクリック分割されたグローバル変数のストライド転送を示す図である。
【図9】実施例におけるコンパイラによる処理のフローチャート(その1)である。
【図10】実施例におけるコンパイラによる処理のフローチャート(その2)である。
【図11】実施例におけるプログラムによる処理のフローチャートである。
【図12】実施例におけるライブラリによる処理のフローチャートである。
【符号の説明】
1−1、2、・・・、N プロセッサ
2−1、2、・・・、N メモリ
3 ネットワーク
4 グローバルメモリ
5−1、2、・・・、N ローカルメモリ
Claims (16)
- 並列計算機システムにおいてストライドデータ転送機構により不連続データを転送するデータ転送方法であって、
情報処理装置が、ソースプログラムのコンパイル時に、該ソースプログラムの記述にしたがって転送対象データを指定するパラメータを生成し、該パラメータと演算式を用いて前記ストライドデータ転送機構の転送パターンを生成し、該転送パターンと該ストライドデータ転送機構を用いたデータ転送を指示するストライド転送コードを生成し、
前記並列計算機システムが、生成されたストライド転送コードの実行時に、前記転送パターンを前記ストライドデータ転送機構に与えて、前記転送対象データの転送を行わせることを特徴とするデータ転送方法。 - 並列計算機システムにおいてストライドデータ転送機構により不連続データを転送するデータ転送方法であって、
情報処理装置が、ソースプログラムのコンパイル時に、前記ストライドデータ転送機構の転送パターンの生成を指示する転送パターン生成コードを生成し、
前記並列計算機システムが、生成された転送パターン生成コードの実行時に、転送対象データを指定するパラメータと演算式を用いて前記転送パターンを生成し、該転送パターンを前記ストライドデータ転送機構に与えて、該転送対象データの転送を行わせることを特徴とするデータ転送方法。 - 前記情報処理装置は、前記ソースプログラムのコンパイル時に、前記演算式を含むプログラムを生成することを特徴とする請求項2記載のデータ転送方法。
- 前記情報処理装置は、分散メモリ型並列計算機システムのための並列処理言語により前記不連続データの転送処理を一括データ転送として記述した、ソースプログラムをコンパイルすることを特徴とする請求項1、2、または3記載のデータ転送方法。
- 前記情報処理装置は、インデックスを用いたループにより前記不連続データの転送処理を記述したソースプログラムをコンパイルし、該ループの開始に対応するインデックスと、該ループの終了に対応するインデックスと、該ループにおけるインデックスの間隔のうち少なくとも1つを前記パラメータとして用いることを特徴とする請求項1、2、または3記載のデータ転送方法。
- 前記ストライドデータ転送機構は、一定の間隔をおいて規則的に格納されたデータのストライド転送を行うことを特徴とする請求項1、2、または3記載のデータ転送方法。
- 前記転送パターンは、前記転送対象データに含まれる転送単位の大きさと、転送単位の数と、最初の転送単位の位置と、2つの転送単位の間隔のうち、少なくも1つを含むことを特徴とする請求項1、2、または3記載のデータ転送方法。
- 前記並列計算機システムは、複数のプロセッサと、該複数のプロセッサのそれぞれに対応する複数のメモリを備え、前記転送対象データの最初の転送単位と最後の転送単位とを互いに異なるメモリに格納し、
前記転送パターンの生成時に、前記最初の転送単位を有するメモリに対応するプロセッサの識別子が生成されることを特徴とする請求項1、2、または3記載のデータ転送方法。 - 前記並列計算機システムは、複数のプロセッサと、該複数のプロセッサのそれぞれに対応する複数のメモリを備え、前記転送対象データの最初の転送単位と最後の転送単位とを互いに異なるメモリに格納し、
前記転送パターンの生成時に、前記最後の転送単位を有するメモリに対応するプロセッサの識別子が生成されることを特徴とする請求項1、2、または3記載のデータ転送方法。 - 前記並列計算機システムは、複数のプロセッサと、該複数のプロセッサのそれぞれに対応する複数のメモリを備え、前記転送対象データの最初の転送単位と最後の転送単位とを互いに異なるメモリに格納し、
前記転送パターンの生成時に、前記最初の転送単位と最後の転送単位を共に含まないメモリに対応するプロセッサの識別子が生成されることを特徴とする請求項1、2、または3記載のデータ転送方法。 - 前記並列計算機システムは、複数のプロセッサと、該複数のプロセッサのそれぞれに対応する複数のメモリを備え、前記転送対象データを該複数のメモリのうちの1つに格納し、
前記転送パターンの生成時に、前記1つのメモリに対応するプロセッサの識別子が生成されることを特徴とする請求項1、2、または3記載のデータ転送方法。 - 前記並列計算機システムは、複数のプロセッサと、該複数のプロセッサのそれぞれに対応する複数のメモリを備え、前記転送対象データを2つ以上のメモリにサイクリックに分割して格納し、
前記転送パターンは、前記2つ以上のメモリのうちの1つに格納された転送対象データに関する転送パターンであり、該転送パターンの生成時に、該1つのメモリに対応するプロセッサの識別子が生成されることを特徴とする請求項1、2、または3記載のデータ転送方法。 - ストライドデータ転送機構により不連続データを転送するデータ転送装置であって、
ソースプログラムのコンパイル時に、該ソースプログラムの記述にしたがって転送対象データを指定するパラメータを生成し、該パラメータと演算式を用いて前記ストライドデータ転送機構の転送パターンを生成し、該転送パターンと該ストライドデータ転送機構を用いたデータ転送を指示するストライド転送コードを生成する手段と、
生成されたストライド転送コードの実行時に、前記転送パターンを前記ストライドデータ転送機構に与えて、前記転送対象データの転送を行わせる手段とを有することを特徴とするデータ転送装置。 - ストライドデータ転送機構により不連続データを転送するデータ転送装置であって、
ソースプログラムのコンパイル時に、前記ストライドデータ転送機構の転送パターンの生成を指示する転送パターン生成コードを生成する手段と、
生成された転送パターン生成コードの実行時に、転送対象データを指定するパラメータと演算式を用いて前記転送パターンを生成し、該転送パターンを前記ストライドデータ転送機構に与えて、該転送対象データの転送を行わせる手段とを有することを特徴とするデータ転送装置。 - 前記転送パターン生成コードを生成する手段は、前記ソースプログラムのコンパイル時に、前記演算式を含むプログラムを生成することを特徴とする請求項14記載のデータ転送装置。
- 前記転送パターンは、前記転送対象データに含まれる転送単位の大きさと、転送単位の数と、最初の転送単位の位置と、2つの転送単位の間隔のうち、少なくも1つを含むことを特徴とする請求項13、14、または15記載のデータ転送装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP16790594A JP3544565B2 (ja) | 1994-07-20 | 1994-07-20 | データ転送方法とその装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP16790594A JP3544565B2 (ja) | 1994-07-20 | 1994-07-20 | データ転送方法とその装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0830569A JPH0830569A (ja) | 1996-02-02 |
JP3544565B2 true JP3544565B2 (ja) | 2004-07-21 |
Family
ID=15858231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP16790594A Expired - Fee Related JP3544565B2 (ja) | 1994-07-20 | 1994-07-20 | データ転送方法とその装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3544565B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6402598B2 (ja) * | 2014-11-12 | 2018-10-10 | 富士通株式会社 | 情報処理装置、通信方法、通信プログラム、及び、情報処理システム |
-
1994
- 1994-07-20 JP JP16790594A patent/JP3544565B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH0830569A (ja) | 1996-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gupta et al. | Compiling array expressions for efficient execution on distributed-memory machines | |
US6052529A (en) | Data updating method using overlap area and program converting device for converting update program in distributed-memory parallel processor | |
US6092097A (en) | Parallel processing system with efficient data prefetch and compilation scheme | |
Reid-Miller | List ranking and list scan on the Cray C-90 | |
Saltz | Aggregation methods for solving sparse triangular systems on multiprocessors | |
Flower et al. | Express is not just a message passing system Current and future directions in Express | |
JP2669603B2 (ja) | コンパイラにおけるコード生成方法及びコンパイラ | |
US5659778A (en) | System and method of mapping an array to processing elements | |
US5450313A (en) | Generating local addresses and communication sets for data-parallel programs | |
Öz et al. | Scalable parallel implementation of migrating birds optimization for the multi-objective task allocation problem | |
JP3544565B2 (ja) | データ転送方法とその装置 | |
US5900023A (en) | Method and apparatus for removing power-of-two restrictions on distributed addressing | |
Träff et al. | Message-combining algorithms for isomorphic, sparse collective communication | |
US8090762B2 (en) | Efficient super cluster implementation for solving connected problems in a distributed environment | |
Coelho et al. | State of the art in compiling HPF | |
Fahringer | Compile-time estimation of communication costs for data parallel programs | |
Murai et al. | XcalableMP programming model and language | |
Ishizaki et al. | A loop transformation algorithm for communication overlapping | |
de Blas Cartón et al. | Effortless and efficient distributed data-partitioning in linear algebra | |
Hinrichs | Compiler directed architecture-dependent communication optimizations | |
Yokota et al. | A New Optimization Technique for the Inspector-Executor Method. | |
Lüling et al. | Mapping tree-structured combinatorial optimization problems onto parallel computers | |
Nolte et al. | Template based structured collections | |
JPH06332873A (ja) | ウェーブフロント型並列計算のためのタイルサイズ決定方法および装置 | |
Fimmel | Generation of scheduling functions supporting LSGP-partitioning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040106 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040225 |
|
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: 20040330 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040405 |
|
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: 20080416 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090416 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090416 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100416 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110416 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110416 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |