01.今なぜマルチコアか

●Introduction

 科学技術計算は、常に強力な処理能力を要求する。当然、プログラムを作る以上、複数CPUによる並列処理で計算してみたいと思う。

 しかし、現実的にマルチプロセッサ対応のアプリケーションが組めるようになったのは、つい最近のことであり、「効率良く並列処理できるシステム」はこれからの課題である。

 このコーナーは、並列処理について、適当につづっていく。
 今のところ結論が見えていないため、まとまりがない点はご了承願いたい。


2006/01/10
●回折像解析ソフトというソフト

 並列処理ができるプログラムは、あまり多くないが、いくつかは存在する。
 有名なところでは、DVDの作成などのマルチメディア系処理があるが、プログラムのダウンロードのコーナーにある「回折像解析ソフト」も並列処理をするプログラムの1つである。

 このプログラムは1画面あたり最大4スレッドで並列実行できるようになっている。ソフトの本来の目的からすれば、FFTでサクっと実行するものだが、結局のところ基本アルゴリズムは遅いままで、マルチスレッド+負荷調整機能という、どうでもいい所に力の入ったソフトとなっている。

 計算中でも画面は固まらないので、別の窓を開いてパラメータ設定したり、計算開始の指示もできる。仕様上30画面で同時実行できるが、さすがに多量に同時計算をするとWindowsの動作が緩慢になってくる。しかし、高負荷のスレッドが多量に投入されていくことで、Windowsがどんな動きになっていくかを観察するには良いソフトではないかと思う。

 このプログラムができるまで、本題の内容(回折像を描画すること)とは別に、問題を起こさずかつ、シングルスレッドよりも高速に動くようにするのに、いろいろと紆余曲折があった。

 プログラムを作る側としてマルチコア化ブームについて述べていきたい。


2006/03/19
●なぜ今マルチコアか

 最近のCPUのトレンドは、マルチコアへと向かっている。

 従来は「1年半でクロックが2倍になる」という高速化のペースだったが、CPUクロックが3GHzを超えたあたりからパッタリとクロック向上が止まった。
 
 あれから数年経っているが、いまだに定格で4GHzを超えたという話は聞かない。(2006年上旬時点の最高クロックはPentium4 670/672の3.80GHz)

 なお、従来のペースでクロックが上がっていれば、計算上、2006年1月現在で12.9GHz±10%近辺にまで達しているはずであり、既に4倍近い差が出てしまっている。

 ぶっちゃけ、万策尽き果ててクロック向上が不可能になったので、パフォーマンスを上げるには、もはやCPUコアの数を増やすしかないというのがCPUメーカーの本音だろう。

 細かい話は無視するにしても、デュアルコア・マルチコアになることによってコア数に比例してパフォーマンスは確かに上がる。しかし、エンドユーザーにありがたみがないのも事実である。

 WordやExcelのためにデュアルコアが欲しいかと言えば、それは否だろう。IEはマルチスレッドで動くため、HTをEnableにするとIEは異様に速くなるのは事実だが、実質的に回線速度と相手サーバーのレスポンスがボトルネックになるので、あまり恩恵がない。(IE単体ではFTTH回線でHT EnableでもCPU使用率が60%程度までしかいかない。)

 では、エンドユーザーにとって、一番プロセッサパワーを要求するのは何かと言えば、実のところゲームである。しかし、「ゲームをするならシングルコア」というのが最近定説になっている。(マルチスレッド対応のゲームが少ないからだが、そもそも「マルチスレッドであること」と「おもしろい」とは全く話が別だ。)

 CPUメーカーがせっせとマルチコアに向かっている理由は、エンドユーザーからの要求とは到底思えない。


2006/12/30
●今まであまり注目されなかった訳

 マルチプロセッサシステム自体は、専用設計のものならかなり古くからある。
 なぜなら、CPUの数が多ければ原理的に処理能力が上がる。誰もが考えそうな、単純な話である。

 現在は、エンタープライズ分野では、複数のプロセッサを使うのは半ば当たり前で、今やシングルプロセッサで世界トップクラスの高速コンピュータを作るのは不可能になっている。
 一方、パソコンのようなクライアントではマルチプロセッサはあまり多くない。

 ではなぜ、今ほどに盛り上がらなかったのかと言えば、クロック向上によるPCの相対的なコストパフォーマンスの向上が激しいからである。

 従来のペースで行くと、1年もすれば、1個10万円近くする「最速CPU」はエントリークラスに下がり、CPU単体価格も2万円台まで落ちる。

 ハイエンドプロセッサを積んだマルチプロセッササーバを後生大事に使うよりも、シングルプロセッサの安いサーバーを頻繁に買い換えた方がトータルコストパフォーマンスは良いのだ。


 それに、もう一つ理由がある。


