並列処理を生かすプログラミング技術—時代はマルチコアからメニーコアへ—

コンピュータ理工学部 コンピュータサイエンス学科 新實 治男 教授

時代はマルチコアからメニーコアへ

 家庭用のパソコンやゲーム機にも搭載されるようになり、広く一般的に使われるようになったマルチコアによる並列処理技術。一昔前のスーパーコンピュータを凌ぐ高速コンピュータがみなさんの机の上や膝の上で動かせる時代になりました。しかし、開発者の視点に立つと、並列処理技術はその実力を十分に引き出せているとは言い難い状況もあります。特に、並列処理に適したプログラミングに課題が残されています。並列処理技術がご専門の新實治男先生にお話しいただきました。

40年以上も前にアポロ11号は月まで行って無事還ってきた

  他の技術と比べると、コンピュータ技術の進展には目覚ましいものがあります。1969年、アポロ11号は月面まで人間を運ぶことができました。それから40年以上が経ちますが、まだ人類は火星に人を送り届けることもできていません。

 一方、コンピュータはこの間に凄まじい進歩を遂げました。アポロ宇宙船の船内コンピュータの計算速度は、今街中で数百円で売られている電卓よりも劣っているでしょう。また、1980年代のスーパーコンピュータと比べると、みなさんが使っているパソコンの方が計算速度で10倍は勝っているのです。

 1980年代にスーパーコンピュータを巡る日米の貿易問題がありました。当時、日本国内でアメリカのスーパーコンピュータがなかなか売れず、困ったアメリカ政府は日本政府に働きかけて、「ある性能以上のコンピュータを政府が購入するときには一般競争入札を原則とする」という取り決めがなされました。

 このときの基準とされた性能が300M(メガ)FLOPS(フロップス)※1。これが、スーパーコンピュータの一つの基準とされたのです。

 現在、みなさんがゲームやウェブを閲覧するのに使う家庭用のコンピュータでも、計算性能だけを見れば数G(ギガ)FLOPSはあります。スーパーコンピュータともなると、P(ペタ)※2 FLOPSレベルの争いに突入しているのです。

※1 FLOPS(Floating-point Operations Per Second)とはコンピュータの演算能力を表す指標。1秒間に何回、浮動小数点数での演算ができるかを示す。浮動小数点数とは、1.23×108のように、小数×10のべき乗で数を表す方法で、大きな数を効率的に扱える。

 ※2P(ペタ)はT(テラ)の1000倍で1015を意味する。ちなみに、Tは1000G(ギガ)。Gは1000M(メガ)。Mは1000K(キロ)。Kは103

変わらない課題ハードウェアの性能を引き出すプログラミング

 スーパーコンピュータの基本設計として、かつて日本の主流となっていたのは「ベクトル型」と呼ばれるものでした。現在では、ほとんどのメーカーがベクトル型から撤退してしまいましたが、並列処理と密接な関係があるので、ここでお話ししておきましょう。

 ベクトル型と呼ばれるのは、いくつかの数値の組を一つのベクトルとみなして、計算を行うことに由来します。同じ計算を繰り返すときに威力を発揮するタイプのコンピュータであるため、膨大な数値計算を行うスーパーコンピュータの基本設計として採用されてきました。ベクトル同士の演算に含まれる複数の計算を時間軸方向に分散させた一種の並列処理と考えることができます。大勢の人を上下に運ぶのに、エレベータではなくエスカレータを使うと効率がいい、と言えば分かりやすいでしょうか。

 ただし、ベクトル型コンピュータには、専用のコンパイラ※3が必要です。プログラマが書いたプログラムから、コンパイラが自動的に繰り返し計算を見つけ出して、ベクトル型コンピュータが速く計算できるように変換するわけです。

 ところが、コンパイラはプログラマの意図をすべて読み取ってくれるわけではありません。「この繰り返し計算の部分はベクトル型に変換できる」といった判断は、人間にしかできない場合があるのです。

 そのため、ある程度は自動化されているとはいえ、人の手で変換をするかどうかを指示する必要があります。ベクトル型コンピュータの性能を最大限に引き出すためには人の手が欠かせないのです。

 この状況は最新の並列処理技術にも共通するところです。市販のパソコンやゲーム機のほとんどがマルチコア型の並列処理を取り入れている現状を考えると、スーパーコンピュータのような特殊な用途だけではなく、商用のソフトウェア開発の現場にも並列処理を意識したプログラミングが求められる状況になっています。

※3 プログラムは、プログラマが書いたそのままの形で直接的にコンピュータで実行されるわけではない。プログラマが書いたものはソースコードと呼ばれ、人間が読んでも分かるように自然言語(一般には英語)の単語などが使われている。ソースコードをコンピュータに実行させるためには、コンパイラと呼ばれる翻訳プログラムによって機械語に翻訳する必要がある。

分散メモリと共有メモリ

