2010年5月6日木曜日

CUDA講習会

いまさらで恥ずかしいが、東工大で行われたCUDAの講習会に行ってきた。 CUDAはnVidiaのGPGPU(汎用GPU)向け開発環境の名前。CやFortranでGPGPU プログラムができる。

ユーザは、GPGPU上で実行される「カーネル」と呼ばれるコードを書く。 このカーネルを、大量のスレッドで同時並列に実行する事で、並列実行が 行われる。面白いのは、多量に実行するスレッドを2段階に階層化すること。 スレッドグループがコアに割り当てられるので、コア単位の並列度を稼ぐには スレッドグループを増やさなければならない。 個々のスレッドグループは一つのコア上で実行される。このときメモリアクセス のレイテンシを隠蔽するために、SMT的な並列実行が行われるので、 ここにも複数のスレッドを割り当てておかなければ効率が落ちる。

スレッドグループ内からのみアクセスできるローカルメモリと呼ばれる メモリがあり、これをうまく使うことで、大幅に高速化が可能。 今後はローカルメモリに変わって普通のキャッシュが導入されるとのこと。 この辺の最適化が不要になるので、さらに使いやすくなるだろう。

印象的なのは、CUDAの開発環境の完成度。コンパイルと実行が、ほとんど普通の CPUと同じようにできる。カーネルとホストプログラムを一つのファイルに書けたり、 a.outが一つのファイルになるのも、地味だが 非常に重要なポイント。プログラミングモデルも、単純で並列に 親しみのないユーザにもわかりやすくてよい。この程度の作業で 数倍-数十倍の高速化ができるのなら、やってみたくもなる。

ただ、今後のGPGPUの行く末がちょっと気になる。この種のアクセラレータが 今後主流になるのはいいとして、開発コストをGPUユーザに負わせるモデルが どこまで持続可能だろうか。ハイエンドGPUのユーザ層は先細りだし、 今後のGPUはプロセッサ内蔵の、よりカジュアルなものに移行していくだろう。 そうなったときにGPGPUの開発コストはHPCユーザが負わなければならない。 その場合のGPGPUの価格は、どのくらいになるんだろうか。

2010年1月29日金曜日

OS研究会@札幌 2010/1/27,28

2010年1月27日(水)
■仮想化(1) [13:30-14:45]
(1) ARMアーキテクチャ用仮想マシンモニタの実装
   鈴木章浩,追川修一
非特権センシティブ命令をスタティックに置き換えているところと, ページをつかわないでドメインでメモリ保護をさせるところが 面白いところ,なのかな?
(2) 仮想マシンのオーバヘッドおよび負荷評価方法の提案
   金田典久,飯塚剛,金木佑介
仮想計算機に統合する際のサイジングのお話.負荷予測? 統合前の負荷を調べておく.負荷シミュレータ.シミュレーションっていうか, 実機使ってるなあ...たしかに「負荷」をシミュレートしているだけなのか.
(3) XenにおけるPCI Passthroughの性能評価
   渡邉和樹,永島力,茂田井寛隆,片山吉章,毛利公一
PCI Passthrough と準仮想化を比較. 「遅延」とかいうのはおかしいよな. Domain0での実行が速すぎる.ちゃんと計測できていないんじゃないかとしか 思えない. 対象がディスクとか1GNICだと,ディスクが律速で,あまり差がでない.もっと速い 10GNICとか,GPGPUだと面白いんじゃないか?
■OS実装法 [15:05-16:20]
(4) OCamlによるOSの実装
   井上翔大,大山恵弘
OCamlでOSを実装.もちろん,ハードウェアに直接触る部分は Cのasm文で書いている.実装の完成度はまだまだだが,今後が 楽しみ.
(5) 異なるOpenCL実装を接続可能にするHybrid OpenCLの構築
   青木亮,追川修一,土山了士,中村孝史
