2006-10-09

本当にマルチコアがいいんですか?

日経エレクトロニクス2006年10月9日号 に 『マルチコアが変えるソフトウェア開発』というタイトルの特別企画が載るらしい。Tech-On! の日経エレクトロニクスのサイトで、その概要を見た。

Tech-On! の記事をずっとウォッチしていると、マルチコアプロセッサの話題が目に付く。マルチコアプロセッサの記事を見るたびに自分はしっくりこない何かを感じる。

こういう「何かしっくりこない感じ」がわき出るときは必ず理由がある。これまで記憶した数々の経験や知見から構築された脳内のネットワークに刺激が与えられたときにこのような感覚はアウトプットされる。

自分の場合は最初に感覚がきて、あとからその感覚を説明する論理はなんだろうかと理由付けすることがよくある。「何かしっくりこない感じ」の論理がはっきり分からないと、もやもやした感覚だけが残り気持ち悪い。

そこで、マルチコアプロセッサの話題がなぜ自分にとって「しっくりこないのか」よく考えてみることにした。

たぶん、もやもやする最大の原因は、プロセッサをマルチにしようというのはプロセッサメーカーの都合であり、プロセッサのユーザーがプロセッサの内部をマルチにして欲しいと切望しているわけではないからだではないかと思う。単純にプロセッサがマルチになっていると、アーキテクトとしてはどのプロセッサになんのタスクを割り当てたらよいのか悩むことになる。もしかすると、その割り当ての技術がアーキテクトとしての腕の見せ所になるのかもしれないが、考えなくてもいいのなら余計なことは考えたくない。

最近マルチプロセッサが話題になっているのは、これまでシングルプロセッサでCPUの性能を上げてきたCPUメーカーが、これ以上CPUの性能を上げながら低消費電力を実現するのが難しくなってきたからだと聞いている。消費電力を押さえながらCPUの性能を高めるための技術的ブレークスルーがCPUコアのマルチ化だというのだ。ようするに、これまでのCPUアーキテクチャではこれ以上の進歩は望めないので、CPUコアをシングルからマルチにして負荷を分散させようというのだ。

しかし、組込みアーキテクトから言わせてもらえば、それはCPUの作り手側の都合であり、我々の切なる要求というわけではない。ちなみに、自分のプライベートPCのCPUは Intel の Pentium Dプロセッサで、デュアルコアプロセッサだが、たぶん、Windows アプリケーションのプログラマは、デュアルコアプロセッサの特性を活かしたアプリケーションソフトを作ってはいないと思う。

CPUがシングルかマルチなのかを気にしているとしたら、Windwos XP のOSだろう。どこかのWEBサイトで、Pentium Dプロセッサを使うのなら、XP Personal ではなく、XP Peofessonal にした方がパフォーマンスが上がる場合があると書いてあるのを見た記憶がある。

ようするに、デュアルコアプロセッサの特長を活かしているのはOSであって、アプリケーションソフトではない。もしかすると、OSもシングルコアかデュアルコアか気にしなくてもいいように、CPU側がくふうしてくれている可能性もある。

組込みの方もそういう考え方で、アプリケーションエンジニアやアーキテクトがCPUがシングルであったり、マルチであることを気にしなくていいのなら、「何かしっくりこない感じ」はしないはずだ。

ところが、日経エレクトロニクス2006年10月9日号 に『マルチコアが変えるソフトウェア開発』には、次のようなことが書いてあるらしい。

【<事例編>マルチコアに向けたソフト開発の現場から】

並列処理を意識したソフトウェア開発にとってマルチコア型マイクロプロセッサの性能を引き出した例が民生機器で登場しつつある。事例から見えてきたのは、ソフトウェア開発者がスレッドの粒度や同期の在り方にまで気を配ることの大切さである。

【引用終わり】

モデル駆動開発の用語でPIM(Platform Independent Model)と、PSM(Platform Specific Model) という言葉がある。

PIM(Platform Independent Model)はプラットフォームから独立したプラットフォームに依存しないモデルで、PSMはプラットフォームに依存したモデルを意味する。

PIMはプラットフォームから独立しているので、プラットフォームが変化してもモデル自体が変わらない、だから寿命が長い。モデル駆動開発では、ユーザー要求をプラットフォームに依存しないPIMとして記述し、プラットフォームに依存する実際に実装するためのPSMはツールを使ってモデル変換できるようにしようと考えている。