2006/03/19
●なぜ対応されないのか?

 ここでちょっとした疑問が出るだろう。
 「なぜOSが複数CPU対応なのに、アプリケーションは2つ利用しないのか?」という疑問だ。

 プログラムは、単純に言ってしまうと実行したい事柄(命令)を単純に並べたものである。ある処理が終わって結果が出ていることを前提に、次のやるべき命令をずらーっと並べたものだ。(「ある条件になるまで戻って繰り返す」みたいな命令があるので、上から下まで単純に実行される訳ではないが)単純に言ってメモリ上に並んでいる命令を順に実行していくのがCPUの役目だ。

 したがって、因果関係を無視して片っ端から無計画に複数のプロセッサが命令を実行してしまうと因果関係が破綻して、おかしな結果になる。
 いや、それ以前にまともに動かないので結果すら出てこないだろう。

 カップ麺を作る場合、お湯が沸くのを待つ作業と、お湯を入れてから3分待つ作業を並列実行すれば、お湯を注いだ直後に食べることができる…わけではない。
お湯が沸かないと麺にお湯を注げない。麺にお湯を注いでから3分待たなければならない。手順は守らないとカップ麺は食べられない。

 プログラムにはきちんとした実行手順がある。

 シングルCPU用に作られたアプリケーションは、2つ以上のCPUがあってもOSはプログラムを2つ以上のCPUで同時に動かないように "あえて" 制御しているのである。


2006/01/08
●なぜ対応しないのか?

 エンドユーザー側の疑問として、もう一つ「なぜ対応アプリケーションが少ないのか」が挙げられる。

 PentiumII/IIIといったデュアルプロセッサ対応CPUは、比較的古くからあった。
 パソコンのマルチプロセッサ化は今に始まったことではない。

 OSであるWindowsも、(WindowsNTの時代から)複数のスレッドを複数のCPUで並列して処理することができるように作られている。Windows95も、シングルCPUしか対応しないが、マルチスレッドは可能である。環境はかなり前から整っていた。

 その割に、対応アプリケーションが異様に少ないのだ。

 特にゲームでは、CPUパワーはいくらあっても足りないのだから、デュアルCPU(HT/デュアルコア)は願ってもない環境のはずだ。しかし、対応しているゲームは皆無に等しい。
 なぜ対応しないのだろうか。

 それは、ソフト開発上の都合があるからで、詳しい話は別の機会に語ることにするが、1つの原因として、開発言語側に複数のプロセッサを同時に使うための機能(スレッド管理)が標準機能として備わっていなかったというのがある。

 となると、アセンブラか、C++といったOSが備えているAPIを直接操作するような、低レベル操作が行える言語を使いこなす必要があり、2つ以上のCPUを使うのはかなりのスキルを要求する。おまけに複数のCPUを搭載したパソコンは数が知れている。
 エンドユーザーは高速な処理を望んでいるが、「デュアルプロセッサのPCを購入してまでとにかく高速な処理が必要だ」という事は(エンタープライズ分野を除けば)ほとんどない。

 今の2倍の速度が欲しければ、1年半待てば、最新CPUは今の2倍速くなっている。C++やアセンブラまで駆使してデュアルCPUで安定動作するアプリケーションを作る方が厄介だし、開発期間もかかる。1年半待った方が得だ。

 だから、プログラムを作る側の立場で言えば、無理に対応する必要はないという判断になる。


2006/12/30
●(もう一度)なぜ今マルチコアか

 ということで、使いたいアプリケーションがマルチプロセッサ対応していない以上、CPUコアが増えたところで、現実的な話、今のところエンドユーザーにメリットはない。

 最近こそベンチマークテストはマルチプロセッサ対応だが、使いたいソフトは相変わらずシングルスレッド動作である。よって、エンドユーザーがデュアルコアを積極的に選ぶ理由も、(今のところ)ない。「これからはデュアルコアだね!」というセールストークが空しい。

 しかし、もはや年間1.5倍(2年で2倍)などというクロック向上は望めない。

 万一、画期的なブレークスルーがあってクロックを飛躍的に向上させることができたとしても、今度は光速の限界のために、早晩物理的にCPU内で情報を同期できなくなる。

 理由はともかくクロック限界が来たらマルチコア(マルチプロセッサ)で処理するしか高速化の手段は残されていない。

 そして、少なくともエンドユーザーは「技術革新によって何年かすれば高速に処理できるようになる」と信じている。

 マルチコアプロセッサの登場は、否が応でもアプリケーションはマルチプロセッサ対応を迫られる時代がやってきたことの証でもある。


2006/03/18
●タダ飯の時代は終わった

 従来、使用するCPUをより高クロックのものに変更することによって、プログラムの実行速度を上げる(処理時間を短縮する)ことができた。

 極論を言えば、アプリケーション側のアルゴリズムの最適化などの工夫を一切しなくても、PCさえ最新のものに買い換えればCPUのパワーアップに連動する形で=ソフトウェア開発費をかけなくても高速化できた。

 しかし、これからは、クロックではなくCPUコアの数が増えていく。

 今後、プログラムを高速化していくには、アプリケーション側で積極的に複数のプロセッサを並列して利用することでの高速化(マルチスレッド等の処理単位の分散)をしなければならなくなったのである。

 これが「タダ飯の終焉」(Free Lunch is Over)と呼ばれるものである。


2006/01/03

[戻る]