2009年12月6日日曜日

Sleep Cycle: レム睡眠時に起こしてくれるiPhoneアプリ

「毎朝快適に起きたい」というのは全人類の夢ですが、それを叶えてくれる(かもしれない)のが、Sleep CycleというiPhoneアプリです。これは「寝返りを検出し、睡眠パターンを調べて、レム睡眠になったタイミングで音を鳴らし、快適に起こしてくれる目覚まし時計」だそうです。

とりあえず商品説明を聞いた瞬間に、
  1. iPhoneで寝返りが検出できるのか?
  2. 寝返りのパターンからレム睡眠がわかるのか?
  3. レム睡眠時に起きると快適なのか?
という疑問が浮かんだので、調べてみました。

iPhoneで寝返りが検出できるのか?
→できる(false positiveもあり?)
Sleep Cycleにはテスト機能があります。テストモードにしたiPhoneをベッドに設置し、ベッドで実際に寝返り(だと思っている動作)をしたところ、Sleep Cycleは寝返りを検出しました。ただし、寝返りではなく、少し頭を動かした時に反応したようです。実際に自分がどのように寝返りを打っているのか分からないので、この精度が問題になるかどうかは不明です。

寝返りのパターンからレム睡眠がわかるのか?
→できそう
「寝返りはレム睡眠前後に多い」と書かれているサイトは、いくつか見つかります(こことかこことか)。おそらく脳波と寝返りの関係を調べた実験があるのでしょうが、その実験自体の情報は見つかりません。

レム睡眠時に起きると快適なのか?
→今日は快適
昨晩Sleep Cycleをセットして寝たのですが、今日は快適に起きることができました。Sleep Cycleにプリセットされた目覚まし音は、一般的な目覚まし音(ピピピ・・・というビープ音)と違って、とても柔らかい音楽ですが、サクッと目が覚めました。

そもそも「快適に起きたかどうか」は主観的な感覚なので、自分で実験してみるしかないです。もう少し使ってみれば効果の程がわかるでしょう。ちなみに、Sleep Cycleは$0.99。本当に快適に起きられるなら、安すぎる。

なお、同様の目覚まし時計として、SLEEPTRACKERというものがあります。こちらは以前から知っていたんですが、15,000円超という値段がネックで試してません。寝るときに腕時計を付けるというのも、若干嫌な感じが・・・。

POWER processorのgroup dispatchとは

前回のPOWER7に燗する記事を書いていて気になったので、"group dispatch"について調べました、というか、Inside the IBM PowerPC 970 ? Part I: Design Philosophy and Front Endを読みました。2002年に書かれたPower 970とPentium4との比較記事なので、かなり古いですが、POWERアーキテクチャの基本は変わってないはず。

まず、Pentium4の概要から。Pentium4は、1つのインストラクションを複数のmicro-operation (uOP) に変換し、実行ユニットはuOPをOut-of-orderで実行します。

Power 970の場合も、インストラクションをinternal operation (IOP) に変換するところまではPentium4と同じです。ところが、この後IOPは「グループ」と呼ばれる単位にまとめられます。グループは、最大5つ(POWER7では最大6つ)のIOPから成り、Out-of-orderは(各IOP単位ではなく)グループ単位で制御されます。こうすることで、Out-of-orderに必要なモジュール(reservation stationとかreorder bufferとか)を小さくして、トランジスタを削減できます。

ただし、この「グループ」の構成にはいろいろ制約があるようです。
  • スロット0からスロット4に入るIOPはプログラム順でなくてはならない
  • 分岐IOPはスロット4にしか入れられない。また、スロット4には分岐IOPしか入れられない
  • 1つの命令を構成する複数のIOPは、複数のグループに分割できない
これを満たせない場合は、スロットにはNOPが入ります。したがって実行効率が低下します。(この問題はVLIW/EPICが抱える問題と同じですね)

同じOut-of-orderでも、Pentium4はuOP単位で処理しているので効率が良さそうです。「グループ」のメリットはトランジスタの削減なんでしょうが、トランジスタを減らせても実効性能も落ちてしまったら意味ないと思うんですが・・・。IBMがあえてそういう設計にしたからには、NOPはあまり挟まれない(グループのスロットはたいてい埋まる)ということなんでしょうね。

2009年12月5日土曜日

IBMのPOWER7は筋肉2倍・トランジスタ半分

POWER7について調べたので、主にIBM's 8-core POWER7: twice the muscle, half the transistorsの内容を元にまとめます。
  • プロセスルールは45nm
  • トランジスタ数12億
  • ダイサイズは567mm^2
  • 4, 6, 8coreの三種類がある
  • 4-way SMT
  • 32 socket対応(サーバ1台に32プロセッサを搭載可能)
  • 4 channelのDDR3コントローラを2つ搭載(100GB/s)
  • L3 cacheはeDRAMで32MB(SRAMで実装した場合と比較してトランジスタ数は半分)
    • 32MB-cacheのPOWER7は12億トランジスタ
    • 30MB-cacheの"Tukwila" Itaniumは20億トランジスタ
    • 24MB-cacheの8-core Nehalem EXは22億トランジスタ
  • 実行ユニットは・・・
    • Out-of-order
    • 整数演算ユニット x 2
    • load/storeユニット x 2
    • 倍精度浮動小数点数演算ユニット x 4
    • 分岐ユニット x 1
    • condition register unit (?) x 1
    • ベクタ演算ユニット x 1
    • 10進浮動小数点数演算ユニット x 1
      • 金融など精度重視の分野で使われる
  • "group dispatch"のサイズが5から6に増えた (?)

一般に、メモリの実装方法には以下の2つがあります。
  • SRAM (Static RAM): フリップフロップ回路で構成される。アクセスが速い。トランジスタ数が多い。キャッシュに使われる。
  • DRAM (Dynamic RAM): キャパシタ(コンデンサ)で構成される。アクセスが遅い。トランジスタ数が少ない。普通のメモリ(メモリモジュールとして売られてるやつ)に使われる。
eDRAM (Embedded DRAM) とは、DRAMをダイ上に実装する技術で、これによってDRAMをキャッシュとして使うことが可能になります。上記の通りDRAMで実装されたキャッシュは「ちょっと遅いけど大容量にできる」という特徴を持つため、L3 cacheに最適ですね。「ちょっと遅い」の「ちょっと」ってどれくらいだよ、というのが気になりますが。
それと、SOIチップ上でeDRAMを実現する特許をIBMが持っていたはず。

WikipediaのeDRAMのページをみたら、eDRAMを使ったプロセッサはPlayStation2, PSP, GameCube, Wii, Xbox, POWER7だそうで、PS2, PSPを除いて全部IBMですね。そして、POWER7はeDRAMを使った初の汎用プロセッサということになります。

改めてまとめてみると、POWER7はとても魅力的です。2 coreのでいいから20万円ぐらいのワークステーション出ないかな。