実は、自分はこのモデル駆動開発の支持者ではない。モデル駆動開発がうまくいってしまうと、組込みアーキテクトが職を失ってしまうという危機感もあるが、それ以上に組込みの場合、ユーザー要求を最適化することがツールで簡単にできるとは思えないからだ。

しかし、だからといって、PIM(Platform Independent Model)が重要でないとは言わない。PIMを目指す重要性は十分分かっている。プラットフォームに依存したモデルばかり設計していると、ハードウェアやプラットフォームの変更があるたびにソフトウェアを修正しなければいけない。それは効率的でないし、ソフトウェアエンジニアの首を絞めることにつながる。

だから『組込みソフトエンジニアを極める』では、ユーザー要求を性能的な面で実現させる PSM的ボトムアップの視点と、ユーザー要求を機能的な面で実現させる PIM的トップダウンの視点の両方の視点を持つことだ大事だと書いた。

ここで、PSM的ボトムアップの視点を考慮すると言っているのは、製品の機能や性能を実現するためのキーデバイスの特性を考慮することを想定しているのであって、CPUアーキテクチャを考慮することが重要だと言っているのではない。

CPUが変更されたとしても、できるだけアプリケーションソフトウェアは変更しないでよい作りになっていた方がよいと考えている。

なぜなら、CPUは製品の価値を実現するための直接的なデバイスではないと思うからだ。CPUの機能や性能は製品の価値を高めるために間接的に関与するが、パフォーマンスや消費電力などを満たすことができるならばなんでもいい。

T-Engine ではアプリケーションソフトは 明確にCPUから Independent であることを目指している。

そう考えると、 “マルチコア型マイクロプロセッサの事例から見えてきたのは、ソフトウェア開発者がスレッドの粒度や同期の在り方にまで気を配ることの大切さである。” は、PIM を目指そうと考えるソフトウェアエンジニアから見ると PIMからPSMへ逆戻りしているように見える。

マルチコアでもCPU+DSPのような組み合わせは、それほど「もやもや」しない。なぜなら、DSP(Digital Signal Processor)は画像の圧縮・伸張や、デジタルフィルタなどの信号処理に適しており、CPUの役割とは異なり処理を分離することがユーザーの直接的な利益につながるように思えるからである。

そう考えると、同じCPUコアを複数搭載し、どちらのCPUコアにどのタスクを割り当てるべきかを考えるのは、組込みアーキテクトにとって余計な作業であり、どんなに上手に割り当てを行ってもユーザーに直接的なメリットをもたらすように思えないのだ。

たとえば優先度の高いタスクをデュアルコアの片方のCPUに割り当てるという方法はある。でも、よく考えて欲しい。それは組込みソフトエンジニアから見れば、リアルタイムOSを使ってタスクを分割し、タスクの優先度変えることで、限られたCPUパフォーマンスを最適化してきたのと何ら変わりないように見える。

リアルタイムOSでタスクの優先度を変えるのは簡単だが、デュアルコアでCPUに対してのタスクの割り当てを変えるのは簡単ではないように思う。さらにデバッグのことを考えると頭が痛い。CPUが分かれていると同期を取りながらデバッグするのはとても難しいだろう。シングルチップなら、突き詰めれば処理はシーケンシャルなのでなんとかデバッグもできる。

だから、マルチコアプロセッサを選択しようとしている方達にタイトルのような「本当にマルチコアがいいんですか?」という質問をしたいのだ。

一番危ないのは、アプリケーションやシステムの構造がどんなに無駄な動きをしていてもCPUの性能をどんどん高くしていけば、製品の機能性や性能をカバーできてしまうと考えてしまうことだろう。

ソフトウェアは見えにくいだけに、アーキテクチャの悪さが外からは見えないことも多い。シングルコアとRTOSの使い方のくふうで十分にユーザー要求を満たすべく、機能・性能を最適化できるにもかかわらず、CPUの性能を上げることで強引に解決してしまおうと考えるのは、本質的な問題に蓋をして表面的なくふうでその場をしのごうとしているようにも思える。リアルタイムアーキテクチャーを実現するための道具としてのリアルタイムOSも十分に使いこなせていないのに、安易にマルチコアプロセッサという解決策へ逃げているように見えるのだ。

また、「何かしっくりこない感じ」の原因は、作り手側の都合が先行していて、ユーザーへの価値を最大にするという考えに基づいていないように思えるからかもしれない。

もしも、デュアルコアプロセッサで成功しているプロジェクトがあるのなら、それはデュアルコアであることを製品の価値を高めることに結びつけることに成功しているからに違いない。ようするに、その製品はデュアルコアプロセッサを使う必然性がある筈なのだ。

