複合並列コンピューティングの必要性とFermiの登場

2010年7月9日(金)
平野 幸彦

並列コンピューティングの必要性

ムーアの法則の限界について、最近いろいろな議論がなされ始めています。

NVIDIAの主席研究員ビル・ダリー(前スタンフォード大学コンピュータ・サイエンス学部長)も"forbes.com"で述べているように、ムーア(Gordon Moore)は、45年前に書いた論文の中で 「半導体集積回路上のトランジスタ数は18カ月ごとに2倍になる」と予測しています。

また、この予測が次の予測「トランジスタ数が2倍になることにより、CPUの処理能力も18カ月ごとに2倍になる」の基になっています。

確かに、1980年代から90年代にかけて、この予測は真実でした。製造業の技術革新から、サービス業やメディア産業の発展、さらには電子商取引、社会全体のネットワーク化とモバイル機器の発達といった新規ビジネスにいたるまで、経済全般にわたって、ムーアの法則は生産性の向上に寄与してきました。

実は、CPU処理能力の向上は、ムーアの論文の中でこれまであまり注目されてこなかった、もう1つの予測に支えられていました。それは「集積度が向上するにつれて、それぞれの演算ユニットが消費するエネルギーは減少する」というものであり、結果としてトータルの消費電力は一定となり、消費電力の増加なしに処理能力の向上が得られる、ということでした。

しかし、ここ数年の状況は、消費電力に関するこの予測が完全に崩れていることを示しています。クロック周波数の大幅な増加はありえず、したがってCPUの1つのコアの処理能力が18カ月で2倍になることも、もはやありません。

そこで、今後の経済の成長や産業の革新を支えるプラットフォームを提供する技術として注目を浴びているのが、並列コンピューティングなのです。

デュアル・コアに始まったCPUの複数コア化は、まさにこの事実を裏付けるものといえます。

TOP500サイトのCPUの推移

具体的な例として、2010年6月のTOP500リストにランクインしている500のスーパー・コンピュータ・サイトで使用されているCPUを調べてみると、以下の事実がわかります。

  1. 2000年以降の傾向として、HPC専用のベクトル型プロセッサから汎用プロセッサを使用した超並列スカラー型への移行トレンドがさらに進んでいる。1位の米国オークリッジ国立研究所や2位の中国シェンツェン国立スーパー・コンピュータ・センターを含め、90%以上のサイトがx86系のCPUを使用している。

    図1: TOP500サイトで使われているCPUの傾向(クリックで拡大)
  2. x86系CPUの1コアあたりの浮動小数点演算処理性能は、2006年以降にTOP500スーパー・コンピュータ・サイトに採用されたCPUを見る限り、一定値が保たれており、向上していない。
  3. 2006年以降、TOP500サイトに採用されているCPUの演算処理性能の向上は、すべてコア数の増加によるものである。
  4. 2008年にTesla T10 GPUを680個搭載した東京工業大学のTSUBAME1.2に続き、Fermi 世代Tesla T20 GPU「C2050」を4640個使用した中国シェンツェン国立スーパー・コンピュータ・センターが2位にランクインし、同じく「C2050」を2200個搭載した中国科学アカデミーが19位にランクインした。

    図2: TOP500サイトにおけるCPU演算処理性能の推移(クリックで拡大)

このように、スーパー・コンピュータの世界では、数年前から、汎用機器(コモディティ)を利用した並列コンピューティングへの移行の波が押し寄せています。そして、第2波となるべき次の飛躍を担う技術として期待されているのが、CPUとGPUによる複合並列コンピューティングなのです。

また、この波は、さまざまな基礎研究だけでなく、メディア産業、医療、製造業をはじめとする各種産業、および個々人の娯楽や生活の中にまで波及するものとして期待されています。

次世代CUDAアーキテクチャ"Fermi"の登場

図3: CUDA向けGPUはFermi世代に移行(クリックで拡大)

NVIDIAのGPUとして最初に倍精度浮動小数点演算機能をサポートしたのは、GT200世代のGPUです。HPC分野では不可欠だったこの機能をサポートしたことが、GPUコンピューティングが本格的に研究・開発分野で利用されはじめるきっかけとなりました。

処理能力としては、カード製品の「C1060」の場合で77.8GFLOPSです。CPUとの比較では十分な数字でしたが、C1060自身の単精度性能である933GFLOPSと比べると8%程度に過ぎません。このため、より高性能を求める声が徐々に出始めました。

GPUの利用が広がるにつれて需要が大きくなってきた、もう1つの改善要求は、ECCメモリー機能(誤り検出・訂正機能)による信頼性の向上です。この機能は、HPCやデータ・センター、ミッション・クリティカルなビジネスなど、高い信頼性が求められる使用目的に耐えるために必要です。

