OSASK-WikiのKの落書きの過去ログ

  • 本家:OSA:K
    • 過去ログにコメントしたい人も、本家のこめんと欄に突っ込んでください。
      • そのうちKによって下のこめんと欄に移動しますので。

なぜ僕は速さを求めるのか・なぜOSASKは速く小さくできたのか・非生産的か

  • (2005.03.24)
  • 多分ここに書くことは今までの焼き直しです。本質的に新しい情報はないでしょう。

  • 僕が速さを求めることに対して、それは(=そこまでやるのは)無駄だという議論があります。経済的な観点では、基本的にそのとおりです。たとえば10%速度を改善するために、労力を費やしてコードを改善するよりも、新しいPCを買うためにアルバイトして、それで新しい機種を買えばいいのです。これなら、速くしようと思ったそのプログラムだけではなく、その他の所有している全てのプログラムが速くなります。
  • 僕が速さを求めてプログラムを改造する理由はいろいろあります。たとえば消費電力を抑えたいというのがあります。しかしこれだって、苦労して1台あたり1W削減できたとしても、これが二酸化炭素の削減にどれほど役立つか、それは分かりません。もしかしたら、1年に1回くらい、車に乗るのをやめたほうが効果が大きいくらいかもしれません。
  • 結局のところ、これは究極への強いあこがれだったり、PCへの愛着が最大の動機だと思います。世界最速だったらいいじゃないですか。一般的なプログラムで10秒かかるところが、僕のプログラムで8秒とかだったら嬉しいじゃないですか。
  • 僕の発想では、同じ処理内容で速度が違うということは、無駄な処理があるってことです。無駄はもったいないです。本当は100の処理能力があるのに、ソフトウェアがみんなタコで、そのPCが80までしか能力を出せないうちに、「あー、そろそろこいつじゃ、新しいソフトが重たくなってきたな。引退させるか」とかなってしまうわけです(しかもたいてい、その新しいソフトというのは、機能がちょっと増えただけなのに処理速度が大幅に下がっていたりする)。これをどう思いますか。僕はPCが不憫(ふびん)でなりません。全力を出し切れる環境を与えて、それでも駄目だから買い換えよう、というのがいいと思うのです。本当はソフトウェアさえ改良すればまだまだ現役なのに、めんどくさいからポイだなんて、このPCを一生懸命に設計・製造してくれたハードウェア屋さんに申し訳ないのです。
  • だから僕としては、どんなに不経済だろうと不合理であろうと、とにかく無駄を少しでも減らして、速くしてやりたいのです。安定性や多機能性を損なうことなしに、こんなにOSは速くできるんだよということを示したいし、そんなOSだけを使いたいのです。

  • 今のOSASKは486SX-20MHzでも十分に快適に動作します。WindowsXPが1GHzとか、すくなくとも500MHzくらいないと、ストレスがたまるというのとは大きな違いです。これはもはや10%とかそういうレベルではありません。どうしてそんなに軽くできたのかといわれますが、これは非常に単純な発想を繰り返したに過ぎません。
  • 今、世間一般では、CPUのクロックというものは、CPUの「相対的な」性能指標として使われています。2GHzってのは、1GHzの2倍速いぞ、とかです。しかし本当はそれ以上の意味があります。たとえば486の場合なら、1クロックで平均0.5〜1命令くらいをCPUが処理できます。最近のAthlonXPとかAthlon64なら、1クロックで平均2〜3命令くらいはこなせるでしょう。そういうことを大体知っていれば、クロック数を掛け算することで1秒間に何個の命令が実行できるかわかります。486-20MHzでさえ、1秒間に1千万命令くらいは実行できるのです。
  • 一方で、僕はたとえばOSASKの画像処理プログラムを書いたりしたときに、486-20MHzでなんだか遅いなと思ったとします。そうですね、たとえばスクロールだとしましょうか。そうしたら、スクロールが遅いのはなぜかを考えます。その際に、まずは、ハードウェア限界を考えます。これはスクロール範囲の全画素を更新するのにどれだけのクロックが必要なのかということです(註:この機種にはグラフィックアクセラレータがないので、アクセラレータを使うという選択肢がなかった)。これは絶対に超えられない壁で、あとはこれにどこまで近づけるか、なのです(このとき、スクロール対象の読み込みに必要なクロックは「含めない」。書き込みアドレスの計算に必要なコスト(インクリメントなど)も含めない。これらも工夫で改善できるかもしれない対象だと、最初に仮定するからである)。
  • 普通のソフトウェア開発では、適当に書いてみて、遅ければ早くなる改良をして、それで十分になったらそれで終わりでしょう。しかし僕の場合は、そもそも最初の遅いかどうかの基準が、このCPUなら理論的にこれくらいの速度になるはずだ、ってのを基準にしていて、ただの体感速度ではないのです。目標は、ライバルの競合ソフトウェアではなく、ハードウェア限界なのです。ライバルよりちょっとでも速ければいいやではなくて、ハードウェア限界にどこまで近づくかなのです。
  • 結局OSASKは、CPUメーカが言っている性能を出しただけに過ぎず、それ以上の性能が出ているわけではありません。つまりすごいのは僕たちではなくて、僕たちが本来あるべきものなのです。僕たちが速いのではなくて、他が遅いだけです。だからどうして速いかを僕たちに聞くのではなく、どうして遅いのかを他のソフトウェア作者に聞いてください。
  • サイズについても同様です。これくらいの処理内容ならこれくらいで書ける「べき」だ、というのがあって、競合ソフトウェアと比べてどうかということは基本的に気にしていません。勝てばいいのではなく、無駄がなくならなければ勝ってもそれほど嬉しくないのです。たとえばCPUは1つの命令で足し算ができます。こういうレベルから積み上げれば、自分のやらせたい処理をするのにどれくらいの命令を書かなければいけないか、というのは自明なのです。これもつまりCPUメーカの仕様書どおりのサイズになっているのであって、小さいのは僕たちではなくて、僕たちが本来あるべきサイズを達成しているだけなのです。他がどうしてあんなに大きいのか、そんなことは僕は知りません。そういう研究は誰か他の人にお任せしたいです。

  • 僕のこのような姿勢を、非生産的だということはできます。つまり、速度やサイズをがんばるくらいなら、他でがんばったほうが、儲かるとか、世のためになるから、というものです。僕はたぶん他の分野ではろくな仕事ができないと思うので、それはどうかと思いますが、まあ一応譲歩して、仮にそうだとしましょう。でも、これは相対的な非生産性の指摘であって、絶対的な非生産性ではありません。あれとそれとを比べて、それでやっと分かる非生産性です。しかもその価値基準は、ハードウェアが今後も青天井で高速化していくという前提のもとでのものであって、もし早晩に限界に達してしまうとしたら、それ以上の速さを求める方法はソフトウェアの改善しかありません。また、現在最速機種を使っている人にとっては、それ以上の速さを「今」得るには、やはりソフトウェアの改善しかありません。
  • ソフトウェアの改善によって、仮にライバル社よりも20%速いコードを得たとします。そうなると、あなたは「常に」ライバルよりも少ないハードウェアへの投資で、ライバルと同じ処理能力を得ます。もしくは、ライバルと同じ投資額で、ライバルよりも20%高い処理能力を得ます。消費電力に転化させるなら、ライバルよりもランニングコストが「常に」低くなります。そう考えると、一概に非生産的だとは言えないと思うのです。
  • こういう話になると、いやそもそもOSASKはIA-32にべったりの最適化だから将来性がなくて、だから将来はいずれ他のCPU用に書き直さないといけなくなるとか、そういうことを言われます。それは確かにそうかもしれません。しかしその人たちはみんな、だからCやC++で書いて、最適化なんかコンパイラに任せたらいいんだとか言います。もしくは、仮想マシン用のコードにして、最適化はJITコンパイラにやらせればいいという人もいます。理論的には確かにそのとおりですが、しかし僕たちに言わせれば、現在のコンパイラの最適化のレベルは、児戯に等しいというか、将棋の名人とコンピュータが対戦するようなものというか、とにかくお話になりません。いや、細かいことをいろいろ指摘していただくには及びませんが、仮に4GHzのCPUで、5年間最適化に時間をかけていいとして、C言語だけでOSASKを超えられる実行バイナリが出てくるでしょうか?C++や他の高級言語ではどうでしょうか?これもぜんぜん駄目です、今のところは。
  • これがどれくらいひどいかというと、たぶん、他の理想的なCPUが現れたとして、その上にLinuxを移植しても、同価格帯のPCのOSASKより遅いということです。もちろん、その理想のCPU用にOSASKを作り直せば、それはそっちのほうが間違いなく速いでしょう。だからできることならさっさとその理想のCPUで作り始めるべきといえますが(究極のソフトウェアには究極のハードウェアが似合う)、そもそもCPUの進歩が青天井だとすれば、どのアーキテクチャがベストなのかなんて、まだ見極められないじゃないですか。それならとりあえず入手しやすいものを使うしかありません。仮に青天井でないといれば、今一番速いものが正解でしょう。結局どちらにしてもx86になります。
  • もちろん、将来は分かりません。最適化技術が進歩して、逆転するかもしれません。チェスだって、コンピュータが人間のチャンピオンを負かせるようになったのですから。でも、その日が来るまでは、最適化に関しては僕のアプローチが現実的なのであって、世間の人たちが信じているのは、絵に描いた餅です。僕たちの最適化以上の結果を、自動的に生成してくれる時代がきてほしいです。
  • ハードウェア設計側だって、本当は最適化されたコードを前提にハードウェアを設計したいはずです。だって将来は(僕たちのような人がいてもいなくても)最適化の進歩によってそこに行くはずなのですから、もし未来の究極のCPUがあるとすれば、それは最適化されたコードをどれだけ速く実行できるかであって、今のようなタコなソフトを速くするために回路をさくことではないでしょう(最適化によってタコなソフトは壊滅すると仮定する)。しかし、悲しいかな、今はそんなコードがほとんどないわけです。だから仮に「僕みたいな考えのCPU設計者」が世界のどこかに存在していても、究極のCPUはどうあるべきかを考える材料がとぼしいのです。結局、より迅速なPCの発展には、OSASKのような切り口が有用で、しかも他にやっている人が少ない以上、僕のこの方針を非生産的だと言い切ることはできないのではないかと、僕は思うのです。

  • おまけ:僕がPCに能力を100%発揮させる場を与えたいと思うのと同じことを、僕がコミュニティの人たちに対してやっているのではないかという、すごくうれしい指摘をもらいました。そんな関連を今まで考えたことがありませんでした。でも、OSASKコミュニティであってもなくても、適材適所というか、人はみんなその人の能力を生かせる環境に行かせてあげたいと思っています。もしも、そのせいでOSASKから人が離れる結果になるとしても、僕は構いません。

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2006-02-16 (木) 18:00:14 (6017d)