hirax.net::Keywords::「ルール」のブログ



1999-12-30[n年前へ]

6502と並列計算とムーアの法則 

人間のクロック&スケールアップ


 「物理の散歩道」を読み直していると、とある文章に興味を覚えた。

  • 第五物理の散歩道 ロゲルギスト著 岩波新書
の中の「通信を考える」である。この本は、何度読み返しても新鮮である。

 「通信を考える」の中の興味を惹かれた部分は「信号の伝わる速度と距離と処理速度の関係」を論じている部分だ。例えば、計算機は処理速度を高めるためには回路の大きさを小さくしなければならないとか、人間の頭脳の働きの速さから集団生活の広がりの限界について論じているのだ。例えば、

  • 計算機の演算速度の時間スケール -> ナノ秒 = 10^-9s (クロックで考えると、1GHz)
  • 人間の演算速度の時間スケール -> サブ秒 = 10^-1s (クロックで考えると、10Hz)
ということから、計算機の大きさが0.12=1.2x10^-1m角として、地球の直径が12000km=1.2x10^7とすると、その空間スケールが先の時間スケールと同じ比すなわち10^8であると言及しているのだ。

 つまり、通信の速度が光速度であるとして、演算の単位クロックの間に通信が行われなければならないとするならば、計算機の時間・空間スケールと人間の時間・空間スケールは等しいだろう、という推論だ。
 
