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

[jfriends-ml 10933] Re: Doug Lea 本



村山@NETGENEです.

補足.

>> たしかに「並列(concurrent)プログラミング言語」で記述し,実際に並列実行
>> するプログラムを作ったからと言って,実行時に並列実行されるとは限りません
>> けどね.それは並列コンピュータにおいても同じ事.スケジューリングの関係で

言語で記述できるのは,あくまで「並列性」のみ,即ち「並列実行される可能性」までで,
実際の「並列実行」そのものはハードウエアの性質によるという違いがあるのかも.どんな
言語で記述しても記述できるのは並列実行される可能性までで,並列実行されることも,
さらにはそもそも実行されることさえも保証されません.試しにコンパイルしただけで
一回も動かさなければ当然そうなります.

だから
「並列プログラミング」は「concurrent programming」で,
「並列コンピュータ」は「parallel computer」だと.

そう言えば,"concurrent computer"というのは聞いたことがありません.
ちなみに"parallelizing compiler"(並列化コンパイラ)というのもあります.

#同じ「仮想」でも,「仮想敵国」は「virtual enermy」じゃないようなもの.
#これだと「公式には敵国ではないが,事実上敵国として敵対している」という
#ような意味になるらしい.「仮想敵国」を意味するにはvirtual ではなく
#imaginaryかなにかを使うそうな.


>「Java言語におけるスレッドによる並列プログラミングは、あくまで可能性と
>しての並列性を提供するものです。

つまり,どの(並列)言語においてもこれは当たり前のことなんですね.
#ちなみに逐次で書いたプログラムでも,CPU内部では普通に並列実行されてます.
#「逐次プログラム」も,あくまで逐次で実行される可能性があるだけで,
#並列実行されないことが保証されているわけではありません.

>パフォーマンスを向上させるため物理的な並列性を実現させ、コントロールす
>るような並列プログラミングをパラレル化(Parallelism)と表現しています。

これは多分,並列化コンパイラのことを指してるんだと思います.
明示的に並列化するのはその場合くらいだろうから.
#逐次プログラムに並列用の指示を書き加えることで,半自動で並列
#プログラムを作成する.

>「Java言語におけるスレッドによる並列プログラミングは、あくまで可能性と
>しての並列性を提供するものです。もちろん、Java言語をパラレル化する拡張
>は可能ですが、Java言語の標準的な並列プログラミング機能は、パラレル化の
>機能を含んでいません。」

たしかにJavaは「並列化コンパイラ」の機能はもっていません.

ただし,並列処理は最初から想定されています.

これはJavaのメモリモデルを見れば明らかです.
またスケジューリングポリシーからもそれは伺えます.

あのメモリモデルは,一般的な「共有メモリ並列マシン」のアーキテクチャその
ものです.もしあのようなメモリモデルを採用していなければ,Javaプログラムは
共有メモリマシン上では十分な性能が出せなかったでしょう.スケジューリングに
しても同様.
#懐かしのSUN SparcServer 1000もこのタイプでした.最大8CPUの共有メモリマシン.
#SUNが,自分とこのサーバーマシンで性能が出ないように作るわけないでしょう?(^^)

JavaVM仕様は「実行時に並列処理しなければならない」とは記述してないはずです.
それは(広義の)最適化に関する部分であり,仕様書では関知すべきでない部分だから
です.これは,既に幅広く,自動的に行われているインライン展開やエスケープ解析
などでも同様です.


「Javaに並列処理機能がない」と文句をいうのは,
「Java(言語)にinline展開がない」と文句をいうようなものです.

言語仕様としてはそのような機能はありませんが,それらは最初から仕様に
折込み済みで,とっくに実装されています.

#こういう裏まで読むのが,仕様書を読むコツ.
#言語仕様にもVM仕様にも並列処理は明記されてないけど,含まれている.


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

Doug Lea自信が間違えているとなれば,Javaから並列に入った人はその辺を
誤解したままという可能性もありますね.有名人だからと言って,間違いが
ないとは限らない.


なんかハッカーとクラッカーみたい.

そのうち「本当の並列プログラミング」を表すために,新しく別の単語を
考案しなければならなくなるかも知れません.