You can read this blog in any language using google translate as follows:

Goto http://translate.google.com/
Paste URL in the box and select "Japanese for From Language" and "To Language". Then click "Translate".

English translated pages are here:
http://bit.ly/xPuXoy

你可以閱讀這個博客,在任何使用“Google”的語言翻譯

本ブログのアクセス統計: 60万アクセスを達成しました。ご訪問ありがとうございました。

60万アクセスまでの経過

2009年12月に始めた本blog。2011年7月ごろに10万アクセスを達成し、2011年12月13日には15万アクセスを達成。
その後、私も更新しておらず、アクセスは少し減りましたが、3月1日には18万アクセス。2012/4/18に20万アクセス、2012/8/21に25万アクセス、2013/1/18に30万アクセス、2013/12/17に40万アクセスを達成しました。しばらく見ていなかったら、2015/5/1に50万2584アクセスになっていました。またまた、しばらく更新しないうちに、2017/6/11に60万7197アクセスになっていました。2018/7/7 .. おお七夕 .. には63万0656アクセスになっていました。久しぶりに更新しました。
ラベル 速度 の投稿を表示しています。 すべての投稿を表示
ラベル 速度 の投稿を表示しています。 すべての投稿を表示

2012年11月8日木曜日

iOSとAndroidの本質的な差

iOSに比べると、Android (グーグル携帯・tablet)はメモリ食いで、遅いと言われている。本質的な差であり、ちゃんとした原因があるので分析したい。

Androidは重い)
そもそもAndroidのアプリの記述は、GC (Garbage collection) がある、Javaである。実行時にコード変換する機能やNativeアプリを動かす機能はあるが、基本的には、ソフトウェアがコードを解釈しながら走るインタプリタである。セキュリティ対策の側面(http://bit.ly/Z2fOkc に紹介がある)、機種依存性をなくすこと、動的型継承などがあるので、CやC++のように、事前にコード変換してしまう高速でメモリを食わないコンパイラにはしにくいと思われる。

そして、GCは重い。

Androidは、アプリ審査(後述)がないので、ソフト的に悪意のソフト(マルウェア)から守らないとならない。ファイルアクセスができない、Javaを使い。DalvikというVirtual Machine (VM)を使って、Sandbox (そのアプリだけの砂場)を作って守っている。

また、iOSは基本的にはSingle taskだが、Androidはマルチタスクに対応して作られている。これが、メモリを大食いにする理由でもあろう。
最も最近のiOSも、画面上には出ていないが、Homeボタンを2度押すとリストが出てくるように、裏でアプリが動き続けている。

http://bit.ly/UwEzRj の図を引用する。汎用のDesktop/Server OSである、Linux (これ自体でかい)のうえに、DalvikというVM(黄色)をおいて、その上にライブラリ(これはiOSでも同じ)があり、JAVAで書かれたアプリが走る仕組みである。

たとえて言えば、Macのうえで、VMware(仮想マシン)を走らせて、その中でwindowsXP走らせて、その中のブラウザの上でJava scriptを走らせるようなものなのであろう。

Androidのソフトウェアスタック
とはいえ、Androidの守りは、JavaとDalvik VMがメインなので、マルウェアに弱いようである。

http://www.anlyznews.com/2010/12/androidiphone.html には、上記をサポートするような数値比較もでている。が、コメントには、それに対する反論もある。

iOSの場合)
iOSアプリの記述は、GCはプログラマが管理するObjective-C。最近GCは入ったが、多分ほとんどのアプリでは使っていない。Objective-Cは、コンパイラなので、Javaのようなインタプリタではなく、何でも出来る。これでは、マルウエアに弱いので、Appleによる審査が入る。おかげで、iOSの上でダイレクトにアプリが走る。上記の図でいえば、赤いOSが軽くて、黄色(つまりVMとインタプリタ)が存在しない。

Application Frameworkも、緑色のライブラリと上手に融合していると思う。

iOSでは、Next Step時代から継承している、BSD系のかなり簡略化されたUnix OSのうえで、Objective-CでコンパイルしたNativeコードが走る。

GUI設計環境X-codeや言語のGUIサポート(View-Controlモデル http://bit.ly/UwFFMW に紹介がある)も良く出来ている。これが、Application Frame Workとライブラリのうまい結合を達成していると思われる。

そういう意味で、Androidは、まだまだこれからともいえる。HardwareやAppleは言語やOS単体ではなく、プログラミングやアプリの作成を含めた生態系として設計しているのである。これが本当の垂直統合である。

そして、iOSは、スマホという環境を考えて徹底的に割り切って作られている。例えば、GCがないこと、グラフィカル表示がシングルタスクであること、OSの特定のAPIしか開放しておらずATOK等のIMEの入れ替えもできないこと、などである。

iOS系に関して、画面解像度への配慮は、以下に書いた。


2012年11月8日木曜日: ちょっと怪しい最近のApple



OSの更新)
従来、ファイルやアプリなどを全て残した状態でOSを更新できた。ところが、iOSは違う。iTunesに繋いでiOSを更新すると、マイナーアップデートであっても、ファイルは消え、一旦、まっさらの状況になる。そして、iTunesからファイルやアプリを転送し直す。