これら2つの大きな要請にこたえ、GPUコンピューティングのさらなる高機能、高性能化、および使いやすさの向上を満たすために考案されたのが、次世代CUDAアーキテクチャ"Fermi" でした。

とはいっても、Fermiは、GT200の単なる後継というわけではありません。

これまでのGPUがグラフィックス処理の高速化や効率化を設計の出発点としていたのに対して、Fermiアーキテクチャは、GPUの役割や目的、持つべき能力を根底から考え直すことによって、新たに生まれたものです。

したがって、「本業はグラフィックスでコンピューティングは副業」というニュアンスは完全になくなりました。「どちらも本業」、言い換えれば「グラフィックス処理にも適したハイ・パフォーマンス並列プロセッサ」となりました。

図4: 初期のG80からFermiに至るCUDA GPUの進化(クリックで拡大)

アーキテクチャとしての"Fermi"は、2009年9月に米国サンノゼで開催されたNVIDIA GPU Technology Conferenceの中で発表されました。実際のGPUコンピューティング用の製品としては、カード・タイプの「Tesla C2050」が2010年5月に出荷されました。1Uサーバー・タイプ(4GPU)の「S2050」や、OEM供給によるサーバー組み込みタイプの「M2050」が、間もなく出荷される予定です。これらのGPUは、すべて448コアとGDDR5メモリー3GBを実装しています。

図5: Fermi世代GPU製品「Tesla T20」のラインアップ(クリックで拡大)

Fermiアーキテクチャの概要

Fermiの概要を説明する前に、CUDAプログラミングの基本概念となる言葉の整理を兼ねて、CUDA実行モデルにおけるソフトウエアとハードウエアの関係について簡単に触れておきます。

CUDAプログラミングでは、並列処理を効率よく行うために、同時に多数のスレッド(Thread)を実行させる必要があります。1つのスレッドは、GPUのハードウエア上の1つのCUDAコアに対応し、その上で実行されます。CUDAコアは、OpenGLやDirectXなどのグラフィックス処理に利用される場合は以前の名称であるシェーダ(あるいは統合シェーダ)と呼ばれますが、実体は同じものです。

同様に、スレッドの集まりであるブロック(Block)はストリーミング・マルチプロセッサ(SM)に対応します。プログラムで定義されたブロックの数に応じて、使用されるストリーミング・マルチプロセッサの数が決まります。

さらに、ブロックの集合体であるグリッド(Grid)は、デバイス(Device)に対応しています。

図6: CUDA実行モデル(スレッドとコアの対応)(クリックで拡大)

では、Fermiアーキテクチャの概要と特長について説明します。

図7: Fermiアーキテクチャの概要(クリックで拡大)
  • 第3世代のストリーミング・マルチプロセッサ(SM)
    • SMあたり32個のCUDAコアを搭載し、スレッドを並列処理する効率を上げています(GT200の4倍)。
    • 倍精度浮動小数点演算への対応能力が大幅に向上し、HPC分野や金融業界など高精度の計算が必要となる分野への適用範囲が広がりました(GT200の6倍以上)。
    • 32スレッド(1ワープ)を1クロックあたり2つスケジューリングしてディスパッチできる、デュアル・ワープ・スケジューラにより、並列処理の効率化がさらに進みました。
    • トータル64KBのオンチップRAMが用意され、共有メモリーとL1キャッシュに分割して構成できるようになりました(どちらか一方が16KBで、他方が48KBになります。GT200の場合は、共有メモリーが16KBで、L1キャッシュはありませんでした)。
    • GPUとして初めてECCメモリー機能(エラー検出・訂正機能)をサポートしました(ECC機能稼働時は、グラフィックス・メモリーの一部がECCの計算に使用されるため、グラフィックス・メモリーの利用可能サイズは10%強程度減少します)。

    図8: Fermi世代ストリーミング・マルチプロセッサの構成(クリックで拡大)
  • NVIDIA GigaThreadデータ転送エンジン
    • アプリケーション・コンテキストの切り替え速度が10倍に向上しました。
    • 2つのDMA転送エンジンにより、パイプライン処理が可能になりました。DMA転送エンジンの一方は、CPUからGPUへの計算用データのDMA転送を受け持ちます。もう一方は、計算終了後に計算結果をGPUからCPUにDMA転送するために使います。

    図9: CPU-GPU間のデータ転送エンジンの仕組み(クリックで拡大)
  • NVIDIA GigaThreadスケジューラ
    • GT200世代までは、1つのカーネル(GPUサブルーチン)がGPUのすべてのコアを占有していました。このため、スレッド数が実際のコア数より少ない場合は、アイドル状態のコアが存在してしまいました。Fermi世代からは、スレッド・スケジューラによって、複数カーネルの同時実行が可能になりました。
    • スレッド・ブロックの実行順位最適化が自動で行われます。

    図10: すべてのコアを使って並列にカーネルを実行する(クリックで拡大)
  • 改良されたメモリー・サブシステム
    • L1キャッシュと統合L2キャッシュからなるNVIDIA Parallel DataCacheが新たに登場しました。
    • オフチップ・メモリー(グラフィックス・メモリー)へのアクセス時間は、クロック数にして数百クロック以上必要です。このアクセス時間を高速化するため、GT200まではキャッシュしていなかったローカル・メモリーやグローバル・メモリーがL1/L2キャッシュでカバーされるようになりました。以前から専用キャッシュを持つコンスタント・メモリーやテクスチャ・メモリーを含め、オフチップ・メモリー全体がキャッシュ可能になりました。

    図11: CUDAにおけるGPUのメモリー制御(クリックで拡大)
  • IEEE 754-2008準拠のFMA演算
    • コンピュータ・グラフィックスや線形代数、科学的計算では、2つの数字を掛けあわせ、その答えに第3の数字を足すという、D = A × B + Cという計算がよく行われます。従来のGPUでは、単精度浮動小数点用に、乗算と和算の2つの演算を1クロックで行えるMAD (Multiply-Add)命令を用意して計算を高速化していました。MAD命令では、まず切り捨て方式で乗算を行い、最近隣の偶数に丸めるかたちで加算を行います。これに対してFermiでは、単精度浮動小数点と倍精度浮動小数点の両方について、新しくFMA (Fused Multiply-Add)命令を実装しました(GT200は、倍精度についてのみFMAをサポートしていました)。FMA演算は中間段階で精度を落とすことがないため、MAD命令よりも高い精度で計算を行うことができます。

    図12: Fermi世代で利用可能なFMA(Fused Multiply-Add)命令(クリックで拡大)

