月別アーカイブ: 2007年9月

Bluetooth キーボード Rboard for Keitai RBK-2000BT2

また 何か届きました。

RBK-2000BT2

折りたためる Bluetooth キーボードです。
リュウド RBK-2000BTII

折りたたんだ時はちょうど EM・ONE (標準バッテリー)と同じくらいの
厚みです。電池込みで実測 209g

RBK-2000BT2

開いたところ。

RBK-2000BT2とEM・ONE

大きさ比べ。

RBK-2000BT2とTK-UP84CP

↓上が FILCO パピヨン

RBK-2000BT2とパピヨン

パピヨンよりもキーが大きく、間に隙間も無いので一般的なキーボードに
近い感覚です。パピヨンと違い数字段にもずれがありません。
キータッチもパンタグラフ式のおかげかストロークがスムーズです。

正式対応しているだけあって EM・ONE とのペアリングも問題なくすぐ
使えました。マニュアル通りです。復帰時も認識に数秒かかりますが、
それ以外は何もせずに使えるようになるのでこれは便利ですね。
WM 端末は外付けキーボード端末として利用しているので、これから
じっくり使い込んでみるつもりです。

キートップの刻印は ASCII(英語)配列ですが日本語キーボードとして
認識されます。もしキーの刻印と入力文字を合わせたい場合、または
ASCII 配列派の方は em1key + asciipatchwm で対応できるかと思います。

em1key
asciipatchwm

自分は普段 JIS 配列で使っているのでこのままで十分そうです。
ただ日本語キーボードとしてみた場合キーが足りないので、
[¥|] と [_] が打てませんでした。
この辺は em1key のカスタマイズで何とかしようと思います。

よくみると左上に小さい [Esc] キーがありますね。
もし無理やり親指シフトで使うとしたら、パピヨン改 と同じように
alt を割り当てる形になるでしょうか。この場合親指がちょっと窮屈な
感じです。

emobile EM・ONE WM6 アップグレード

WM6版の EM・ONE S01SH2 きましたね。
イー・モバイル、Windows Mobile 6搭載の「EM・ONE α」
NEWS | eMobile
しかも従来機種もアップグレード可能!
予想していなかったのでこれはうれしい。
最近稼働率が低かったのでちょうど良いです。

WindowsCE(PocketPC) の OS アップグレードといえば、以前
Toshiba GENIO e550 初代 と iPAQ h3630 で経験したことがあります。
両方とも PocketPC(PPC2000) から PocketPC2002 への変更でした。

CPU が ARM に一本化されたり、ボタンレイアウトが iPAQ 準拠に
なったりと、いろいろ変化があったあのときです。
特に GENIO はすぐアップグレードがあることを前提に発売したような
感じで、ARM 採用など最初から 2002 向けのデザインでした。
PPC2000 のまま使ったのはたぶん半年に満たないです。

そのわりに RAM 増設のために本体も送ったりと GENIO のアップ
グレードは結構大掛かりでした。(増設無しも可能)
EM・ONE はもともと本体性能がいいので余裕でしょう。

iPAQ は CD-ROM が送られてきて自分で更新できました。
英語版では ROM が少なかったので、ROM に入りきらなかった一部の
ソフトがダウンロードインストールになっていたようです。
その後しばらく MS のサイトから TerminalServicesClient だけ個別
ダウンロードできたのは、、iPAQ の ROM が少なかったおかげです。

Direct3D 10 ShaderModel4.0 迷路の自動探索Shader

前回迷路を作成するシェーダーを作りました。
Direct3D ShaderModel4.0 Shaderで迷路作成

でも作成した迷路が本当に端から端までつながっているのか、
壁がどっかでつながっていたりしないか確認するのが大変なので、
今度は自分で探索させてみました。

ss04 maze 128x128

まず迷路を作り、その後色のついたピクセルが勝手に歩き回ります。

キャプチャだけだと良くわからないので、これも実際に走らせて
ぜひ動いているところをご覧ください。
動いているところだったら、何をやっているのか一目瞭然だと思います。

今回は動きがわかりやすいように 128×128 の初期データが入ってます。
ss03(前回)の initdata.png を使うと 512×512 の迷路になります。
拡大しないとわからないですが暇な時にじっくり見るのにお勧めです。