じつはこれが画期的である。iBookの導入時に分かる通り、iTunesはiOSに会わせて常に更新されていく。iTunesが更新されると、母艦となるPC側のデータ構造も変わって、PC側でデータ変換したりする。

PC側で準備しなおすので、iOS装置側では互換性の為の処理が減る。新たなiOSに会わせたデータ形式で転送されるし、iOS側のファイルシステムの構造もいつでも作り替えられる。

つまり、装置としての性能が貧弱なiOS側に従来互換性の制約が減る。ファイルシステムの構造を好きな時に作り替えることも出来る。
これはOS更新としてはかなり画期的な考え方だと思う。

したがって、iOSをMacに持って行くかどうか(そういう主張もたまに聞くが)は、そう単純ではないと思う。

ハードウェアの進化でバランスは変わる)
もちろん、どんなにハードに負荷が掛かろうが、ハードウェアが進歩しアクセラレータができたり、メモリが非常に安くなればバランス点は変わる。が、基本設計の違いは、最後まで性能や、進化のしやすさの差になってついて回る可能性もある。

一番心配なのは、Appleは、大きな利益を背景に、設計者が沢山いるが、Androidの開発リソースはあくまでGoogleが提供し、Androidの基盤としているLinuxはサーバやdesktop用のOSS(Open Source Software)である、Linuxであるところである。

つまり、以下の2つが肝心になるのではと思う。
  1. Samsungなど本当にお金を儲けているところが、十分な開発投資を投入する
  2. Desktop/ServerというLinuxという主流のなかで、端末向けLinuxを正常進化させる
Andoridには自由がある)
Androidには、windowsとMacの違い以上の違いもある。
  1. 多くの会社が作って切磋琢磨している
  2. Androidのソースは基本公開であり、LinuxのようなOpenな世界での進化が期待できる
  3. 規制で守るよりも、自由による様々な試行による進化が期待できる
と、iOSにない良さもあり、やはり競い合うことで、お互いに進化できるのだと思う。

2012年11月8日木曜日:ちょっと怪しい最近のApple


に書いたような、Appleの最近の動きがAndroidつぶしだとすると、ちょっとAppleのやっていることに疑問を感じる。独禁法の関連もあるが、IntelがAMDと競い合って進化したようなほうが望ましいのでは。。


Android端末の現状)
Androidの端末は、SamusungとGoogleが発売しているNexus7が良いらしい。Nexus7はアンドロイドの中でも出色の出来らしい。大画面でcortex A15 http://bit.ly/Uxz1px という最新のプロセッサを持ったNexus10も発表された。Nexusシリーズは、 https://play.google.com/store/devices で仕様が確認でき、購入が出来る。

従来のAndoridや安物機種は、すぐフリーズし、メモリもすぐに不足したとのことだが、AndroidもNexus7で改善したとのこと。ただし、有料アプリが壊れても自己責任。これが、iOSのような高額な有料アプリがでてこず、アプリ市場が充実しない理由かもしれない。

米Burns & Nobleが販売する、電子ブック端末Nook TouchもAndroid端末であり、これにアプリをインストールして試したことがある。iOSのように守っていないので、非常に簡単に特権ユーザになれる。以下に書いた。


2011年9月4日日曜日: Nook Touchの脱獄


アプリ審査の価値とAndroidとの違い)
iOSアプリのAppleの審査では厳しい審査をする。審査を経て、IDを与えられたアプリしか(脱獄しない限りは)、iOSに転送できない(SHA-1認証ではねられる)ため、違法流通もできない。

アプリ審査の価値をまとめると以下の通り。列挙してから解説する。
  1. マルウェア(悪意ソフト)、著作権違反ソフト、教育上悪いソフトを防ぐ
  2. 動作保証をする
  3. どのソフトも同じ操作基準に準拠していることを確認する
コストは掛かっていると思う)
Appleの思想統制と嫌われているが、素人でも安心して使えるアプリの整備には重要だと思う。以前、Appleが求人していましたが、審査のために、相当数の人を雇い金を投入していると思う。端末で大きな利益を上げているAppleだからできる手法だと思う。

