Index of /staff/pdc/D

      Name                    Last modified       Size  Description

[DIR] Parent Directory 06-Mar-2000 11:06 - [TXT] Makefile 26-Oct-1999 18:31 1k [TXT] fft235mpp.f 26-Oct-1999 21:58 19k [TXT] mpmpp.f 26-Oct-1999 21:59 46k [TXT] 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日