Re: [Q] programming on smp
河野真治 @ 琉球大学情報工学です。
In article <86u14ezlih.wl@xh6.cc.hokudai.ac.jp>, Hiroki Kashiwazaki <reo@cc.hokudai.ac.jp> writes
> 結局、数CPU/1ノード、数十ノードとかいうマシンの場合、その CPUを
> 複数使った計算を行なおうとするなら、
結構、小規模なのね。
> (1) 1CPUを使う計算を、MPIを利用して複数ノードにまたがらせて実行
> (2) 1ノードだけ使ってthreadを利用して複数のCPU資源を利用。
> マルチプロセスで計算できるようにモデルを切り分けて実行。
これは、ま、そんなものでしょう。ちなみに、
Multi Thread と Multi Process
は別物です。Multi Processで最初から作って、socket で通信する
ってのも悪くないです。
> (3) 効率は上がらないかもしれないけど、threadを利用した計算を
> MPIで複数ノードにまたがらせて実行。
これは普通はないMPIの使い方です。
MPIではなく、Shared Virtual Memoryとか分散共有メモリとかいう
のがあるので、そういうのを使うみたい。えーと、なんか、彼らが
使っている変な略号があったんだけど、DSM とかNUMAとか、そんな
の。
ただ、分散共有メモリは普通に実装すると性能が上がらないので、
(当り前〜) いろいろ意味不明な制限とか機能とかを付けるのが
普通なようです。例えば、
書いたものがすぐ読めるとは限らない (Weak consistency とかいう)
(そんなの考えながらプログラム書くわけ?)
とりあえずバリア同期の部分でなんとかする
(そこでネットワークが混むのは我慢する)
誰からでも同じように読めるわけではない (このメモリはどこにあるとか指定する)
(そんじゃ、PVMに逆戻り...)
ロックの機構を工夫する。(なんたらLock APIみたいなのを入れる)
(ロックネックになるのは見えてる...)
とかするようだね。
僕の意見としては、領域分割できるようなやさしい問題を並列化す
るなら、プロセスを分離してsocketで通信するのが簡単。難しい問
題をやるなら、結局は、通信部分から凝って書かないとダメ。Thread
と通信の組合せはシロートには手におえない。というところですね。
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
河野真治 @ 琉球大学工学部情報工学科,
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735