他のノードのOpenCLデバイスをリモートで利用することのできるライブラリ の提案.複数のノードのOpenCLデバイスを同時に使うことで 高並列の実行が期待できるほか,各ノードがことなるOpenCLデバイスを持つ ような,ヘテロ環境にも対応できる.
おもしろいが, なんでHybridというのかイマイチわからん.なにとなにのハイブリッドなのか? 評価は1対1でしかやっていないので,1対多になったときの性能は不明. 1対1ではそれなりの性能が出ているらしい.今後のe-science cloud でGPUを使う,とか言うときにちょっと面白いかも.
(6) スクリプティング言語によるカーネル拡張
   井出真広,中田晋平,倉光君郎
konoha というJavaっぽいスクリプト言語でLinuxのモジュールを書く, というはなし.デモでは失敗していたが,まあそれはご愛敬. ランタイムをカーネルモジュールとして実装し,そこで実行する. konoha がCの構造体を比較的簡単に参照できるようになっているのがミソなのか.
1月28日(木)
■メモリ管理 [10:00-11:15]
(7) イーサネット接続SSDによるコンピュータのメモリ拡張
   鈴木順,馬場輝幸,飛鷹洋一,樋口淳一,加美伸治,内田智士,高橋雅彦,菅原智義,吉川隆士
express etherを使って,ioDriveをリモートから使ってswapを高速化. 現状だとPCIを1対1でつかうことになってあまりうれしくないが, 将来的には,共有できるようになるらしい.それなら面白いかも.
(8) ゼロコピー通信処理を可能にする実メモリ交換機能の提案
   門直史,田端利宏,谷口秀夫
Tender話.ページをスワップする機能を使って,ユーザランドと カーネルランド間での転送をサボる. ただし, ページ全体がスワップされちゃうので,実際には 受信時にはページにアラインメントされた領域を確保しなければ ならないから,pin downするのと大して変わらないおうに見える.
(9) 省メモリのためのメモリアクセス解析手法の提案と実装
   壬生亮太,高橋雅彦,菅原智義
組込機器でメモリアクセスをトレースしてリアルタイムで可視化する.
■並列・分散処理 [11:30-12:20]
(10)範囲検索と複数属性のデータの処理に適応した分散データストア
   川上大輔,松井俊浩,齋藤彰一,津邑公暁,松尾啓志
KVS を2つつかって,検索性と複数要素の格納を両立させる と言う話し.インデックスを別のKVSに作っている,ということなのか. 完成度は低そう.
(11)yass: yet another simple storage
   荒川淳平,笹田耕一,竹内郁雄
PHPで作ったストレージ.orz-DHT意外にもそんなモノがあるとは. 完成度高そう.マウントもできるらしい.
■仮想化(2) [13:30-14:20]
(12)SMPを活用したPrimary/Backupモデルによるリプレイ環境の構築
   川﨑仁,追川修一
SMP上でVMを時間差実行.イベントをバッファリングしてから食わせてやることで, 時間差で全く同じように実行させる.で,それをカーネルパニックしたときなどに 検出する.
(13)仮想マシンモニタを用いたVPN障害への透過的な対応手法
   松橋洋平,品川高廣,加藤和彦
クラウドへのVPN接続をVMM で管理することで,ゲストに対して透過に耐故障性を付与する.
■プロセス管理 [14:35-15:50]
(14)ライブラリ実装したプログラム実行速度調整法における処理の均一性の評価
   境講一,田端利宏,谷口秀夫,箱守聰
ライブラリでプログラム実行をスロットリング.cgroupとかで できてしまいそうで微妙.
(15)EDFスケジューリングにおけるDVFSを用いたCPU省電力化手法
   林和宏,並木美太郎
DVFS 制御による省電力.周期タスクで予測をいれることでより 効率的に制御できる,というところがミソ.
(16)プロセスグループ別LSMのためのLSMフレームワーク拡張
   中田晋平,倉光君郎
linux container で利用されている機能を用いて,セキュリティ機構を拡張.

2010年1月21日木曜日