動作保証による信頼感)以前、古いiOS3 でChrome syncというアプリが動かないことがあった。動くとあったのだが、iPhone3GSのApp StoreでのOSチェックをかいくぐり、インストールもできてしまったが、起動すると直ぐに落ちた。それをクレームしたらAppleは、当日中に全額返してくれた。この安心感が、情報統制の見返りである。

将来展望)
物量を投入すれば差は縮まる。コスト差も小さくなるであろうが、量が売れれば利益の差は大きく、また将来の発展性も変わってくる。

利益差で、Appleが進化を続けられることが、メーカ数で多対1の不利にあるAppleの進化のための道筋だと思う。長期的にはCPUの自製化もこれに貢献すると思う。

Appleの市場コントロール)
Appleはソフトを強く管理しており、それを嫌っている人もいる。自由がないからである。

具体的には、
  1. 画面デザイン、ユーザインターフェースの規約があり、従うことを要請している
  2. Apple StoreにおくiOSアプリは、Appleの審査を通らないとならない
  3. アプリの売り上げからAppleがもっていく、うわまえが多い
  4. 開発だけならツールが無料だが、iOSの実機で動かすには年間99ドルのライセンスを買わないとならない
  5. ATOKなどのIMEを取り付けるインターフェース(API)などが公開されていない
などである。が、これは、以下の意味を持っている。
  1. 規約により、どのアプリでも、マニュアルをみなくても使える、同じ使い勝手を保障する
  2. 審査により、Warmなどと呼ばれる悪事を働くアプリ、著作権的に問題のあるアプリ、子供達に使わせたくない性的、暴力的なアプリ を除外する。
  3. 審査により、事前に動作保証をする
  4. 上前)審査のために相当なエンジニアを雇っており、とても一つ100円程度では利益がでないが、一定量の回収はしたい
  5. ツールが有料)やる気のない開発者を排除したい。コストを多少なりとも回収する
そして、情報管制がどうしてもいやな人には、米国Millenium 著作権法で合法性が確認された、脱獄(Jail break)という方法も残っている。が、こちらは、逆に以下の問題がある。
  1. 作者が減ってきて、新作アプリが減っている。主な機能が標準のiOSに組み込まれてしまったこともある
  2. まともに動かないアプリもある
  3. 有料アプリも増え、高いものは1000円以上する
と、Appleの巨大なマーケットに載せられないがゆえの問題もはらんでいる。

2011年12月16日金曜日

LSIの進化の貢献は速度ではなく記憶容量にこそある


当たり前の話なのですが、意外と盲点なので。。

16bitは、10進数では 6.5E+4
32bitは、10進数では 4.3E+9
64bitは、10進数では 1.8E+19
です。

1年は、3.15E+7 秒なので、32bitのカウンタ(2進32bitのそろばんと考えてください) だと1秒に1度更新して、132年持ちます。
まあでかい数ではありますが、unixは1900年を起点として32bitの秒数でタイムスタンプを打っているので、http://ja.wikipedia.org/wiki/Network_Time_Protocol#2036.E5.B9.B4.E5.95.8F.E9.A1.8C
にあるように、2036年に桁あふれして2036年問題がおきます。
(うるう年とかがあり簡単な計算とは若干ずれていますが。)

ところが、64bitにすると記憶容量を倍にしただけなのに、1ナノ(10億分の1、ナノはG分の1) 秒に1回更新してもカウンタは585年持ちます。光の速度は秒速30万km=0.3M km=0.3Gmなので、1ナノ秒は、光すら0.3m=30cmしか進めない、とんでもない短い時間です。たかが記憶容量が倍になっただけなのに、1秒の更新を1ナノ秒にしても、132年が585年に伸びるのです。これが、2の指数で効いている状態数の効果です。素子数をNとすると、これをO(2^N)と書きます。

ただし、同じ玉を詰め込む量として考えると、2倍の記憶容量は2倍入るだけにしかなりません。入れるひとつひとつの玉の大きさ(状態数) を大きくしたとき、別な言い方をすれば、入れる玉の質を向上させたときに意味が変わってくるのです。

一方、プロセッサの計算速度は、2002年頃に発熱問題のため動作周波数に上限が来ましたそれまでは10年に100倍の速度で高速化してきました。下に示します。


それ以降はこの問題があるため、動作周波数は少しずつしか上がりません。命令レベル並列(スーパスカラーなど) という方法ももはや限界。すると、並列処理という、沢山のプロセッサを並べて、いっせのせでやる加速しかできません。となると、せいぜい素子数に比例してしか性能は向上しません。並列にやる無駄があるので、素子数分の加速を得ることすら難しいのです。これをO(N)と書きます。

つまり、速度は高々素子数に比例でしか増えられないのに、状態数は指数で爆発的に増えていくのです。