そして、さらにロゲルギストの想像は広がり、並列計算についても論じている。

 計算機が東京と大阪に離れて置かれていて、通信をしながら作業をするとしたら、人間の場合にはそれと同じ条件というのはどんなものだろうか、と彼らは考える。それは、光の速度で55時間、ちょうど冥王星の軌道直径の5倍程度の空間スケールになる、と論じている。それ以上、離れた場合には演算の過程を共に行うのは無理ではないかというのである。

 こういう文章を読んでいると、この文章が作られたのが30年以上前であることを忘れてしまいそうである。この人達の思索の自由さに憧れを感じてしまう。この人達は、頭の中にタイムマシンにでも持っているのだろうか、と感じてしまうのだ。

 ところで、私がコンピューターをいじるようになった頃は、Apple][の時代だった。といっても、私はお金があふれていたわけではないので、XXX電子でAplle][のコンパチ基盤を買って組み立てて使っていた。その基盤上の6502は1MHzで動いていた筈だ(あぁ、I/Oの6809派vs6502派の論争が懐かしい!)。

 それから20年程たち、CPUのクロックスピードは1GHzを越えようとしている。20年で1000倍である。そして、その集積度は、ムーア(GordonMoore)の法則の「半導体の性能と集積は、18ヶ月ごとに2倍になる」に従っている。

 それでは、人間はどうだろうか?人間の脳味噌のクロックがどの程度であるか測定されているかどうか、素人の私にはよくわからない。しかし、WEB上のデータとしては、例えば

というようなデータがある。ここでは、1演算/秒である。ロゲルギストの用いたものが10演算/秒である。これらは、かなり近い値と言える。もちろん、Mayoさんの演算速度はロゲルギストよりも一桁下であるわけだが、ロゲルギスト達と比べては可哀想というものだ。それに、おそらくMayoさんは謙遜しているのだと思われる。実はもう少し速いのだろう。それに比べて、私などは、二桁の演算(しかも足し算でも)になると1演算/秒もこなせるかどうか判らないくらいである。

 ロゲルギストの時代、すなわち30年以上前、から現在のMayo's Profileの値がほとんど変わっていないように、人間の演算スピードは変わるようなものではない。それは、そうだろう。ヒトのクロックスピードや集積度といったものは、変えるわけにはいかない。当然である。CPUと違ってプロセスルールを変化させるというような訳にはいかないのだ。

 それでは、演算性能を上げようとしたらどうするだろうか?そうなると、並列計算を行うのが自然だろう。単独のCPUの性能を上げるわけに行かなくても、共同作業を行えば、演算性能を上げることができる。

 現代はほとんどの作業が共同作業で行われる。また、その共同作業も大人数が関わるようになってきている。それは、どんな業種でも同じだ。一人では、なかなかできないことが多くなっている。
 それら共同作業、すなわち並列計算、を行う人達(例えれば並列計算機における各ノード)を増やし、それらの間の情報転送をすばやく行うことが多くの作業(計算)を行うための手順だろう。

 そこで、

で用いた
  • 人口増加( http://www.t3.rim.or.jp/~kabutoya/KABHTML/Yoi/2-1.html )
のデータをもう一度眺めてみることにしよう。

最近500年間の人口の変化

 なるほど、人間界の並列計算機におけるノード数は増加している。そして、各ノード間の通信速度を調べるために、まずは、

などの情報から、適当な通信の歴史を調べてみる。
西暦 内容
-4000 のろし
-2400 伝書鳩
-2300 馬による伝令制度
1837 モールス電信機
1876 ベグラハム=ベル電話機
1909 グリエルモ=マルコーン無線電話機
1973 Ethernet XeroxPARCで生まれる。(ちなみにEther=エーテル)
1979 DIX規格=10Mbps
1992 FastEthernet=100Mbps
 これを全部転送速度に直してみる。といっても、よくわからない部分も多いので、私が適当に決めてみる。それでは、その変化を示してみよう。とりあえず、ここ200年位の間のものを考える。
西暦 内容
1837 モールス電信機 = 2bps
1909 グリエルモ=マルコーン無線電話機=10kbps
1979 DIX規格=10Mbps
1992 FastEthernet=100Mbps
 という感じだ。グラフにすると、
最近200年間の情報伝送速度の変化

こんな感じである。対数グラフにおいて直線的に情報伝送速度が速くなっている。この関係は結構きれいである。
 別に意図してこういう数字にした訳ではないのだが、不思議なことである。
 このようにして、人間(ノード)間の転送レートが高くなることにより、先のような人口増加に伴うトラフィック増加をしのぐことができていると考えることもできるかもしれない。そして、人間達の共同作業、すなわち並列計算、を行うだけのバススピードを確保しているのである。

 最近、会社組織などで分社化とか事業分割とかの話題をよく耳にする。こういった時に、分割における時間と空間のスケールはよく考える必要があるだろう。分割が有効なのは、ほとんど独立なものを分割する場合のみである。並列計算における領域分割などと同じだ。

 共同作業がほとんどなく、結果のみをやりとりすれば良いような場合には分割による効果はあるだろう。その一方で、同じ事業・作業を行っているところが、離れていては作業の効率は上がらない。もし、技術系の会社でそのようなことを行うのであれば、事業や部署を並列化した際の真面目なシミュレーション位は行うべきだろう。いや、別に深い意図はないけど。

 こういったことは「新・闘わないプログラマ No.109 時代錯誤」に書かれていることとも少し似ているような気がする。

 さて、1999/12/30-2000/1/1は野沢温泉で温泉&スキーである。2000年問題で会社に泊まり込む人も多いが、私はスキー場で泊まり込みである。同時期に野沢温泉に行く人がいるならば、ぜひ一緒に「スキー場の特殊相対性理論」について討論したいと思う(スキー場で)。

2001-05-19[n年前へ]

代理母出産の記事を読んで思ったこと 

 代理母出産について朝日新聞の「治療が先行 議論不足」という記事。議論してどうにかなるの?
 「(様々な不妊に関する治療は)いずれも社会のルールがつくられる前に、一人の医師による独自の判断で踏み切られ、その後、現状が追認されてきた。」って、どうしてもそうならざるを得ないんじゃないのかな、と私は思うのだけれど。「社会」って一体、何?

2003-03-10[n年前へ]

松井の不思議な「マッハ弾」? 

スタンドまでわずか0.7秒の超打球

 先日、asahi.comを読んでいると「松井の『ションベン小僧』は飛ばします」なんていう記事が目に入ってきた。JR北山形駅前のションベン小僧がニューヨークヤンキースに行った野球の松井選手のコスプレをしているという話だった。ヤンキースのユニホームを着てバットを小脇に抱えた松井ションベン小僧が、大きな放物線を空に描いているそのようすを見ると、確かに染ノ助・染太郎ではないが「いつもより余計に飛ばしておりま~す」という印象で力強さを感じさせるのである。「しょんべん小僧」の物理学風上に向かう「しょんべん小僧」「ションベン小僧が描く放物線」に関してはちょっとばかりうるさいワタシの目から見ても、確かに「松井の『ションベン小僧』は飛ばします」なのだ。


 こんなションベン記事を筆頭に松井の記事を至るところで見かけるのだけれど、この記事と相前後して「松井のマッハ弾」なんていうフレーズも何処かで見かけた。何でもその松井の打球は「打ってからスタンドに飛び込むまで、わずか3秒のマッハ弾」だったという。この記事が本当であるとするなら、スタンドにいる人の安否が心配になるような殺人打球なのである。こんな殺人打球で狙われた日には、きっとセンタースタンドは二百三高地をも彷彿させるような惨状になっているに違いないのである。

 ところで、その「松井のマッハ弾」という表現を見ながら、私はふと思ったのである。

「あれ?ホームベースからスタンドってそんなに遠かったかな?」
「音速で3秒もかかるほど遠かったかな?」
音速で3秒ってことは、350m/s * 3 s ≒ 1km…?ホームベースから観客席まで1キロメートル…?そんなに野球場って大きかったのか…?野球のルール上は「中堅のフェンスまでの最短距離は400フィート(121.918メートル)を必要とする」という規定があるらしいが、400フィートより長ければホームベースから観客席まで1キロメートルもあってもOKだったのか…。
 いやいや違う…、絶対に何かがオカシイ。そうだ、この地球上には空気抵抗というものがある。少なくとも通常の野球場には空気抵抗が絶対にあるハズだ。きっと、打球をバットで打った直後は音速を超えるマッハ弾なのだけれど、空気抵抗ですぐにスピードがおちてしまい、スタンドに入るまで3秒もかかっているに違いない。素直なワタシは新聞記事を信用するわけで、きっとそうであるに違いないのである。きっと、「松井のマッハ弾」の軌跡はスタンドに向かって真っ直ぐではなくて、急激にスピードが遅くなって失速したりしているに違いないのである。そこで、試しに打球の軌跡のシミュレーション(referto Matthew M. Thomas)をしてその辺りのことを調べてみることにした。
 

 まずは、松井選手の挑戦先でもあるメジャーリーグのホームランキングでもある「サミー・ソーサ選手の打球」をシミュレーションをして眺めてみることにしよう。上方向30度センターに打球が飛んで、その打球の打った直後の初速度が110mile/h(≒180km/h)である場合のシミュレーションである。ちなみに、打球が回転していない場合と、打球に3000rpm程度のバックスピンがかかっている場合を調べてみることにした。
 

「サミー・ソーサの打球(初速度=110mile/h)」 の軌跡のシミュレーション
「打球が回転していない場合」
「バックスピン=3000rpmの場合」 

 この結果を見ると、例えばサミー・ソーサの打球の飛距離は「打球が回転していない場合」にはたかだか350フィートくらいでセンターのフェンスまでの距離400フィート(121.918メートル)にも達していないことが判る。つまり、これでは単なるセンター・フライなのである。しかし、実際にはボールの少し下の部分を打つことにより、ボールにはバックスピンがかかっているわけで、その回転によりマグナス力を受けてボールは浮き上がる。そのため飛距離が伸びて、420フィート程度までも打球は飛ぶことになる。つまり、サミー・ソーサ選手の打球は見事(ホームラン・キングなのだから当たり前か)ホームランになるわけである。
 

 それではそのサミー・ソーサ選手らが活躍するメジャーリーグに挑戦している「松井のマッハ弾(初速度=765mile/h)」の場合にはどうなるだろうか?サミー・ソーサの場合と同じように打球が回転していない場合と、打球に3000rpm程度のバックスピンがかかっている場合を調べてみた。
 

「松井のマッハ弾(初速度=765mile/h)」の軌跡のシミュレーション
「打球が回転していない場合」
「バックスピン=3000rpmの場合」  

 すると、「松井のマッハ弾(初速度=765mile/h)」の場合には「空気抵抗ですぐにスピードがおちてしまい、スタンドに入るまで3秒もかかってしまっていたり」「急激にスピードが遅くなって失速したり」なんか全然していないのである。いや、そもそも打球が「スタンドに飛び込む」ことすらいないのである。「打球が回転していない場合」でも、「バックスピン=3000rpmの場合」でも、何処まで飛んでいるか全然判らないほどの場外ホームランになってしまうのである。松井の打球は一直線に青空に向かって飛んでいくのである。
 

打球の角度を低くすると…
打ってから0.7秒後までの打球の軌跡

 そこで、試しに打球の角度を低くしてスタンドを狙って計算してみると、今度は0.7秒ほどでスタンドに打球が突き刺さってしまったのである。「打ってからスタンドに飛び込むまで、わずか3秒のマッハ弾」どころでなくて、「打ってからスタンドに突き刺さる、わずか0.7秒のマッハ弾」なのである。やはり、何かが記事とは違うのだ。一体、松井の「打ってからスタンドに飛び込むまで0.7秒のマッハ弾」とはどんな打球なのだろうか?あの記事は事実無根の記事なのだろうか?素直なワタシたちはスポーツ新聞のプロバガンダに、見事なまでに騙されているのだろうか?

 それは違うのである。何でも信用する素直なワタシはついに記事通りの「打ってからスタンドに飛び込むまで0.7秒のマッハ弾」となる松井の打球の条件を見つけたのである。それは、初速度=765mile/h、打ち上げ角度=65°、打球の回転= トップスピン(22000rpm)という条件なのである。マッハ1の音速の初速度を持ち、打ち上げ角度=65°という通常なら単なる凡フライのように打ち上げてしまい、そして、打ち上げているくせに何故か二万二千回転ものトップスピンで打球が回転しているという侍ジャイアンツの魔球もビックリ、インド人だってビックリの魔打球なのである。どんな不自然なフォームで打っているのか判らないのだが(おそらくバットをボールの真下から真上にすくい上げるように振り抜くサムライ・スタイルに違いない…)、とにかくそんな打球であればループを描きながら、約3秒でスタンドに達するのである。そんなトップスピンなんかかけなければ余裕で場外(どころじゃない)大ホームランなのに、松井選手はきっと日本人特有の奥ゆかしさできっとそんなトップスピンをかけているに違いないのである。簡単に場外ホームランにせずに、そんな苦労をしてわざわざスタンドに飛び込むホームランを打とうとしているに違いないのである。記事がシンジツであるとするならば、素直なワタシはそんな打球のヒミツを読みとってみたりするのである。
 

これが松井のマッハ弾だ!
初速度=765mile/h
打ち上げ角度=65°
トップスピン=22000rpm

 自分の夢を実現してメジャーリーグに行った松井選手が、これからもさらに活躍していくかどうかはよく判らない。こんな「マッハ弾」を量産していけるかどうかは判らない。けれど、松井選手の「夢」を通して、きっと色んな人達が「自分たちの夢」を見ているんだろうなと想像すると、これからも松井選手には「マッハ弾」を青空へ放ち続けて欲しいと思う。「しょんべん小僧」が風に負けないように、みんなに夢を見せる「マッハ弾」をこれからも空へ打ち上げて欲しい、と願ってみたりする。

2004-04-13[n年前へ]

れっつ! 日本語(ひらがな)プログラミング(ATOKで…) 

 というわけで、ATOKでrubyでもawkでもperlでもなんでも使うことができるソフトウェアを作ってみたわけです。しかも、今度のバージョンはCONFIG.TXTに自分で定義した関数や置換ルールを決めておくことができるわけです(結局どちらもただの「辞書登録と同じ」置換ルールに過ぎませんが)。これで、ATOKの辞書登録は64文字までよルールに縛られずに済むわけです。「にちじ(日時)」でも「じこく(時刻)」でも何でもやり放題です。

 で、このバージョンでは、そのCONFIG.TXTの定義次第で一見ヘンに見える色んなことができます。例えばCONFIG.TXTの作り方次第では

「0」のこさいんをしゅつりょく
なんて入力して変換すると
perl -e "$param=0;$param=cos($param);print $param;"
が実行されて、"1"という計算結果が表示されたり、
「でんたく」をきどう
を入力・変換すると電卓が起動したり、
「かいぎょう」のかずをしゅつりょく
をAMET変換すると、クリップボードに保存されている内容中に改行コードが何回出てくるかを出力したり、なんてことも簡単にできるわけです。もちろん、大阪弁や津軽弁のルールを決めておいて、お国言葉でプログラミングをしてみるのももちろんアリに違いありません。

 というわけで、「レッツ!日本語(ひらがな)プログラミング」です。ATOKユーザーで何かのスクリプト言語や一般的なプログラミング言語を使う方なら、このソフトをインストールして、ぜひぜひCONFIG.TXTをテキトーに仕立ててみましょう。懐かしの「ぴゅう太日本語ベーシック」顔負けの、あなただけの「ひらがなプログラミング言語」を作ってみるのも面白いかも。えっ?全然面白くない…ですか?

2004-05-07[n年前へ]

祝!初のライトユーザー応募 編 

 Ametumultiのライトユーザー募集をしてみても…。ATOKユーザー自体が少ないのか、Windows上でATOKを使っていてEmacsなんて使わないライト・ユーザだけどスクリプト言語を使いたい人なんてそもそも存在しない(可能性高し)のか、と悩む今日この頃です。

 しかし、初のライトユーザー応募がありました。私の中の「オレ定義」ではWindows上でATOKを使っているライト・ユーザがRubyを使ったりはしないような気がするのですが、何はともあれありがたいことです。いや、そもそも不親切の作りっぱなし放置プレイばかりの私ですが、よろしくお願いいたします。

> Windows上でATOKを使っているライト・ユーザです。> 「ATOKを使ってて、ATOKから便利ソフトを使ってみたい> 初心者(ライトユーザ)さん」を募集、> の成り行きを興味深く見ていたのですが、誰も名乗りを上げないようなので、> 私で良ければ、ぜひとも手も足もリードして頂きたく思います。私の中の「オレ定義」ではWindows上でATOKを使っているライト・ユーザがRubyを使ったりはしないような気がする(それをいったら一体どんな人が使うというのか…)のですが、ぜひよろしくお願いいたします。むしろ逆にリードして頂きたいです。> AmetMultiへの希望です。> 1. UseCtrlCが欲しい。> 2. 変数に値を渡す方法が改良されて欲しい。> 3. 「こんな風に使いたい」> 1. UseCtrlCが欲しい。> コピー機能があると便利だと思います。> http://opal.s8.xrea.com/tmp/linenum.swf.html> を見て頂けるでしょうか。以下の流れになっています。> 1. 加工したい箇所を選択> 2. Ctrl-Cで選択範囲をクリップボードにコピー> 3. "linenum"入力> 4. Ctrl-9で、設定したAmetMultiを呼び出す> 5. 選択範囲が、AmetMultiの出力に置き換わる> この2の操作を、4に入れられたら楽だ、> 次のように書きたい、ということなのです。> linenum> UseCtrlC;while gets;printf %Q(%2d:%s),$.,$_;end;UseCtrlV> #IME入力前の動作はAmetの範囲外ですかね? うぅ、それは普通に考えるとATOKの範囲外でしょうが、上手い抜け道はないものでしょうかねぇ…。> 2. 変数に値を渡す方法が改良されて欲しい。> +> $param=%Q(> > );while gets;print %Q(#{$param}#{$_});end;UseCtrlV -< $param=%Q(> >> );while gets;print $_.sub(/^#{$param}/,'');end;UseCtrlV> と、ruby用CONFIG.TXTにコメントイン・アウトを書きました。> 今は+と-<>でイン・アウトを設定していますが、> +と-で書ければすっきりします。どうも、> -> $param=%Q(> > );while gets;print $_.sub(/^#{$param}/,'');end;UseCtrlV> と書くと、+のが先にひっかかってしまうようですね。確かに今は単なる置換ルールでやってますから、現状ではそういう動作になってしまいますね。AtokMulti自身の「辞書ファイル(CONFIG.TXT)」をどう変えようかは結構(いえホントはたまに)思案しているところです。CONFIG.TXTによる単純置換でなくて、1. ATOKから受け取った内容をRubyなりPerlなりで処理する2. さらにその内容をスクリプトとして処理するなんていう風にしてみましょうか。これなら、私には手抜きで楽そうですから。とはいえ、これまた魔の巣窟になるでしょうし…。> 3. 「こんな風に使いたい」> googleイメージ検索と連携しましょう。> 一枚だけでなく、何枚も取得できればなお楽しです。これはぜひやってみたいですよねぇ。複数画像の貼り付け方をちょっと考えてみます。実は「一発芸編」の時にデモ用のアプリとして、一枚だけ画像をGoogleから入手するアプリはGuruguru Imagehttp://hirax.net/dekirukana5/googleimage/index.htmlをテキトーに変えて作っておいたのです。ただ、話が散漫になりそうだったので、話の中では触れませんでした。とりあえずそれを添付させておきましょうか。



■Powered by yagm.net