はじめに

ソースはGitHubに移行しました。

ちょっと目を離した隙にマルチコアCPUが普通になり、 並行処理・並列処理の話題が普通のプログラマの意識にのぼりはじめた。
20年前、並行処理・並列処理は高価なハードウエアを存分に使える特権階級しか触れることのできない研究の最前線だったが、 今や普通にMultiCoreマシンが家庭内で稼働している。

わが身を振り返ってみるとこの20年、学生時代に学んだ基本的アルゴリズムの知識から進歩していないことに気づく。

ということで、知識とスキルのリファインのために、並行処理の論文読破と実装にトライしてみることにした。
また、裏テーマとして仕様検証技術を実地に応用してみるというのがある。

ターゲット

  • C言語
  • この実装をはじめた理由は、Javaのサンプルを動かしても本当の難点は理解できなかったから。
    他人の書いたソースを漫然と読んでなんとなく分かった気になっていたが、 どうも身についた感覚がないので一番馴染んでいて原始的なCで実装してみたところ、 何一つ理解していないことに愕然とした。 たとえ無駄と思えようと、一度Cで実装してみるのは並行処理の理解には必須と思う。
  • Intel x86
  • X86_64対応済み。 とりあえず最もポピュラーなIntel系32bitCPUでの実装に限る。 近々にIntel64bit系に対応予定。また、いずれはSPARCにも手を出したいところ。
  • Linux + OSX
  • LinuxとOSXで稼働する。 とりあえずコンパイラはgcc、OSはLinux 2.6系で行う。可能な限りFreeBSDとSolarisも試したいとは思う。 なぜならSun Fireあたりで32スレッドでの評価が必須だから。是非ともT1000かT2000を入手したいものである。

現状

言語

Javaを筆頭に並行プログラミングを言語レベルでサポートするようになってきた。

  • Java
  • java.util.concurrentパッケージが非常に強力。 Cでインラインアセンブラ駆使しなければならないDCASが一発だったりする。 1.6からはパッケージにConcurrentSkiplistが加わったりと、プログラミング環境も充実しつつある。
  • C++
  • 次期標準C++0xでは並行処理を前提にした仕様となる模様。具体的にはatomic型とかメモリバリアとかが 仕様に入ってくるようだ。
  • Haskell
  • STM(ソフトウエア・トランザクショナル・メモリ)が利用できるらしい。これは画期的なのでは。
  • Occam
  • Occamが復活してきたらしい。
  • Erlang
  • 変則言語のErlangも並行処理が得意。
  • Go
  • 個人的に大っ嫌いなGoogleがGoを出してきた。CSPモデルだと宣言している。 まあ、今のところ話半分で…

90年代は並行処理言語なんて実験用でしかなかったのだが、 今や普及している言語の仕様内で並行処理できるようになっている。
プログラミングする立場からすれば並行処理するための敷居が低くなっているのだが、 はたしてそれでいいのかという疑問もある。
卑近な例でいえば、オートマ免許で本当に車の性能を引き出せるのか?
私の感覚を述べると 「並行処理は人類の頭脳の許容範囲を超えているので、何をしているのか正確に理解することと ツールを使った自動検証の両方が必要になる」。
逆説的だがF1レーサーはセミオートマチックのF1マシンに乗っている。
一流レーサーは車のすみずみまで知りつくしていて、超高速走行で何が起こっているか分かっている。 そして、それだけの腕をもってしても現代のマシンの最高性能を引き出すためにセミオートマなどの 機械を利用している。車の性能が人間の反射神経や処理能力を超えているからだ。 ある程度は機械が補助しなければならない。
並列処理も同じで、思いもよらない競合状態で再現性の低いエラーに対処しなければならないプログラマは、 処理をアセンブラレベルで理解した上で、 まじめに考えたら組み合わせ爆発を起こすプロセス間やスレッド間の競合可能性について 仕様検証システムなどの現代的なツールを使って乗り越えていくのがこれからの仕事のあり方ではないかと 考えている。

もっとも、新しい計算パラダイムが台頭してくる可能性もありますが…
この記事で触れられているように、 Single-chip Cloud Computerなんてものができてるし。
視野を広く持って生きていこう。

開発環境

Intel "Parallel Stadio" & "Threading Bulding Blocks"

Sunが燃えつき、今や唯一のサーバー用CPUメーカーとなりそうなIntelが販売、開発している開発環境。システム検証にも少し踏み込んでいる。
素晴らしいのはオープンソース版でソースが読めること。

OpenMP

今回の目的とは違うが、並行処理といえばOpenMP(や"Threading Bulding Blocks")のことを考える人の方が多数だと思う。

開発支援ソフト

特にシステム検証論の盛んなヨーロッパの様々な企業が開発支援ツールを販売している。 例外なく高いので試用すらできないのが難点だが、基礎研究を地道に続けてきた連中の底力はものすごいものがある。


などなど、関連情報を列挙していく予定。



Last-modified: 2014-7-6