複合並列コンピューティングの要件としてのCPUとGPU

ここまで、Fermiの概要や特長について述べてきましたが、もう1度、並列コンピューティングにおけるCPUとGPUの役割について考えてみましょう。

現在のCPUを会社組織の本社機構に例えると、もともと"計算"を本業としてスタートした会社であるのに対し、年月を経るにつれて総務部門や管理部門(システム・マネジメントやメモリー管理)、渉外部門や顧客対応(I/Oコントロールや割り込み処理)など、会社を支えるために重要なさまざまな部門の整備が必要になり、本社工場を拡張するための敷地や最新の生産設備を導入する資金が不足している、という状況ではないでしょうか。

ここで、"計算"という主力製品の生産性を2倍、3倍に高めるには、どうしたらよいのでしょうか。

1つ考えられる方法は、現在の本社機構をそっくりそのまま別の場所にコピーするというやり方です。こうすれば、生産能力は2倍になります。さらに、同じコピーをまた別に作れば、3倍、4倍というように拡張していけるはずです。しかし、この方法では、本来であれば会社に1つだけあれば済む部門まで3倍、4倍と持つ必要があり、無駄が多くなります。

そこで登場したのが、最新の生産設備と、現在の本社工場の数倍以上の生産能力を持つ、外注工場としてのGPUなのです。

GPUという外注先は、素性の知れないまったくの未知の会社というわけではありません。以前から"グラフィックス"という高機能・高性能商品を外注していた会社です。グラフィックスと同じ技術を使って"計算"という新商品の生産を、高いコスト・パフォーマンスと高いエネルギ・パフォーマンスで請け負う会社です。

この会社の問題点は、これまで"グラフィックス"という商品を生産するにあたって存在していたDirectXやOpenGLといった契約や、CADソフトやビデオ編集ソフトといった作業指示書をそのまま使う限り、"計算"という別の商品の生産を依頼してもうまくいきそうにない、ということです。

そこで、いよいよ"計算 = コンピューティング"のための新しい契約として、CUDAが登場します。すでに、CUDA CやCUDA Fortran、OpenCLといった、作業指示書を書くためのガイドラインが準備されています。

CPUが1つあり、その数倍以上の演算処理能力が求められる場合に必要になるのは、2個目、3個目のCPUではありません。GPUとCUDAを追加することによって可能になる、複合並列コンピューティングが必要になるのです。これが、NVIDIAからの提案です。

NVIDIA Tesla Quadro事業部 GPUコンピューティング担当 シニア・エンジニア

外資系コンピュータ・メーカーにてPCグラフィックス・サブシステムやASICの設計開発、経営企画部門、製品開発プロジェクト・マネージャなどを経験し、2007年NVIDIA入社。現在、GPUコンピューティングの技術的なサポートを担当。
 

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています