並列計算と並列計算機

                   - 4 -


並博士:前回は「並列計算に伴い、余分のメモリが必要になる」と言ったが
    これはなぜだか分かるかな?

列くん:うーん、普段並列計算なんかしていないのでぴんときません。
    説明してくださいよ。

並博士:これを説明するにはその前に並列計算機におけるメモリ方式について
    簡単におさえておく必要がある。現在大きくわけて(表5)のように
    2つの方式がある。

         (表5)並列計算機のメモリ方式
    ----------------------------------------------------
              (1)共有メモリ
              (2)分散メモリ
    ----------------------------------------------------

    (1)の共有メモリは読んで字の如く、メモリ全体をプロセッサで共有する
    方式じゃ、つまりメモリ全体のアドレス空間があってどのプロセッサからも
    任意のメモリ空間にアクセス出来るということじゃ。一方(2)の分散
    メモリ方式も字の如く、メモリが分散しており、各プロセッサは自分の
    ところにあるメモリにだけアクセス出来る方式じゃ。ただ(2)の場合には
    他のメモリ空間へのアクセス手段として通常何らかの通信手段が提供されて
    おり、これを使うことによって原理的には全てのメモリにアクセスすることが
    できることになる。プロセッサ(P)とメモリ(M)の関係を図にすると
    下の(図1)ように描くことが出来る。

         (図1)並列計算機のメモリ方式概念図
    ----------------------------------------------------

       (1)共有メモリ              (2)分散メモリ

               M                        M1  M2  M3
                      | バス          |       |       |
             +========+========+               P1  P2  P3
         |        |        |                |       |       |
          P1   P2   P3              +-------+-------+
                             通信

    ----------------------------------------------------

    図にあるように共有メモリではプロセッサはバスで結合されたメモリに
    アクセス出来るためアクセス速度は高速である。これは分散メモリの場合でも
    自分のメモリにアクセスする限り同じく高速じゃ。ところが離れたメモリに
    アクセスする場合、分散メモリ方式では通信を使うことになるわけじゃが
    これが一般的にはあまり速くないのじゃ。どれくらい速くないかというと
    並列計算機によって様々じゃが、バスに比べて少なくとも1000倍は
    遅い!

列くん:それでは使いものになりませんね、というわけで現在の主流は共有メモリ
    というわけですね。ちゃんちゃん。

並博士:おいおい、勝手に結論を出してもらっては困るな。話はまだ続くのじゃ。
    分散メモリは上に言ったように、自分以外のメモリにアクセスする時に
    速度低下があるのじゃが、一方共有メモリの場合には下の2つの点で
    ちと問題がある。

         (表6)共有メモリ方式の問題点
    ----------------------------------------------------
     (1)メモリは1つなので、複数のプロセッサが同時に
        メモリアクセスをした場合には当然順番待ちになる。
     (2)様々な要因から扱えるメモリ容量にはどうしても上限がある。
        つまりとてつもなく大きなメモリを共有することは現在の技術では
        あまり簡単ではない。
    ----------------------------------------------------

    どちらも大切なポイントじゃが、これらの点に関して分散メモリでは
    それほど問題がないというところがもっとも重要じゃ。
    先程言ったように、最近の大型数値計算では非常に大きなメモリを
    必要とする。このため現在のところ分散メモリ方式が主流となっているのが
    現状じゃ、そして中型並列計算機には両方がしのぎを削っておる。
    先程の君の予想とは反対じゃな。

列くん:通信に絡む性能低下はどうなっているのでしょうか?