だから、必然性もないのに最近の流行だからといってデュアルコアプロセッサを選択するのは危険なにおいがする。

2006-10-01

バッテリーは大きなエネルギーを内在している

ソニーエナジー・デバイス製のリチウムイオンバッテリの回収が話題になっている。回収の規模は200億円、バッテリの数は590万個にも上るそうだ。

2006年6月に大阪で開催された Dell laptop explodes at Japanese conference で、会議中に突如 Dell 製のノート・パソコンが発火、炎上したとのこと。

この事故が今回の回収につながった。パソコン関係のリコールというと、「メーカから交換の連絡を待っていればいいかな」という軽い気持ちで受け止めていたが、写真のように発火する可能性があるとなると、対象機種のユーザーなら、さすがに心穏やかにはしていられないだろう。

海外の航空会社では飛行機の中ではノートパソコンはバッテリでの使用を禁じており、バッテリなしのAC電源で使用できない場合はノートパソコンは使えないようにしているところもあるらしい。

なぜ、バッテリが燃えるのかについて、日経エレクトロニクス 2006年9月11日号の「視点焦点」の記事に書いてあった。その内容をもとになぜバッテリが発火するのかについて考えてみたい。

まず、電池がなぜ電気を貯めておけるのかについて考えてみよう。

銅と亜鉛を電解液となる希硫酸や食塩水などに入れると、銅は原子がほとんど溶けず反対に亜鉛は原子が溶け出して電子が出る。そして、銅と亜鉛をつなぐと銅から亜鉛に電気が流れる。これがボルタの電池の基本だ。

要するに正極と負極を二つに分け、この二つの極の間を電荷を付帯したイオンが移動することで電流が流れる。リチウムイオン電池の場合はLi+イオンが正極と負極の間を行き来する。

バッテリが蓄えられる電力が大きければ大きいほど正極に蓄えられるLi+イオンが多いということになる。ノートパソコンが低消費電力になったとはいえ、6時間も8時間も連続で使用できるようになったということは、リチウムイオン電池やニッケル水素電池の蓄電量は非常に大きいということだ。

だから、リチウムイオン電池やニッケル水素電池の正極と負極を電気的な負荷なしに短絡させたりするととんでもないことになる。爆発するかもしれない。

だから、このような大容量のバッテリではショートしたときのための不可逆的なヒューズや発生したガスを逃がすための安全弁が用意されている。

ではこのような安全装置が施されているにもかかわらずバッテリが燃えてしまうのはなぜか。

【バッテリが発火するメカニズム】

1. 電池セルの製造工程で微少な金属粉がセルに混入する。
2. 金属粉が正極部に付着する。
3. 充放電を繰り返す。
4. 正極に付着した金属粉が金属イオンを放出する。
5. 金属イオンが樹枝状に析出し、正極と負極を隔てているセパレータを破り両極を短絡する。
6. 短絡による電流漏洩でセル内部の温度が上昇する。
7. 200℃ほどで正極材料の結晶が崩壊して酸素放出し、さらに熱を発する。(熱暴走)
8. セルの内圧が一気に高まり可燃物である電解液が気化して安全弁から放出され発火に至る。

このような内部短絡にはセル外部に搭載したヒューズや温度管理用のサーミスタは何も意味をなさない。内部が短絡しているから、ヒューズで電流の流れを切っても内部の短絡から電流は流れてしまうのだ。

したがって、製造工程での金属片の混入はもっとも注意を払わなければいけないらしい。金属片の混入の可能性としては、製造ラインを循環する空気の洗浄が不十分であるということも考えられるそうだ。

ただ、金属粉が原因で短絡しても、150℃前後でセパレータが溶解してLiイオンが通過する穴がふさがり、科学反応が止まる仕組みになっているので、金属粉の混入だけが原因ではなく、いくつかの製造工程上のミスが重なったのではないかと予想されている。

リチウムイオン電池やニッケル水素電池は取り扱いに注意しなければいけないということは、ずいぶん前から知っていた。かつてリチウムイオン電池を使った製品のバッテリ充電のソフトウェアの状態遷移について分析したことがあるからだ。

リチウムイオン電池やニッケル水素電池の取扱説明書にはおびただしい数の警告文が書かれている。バッテリを火の中に投入したり、五寸釘で打ち抜いたりしては絶対にいけない。

今回のリチウムイオン電池の事故でよく考えなければいけないのは、大きなエネルギーを持つデバイスはどんなに安全装置を施しても危険が近くにあるということだ。

