2008年04月25日

最新のマルチコアCPUを使いこなすには

こんにちは、イワサキです。わーい(嬉しい顔)
最近はプログラミングネタ担当となっているわけですが(笑)

さて、今日は次世代に向けたお話。
CPUはデュアルコア、クアッドコアが当たり前になってきている
昨今ですが、それをプログラマーが使いこなすにはどのような
プログラミングをすればいいのか。

最近では特にPlayStation3で注目を集めたCELLプロセッサが
多くのコアを搭載していますよね。目

PlayStation3のCELLについてはこちらなどが分かりやすいでしょうか。

CEDEC 2006 - CellプロセッサをGPU的に活用することができるのか
http://journal.mycom.co.jp/articles/2006/09/14/cedec3/index.html

CELLのようなCPUはヘテロジニアス・マルチコアプロセッサと言います。
非対称なCPUとは、同じものが複数あるわけではなく、
別のアーキテクチャのプロセッサが混在しているプロセッサです。
たとえば1対多数のような構成です。

CELLだとPowerPCコアが1個2スレッド、ストリーミングプロセッシングユニット
(SPU)が8基です。PlayStation3の場合はこれが6個です。

このような複雑な仕様を持つプロセッサを100%使い切るには
どうすればよいでしょうか。
答えは意外と身近なところに。
一番分かりやすいのは「お昼時のコンビニコンビニの店員さんの動き方」です。

店員さんをPowerPC、複数置いてある電子レンジをSPUとしましょう。

店員さんはお客(ジョブ)がくると、まず、

(1)品物を受け取り、お弁当を温める場合は電子レンジにセット

(2) すぐさま会計を済ませて、そのお客さんには横で待ってもらっておいて
   次のお客の対応をします。

(3) 2回目は1人目客のお弁当が既にあたため中でレンジが動いていますので
   2台目のレンジにセットします。客と応対途中でもレンジのあたためが
   終わったら前の客を待たせないために優先的にそのお弁当を
   前の客に渡します。

range.gif


・・・とまぁ店員さんは常に大忙しで待つことなく100%の働きダッシュ(走り出すさま)をしています。
レンジも次々に入れ替わり立ち代り同時に稼動していることになります。
これは本当にすごいなぁと感心してしまいます。


────これがもしもダメな店員だった場合。。。

会計をまず全部終わらせてから電子レンジにセットして、
あたため終わるまでボーっと待って、
終わったらお客さんに渡してから次の人ー

という感じになります。
これでは電子レンジは1台しか動きませんし、かかる時間も相当長くなります。
客の回転も悪くなってしまいますよね。バッド(下向き矢印)


これとおなじ現象がヘテロジニアスコアにも発生します。
メインのプロセッサはサブのプロセッサにどんどん仕事を投げて
投げた後のジョブは横に置いておいて次のジョブをとってきて…
というように次々ジョブをこなす。
そして結果がサブプロセッサから返ってきたらすぐに
以前置いておいたジョブの対応を優先的に再開する。
そうすると同じ原理でそれぞれが上手く回転するというわけです。
待ち時間を他の作業をして待つという具合です。

身近なところにヒントひらめきは隠れています。
生活自体も日々勉強です!みなさんも充実したライフぴかぴか(新しい)を送りましょう!手(パー)

posted by 管理人 at 18:28 | 研究・開発