• トップ
  • G-DEPについて
  • ご購入ガイド
  • サポート
  • お問い合わせ

G-DEPトップ  >  第1回 GPUコンピューティングおよびCUDAについて

第1回 GPUコンピューティングおよびCUDAについて

第1回 「GPUコンピューティングおよびCUDAについて」  

目次に戻る   |   第2回 >>

 皆さん、「GPUコンピューティング」や「CUDA」を知っていますか?元々PCが好きな方はもちろん、そうでなくても近年のコンピューターの話題で耳にしたことがある方も多いかと思います。でも具体的にどういうものであるかを知らなかったり、実際に利用しているという人は少ないのではないでしょうか。

 第1回は、そんなGPUコンピューティングとCUDAについてお話しします。ここで述べることはあくまで初心者に向けた概要であるため、もっと詳細にGPUコ ンピューティングのことを知りたいという方は、参考リンク先を下の方に貼り付けておきますので、良ければそちらもどうぞ!

 ちなみに、このコラムでは分かりやすくするためGPUコンピューティングをGPU汎用計算(GPGPU;General-purpose computing on GPU)と同義で説明しています。正確にはメインメモリを利用する計算をGPUコンピューティング、GPU上のビデオメモリを利用するのがGPGPUと区別されているようです。また、GPUはグラフィックボードと呼ばれる基盤上のプロセッサユニットのことですが、グラフィックボードをそのままGPUと説明している場合もあります。

 

1.1 GPUとは?

(Tesla C2070)

何よりもまず、GPUの説明から。GPUってなんでしょう?

 PCでゲームや動画編集をされる方ならGPUの性能を少なからず気にするのではないでしょうか。自分もオンラインゲームやFPSなどのPCゲームの経験があるため、快適なゲーム環境には高性能GPUが欠かせないことを知っています。3Dゲームがスムーズに動くと嬉しくなってしまいますよね。

 GPUとはGraphics Processing Unit の略称で、その名の通りPCやワークステーションにおいて画像処理を担当する主要な部品の一つです。高速のVRAM(ビデオメモリ;グラフィックボード上のGPU専用メモリ)と接続され、グラフィクスシェーディングに特化したプロセッサが多く集まった構造を持っています。一つ一つのプロセッサの構造は単純なためその機能はCPUに比べて限定されたものですが、大量のデータを複数のプロセッサで同時かつ並列処理することができます。

 GPU開発企業としてはIntel、NVIDIA(エヌビディア)、AMD/ATI、Matrox、VIA/S3 GRAPHICSなどが挙げられますが、現在のGPU単体製品市場は主にNVIDIA社AMD社の二社によるほぼ寡占的なものとなっています。NVIDIAおよびAMD各社から販売されている主流のブランドシリーズは以下のようになります。

NVIDIA
シリーズ名 型番の例 用途例
GeForce GeForce GTX 680
GeForce GTX 580
ゲームフィジクス、動画編集
CUDA入門
Quadro Quadro 6000
Quadro K5000
デザイン/3DCD/CAD
ビデオアプリケーション
Tesla

Tesla C2075
Tesla K20

計算科学/CAE
バイオインフォマティクス
ファイナンス

NVIDIA製品詳細についてはコチラ→G-DEP GPUコンピューティングボード

AMD
シリーズ名 型番の例 用途例
Radeon Radeon HD 6090
Radeon HD 6070
ゲームフィジクス
動画編集
FirePro FirePro V7900
FirePro V5900
デザイン/3DCD/CAD
ビデオアプリケーション
FireStream FireStream 9370
FireStream 9350
計算科学/CAE
バイオインフォマティクス
ファイナンス

 同じGPUなのにどうしてシリーズが分かれているのか? それは用途の違いによるものです。NVIDIA製品を例にとって説明します。

 GeForceシリーズ

 いわゆるコンシューマー向けで、DirectXに最適化されているため3Dゲームなどに適しています。GPUのチップ開発・製造はNVIDIAが行い、それを載せるグラフィックボードは各OEMによって生産されています。そのため、同じチップを載せていてもボード自体の仕様が異なっていることもあります。

 Quadroシリーズ

 OpenGLに最適化されており、3DCG作成やCADなどを利用するのに適しています。逆に性能的にGeForceなどと変わらなくても、ゲームは苦手だったりします。計算精度および確かな動作が求められるため、NVIDIAがサンプルを公開かつ認定した企業のみグラフィックボードの製造が許されており、また製造会社が限定されることでNVIDIAのサポートも注力されていることが特徴です。

 Teslaシリーズ

 グラフィックボードから映像出力機能を除いたもので、まさにGPUコンピューティングのために開発されたものです。NVIDIA社が全てのTeslaの動作確認を行っているため、高い計算精度が求められるCAE、金融などの分野で利用されています。また、GeForceに比べてよりたくさんのメモリが積まれていることも特徴です。ちなみに、Teslaにはファンが有るもの(active)と無いもの(passive)があります。基本的には、ファンの有るものはデスクサイドマシンで、ファンの無いものはラックマウントケースで使うものとなります。

 