図
図

 並列処理の方式には大きく分けて二つの方法があります。

 一つつは分散(distributed)メモリ、もう一つが共有(shared)メモリです。(上図を参照)

 分散メモリは複数のコンピュータを通信ネットワークで一つにつなげた構成を、共有メモリは1台のコンピュータに複数のプロセッサが搭載されている構成を、それぞれイメージしてもらえばいいでしょう。

 分散メモリでは、メモリが別々にあるので、通信によって計算結果をお互いに教え合う必要があり、この通信の部分でプログラマの仕事が発生します。また、通信の部分で時間がかかってしまえば、思ったほど速くなりません。人間の集団において、人数が10倍に増えたからといって作業のスピードが10倍になる(作業の時間が1/10になる)とは限らないのと同じことです。

 その点、共有メモリでは、ネットワークを介した通信は不要になります。そのため、従来のプログラムがそのまま使える場合もあり、その点では共有メモリ型の並列コンピュータの方が普及には優位です。ただ、従来のプログラムそのままでは、並列処理のメリットを十分に引き出せない場合が少なくありません。

 実は、この分散メモリと共有メモリには、それぞれ「物理(ハードウェアの構造)」的な側面と「論理(プログラムからどう見えるか)」的な側面とがあり、たとえば「物理的には分散だが論理的には共有」しているように見える「分散共有メモリ」方式などが実際に使われています。

マルチからメニーに

 チップメーカーのインテルは、パソコンの増設スロットに差し込んで使う、50個以上のプロセッサが搭載されたボードを2012年内に生産開始すると発表しました。

 従来のパソコンのマルチコアでは、せいぜい数個のプロセッサが搭載されている程度でした。一気に50個以上のプロセッサを増設できるこの技術は「マルチコア」に対して「MIC(メニー・インテグレーテッド・コア)」と呼ばれます。

  50コアというのは、スーパーコンピュータでは目新しい並列数ではありませんが、パソコンで家庭用の100Vの電源で動かすところは画期的です。

 ボード上の各プロセッサが4個のプログラムを同時実行できる「マルチスレッド」の機能を持つため、最高で2TFLOPSの演算能力が実現されます。2002年に世界最速を記録した日本のスーパーコンピュータ「地球シミュレータ」の最高速度が40TFLOPSであったことを考えれば、その凄さが実感できるでしょう。

並列処理の今後

 スーパーコンピュータの開発競争は、2000年代初頭のTFLOPSから、2011年に日本の京が10PFLOPSの世界最速を記録して、本格的にPFLOPSの時代が到来しました。そして、次はE(エクサ)※4FLOPSを目指した開発競争に突入します。

 しかしながら、チップの集積度やクロック周波数を上げる従来の高速化の方法はそろそろ限界が見えてきました。集積度を上げるためには、さらに小さく作る必要がありますが、小さくするには物理的な限界があります。電子回路は電子より小さく作れませんし、回路が小さくなるにつれて、電子の量子力学的な効果が大きくなり、制御が難しくなるからです。また、プロセッサにとっての最小時間単位を決めるクロック周波数は高いほうが高速化が期待できるのですが、周波数を高くし過ぎるとたいへんな熱を発します。

 これらの課題に対しては、3次元チップや量子回路、無線や光伝送路など、いくつかのアイデアが出されていますが、どれも決定的なブレイクスルーには至っていません。

 そうなると、並列化をさらに進めることが当面の有効な方法です。家庭用のコンピュータも並列処理の時代になりました。並列コンピュータの性能を最大限に引き出すためのプログラミングや、従来型のプログラムを自動的に並列処理に最適なものへと変換する技術の必要性はますます高まってくると考えられます。

※4 E(エクサ)はP(ペタ)の1000倍。1018

人生は2G?

 コンピュータの「2038年問題」をご存知でしょうか?

 現在のパソコン内の時刻は4バイト(=32ビット)で管理されています。1970年1月1日0時0分0秒を起点にして、1秒を1ビットで表すと、およそ68年後の2038年に32ビットで表される正の最大値2G(ギガ)に達します。それを過ぎると時刻が正しく表せなくなってしまうという問題です。

 2038年までには対策が講じられるでしょうが、面白いのは68年≒2G秒というところです。68年というと、最近は延びたとはいえ、おおよそ人の一生の長さになります。みなさんの人生を秒単位で刻むと約2G(ギガ)なのです。普段何気無く使っているG(ギガ)という単位も、このように考えるとまったく違った大きさに感じられませんか?

低電力化も課題

 スーパーコンピュータを設計する際には、いかに消費電力を抑えるかも重要な課題です。

 膨大な数のプロセッサが高い周波数で稼働すると発熱量も膨大になり、冷却のための設備が大掛かりになってしまうからです。実際、スーパーコンピュータ京では本体とは別に冷却棟を建てたほどです。

 従来に比べると、1W(ワット)当たりの計算能力は向上しているとはいえ、もっとエネルギー効率のいいプロセッサが求められています。そのようなプロセッサを「今話題のチップ」という意味にひっかけた「ホット(Hot)チップ」に対して「クール(Cool)チップ」と呼んでいます。つまり、こちらの方が「かっこいいチップ」だというわけです。

 電力をいかに減らすかというテーマだけでコンピュータ科学の一分野となるほどで、プログラムの書き方一つで電力消費を抑えることができるという報告もあります。

コンピュータ理工学部 コンピュータサイエンス学科 新實 治男 教授

プロフィール

工学博士。専門は並列コンピュータシステムの構成方式。コンピュータシステムの性能を格段に向上させるために必要不可欠な並列処理の諸技術を研究対象とする。ハードウェアアーキテクチャからオペレーティングシステム、プログラミング言語、各種応用に至るまで、幅広く総合的に取り組む。コンピュータが使い易くなっていくということは、ハードウェアもソフトウェアもブラックボックス化していくということ。しかし、エンジニアはすべての仕組みを理解したうえで設計に臨むべきだという方針のもと、学生の指導にあたっている。京都教育大学附属高等学校OB。

PAGE TOP