並博士:うむ、いいところに気がついたな。
    通信に絡む問題には重要な要素が以下の2つあってどちらも全体の
    性能低下と密接に関係しておる。

      (表7)分散メモリ方式の通信に絡むポイント
    ----------------------------------------------------
        (1)バンド幅            - メガバイト/秒
        (2)立ちあがり(latency) - マイクロ秒
    ----------------------------------------------------
   
    ここで前回言ったメモリ容量と通信性能が関係して来るのじゃ。
    簡単にいえばこういうことじゃ。大規模数値計算を実行するために
    分散メモリ方式の並列計算機を使い、元々の問題を
    並列化するわけじゃが、いくら頑張っても他のプロセッサのメモリに
    アクセスする必要が生じるのが普通じゃ。もちろんそうでない場合も
    あるわけじゃがこういう場合はむしろ例外といえるじゃろな。
    他のプロセッサのメモリにアクセスする場合に大きくわけて2つの
    方法が考えられる。(表8)を見てほしい。

      (表8)他のメモリにアクセスする方法
    ----------------------------------------------------
    (1)随時転送・・・データが必要になるたびに転送する
    (2)一括転送・・・必要となるデータをあらかじめ一括転送しておく
    ----------------------------------------------------
   
列くん:えーと、ちょっとややこしくなってきましたので、ここで頭を
    整理させてください。今の説明を僕なりにまとめると
     ・大きな問題を分散メモリ方式で並列化した
     ・すると当然他のプロセッサに割りふられたメモリにアクセスする
      必要が生じることがある。
      (図1)を借りれば、P1がM2とかにアクセスするということですね。
     ・このとき(表8)の(1)と(2)の違いが関係して来ると
      いうわけですね。

並博士:そういうことじゃ、良く分かっておるぞ。

列くん:あれ、でもちょっと変です、結局必要とするデータは同じわけですから
    (1)と(2)で違いはなさそうに思えるのですが。

並博士:これには(表7)が絡んできるのじゃ。なるほど転送するデータの総量は
    同じでも、それを何回にわけて送るかによって効率が違って来るのじゃ。
    この原因は(表7)の(2)にある。例を出して話そう。
    例えば転送速度を毎秒1メガバイトだとしよう。

列くん:現在良く使われているイーサネットの速度ですね。なんか身近な気がします。

並博士:これはあくまで例じゃからな、もちろん実際の並列計算機ではもっと
    速いのが普通じゃ。また立ちあがり時間(レイテンシー:latency)を
    200マイクロ秒(1万分の2秒)だと仮定しよう。

列くん:先程も出てきましたが、このlatencyってなんですか?

並博士:簡単に言うと、通信を行なう準備をするために必要な時間の事じゃ。
    これは通信量とは無関係に、通信の度に毎回必要なのじゃ。
    さて、今4バイトの実数データを100個通信することを考える。
        これを毎回送る場合と、一括転送する場合、また何回かに分割して
    送る場合で所要時間を比べてみよう。
    分割回数nと全所要時間とは(表9)のようになるな。

      (表9)分割回数nと所要時間
           +--------------+-----------------+
        | 分割回数n | 所要時間 (秒)|
           +--------------+-----------------+
        |   1    |   0.0006       |<-- 一括転送する場合
        |   2    |   0.0008       |   
        |   5    |   0.0014       |
        |   10    |   0.0024       |
        |  100    |    0.0204       |<-- 毎回送る場合
           +--------------+-----------------+

    これを見ると明らかじゃが、latencyの影響は重要で、毎回転送して
    いたら効率が悪くてしかたがないことが良く分かる。

列くん:では一括転送してしまえば話は終わりではないのですか?

並博士:そうできればいいのじゃが、話はそう簡単ではない。
    ここからがメモリ容量と転送性能との関係の話になるわけじゃ。

列くん:やっと話が本筋に戻りましたね。でも今回は新しい事が多くて
    まだ頭の中がごっちゃです。

並博士:次回までに頭を整理しておいてくれたまえ。
    その時の参考になるかも知れないので、この連載を最近はやりのWWW
    でも公開しておくことにしよう。再度読み直す時に役立つじゃろう。
    URLは
        http://www.sci.hiroshima-u.ac.jp/insam/rensai/
    じゃ。現在のところNo.1からNo.4までが利用可能じゃ。