かってにインパクトファクター

子育てサラリーマンが日々の雑多なことをつらつらと綴ってます。時々政治ネタ経済ネタコンピュータネタなどをはさみます。

パソコンはどこまで早くなるのか?

前回中途半端な引きになってしまいましたが、計算機(普通はパソコンのこと)がどこまで早くて、そんなに早いの必要なの?って話の続きです。
なんで中途半端な引きになっていたのかと言うと、今私が使っているパソコンのベンチマークをとりたかったからです。経緯に興味無い方は、以下の枠は飛ばしてください。

普通、ベンチマークと言うものは相対的な速度を計測するものが多い。しかし今回は何ギガフロップスで動作しているのかというデータが欲しいため、いろいろ探してみた。
一番の王道はHPLトップ500でも使われている代物。
私が使っているFreeBSD5.4Releaseではインストールは簡単で
#portinstall hpl
とするだけなのだが、インストールに数時間かかる。その後走らせようとするが良く分からん。
いろいろ調べてみると、
mpirun -np 4 -machine_file *.* xhpl
とすると走ることが分かるが、出力ファイルHPL.outが出て来ない。
めんどくさくなって、別のベンチマークソフトを探すと、flopsというそのままの名前のソフトがあったので、いれてみた。
#portinstall flops
で、みごと簡単に処理速度が求まったという感じです。

FLOPSというのは浮動小数点演算を1秒間に何回できるかという指標。頭にM(メガ)、G(ギガ)、T(テラ)とつくが、10の6乗、10の9乗、10の12乗の意味。1GFLOPS(いちぎがふろっぷす)というと、1秒間に10億回浮動小数点演算ができますよという意味です。
前回も触れましたが、私が小学生の頃は1秒間に1億回の計算をスーパーコンピュータはできると聞いていたので、この頃は0.1GFLOPSの処理能力があったということになります。
ではでは、私のコンピュータはどれくらい行くでしょうか?結果は

FLOPS C Program (Double Precision), V2.0 18 Dec 1992

Module Error RunTime MFLOPS
(usec)
1 4.0146e-13 0.0117 1193.0924
2 -1.4166e-13 0.0117 597.8624
3 4.7184e-14 0.0114 1485.5098
4 -1.2557e-13 0.0133 1124.9171
5 -1.3800e-13 0.0248 1167.8384
6 3.2380e-13 0.0225 1290.2817
7 -8.4583e-11 0.0251 477.9771
8 3.4867e-13 0.0212 1417.7450

Iterations = 512000000
NullTime (usec) = 0.0010
MFLOPS(1) = 743.0081
MFLOPS(2) = 824.9950
MFLOPS(3) = 1122.3302
MFLOPS(4) = 1330.1318

で、だいたい1GFLOPS程度あるということになります(細かい事は気にしてません)。15年程度前から比べると、当時のスーパーコンピュータより今のパソコンは10倍程度速いということになります。
私のパソコンのクロックは3GHz相当*1ですから、浮動小数点演算であることを考えるとまずまずのスペックだと思います。
私が最初に買ってもらったパソコンは8MHzの2MBですよ。それが今では3GHzの1GB。なんとも贅沢な時代になりました。
そんなことを言っていても切りが無いので本題に移りましょう。
世界の計算機では、100TFLOPSをたたき出しています。私のパソコンの10万倍も速いですね。6万個もCPUを積んでいるからしょうがないと言いたいところですが、CPUを増やしただけではなかなか速度につながらないので、結構頑張っています。


前回のニュースで、文部科学省が1秒間に1京回の計算のできるコンピュータを開発するとありました。1京回というのは10の16乗ですから、10PFLOPS(ぺたふろっぷす)をめざすということです。上記の100TFLOPSの100倍の速度です。この辺まで来るとハムスター位の能力はありそうですね。
これだけ速い計算機を一体なにに使うのか?ちょっと考えてみます。
たとえば天気予報です。ヨーロッパあたりで吹いていた風が2〜3日後の日本の天気に影響を及ぼすとなると、程度の差もあるでしょうが、正確な天気予報を行うためには地球上全ての大気の流れを考える必要があります。(ここから先めんどくさいので専門用語の説明はしません。自分で調べてください。)このような計算を行うためには、まず基本となる式を作り、離散化を行います。天気であれば、流体の式を用いることになります。数式の離散化を行うことができれば、有限要素法を用いるためメッシュに区切ってゆき、数式を適用して計算を行います。このとき、数式を近似しない方が正確な計算ができますが、解くために必要なCPUパワーは一気に数千倍になることも多々あります。大規模な流体の計算では、初期値のサンプルも少ないため、予想する時間が遠くなるとシミュレーション結果はカオス的な振舞を見せることがあります。そのため初期条件をわずかに変えたいくつものシミュレーションからもっとも起こりやすい気圧配置を求めて天気予報とします。このとき、有限要素法で区切るメッシュは細かい程良いわけですが、細かい程計算に必要なマシンパワーやメモリが激増します。
と呪文のようにいろいろ書きましたが、例えば地球の大気を10kmの立方体に区切ったとして一体どれくらいのメッシュが必要でしょうか。鉛直方向に関しては地表で10kmを基準にしましょう。地球の表面積が5*10^8[km^2]ですから、地表を5*10^6=500万個のメッシュに区切ります。鉛直方向には例えば100kmまでとると、全部で5000万個のメッシュができることになります。有限要素法のみを考えたとき、計算回数は最高で5000万*5000万ですが、一応ありそうな数値として5000万log(5000万)=9*10^8=9億回の計算が必要になります。時間変化を1分ずつとってゆくと24時間の計算で1.3*10^12=1.3兆回の計算を行うことになります。各要素の数式の計算を考えると更に計算時間は増大します。メモリーも一つのメッシュで抱えるデータの量次第ですが、10個程度の数値を抱えていたとして、4GBも必要になります。
上記の例からも分かると思いますが、例えばメッシュを10kmから1kmにしようとか1mにしようとかという欲を出せばあっと言う間に桁が10個位上がってしまいます(1mでは12桁あがる)。最近の研究はシミュレーションとセットで論じられることが多くなって来ました。計算機の進展に伴って、数式自体が非常に複雑になっています。このため、計算能力に関しては、こと研究目的であれば無尽蔵に必要なわけです。
ではでは、個人として使う分にはどの程度の計算機であれば問題ないでしょうか?私のCPU3GHz、メモリー1GB、ハードディスク300Gでは、日常での使用にはなんら問題ありません。しかし、例えばTVチューナを付けると、エンコーディング(動画圧縮)を行うとものすごいCPUを消費します。例えば1時間のビデオを3時間かかってエンコーディングするという感じだと思います。私はハードウェアエンコーディングなのであまり実感ありませんが。ということで、普通に使う分には今の所これ以上の速度は必要なさそうです。
皆さんがパソコンを使っていて遅いなと思う瞬間というのはアプリケーションの新たな立ち上げの時などだと思います。これはメモリーよりハードディスクの方が1000倍程度読み込みや書き込み速度が遅い事に起因しています。またメモリが小さいとハードディスクをメモリ変わりにしようとするため、速度が一気におそくなることになります。なので、一般のご家庭の世界では今後はハードディスクの書き込み速度を如何にして速くするのかといったCPUの周りの速度の改善に走るのではないでしょうか。


個人的には、今のCPUの速度で十分なんですよね。重いOSさえ使わなければ、今のPCは10年以上使えそうですから。

*1:1秒間に3ギガ回命令を読み込めるという意味。相当とはINTELを基準としたAMD社のCPUの指標です。つまり、INTELのCPUに換算すると3G相当の速度ですということです。