[SCore-users-jp] fork(),execl()を使用したプログラムの並列化(2)

長谷川 篤史 a-hasega @ ats.nis.nec.co.jp
2003年 6月 4日 (水) 23:21:18 JST


増田様、

長谷川@NEC情報システムズです。

> 
> わかりづらい説明で申し訳ありません。
> ./main はコマンドラインからの実行です。
> 例えば、実行モジュールが
>   main
>     subpro1
>     subpro2
> とあった場合に、subpro1,subpro2をmainから
> fork,execlして起動させようとしています。

fork してから、execlで、
  scrun -scored=XXX subpro1
とされたわけですね?

>MPI,OpenMP共に評価した事がないので保証できませんが、fork, execl自体は
>>動作すると思います。ただ、execlで、SCoreのプログラム(OpenMPやMPIで書
かれたプログラム)を実行した場合、動かないはずです。

これは、私の勘違いですので忘れてください。

確認しなおしましたが、Omni/SCASH(SCore版のOmni)では、forkは使えないと
思っておいてください。

Omni/SCASHで生成したプログラムは、実行時に、ユーザが認識していないとこ
ろで通信をして、データの同期、コヒーレンシを確保しています。このため、
forkした後に、子プロセス側で通信を発生させた場合、同期が破綻し、正常に
動作しません。Omni/SCASHのコード生成を理解した上で、明示的に、通信を発
生させないようなプログラムを書くという手はありますが、一般的には、動か
ないと理解しておいてもらった方がよろしいと思います。

> execlのように一般的に使用しているようなシステム関数が
> SCore環境下では動作保証されていないというような情報は
> どこからか入手できるものでしょうか?
> もし、ご存知であれば教えていただければありがたいです。

Omni/SCASHに関しては詳細な記述はありませんので、SCoreの導入元にサポー
トを依頼されるか、ソースを読んで動作を理解して頂いた方が良いと思います。

> SCoreが、そもそも処理の分散化を目的としているわけなので
> 処理分散させる為に、子プロセスやスレッドを生成しているプログラムを
> 流用するという考え方に無理があるのでしょうか?

どういうプログラムなのかわからないのでなんともいえません。
ただ、通常、親プロセスはwaitで、子プロセスを待っていると思いますが、
SCoreのmulti user modeでは、jobをgang schedulingしているため、waitして
いるjobにも一定時間、CPUが割り当てられます。
mainから、subjob1をscrunで実行した場合、それぞれに、50%づつCPUリソース
が割り当てられることになるため、効率が悪くなる可能性があります。

> 一般的には、実行モジュールはひとつにするものなのでしょうか?
> つまり、子プロセスやスレッドを生成する必要性はないものなのでしょうか?

一般的には、増田さんの言われるような方法や、batシステムを使用する方法
をとると思いますが、SCoreのmulti user modeを使われるのであれば、効率的
にも、実行モジュールを1つにするか、jobを実行するだけのプログラムを書い
て、そこから、scrunでjobを実行するようにされた方ががいいのではないで
しょうか?

-- 
長谷川 篤史  E-Mail:a-hasega @ ats.nis.nec.co.jp
株式会社NEC情報システムズ 基盤ソフトウェア事業部 サイエンス基盤部
外線:03-3798-9991(Fax.03-3798-9198) / 内線:8-115-2410(Fax.8-115-2419)




SCore-users-jp メーリングリストの案内