08.Occamという言語

●適切なスレッドサイズとは

 そもそも本当に単に500個の整数テーブルの合計をとりたいだけなら、わざわざスレッドに分けるまでもない。

 単純な足し算1つのためにスレッドを何百も生成して演算するなどというのは愚の骨頂と言わざるを得ない。
 スレッド生成はアプリケーション起動並みの負担がかかる上に、同時に多量のスレッドが動くと、複数のスレッドのスイッチが頻繁に起きて、かえって速度の低下を招く。スレッドを細かく分けすぎるのも問題がある。

 だから、スレッドは、適切な大きさである事が望ましい。


 ――とは言え、プログラム設計段階で、最適なスレッドサイズはわかる訳がない。
 何度も実験して効率的に動くようにアルゴリズムを何度も見直しをしなければならないが、それができるほどプログラマは暇ではない。
 そんな暇があるなら、バグのないプログラムを作る事の方が先決だ。

 今でこそThreadオブジェクトによってマルチスレッドはずっと簡単に記述できるようにはなったが、相変わらず、バグの温床になりやすく、危なっかしくて使えない。(スレッドを適切に扱えるノウハウがないと不可解なバグを生じやすいという意味。)
 よほどの事がない限り、マルチスレッドはやらないのが無難だ。
 プログラマの立場から言えば、従来からあるプログラムがマルチCPUシステムで自動的に並列実行してくれればいいし、せいぜい、並列コンパイラで再コンパイルするだけでOKぐらいにしてもらいたいと思う。

 一方、CPUやOS側の立場で言えば、スーパースカラーのような、目先の並列処理はできるが、もっと大局的な並列化はソースプログラムレベルでスレッドを明確にしてもらわないと困る。
 そもそもプログラムの多くが順次処理を前提にしているので、コンパイラだけで自動的に最適なスレッドサイズにまとめるのは無理がある。
 そう都合良く並列化はできない。


 「適切なスレッドサイズ」のような低レベルな検討は、手段に対する話なので、言語上は意識しなくて済むようにしなければならない。

 だからこそ、スレッドサイズを意識しないで並列処理を記述できる、新たなコンピュータ言語(あるいは概念)が必要になる。


2006/12/31
●Occamという言語

 言語レベルで並列演算ができるコンピュータ言語にOccamというのがある。

 Occamは、元々、トランスピュータ(Transputer)という、高速並列演算コプロセッサ専用のプログラムを記述する言語である。
 トランスピュータは、単独でも高速な演算をする専用プロセッサだが、複数のトランスピュータを接続して互いに同期をとりながら並列演算を行うことができる。それにより、汎用CPUとは桁違いに高速な処理ができるプロセッサである。

 並列演算は、以前述べたように闇雲に並列処理をしても結果は出てこない。
 各処理の因果関係を崩さずに演算ができるよう、トランスピュータ・アレイの音頭取りに使う言語がOccamである。

 残念ながら、知っているのはその程度で、詳しくは知らない。検索して調べてもらった方が確実かもしれないし、私自身の知識レベルも、今のところその程度だ。


2006/12/31
●Occamの辿った歴史

 Occamの歴史をひもといてみるとおもしろい。

 Occamは、一応、言語体系としては汎用言語にはなるが、トランスピュータを複数個搭載しない限り神髄を発揮できないという汎用性のなさからか、雑誌などで詳しく紹介された例もほとんどない。
 一応、コンピュータ言語なので、通常のシングルCPUでも動かせる処理系を作ることは不可能ではないが、シングルCPUで並列処理をエミュレートする事自体、無駄にメモリを多量に消費したあげく、単に時間がかかるだけである。

 トランスピュータを何台も接続したシステムがあれば本領を発揮できるものの、トランスピュータ自体、汎用CPUよりも高価で、しかもそれを何台も接続するとなると、ものすごい値段のシステムになる。個人が買える値段ではもちろんないし、大手企業や大学だって手を出しにくい値段だっただろう。(しかも、くっついているトランスピュータ・アレイを扱える言語はOccamだけで、FORTRANなどからは使えないという専用も専用のハードウェアだ。)

 結局、限られた機械のための言語となると、どう考えたってBASICやCOBOL、C言語といったメジャーな言語にはなり得ない。

 言い方が悪いが、Occamという言語はトランスピュータというハードウェアと共倒れした言語の典型的な例と言える。ハードウェアに密着したソフトウェアは、ハードウェアとともに葬り去られてしまう危険がある。

 現在、開発が進んでいる(と言われる)汎用プロセッサにコプロセッサを組み込む、ヘテロジニアスマルチコアが、トランスピュータの二の舞にならないことを願いたい。

 ただ、Occam自体は、Occam2、Occam3…とバージョンアップされて特定のプロセッサに依存しない形に進化しているらしい。

 再三言ってるが、CPU単体の高速化には限度がある。
 その後は並列処理しか高速化の方法はない。
 そのときになって、初めてOccamの本領が発揮できる時代になる。
 Occamの登場は、時代が早すぎたとも言えるだろう。


2006/12/31

[戻る]