スマホのフラッシュメモリに持っている全部のCDが入って、さらに映画まで入るのも、ディジカメに1万枚近い写真が入るのも、容量が増えたのを活用して、状態数の多い高品位なデータが収まるようになったおかげだと思います。

速度に注目がいきがちですが、半導体技術の進歩の恩恵を受けているのは、爆発的な状態数の増加なのです。

記憶量の増大を活用した、爆発的な状態数の増大を活用して、計算量を手抜く方法が、これからの主流になると思います。

記憶量の2倍と、速度の2倍は、美味く使えば意味が変わってくるのです。

ハードウェアとソフトウェアの違い)
ハードウェアは、並列に動くのに、様々な検証環境が用意されています。これは、ハードウェアの状態数が高々数10万フリップフロップだからだと思います。ゲート数は数千万もありますが、状態を保持するフリップフロップはそんなには、沢山ないと思います。また、複雑な状態変化は、ステートマシンとか、メモリを利用して、ソフトウェアと同じように逐次記述にして書くか、パイプライン記述にしてこれも逐次的な考え方に変換しています。

そもそも並列に大規模なものを並列に記述するのは、考え方(論理思考)が逐次的な、人間には難しいのだと思います。ただし、絵の認識とかは、人間も並列にできているので、訓練次第ではできるのかもしれません。

1980年台の第5世代コンピュータプロジェクトでは、Prologという言語を用い制約指向で並列性を活用して、知識処理を書こうとしたのですが、Cutとか結局逐次的なものを導入してしまったように思います。ま、これに懲りないで、いろいろトライしてほしいのですが。

知性とは)
私は知識処理の専門家ではありません。が、どうして、動物には知性がなくて、人間だけきわめて高度な知性があるのでしょうか。これも、上記の状態量の爆発によるのではないのでしょうか。つまり脳の神経の量が2倍になると、うまくつかえば指数的に能力が増やせるのではと思うのです。

良く100倍速いコンピュータができれば知性が。。といいますが、だったら100倍長い時間待てば、知性が感じられるはずです。人間が1秒で答えられるなら、100秒待てば今のコンピュータでもできるはずです。どうして出来ないのでしょうか。

私は、先の状態数が関係していると思います。100倍の記憶量をもつコンピュータは、2の100乗の状態数を持ち得ます。2の100乗とは、log(2^100)=100log2=30.10 すなわち、10の30乗、1の下に0が30個もつく状態数になります。つまり100倍とは行かないまでも、容量が増えることは、かなりの質的な変化を伴うし、これは、とても今のコンピュータでは実現できないことになります。

状態数が増えるとそれなりの計算速度も必要になります。脳は神経細胞が並列に処理するので、計算速度もそれなりに増えるのですが、O(N)のオーダですので、状態数に比べるとわずかなものになってしまいます。状態数に見合った計算性能を実現するのが課題だと思います。

爆発的な状態数の増加を利用した計算の手抜き、すなわち計算アルゴリズムの改善に期待しています。非常に大きな数が使えるので、手抜きをして、計算時間を減らすなどでしょう。例えば、非常に大きな数が入るカウンタ(そろばん)があるので、比較処理を手抜きをするとか、数値の表現を工夫するとか、いろいろ工夫のしがいは、あると思います。

将棋のボナンザというプログラムが興味深いです) 

http://ja.wikipedia.org/wiki/Bonanza
膨大な棋譜を学習し、独自のボナンザ囲い ( http://ja.wikipedia.org/wiki/%E7%9F%A2%E5%80%89%E5%9B%B2%E3%81%84 ) というものを編み出しています。一つ前のwikiには、以下のようにあります。
理由は不明だが「ボナンザ囲い」と呼ばれる、他に例を見ない「片矢倉」の変形版を多用する。渡辺竜王によれば、一見すると素人臭い筋悪な形のようでいて、実際に攻略するとなると厄介であるという。
プログラムするのではなく、学習アルゴリズムを工夫して、コンピュータの高速性を生かして学習させる。評価関数のパラメータの自動生成は、これは保木の本業である化学反応の制御理論を応用したものであるとのこと。
後注) 実際、これを改良した、ボンクラーズが、去る2012年1月14日の第一回電王戦(日本将棋連盟、 ドワンゴ、中央公論新社主催)で、コンピュータ将棋 ボンクラーズが、元名人で日本将棋連盟会長の米長邦雄永世棋聖に平手で対戦した。7時間におよぶ激戦の上、コンピュータが勝った。 
2012年2月11日土曜日:  コンピュータが知性を持つのは近いか..

に解説したので、是非ご覧頂きたい。

知性がそこまで来ている予感がしませんか。。