1.2 GPUコンピューティングとは?

 GPUコンピューティングとは、一言で言えば計算機での数値計算においてGPUを利用することです。

 近年の科学技術の発展の陰にはシミュレーション技術という支えがあることは論を持ちません。年々飛躍的に性能が向上する計算機のおかげで、より高精度かつ高速にシミュレーションを行うことができるようになってきましたが、その対象の幅も広がりを見せています。

 実際にGPUを利用したシミュレーションがこちらです。

高粘性液の攪拌(Ensight表示) Prometech Software, Inc.

 元々は、科学技術者たちがGPUの並列計算能力を何とか科学技術計算に使えないかと模索した結果、GPUにおける色の計算(シェーダ機能)に目をつけ、計算プロ グラムにおける変数をダミーの色として与え、そのフィードバックを数値と して写像することで結果を得るという方法を生み出したのが、GPU汎用計算の始まりと言われています。その後、NVIDIA社がCPUの進化に対抗して汎 用計算に対応したGPUを開発し、その統合開発環境としてCUDA(後述)を配信したことで、GPUコンピューティングがより普及するようになりました。

 
1.3 CPUとGPUの違いって?

 

左がCPU、右がGPUが搭載されたグラフィックボード

 基本的に計算機において主要な計算部品はCPUです。 では何故元々描画処理専用だったGPUを汎用計算に用いるようになったのか?

 簡単に言えばCPUは連続的な計算が得意で、対してGPUは並列的な演算が得意という性質を持っています。そのため、アプリケーションのシーケンシャルな部分をCPUで、並列演算部分をGPUで計算させることで、CPU単体で全てを計算させる場合より圧倒的に高速で演算することができます。これがGPUコンピューティングです。もちろんアプリケーションの仕様にもよりますが。

  実際にGPUで計算させた場合とCPUで計算させた場合の比較です。

(資料提供元:NVIDIA)

 対象分野や元のコードチューニングにもよりますが、GPUで計算させるとなんと数倍~100倍以上の速度で結果を得ることができます。

(GTC2011 G-DEP資料)

 また、上図のようにCPUが誕生してから2004年程度まではそのクロック数の上昇=高性能化という枠組みでの競争でしたが、プロセッサ内部の物理的構造によりそのクロック数の上昇は頭打ちになってきました。そこで今度は1つのチップに複数のコアを載せることで並列処理を可能にし、それ以降はいかにコア数を増やせるか、という並列化競争の時代になりました。そうしてCPUのコア数は年々増してきましたが、現在でもまだ数個~十数個です。それに比べGPUは数百個(Tesla M2090においては512個!)という非常に多くのコアを積んでいます。その点においても、GPUがCPUに比べて並列計算に優れていることが分かります。他にも、メモリ転送帯域がCPUよりも数倍大きかったり、スレッド数(計算処理の単位のようなもの。詳細は後のコラムで)はCPUにおいてはコア数とほぼ同等なのに対し、GPUはコア数<<スレッド数と膨大であったりと、並列計算におけるGPUのメリットは多くあります。

 文章で見ていても理解しにくいと思うので、CPUとGPUの違いを実験で表した面白い動画を紹介しておきます。

 どうでしょう?GPUを用いると一瞬で処理を行うことが分かりますね。あくまでショーなので実際の働きとは異なりますが、CPUとGPUの概念の違いが少しでも分かっていただければと思います。

 

1.4 CUDAとは?

(資料提供元:NVIDIA)

 CUDA(クーダ)とはCompute Unified Device Archtectureの略称で、半導体メーカーNVIDIA社が提供するGPUコンピューティング向けの統合開発環境です。プログラム記述、コンパイラ、ライブラリ、デバッガなどから構成されており、プログラム言語はC言語ベースに拡張を加えたものであるため、C言語によるプログラミングの経験があれば扱いやすくなっています。また現在ではC言語だけでなくFortran(CUDA Fortran)などへの対応も進んでいます。CUDAは無料で使用することができ、またCUDAでプログラムを書けばCUDAをサポートするすべてのGPU上で動作させることができます。2013年1月現在はバージョン5.0まで公開されています。

CUDAの対応環境と使い方については今後のコラムで説明していきます。

 ちなみに、どうしてGPU汎用計算の統合開発環境としてCUDAが有名になってきているのでしょうか。それは先述したCUDAがC言語ベースであることもありますが、何よりGPUを開発した会社が開発・提供しているため、サポートがしっかりなされているという点が要です。GPUコンピューティングを始める人にとってこんな有難いものはありません。

 では、第1回はこの辺までにしましょう。今回のことを整理しておきます。

  • CPUもGPUも時代はクロック数上昇の競争からコア数増加競争へ
  • GPUは大量のコア数で大量データを並列で計算できる
  • GPUコンピューティングはあらゆる分野で生産性を向上させる
  • CUDAはGPUコンピューティングのための統合開発環境

 第2回は、実際にCUDAを利用する前にハードについて学んでいきます。

    目次に戻る   |   第2回 >>


 

【参考ページ】(新しいウィンドウで開きます)

第1回GPUコンピューティングの歴史とCUDAの誕生(ThinkIT)

「GPUコンピューティング」の可能性――高速汎用計算に挑む(COMPUTERWORLD)

(執筆 G-DEP Associate Research Engineer 東京大学大学院工学系研究科 岡安優)