基本的にすべての探索点は同じアルゴリズムで動いています。
どれも右側の壁伝いに歩いてすべての通路を歩きつくそうとします。
ただしお互いにも衝突するので、狭い路地から出られなくなったり
ショートカットして違う分岐に進んだりと結構ランダムに散ら
ばってくれるようです。

壁伝いに動くため、壁を見失うとその場でくるくる回ってしまい
ます。誰かが助けに来てくれるまでそのままです。

探索点はランダムに左上 (1,1) の点から生み出されます。

シェーダーは下記の 2つです。
 ・maze.fx (迷路生成、前回のものと互換性あり)
 ・walk.fx (迷路探索)

cpp 側のソースを見るとわかりますが、シェーダーを適用して
Draw( 4, 0 ) で四角形を1つ描いているだけになっています。

処理は全部 PixelShader です。迷路のデータを元画像として
レンダリングすると次のシーンが出来上がるわけです。
使っている画像フォーマットも通常の 32bit (R8G8B8A8_UNORM) です。

walk.fx での内部的なピクセルの意味は次の通り。

R= 0.00 路地
   0.25 衝突判定用予約点
   0.50 探索点
   1.00 壁
G= 向き (探索点と予約点のみ) 0.25単位で 上下左右
B= 向き確定フラグ (探索点のみ)
A= 探索点の色

フレームバッファに転送する際に内部ワーク状態を消すようにした
ので、ちらつきも無く見やすくなっています。その代わり判定
している様子など内部状態は見えなくなりました。

walk.fx で使っている乱数は1つだけ。探索点の生成と探索点自身
の色決定です。移動時の判定順は次の通り。

(1) 未確定で右側が空白なら優先して向きを変える(確定)
(2) 前が空白ならそのまま確定
(3) 右も前も埋まっているなら左に向きを変える(未確定)

単なる画像処理なので探索点はいくつでも構わないし、何千個
あっても、数万個あっても処理速度はほぼ一定です。
動的分岐とリソースアクセス遅延によるばらつきが出る可能性が
ありますが、ほぼ完全に面積だけで速度が決定します。

複数同時に動く可能性があるので、衝突判定はかなり厳密です。
Shader が入力可能なのは 1つ前のシーンだけなので、同じ空白を
複数のピクセルが同時に移動可能と判断してしまう可能性が
あるからです。

この同期サイクルのせいで、1pixel 歩くまでに 3フレームも
費やしています。迷路生成よりも判定が長いのは、確定判定が
追加されたからです。まず maze と違い足跡を正確に消す必要が
あります。さらに右を向いた瞬間もと来た場所が空きになるので、
さらに右手に回れると判断してしまう(戻ってしまう)ことも防いでいます。

これらの判定のおかげでピクセルが同時にいっぺんに移動しても
問題なく処理可能となりました。すり抜けも起こらないでしょう。

迷路の生成 maze.fx は ss03 と同じものですが、乱数計算に
偏りのバグがあったので一部修正しました。これはそのまま
ss03 で使うことも出来ます。

ダウンロードはこちらです。
wheelhandle_ss04t.zip
ソースだけでなく実行ファイルも入っています。

Direct3D ShaderModel4.0 Shaderで迷路作成

2D 迷路を作成する Shader を作ってみました。
これは実際に見た方が早いと思うので、環境がある方はぜひ走らせて、
動いているところをご覧ください。

64×64 で作成中
maze 64x64

512×512 で作成中の一部
maze 512x512

前のフレームの画像をもとに Shader で発展させていくだけで迷路が
出来上がります。

同時に移動した場合の成長点同士の衝突判定を行う都合上、壁が 1dot
成長するために 2フレームかかります。
その代わり平行していくつでも成長点を設けることができ、
同時に複数の壁を伸ばすことができます。
画像1枚をレンダリングしているだけなので、成長点がいくつあっても
処理速度はほぼ一定です。

アーカイブ内の initdata.png が初期画像です。任意のサイズを与える
ことができます。また白黒2値の絵を描いておくとそれをもとに発展
させます。最外周には必ず白枠が必要です。