組込み機器メーカーやデバイスメーカーは危険が表面にでないように幾重にも安全装置を施すので、ユーザー側はそんなリスクをまったく感じることなく機器を日常的に使用している。だからこそ、日常的ではない何かがあったときに危ないのだ。

身の回りにある機器が危ないか危なくないかは人を傷つけるほどのエネルギーを制御するものかどうかで判断できる。

たとえば、車、電車などはもちろんだが、エレベータや自動ドアだって大きなエネルギーを制御する。車や電車がなく、徒歩で目的地まで行ったらどれだけエネルギーを消費するかわかる。エレベータを使わず8階まで階段で上がったら、どれだけの位置エネルギーをエレベータが肩代わりしてくれているのかがわかる。バッテリは一見たいしたエネルギーを持っていそうにもないが、ノートパソコンを連続で8時間動かすエネルギーを一気に放出するような場合は傷害を起こしうる。

逆に言えば、単4電池2本くらいで動いている電子機器は人を傷つけるほどのエネルギーをもともと持っていないので、どんな故障の仕方をしても安全性は高いと言える。

AC電源は大きな電流を取り出すことができるので、AC電源から電流を取り出す電子機器の電源の安全性は非常に高いものが要求されている。

組込みソフトはハードウェアデバイスをコントロールすることができるため、設計の仕方によっては巨大なエネルギーの制御を誤り人を傷つけるような事故を起こしかねない。

組込みソフトエンジニアは、自分が関わっている組込み機器が扱うエネルギーの大きさに注意を払い、取り扱うエネルギーが大きければ大きいほど、慎重にソフトウェアを設計し、ハードウェアデバイスを制御し、検証や妥当性確認を納得がいくまで実施しなければならない。

今回のバッテリ事故は、ソフトウェアが絡んだ事故ではないが、AC電源につながれていない機器でも大きなエネルギー源を抱えていて危険と隣り合わせにあることがわかったと思う。

世の中がネットワークでどんどんつながれていくと、大きなエネルギーを制御するソフトウェアと、たいしたエネルギーも制御しないソフトウェアが通信するようになり、何かの間違いで大きなエネルギーを制御するソフトウェアの中に眠っていたバグを呼び覚まし、大きな事故を起こすような事態が起こるかもしれない。

ユビキタスの時代になると、組込みソフトエンジニアは自分のプロダクトだけでなく、自分のプロダクトが通信によって流す情報にも責任を持つ必要がでてくる。

高密度のバッテリ開発など世の中が便利になればなるほど、そのような利便性とは対照的に組込み機器を取り巻く環境の危険度は増し、逆に安全に対する要求は高くなるのだ。バッテリの事故は対岸の火事ではない。

2006-09-24

体脂肪を燃やそう!

めずらしく組込みソフトとはまったく関係ない話題。

7月から地元のスポーツクラブに通い続けて2ヶ月半たった。これまで、何をやっても長続きしなかった自分としてはこんなに長続きしているのが信じられない。

そもそも、スポーツクラブに行こうと思ったのは、SESSAMEのメンバーでちょっと太めだった方が久しぶりに会ったら見違えるように昔より細くなっていて、「どうして?」と根掘り葉掘り聞いたところ、週二回くらいスポーツクラブで泳いでいて、運動の前にヴァームを飲んでいるというのだ。

あとから調べて分かったのだが、ヴァームとはスズメバチの幼虫が分泌するアミノ酸組成物らしい。

- VAAM-WEBサイトから引用】

「V.A.A.M.」とは、スズメバチアミノ酸混合液(Vespa Amino Acid Mixture)の略で、その成り立ち、効果など多くの面において他のアミノ酸とは全く異なる、17種類のアミノ酸の混合物です。これは、スズメバチの研究をしていた理化学研究所の阿部岳博士が、1日に約100km移動するというスズメバチの驚異のスタミナに注目。スズメバチの成虫は幼虫に餌を運んでくる代わりに幼虫から特徴的なアミノ酸組成を持つ分泌物を栄養として与えられます。V.A.A.M.と名付けられたそのアミノ酸組成物を経口摂取することによって脂肪燃焼を促進しうることが明らかになりました。

【引用終わり】

よく、体脂肪を燃やすには20分以上運動しないとダメと言われるが、このヴァームを運動する前に飲むと体脂肪がすぐに燃え始めるというのだ。

- VAAM-WEBサイトから引用】

