BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース ソフトウェアトランザクション:プログラミング言語の観点のひとつ

ソフトウェアトランザクション:プログラミング言語の観点のひとつ

Erlangは並列処理を効率よくしかもエレガントに(参考記事)扱える言語として多くの関心を呼んだ。とりわけErlangはマルチコアプロセッサ向けのプログラミングに向いていると考えられている。Erlangのキーとなるデザインコンセプトのひとつは、”プロセス”のインスタンス間に共有メモリがないということだ。それらは非同期メッセージで通信をおこなう。それでもやはり、共有メモリの並列性はホットな研究課題としてある。

先日、UWTV(University of Washington Television)でDan Grossman氏が”ソフトウェアトランザクション:プログラミング言語の観点のひとつ(source)という講義のウェブキャスト(source)を行った。Dan Grossman氏はここでトランザクションメモリの最新技術についての概要を説明し、またこのことについてGoogleとUC Barkley校でもスピーチをしている。

Dan Grossman氏(source)はワシントン大学の助教授でコンピュータ理工学部に在籍している。彼の研究内容にはプログラミング言語の設計、実装、理論が含まれる。

彼の講義の焦点は、プログラミング言語の意味論と実装におけるトランザクションの効果を探ることと、マルチスレッドのトランザクションがどれだけスケールできるかを研究することだ。

彼の講義の焦点は、プログラミング言語の意味論と実装におけるトランザクションの効果を探ることと、マルチスレッドのトランザクションがどれだけスケールできるかを研究することだ。マルチコアプロセッサにより並列コンピューティングが一般に広まったことで、並列処理プログラミングをより簡単に行いたいという要望が出てきました。ソフトウェアトランザクションは共有メモリの並列処理を簡素化する大きな可能性を秘めていて、ここ2年のうちに研究団体から非常に大きな関心を集めるようになりました。

彼はトランザクションメモリとガベージコレクションとの関係についておもしろい例え方をしている。

トランザクションメモリ(TM)が共有メモリの並列処理において担う役割は、ガベージコレクション(GC)がメモリ管理において担う役割のようなものです。                                          

彼は並列処理プログラミングはメモリ管理が難しいのは正確性とパフォーマンスのバランスを取らないといけないためだと説明する。callerと callee(呼び出し側と呼び出された側)のように、双方ともバラバラには扱えずお互いを知っている必要がある、そして少しの変更のために大幅にコードを変更しないといけないこともしばしばだ、とも述べる。

彼はGCと同じように、TMについてもこれまで自前で作られていたプロトコルを言語の実装に組み入れるのが解決策だと提案する。一方で彼はTMが次のような問題を抱えているのも認識している。

並列実行不可能ということを近似で不正に得ることでメモリコンフリクトが起きる時があります

彼は3つの隔離性レベルに分けたソースレベルの形式意味論を紹介する。

  •  ”強い”(Strong):もしあるスレッドがあるトランザクションを実行中なら、他のスレッドは共有メモリを使ったりトランザクションを実行開始できない。
  • "弱いワンロック"(Weak-1-lock):もしあるスレッドがトランザクションを実行中なら、他のスレッドはトランザクションを実行開始できない。
  •  "弱いアンドゥ"(Weak-undo):弱いワンロックと同じだが、加えて実行中のトランザクションはどの時点でも停止して変更をアンドゥし、再度やり直すことができる。

彼はある誤認が世に広まっていることを示唆する。

”弱い”隔離性はロックを行うコードが複数実行された時にだけプロパティのロックを行うのです

続けて彼はキーとなる理論の証明をおこなう。それには以下のことも含まれる。

弱いワンロックができないことでも弱いアンドゥにはできることがあります。

講義の第二部はこれらの意味論をマルチコアシステムに適用することに費やされる。最初に、単一プロセッサが特別で重要なケースだと指摘することから始まる。彼はこう言及する。

  •  共有メモリ経由のスレッド通信は実際には並列で行いません
  • 多くの言語の実装ではこれが前提となっています       
  • マルチコアは一つのアプリケーションを一つのコアに割り当てることになるでしょう

単一プロセッサの場合、トランザクションメモリの強い隔離性にはほとんどコストがかからないとGrossman氏は述べる。メモリアクセスのオーバーヘッドはほとんどなく、ロールバックが起きることも稀だ。さらに書き込みにはログが残る。彼はまた、非トランザクションコードでパフォーマンスを上げるためのバイトコードレベルでの静的な最適化についていくつかの例を説明している。

Grossman氏のチームではマルチスレッドのトランザクションのケースについて取り組みを始めている。彼は人々が想定していることである重要な点についてこう問う。

ほとんどの(ハードウェアまたはソフトウェアの)実装ではトランザクション内のコードはシングルスレッド化されるのが条件とされていますが、隔離性と並行処理は直行性、つまり隔離することと並列処理できることは違うのです(そしてAmdahlの法則(Amdahl’s Law)がマルチコアを襲うでしょう)。

この条件によって実装がシンプルになるため、それなりの根拠はあると彼は指摘する。しかしコアの数が増えるにつれて、この条件のためにシステムのパフォーマンスが下がることになる。もしこの条件に縛られたくないなら、言語レベルでネスト・トランザクションを導入する必要がある。またログの並列化はスケーラビリティを実現する上での重要な問題のひとつだとも指摘する。彼はどの時点でAmdahlの法則(コア数が増えてもある比率でしか性能向上が見込めず、例えば16個のコアでは4倍しか向上しないという考え方)がネックになり、これまでに挙げた機能強化を施す必要があるだろうかと考えているが、それはコアの数が100単位になった時のことかもしれないと言っている。

原文はこちらです:http://www.infoq.com/news/2008/03/software-transactions

この記事に星をつける

おすすめ度
スタイル

BT