[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10932] Re: Doug Lea 本



村山@netgeneです.

#時間がないのでここだけ.

> 用語の定義がないと混乱してきそうです。

"Aside. The terms, concurrent, distributed and parallel have a been used 
at various times to describe various types of concurrent programming. "

http://burks.brighton.ac.uk/burks/pcinfo/progdocs/plbook/concurre.htm

並列をやっている人からすると,だいたいこんな意識です.


"Operations in the source text of a program are concurrent if they could 
be, but need not be, executed in parallel. Thus concurrency occurs in a 
programming language when two or more operations could be but need not 
be executed in parallel.  "

たしかに「並列(concurrent)プログラミング言語」で記述し,実際に並列実行
するプログラムを作ったからと言って,実行時に並列実行されるとは限りません
けどね.それは並列コンピュータにおいても同じ事.スケジューリングの関係で
1CPUに割り当てられれば,実質逐次で動きます.これを防ぐには明示的にCPUを
指定することになります.もちろんそういう機能を持つ言語を使っていればの話
です.
#これってHPFなんかの方が極端なのでは...物理的に並列実行するように
#指定しない限り並列実行されないと思う.

その手の論文で"concurrent programming"が使われている時は,ほぼ100%並列
実行を想定している(もちろん並列実行される保証はない.それはどんな言語でも
多分同じ)と思って良いと思います.そうでない限り,苦労して論文なんか書か
ないでしょうし.

論理的な並列性のみ記述していて,物理的にCPUに割り当てていなくても,その
言語にある程度の(並列処理の)最適化機能があり,物理的に2CPU以上を持つ並
列マシン上で実行されるのなら,実際に最適化され物理的に実行されるでしょう.
ただし,それはまず保証されません.というより保証しません.保証するのが
非効率だからです.


あと,同じ言語で同じものを記述するとしても,逐次処理をするのならわざわざ
並列向けの記述はしません.並列処理するためにはそのためのオーバーヘッドが
伴いますし,記述自体が逐次より難しい.並列向けの記述をしている以上は,
2CPU以上を持つ並列マシン上での高速化を想定したものと考えて良いと思います.

実行時に本当に並列実行されるかどうかというのは,あまり本質ではないんです.
それはスケジューリング次第で,毎回実行するたびに変化するものです.並列向
けに最適化して書かれているか否か,ってのが大きい.並列向けに書かれたプロ
グラムは逐次向けのプログラムとは全く別物です.並列向けのプログラムを逐次
実行すると,逐次向けプログラムを逐次実行するより一般に性能は低下します.

>Concurrentは処理/制御を複数同時に実行させたい場合を指し、Parallelは
>ハード機能も含めて性能向上を実現する場合に使われる、と理解してよさそうな
>感じですが。。。

ひょっとしてDoug Leaもそういう意識で,あの本を書いているんでしょうか??