一方の体脂肪はどうでしょう?通常、運動する際には、まずグリコーゲンが消費され、その次に積極的に体脂肪が燃焼されはじめます。一般的にそのタイミングは運動をはじめてから約20分後と言われています。しかし、一般的に体内に蓄えられる体脂肪の量は、体重が60Kgの人の場合で54,000Kcal (※)。これは同じ条件の人のグリコーゲンの蓄積量と比較すると約30倍にあたります。また、疲れの元となる「乳酸」の発生が抑えられるというメリットもあります。

【引用終わり】

ヴァームは医療用ではないので、WEBサイトには効果効能についてストレートには何も書いていないが、パンフレットには運動してからすぐに体脂肪の消費が始まるようなことが確か書いてあった。(薬事法上の届け出を行っていない食品や栄養ドリンクは効果効能をカタログ等にうたってはいけない)

自分はスポーツクラブで運動する前に必ずヴァームを飲んでいる。ヴァーム経験者の方の話では、運動前にヴァームを飲むのと飲まないのでは、疲れ方がかなり違うというのだが、比較したことがないので自分はその違いが分からない。

なぜ、疲れにくいかというと、普通運動すると最初にエネルギーになりやすいグリコーゲンが消費されしばらく運動し続けると体脂肪の方が燃焼される。グリコーゲンが消費されると乳酸が発生し、この乳酸が疲れのもとになる。ヴァームを飲むと、グリコーゲンの消費が押さえられて体脂肪の方が使われるため、乳酸の発生も少なくなり、いざというときのエネルギー源であるグリコーゲンを温存できるというのだ。

グリコーゲンは60Kgの大人で、1,800Kcalしか蓄えられないというから、長時間運動していると乳酸がいっぱいたまってしまうらしい。

- VAAM-WEBサイトから引用】

「グリコーゲン」は直接ブドウ糖に分解できるという、即座にエネルギーに変えられるという利点があります。運動をすると、通常は右のグラフのように、まず「グリコーゲン」が多く消費され、一方の「体脂肪」はしばらくたってから使われはじめます。しかし、「グリコーゲン」が消費されると、疲れの元となる「乳酸」が発生します。
また、「グリコーゲン」は、たとえば体重60Kgの人の場合、一般的に体内に蓄えることができる量はわずか1,800Kcal (※)しかありません。そうなると長時間運動することが難しくなってしまいます。

【引用終わり】

かくして高校生のとき教科の中で“生物”が一番好きでミトコンドリアとか、ATP(アデノシン3リン酸)とか、グリコーゲンとかの話が好きだったソフトウェアエンジニアはヴァームを飲んでから運動することにした。ヴァームを飲んでから運動するのと、飲まないで運動するのを比べたことがないので効果のほどははっきりわからないが、だんだん慣れてきたせいもあって、あまり疲れを感じない。

三日坊主の自分がこんなにスポーツクラブ通いを長続きさせている最大の理由は、心地よい疲れで毎回終えられているからかもしれない。

自分でも驚いたのは、最初プールで25mを4本くらい泳ぐとゼーゼーいっていたのが、最近は途中休みながらなら300mくらい泳げるようになったことだ。

ちなみに子供のころとは違って、今や水泳するときは、水中めがねと耳栓は必需品だ。一度水中めがねを忘れて裸眼で泳いだら、とても泳ぐのがつらかった。泳いでいる最中に水の中が見えているというのは長く泳ぐには結構重要な要素であることがわかった。

ところで、スポーツクラブに通ってわかったのは、何しろクラブに来ている人たちの平均年齢が高いということだ。平均したらおそらく40は越えていると思う。昔では考えられなかったように思うのだが、50代、60代の方達がごろごろいる。

聞くところによると、このクラブは普通会員なら何回来てもいいのでスポーツクラブが社交場となっているのだそうだ。確かに、一度一通りの運動をすると1時間から2時間くらいの時間は潰れるので、健康にもいいし時間をもてあましている人にはちょうどいい暇つぶしであり、情報交換の場にもなる。

スポーツクラブが社交場になるというのは昔ではちょっと想像がつかなかったが、高齢富裕層の増加がこのようなスポーツクラブ需要を押し上げているように思う。

おかげさまで、このスポーツクラブは非常に繁盛し混み合っていて、2ヶ月たったのにプライベートロッカーが空いたという連絡が来ない。(申し込んだときは後5人待ちで、今は2人まちだそうだ)

英会話学校へ通っていたときよりも、スポーツクラブの方が長続きしているのは、たぶん「心地よさ」の要素があるからだと思う。

やっぱり大事なのは、どんなことでも「楽しい」とか「やりがいがある」と感じられることではないだろうか。