GNU Emacsにおける暗号化機能の刷新

    
GNU Emacsにおける暗号化機能の刷新
上野 乃毅
コンピュータ ソフトウェア Vol. 26 (2009) , No. 4 
EmacsのPGP実装を入れ替えるのに,オープンソフトウェアコミュニティでどういう苦労をしたか,という話し.タイトルと内容がちょっとずれているような.

Comsysで聞いたTOMOYO LINUXをカーネルにマージする話しと似ている.しかしなあ,この話しこそ,ブログでもいいような.まあ,論文っていうのはもともとそんなもんなのかもしれない.

なぜソフトウェア論文を書くのは難しい(と感じる)のか

    
なぜソフトウェア論文を書くのは難しい(と感じる)のか
権藤 克彦, 明石 修, 伊知地 宏, 岩崎 英哉, 河野 健二, 豊田 正史, 上田 和紀
コンピュータ ソフトウェア Vol. 26 (2009) , No. 4 
ソフトウェアそのものに関する論文がなぜ書きにくいのか,を論じている.しかし,ソフトウェアそのものに関して論文を書くべきなんだろうか?まあ,まとまった形でどこかに知見が残されていることは有益だと思うけど論文である必要はない.ソフトウェアのドキュメントでもいいだろうし,ブログでもいい.問題はむしろ,論文という形じゃないと評価されない,というシステムのほうにあるような気がする.今後論文の相対的な地位はどんどん下がるんだから,無理に論文にしなくてもいいんじゃないかな.

2009年12月4日金曜日

appengine java night #3

ATND
<セッション1>
発表者:id:bluerabbitさん
参考URL: http://d.hatena.ne.jp/bluerabbit/
テーマ:「実際に作ってわかったappengineの困ったところ」
内容:実際にappengineで開発してみてどんな事が問題になったのか。その問題をどのようにして回避したのか。appengineの様々な制約に対する回避策をご紹介します。
天気予報を取ろうとすると,30秒ルールではじかれた. タスクキューで地域ごと142のタスクで実行.なぜか全部で3分かかった. キューの同時実行が想定通りでない.

バッチ処理が問題になる.バッチが終了したことをどうやって検出するか. 機能を分割.チェイン.終了判定はカウンタ.memcache counter. memcache のlow level APIでatomic なcountが可能らしい.

contains はやらないほうがいい by ひがさん

一発目の排他が難しい. s.put で 戻り値が返ってきたら制御 引数つきのs.putで失敗するように設定すればよい.

タスクキューは冪等を保証しなければいけないらしい.まあそうだろうな.

Mailの制限. 1日7000、1分32件.

JDOだと関連をもとに勝手にentity groupを作ってしまっていて混乱のもと.byひがさん

transaction 開始後最初のget/putで そのときのタイムスタンプをどこかに取っておく. commit のときに取っておいたタイムスタンプと同じかどうかを比較する. ancestor query 以外のqueryではtransactionがかからない.keyに対するgetだと だいtransactionになる.queryは本来複数の行を相手にしているので,そもそも どのentityグループにぞくしたqueryなのか定義できないから.ancestor queryは entity groupに対するqueryなので,定義できるから.

low level APIにはtransaction ありとなしのメソッドがある. なしのメソッドはデフォルトのトランザクションということになる. トランザクションは入れ子にすることができ,一番内側のトランザクションがデフォルト のトランザクションになる.

トランザクションにnullを指定すると トランザクション外で実行することができる.

開発環境でもちゃんとトランザクションの挙動が忠実に反映されている. kindlessAncestorQueryのみ挙動が違う.

serializable - トランザクション内の分離レベルはserializable 非常に強固な分離.oracleはread-committed. timestamp付きで bigtable から読んでいる.だから,横の commit前のデータがちゃんと読める.

ユニークキーは使えない.自分でユニークになるように制御しなければいけない.

KeyRange keys = service.allocateIds(KIND, 1); 
              <- これ,結構重い.まとめてやったほうがいい.1件20msぐらい.
