Index of /staff/pdc/D
Name Last modified Size Description
Parent Directory 06-Mar-2000 11:06 -
Makefile 26-Oct-1999 18:31 1k
fft235mpp.f 26-Oct-1999 21:58 19k
mpmpp.f 26-Oct-1999 21:59 46k
testmp.f 26-Oct-1999 22:00 7k
(d) 並列高精度多倍長演算ルーチン
本ルーチンは、ユーザが入力仕様通りに処理データを分散させたことを前提と
して、高精度多倍長桁数の加算、減算、乗算、除算、平方根 および 乱数初期
値を並列に計算する。
●[入力データ仕様]
入力データは、多倍長桁計算すべきNワード (1ワード=10進8桁)の
データX(1)〜X(N)をサイクリック分割し、各PEに分散配置する。
一次元配列データをサイクリック分割する場合の全体配列と部分配列の成分間
のインデックス変換式は次のようになる。
PE(Processing Element)台数をNPUとし、自PE番号をME(0〜NPU-1)とした場
合の全体配列 X のインデックス(グローバルインデックス)Jgrobalと、各PE
のインデックス(ローカルインデックス)Jlocal を示す。
JlocalからJgrobalへの変換式
Jgrobal = Jlocal * NPU + ME
各PEの1番目の配列には、符号(プラスならば1、マイナスならば-1)を入
力し、2番目の配列には、指数を入力する。3番目の配列以降には、多倍長桁数
のデーターを1ワード=10進8桁で入力する。
●[出力データ仕様]
出力データは、多倍長桁数の計算されたデータが、入力データ仕様と同様に、サ
イクリック分割で出力される。
● [本サブルーチンの入出力仕様]
本サブルーチンは、ユーザが通信に関する処理を初期化した上で、
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以下に示すように FORTRAN77のサブーチンコールで呼ぶことを前提とする。
初期化ルーチン
CALL MPINIT(ME,NPU)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
ME | 入力 | INTEGER*4型。自PEのPE番号(0〜NPU-1)。
-----------------------------------------------------------------
NPU | 入力 | INTEGER*4型。全PE数。
-----------------------------------------------------------------
加算ルーチン
CALL MPADD(IA,IB,IC,N,IERR)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
IA | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
----------------------------------------------------------------
IB | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
-----------------------------------------------------------------
IC | 出力 | INTEGER*4型。出力仕様に伴う処理データを
| | 格納する。
-----------------------------------------------------------------
N | 入力 | INTEGER*4型。WORD数。
-----------------------------------------------------------------
IERR | 出力 | INTEGER*4型。エラーコード格納用。
-----------------------------------------------------------------
減算ルーチン
CALL MPSUB(IA,IB,IC,N,IERR)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
IA | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
----------------------------------------------------------------
IB | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
-----------------------------------------------------------------
IC | 出力 | INTEGER*4型。出力仕様に伴う処理データを
| | 格納する。
-----------------------------------------------------------------
N | 入力 | INTEGER*4型。WORD数。
-----------------------------------------------------------------
IERR | 出力 | INTEGER*4型。エラーコード格納用。
-----------------------------------------------------------------
乗算ルーチン
CALL MPMUL(IA,IB,IC,N,IERR)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
IA | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
----------------------------------------------------------------
IB | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
-----------------------------------------------------------------
IC | 出力 | INTEGER*4型。出力仕様に伴う処理データを
| | 格納する。
-----------------------------------------------------------------
N | 入力 | INTEGER*4型。WORD数。
-----------------------------------------------------------------
IERR | 出力 | INTEGER*4型。エラーコード格納用。
-----------------------------------------------------------------
除算ルーチン
CALL MPDIV(IA,IB,IC,IW,N,IERR)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
IA | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
----------------------------------------------------------------
IB | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
-----------------------------------------------------------------
IC | 出力 | INTEGER*4型。出力仕様に伴う処理データを
| | 格納する。
-----------------------------------------------------------------
IW | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
N | 入力 | INTEGER*4型。WORD数。
-----------------------------------------------------------------
IERR | 出力 | INTEGER*4型。エラーコード格納用。
-----------------------------------------------------------------
平方根ルーチン
CALL MPSQRT(IA,IB,IV,IW,N,IERR)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
IA | 入力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
----------------------------------------------------------------
IB | 出力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
-----------------------------------------------------------------
IV | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IW | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
N | 入力 | INTEGER*4型。WORD数。
-----------------------------------------------------------------
IERR | 出力 | INTEGER*4型。エラーコード格納用。
-----------------------------------------------------------------
乱数初期値生成ルーチン
CALL RANDOM(IA,IB,IS,IT,IV,IW,IX,IY,IZ,N,IERR)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
IA | 出力 | INTEGER*4型。入力仕様に伴う処理データを
| | 格納する。
| |
----------------------------------------------------------------
IB | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IS | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IT | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IV | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IW | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IX | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IY | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
IZ | ワーク領域 | INTEGER*4型。ワーク領域。
-----------------------------------------------------------------
N | 入力 | INTEGER*4型。WORD数。
-----------------------------------------------------------------
IERR | 出力 | INTEGER*4型。エラーコード格納用。
-----------------------------------------------------------------
●[テストプログラムについて]
本サブルーチンの利用例として、テストプログラム testmp.f
が提供されている。以降にその利用法を述べる。
○ コンパイル方法
コマンドライン上で
|> make testmp
と入力する。
○ 実行方法
4プロセッサを用いて、パーテイション名 ALL にて実行する場合:
コマンドライン上で
|> mpirun -n 4 -part ALL a.out
と入力する。
○ データ入力方法
テストプログラムの起動に成功すると、以下のような表示がなされる。
|> ?
ここで、 二つの公式による円周率を、N=2^20桁の高精度で求める場合、
以下の様に入力する。
|> ?
|20
計算が正常になされたならば、以下のような結果が出力される。
| GAUSS-LEGENDRE ALGORITHM
| 34255650 1999070 75304295 47653902 11156096
| 93922804 10162474 90735331 70993021 8766607
| BORWEIN 4-TH CONVERGENT ALGORITHM
| 34255650 1999070 75304295 47653902 11156096
| 93922804 10162474 90735332 94343723 31410000
| TIME= 265.956146016120911
======
1998年 1月31日