[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から並列に入った人はその辺を
誤解したままという可能性もありますね.有名人だからと言って,間違いが
ないとは限らない.
なんかハッカーとクラッカーみたい.
そのうち「本当の並列プログラミング」を表すために,新しく別の単語を
考案しなければならなくなるかも知れません.