並列実行できそうで、できない

「このプログラムを並列実行したいんだけど」という相談を受けている。物理現象をシミュレートするソフトウェアがある。これをシミュレーターと呼ぼう。Windows 用の DLL で提供される。

それとは別に、並列実行できそうなコードみつけたら、自動的に並列実行する、コンパイラみたいなのがある。まあ LabVIEW というやつである。マルチコアで並列実行できると思うのだが、というのがきっかけであった。

シミュレーターは、内部状態としてシミュレートするモデルをひとつだけ持っているっぽい。少なくともインターフェースは、そのようになっている。時間パラメータを少しずつ進めていくと、内部状態が変わっていく。これでは、仮に呼び出し側でいくら並列実行しても、複数のモノを同時にシミュレートできない。だめじゃん。

コンピューティングパワーが貧弱だったころに、シミュレーターが開発され、すこしずつバージョンアップしたのだろう。当初はまさかパソコンごときで、並列実行するようなことがあると思っていなかったのかも知れない。

複数プロセスを立ち上げて、各プロセスでDLLを読み込むとできるかなー。計算中にその課程を可視化する機能があるけど、これのために共有メモリとか使ってないといいなー、という感じである。これ以上はリバースエンジニアリング的な作業が必要だろう。

さて。

この状況を説明するのが大変である。前提知識なしで説明しようとすると「このままでは、うまくいかない」みたいな雑な説明にしかならない。しかも、この種の知識があんまりないので、私も見当はずれなことを考えているかも知れない。

とりあえず「おおざっぱに言うと、シミュレーターの実装次第で、できるかも知れないしできないかも知れない。少し話が複雑である。知りたければ説明する。」と答えた。できるのか、できないのかと詰め寄られると、困るであろうな。私にはできない、と言い切ってしまいそうだ。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.