生成処理は PixelShader 1つで完結しています。
最適化は全くしておらず、命令数は 625 slot もあります。
ほとんど if 文の塊で、調べたら動的分岐が 9段もネストしていました。
temp register を 27個も使っているので並列度も低いです。
ループを unroll しているのは最適化のためではなく、ループを中断
終了するためです。

sampler を使わずに Buffer から読み込んで整数処理すれば、条件判断
も簡略化できるためずっと小さくなるでしょう。

乱数テーブルのみ CPU で生成しています。本当はこれもシェーダーで
やるべきところなのですが今回は見送りました。

成長点はランダムで壁が変質して出来ます。各ピクセルの意味は R で
判断しており、次の 4つの状態があります。

R = 状態
	0.0  = 空白 (黒)
	1.0  = 固定壁 (白)
	0.5  = 成長点 (壁相当)
	0.25 = 成長予約席 (空白相当)

成長点のみ G B A も意味を持ちます。

R = 0.5 (成長点)
G = 向き (0.0~0.25=上, 0.25~0.50=下, 0.50~0.75=左, 0.75~1.00=右)
B = 直進制限長
A = 回転タイムアウト

最後になかなか埋まらない隙間が出来るのは壁から成長点を作る判定が
単なる乱数だからです。全く発展できない場所にもどんどん成長点を
作ってしまい、それがちらついてノイズに見えてしまいます。
必要な場所に生成して、不要な場所には成長点を作らないようにすれば
隙間も埋まるしちらつきも減ると思います。
成長点の生成ノイズが縞々に見えるのは、乱数の質が悪い証拠です。

実行ファイルとソースのアーカイブはこちら。シェーダーも入ってます。
wheelhandle_ss03t.zip

動作には Vista + DirectX10 (August2007 Runtime) が必要です。

Folding@home 1PFLOPS 超えのその後

ここ数日ポイントの低いデータしか来なくなって、1日の平均が大幅に
下がっていました。チーム順位もすっかり変動が無くなっていて、
こまめなチェックも飽きが出はじめていた、ちょうどそんな頃。
たまたま全体の stat を見ていたら歴史的瞬間(?)が待っていたという
のがこれ。
Folding@Home 1PFLOPS 達成?
また止めるタイミングを逃してしまいました。

その後1日経過してさらにスコアは上昇しています。

Folding@Home Client statistics by OS

OS Type            Current TFLOPS    Active CPUs    Total CPUs 
Windows            163               171778         1793194 
Mac OS X/PowerPC   7                 9311           105296 
Mac OS X/Intel     13                4120           23248 
Linux              36                21427          244481 
GPU                42                704            4187 
PLAYSTATIONR3      793               35552          246939 
Total              1054              242892         2417345 

Last updated at Mon, 17 Sep 2007 02:51:22  

見所は Current TFLOPS の Total です。
これは参加している全計算機の演算能力の合計で、約 24万 CPU/GPU が
実稼動していて総計 1054 TFLOPS をたたき出していることになります。
1PETA FLOPS を超えています。
そのうち PS3 は 35552台。1台あたりおおよそ 22GFLOPS くらいです。
理論的なピーク値ではなくて、実稼動でこれだけ出ているのだから
かなりのものです。

PS3 は Version 1.2 への upgrade の影響が大きいとは思いますが、
さらにポイントが低い代わりに演算効率の良いデータが増えたのか、
涼しくなって純粋に参加台数が増えたのか、その両方かもしれません。

ちなみに GPU はもっと上を行っており、処理効率が非常に高くおよそ
58GFLOPS にも達しています。アルゴリズム的に相性の良いプログラム
ではさすがに爆発的なパワーを発揮しますね。
現状 ATI X1 系でしか動いていないのは、もしかしたら分岐のコストに
原因があるのかもしれません。R600 の HD 2 系ではこの辺若干仕様が
逆行しているため、今度は G80 系の方が中心になる可能性はあります。
ともあれ汎用化の道をたどって進化している GPU なので、今後 D3D10
クラスで動くようなれば、さらに高度かつ高速な運用が見込めるでしょう。

ゲーム機にビデオカードと、今家にはいったい何 GFLOPS 分くらいの
プロセッサがあるのでしょうか・・。

Folding@Home
Wikipedia Folding@Home
Wikipedia Folding@Home jp