« マイクロソフト製品の必要パッチを知る | Main | Win2000/XP SP1用IE6SP1 MS06-042修正パッチ再リリース延期 »

2006.08.23

マルチコア化で複雑化するプログラミング

「後藤弘茂のWeekly海外ニュース」で「なぜCPUは“シンプルコア”の“マルチコア”へと向かうのか」という記事が出ています。

このへんの背景としては、

  1. IA-32(x86)は命令が複雑なためデコード処理が複雑で、効率よく実行ユニットに送り込むのが難しい
  2. IA-32のデコードユニットは発熱が大きいため熱密度が上がりすぎる
  3. 1スレッド内の命令並列性をリアルタイムで抽出するのは限界に来ている
  4. リーク電流など微細化に伴う消費電力の低下が期待できなくなった
ということで、微細化で増えたトランジスタを1スレッドの性能向上に費やそうとしても、命令の複雑性などから工夫しても性能が上がらない、消費電力を2倍にしても性能向上は数割、という事態になっています。
そのため、1スレッドの性能向上は程々にして、同じコアを複数載せることで消費電力あたりの性能を確保することになったわけです。

ということで、今まではCPUを載せ変えるだけでソフトウェアの変更なしで性能向上が期待できましたが、マルチコアでは「現状は」ソフトウェアを書き換えて性能向上を図る必要が出てきました。
これは、普通のクライアントアプリはシーケンシャルな手順で処理する=実質1スレッドで処理をしていることが多いため、マルチコアのCPU性能をクライアントアプリで引き出すには、ソフトウェア側がシーケンシャルな手順から並列化できるところを洗い出す必要があるためです。

サーバサイドのアプリケーションでは、この辺の事情が変わっていて、

  1. サーバでは複数ユーザの処理を同時にこなすため、DBなどサーバ上で動くアプリはマルチスレッド化を意識して開発している
  2. Webアプリは1セッション=1スレッドになっていて、アプリ開発側はマルチスレッドをほとんど意識しなくてよい
な「CPUコア数 << ユーザ数」な状況もあり、1つのCPUコアで1ユーザの処理を行うレベルになるまではソフトウェアの書き換えを考えなくてよい、ということがあります。

今後、CPU性能が大幅に向上しないとなると、マルチスレッドプログラミングが重要視されてきます。
ただ、現状のマルチスレッドプログラミングは結構煩雑ですし、並列化するところを検討・設計するのはそれなりに時間がかかりますから、この辺を支援するツール、ライブラリが出ない限り、クライアントサイドのマルチスレッド化は動画エンコードなど特定ジャンルをのぞいて普及は難しそうです。
ただ、今後のプログラミングのトレンドとしては、どのジャンルのアプリでもマルチスレッドプログラミングを検討する必要がある、ということと、設計を含めたマルチスレッド化の支援がどこまで充実するか、というところですね。

今日の夕飯:初代忠吉 忠吉つけ麺(並) + ギョウザ ¥1,100
ギョウザは野菜ザクザクで柚子胡椒がついているのがいいです(笑)

|

« マイクロソフト製品の必要パッチを知る | Main | Win2000/XP SP1用IE6SP1 MS06-042修正パッチ再リリース延期 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/27186/11566278

Listed below are links to weblogs that reference マルチコア化で複雑化するプログラミング:

« マイクロソフト製品の必要パッチを知る | Main | Win2000/XP SP1用IE6SP1 MS06-042修正パッチ再リリース延期 »