String key = KeyFactory.keyToString(keys.getStart());
チェイニングの機能を提供したらおもしろいかもね.
<セッション2>
発表者:ぶいてく竹嵜さん
参考URL: http://blog.virtual-tech.net/
テーマ:「ぶいてく流 スケーラブルアプリの作り方」
内容:「GAEはスケーラブルである、とはいうものの、30秒ルールなど実際には様々な制約があって、大量のデータを処理したり、また、大量のアクセスに耐えうる業務アプリを作るのは大変難しいと思います。スケールしなければクラウドの意味はない!?ということで、ぶいてくでは、いろいろと制約を回避する工夫を行ってきました。これらは独自の方法で、一般的ではない部分も含まれますが、いろいろと応用は可能かと思います。課題に対応した一つの例としてご紹介しますので、これをきっかけに皆さんもいろいろ考えてみてください。

1.GAE使ってめいっぱいPDFを生成する。どのくらい生成可能でどのくらい時間がかかるか、など
2.1000件を超える大規模データを処理する方法。Pagingにおける、CounterやKeyなどの実装例
task queue スケールしないじゃんか!という話し. 請求書生成アプリ.PDFを差し込み生成. 受注受付処理と引き当て処理を分離.

ブラウザ上のデータも含めてデータの整合性を管理する必要がある.重要.

最大値,最小値は一瞬で取れる.最小値の場合は,nullが最少になることがあるので注意が必要

memcache getput 15ms
datastore put 100-250ms get 20ms query 620ms
全文検索を力でやろうとしている.すごいね.

全文検索にはcompass というのがあるがtoyで使えない.

2009年11月27日金曜日

Comsys 09 2日目

 ・拡張インプリサイスタスクの固定優先度スケジューリング(S)
  千代 浩之(慶應義塾大学),武田 瑛,船岡 健司(東芝株式会社),山崎 信行(慶應義塾大学)

   必須,付加 の他に終端タスクを加えた点が,「拡張」ということらしい.
   周期タスクを想定.ジッタの少ないスケジューリング手法を提案.
 
 ・Kumoi:クラウドコンピューティング研究・開発のためのシェル環境の構築(S)
  杉木 章義,加藤 和彦(筑波大学) 

   Scalaでcloud shellを実装,という話.下には既存のサステイナブルXXを使って
   いる.通信はRMI. たとえば,動的にVMの台数を制御するというようなことをする
   場合にそれを柔軟に書けるような枠組み,ということらしい.
 
 ・EDFスケジューリングアルゴリズム向けの軽量なDVFS制御手法
  林 和宏,並木 美太郎(東京農工大学) 
 
   デッドラインスケジューリングを行うシステムで,タスクごとに,CPU周波数を制御
   して,小消費電力を実現.

 ・TOMOYO Linuxの設計と実装
  原田 季栄(株式会社NTTデータ),半田 哲夫(NTTデータ先端技術株式会社),板倉 征男(情報セキュリティ大学院大学)
 
   TOMOYOはカードキャプターさくらからきている.原田知世にあらず.
   プロセス起動履歴をexecに手をいれることで取得している.
   Androidでもうごく!

 ・ファイル操作のシステムコール発行頻度に基づくバッファキャッシュ制御法の提案
  片上 達也,田端 利宏,谷口 秀夫(岡山大)

   普通はLRUでやるバッファキャッシュの制御を,ファイルのシステムコールの発生
   頻度で,重要なファイルをさがして,ファイル単位で制御する,という方式.
   Webサーバとバックアップを同時に実行した場合には性能が上がる,という主張.
 
 ・マルチコアプロセッサにおけるOSによるMMUを用いたスクラッチパッドメモリの管理方式
  佐藤 未来子,磯部 泰徳,並木 美太郎(東京農工大学) 

   スクラッチパッドメモリ ー コア内蔵のメモリ,キャッシュみたいなものだが,明示的に
   データを出し入れしてやる必要がある.OSのメモリ階層の一部として管理する
   アプローチ.FutureというOSに組み込んでいる.SHマルチコアRP1で実行.
   実機でやったというのはすごいな.
   しかし,普通のアクセスパターンだったら,キャッシュでよいだろう.
   逆に,SPMが有効になるような場合は,アプリの情報が無いと難しそう.
   OSで管理するのは無理なんじゃないかな...
 
 ・分散 Key-Value Store である ROMA とその応用例
   西澤 無我(楽天技術研究所)

   Tokyo Cabinet をバックエンドに使っている.
   eventmachine とfiber(co-routine (1.9からはいった))で実装.
   履歴保持に実際につかっている.

 
 ・完全モジュール型リアルタイムLinuxの開発
  加藤 真平,石川 裕(東京大学)
 
 ・CMP上でスレッド間の参照の局所性を活用するコア間時間集約スケジューラの評価
  山田 賢(九州大学大学院システム情報科学府),日下部 茂(九州大学大学院システム情報科学研究院)
 
   

 ・Interactive Application Scheduling with GridRPC
  Sun Hao(TokyoTech),Aida Kento(NII/TokyoTech)

   Ninf-G使ってくれている.

2009年11月26日木曜日

Comsys 09 1日目

 ・Live migration of processes maintaining multiple network connections (40分)
  Gerofi Balazs, Fujita Hajime, Ishikawa Yutaka(The University of Tokyo)

   ネットワークを維持したまま,プロセスマイグレーション.BLCRを利用.
   コネクション確立をパケットを飛ばさずにリプレイすることで,デスティネーション側
   でネットワーク接続状態を再現.


 ・Kemari: 仮想マシン間の同期による耐故障クラスタリング
  田村 芳明,柳澤 佳里,佐藤 孝治,盛合 敏(NTTサイバースペース研究所)

   Xenで,継続的にコピーし続けることで,耐故障化.ページを汚すアプリだと
   最大42パーセント程度の性能低下.ネットワークは10Gでも90%でる.
   性能はネットワークのスループットではなく,レイテンシに依存するとのこと.
   KVMへ移行中.
 
 ・トラフィック量に適応する非対称マルチリンクEthernetトランキング
  米元 大我,塙 敏博,三浦 信一,朴 泰祐,佐藤 三久(筑波大学)
 
   ネットワークトランク機構の改良.+とか,++とか言ってる.

 ・NILFSのLinuxメインラインへの統合
   小西 隆介(NTTサイバースペース研究所)

   どうやったらメインラインに入れてもらえるか!という話. 
   オープンソースとしてのコーディング.読む人のことを考えて
   わかりやすく書け.抽象化しすぎるな.typedefを多用するな.
   キーパーソンにアクセス.時期も重要.
   開発者会議とユーザ会議を使い分ける.LKMLとサブトピックMLの使い分け.
   メンテナに会いに,タスマニアに行ってる!

   リリース後の2週間しか新機能を入れるwindowはない.その後はバグフィックスのみ.

 
 ・ホスト型仮想計算機環境におけるファイル入出力のVFSアウトソーシングによる高速化
  豊岡 拓,新城 靖,齊藤 剛(筑波大学) 

   仮想計算機でファイルを使うと,ゲストのVFSを通ってから,ホストのVFSを通って
   ファイルアクセスをすることになる.これをバイパスすることで効率化する.
   WFSと呼んでいる.
   sendFileのアウトソーシングで,ファイルの内容をVMに読み込まずにネットワークに
   流しているのは面白い.
 
 ・ヘテロジニアスクラスタ向けシングルシステムI/O機能
  清水 正明(日立中研・東京大学),米澤 明憲(東京大学 

   演算ノードと制御ノードがあるヘテロクラスタで,演算ノードのI/Oを制御ノードに
   オフロード.システムコールレベルでフックしている.演算ノードはPS3.
 
 ・WinKVM : 異なるホストOS間のVMライブマイグレーション実現に向けて(S)
  高橋 一志,笹田 耕一(東大)

   KVM VMをLinuxからマイグレーションできるように,WindowsにKVMを移植.
   すごい,動いている.ようだが,かなり遅いらしい.まだ.
   KVMをいじらずに,スタブをかまして,Windows APIに翻訳している.
   visual C++ とcygwin gccを併用.大変そうだ.
   マイグレーションはまだできていない.