Your SlideShare is downloading. ×
GPGPU によるパーソナルスーパーコンピュータの可能性



                     <日付 2010/03/23> 渡辺 雄作




             1
概要...........................................................................................................................
概要
現在の CPU はムーアの法則と呼ばれる経験則の通り処理能力を上げてきたが、トランジスタ
の集積率の限界、発熱問題などにより限界に達しつつある。
そのため各ベンダーは Intel Core シリーズ、AMD Athlon64 などマルチコ...
NVIDIA CUDA について
NVIDIA が提供する GPU を利用した並列コンピューティングアーキテクチャ。




      機能、特徴


  •   GPU で並列アプリケーション開発を行うための標準 C 言語
  •   FF...
アーキテクチャ



                                      Global Memory
                                 Constant/Texture Memory


...
CPU との性能比較
演算装置    製品            クロック周波       core 数    TDP    メモリクロッ       メモリバンド
                          数            ...
開発環境
   CUDA ドライバ
   CUDA ツールキット一式
   CUDA SDK コードサンプル
が NVIDIA からダウンロード可能。


SDK には以下の内容が含まれる
   nvcc C コンパイラ
   GPU...
コンパイル、及びオプション


C 言語で記載されたソースコード( cuda 用には拡張子.cu 使う)を nvcc を使ってコンパイル
を行う。
主な(よく使う)オプションは
   --output-file <file> (-o)
   ...
デバッグ
cuda-gdb を利用する。
基本的な使い方は GDB を踏襲するが以下の拡張機能がある。
     デバイス(GPU)メモリ上の変数を参照可能
     スレッド間の切り替え可能(thread <<<(BX,BY),(TX,T...
環境構築
Linux
OS:CentOS 5.4
cudadriver_2.3_linux_64_190.18.run
cudatoolkit_2.3_linux_64_rhel5.3.run
cudasdk_2.3_linux.run
の順番...
環境の確認
deviceQuery を実行し、CUDA が利用可能か確認する
※ GPU が対応していない、認識されない場合は以下の Device の箇所が
Device 0: "Device Emulation (CPU)"
と表示される。
...
演算パフォーマンス
行列同士を積算させるプログラムをコンパイルして実行を行い検証する。
環境:CentOS5.4, Corei3、 mem4G, GeForce 9800GT
※ サンプルコードは別途参照
※CPU での処理はシングルスレッドの...
考察
今回は NVIDIA から提供されている CUDA を利用した。
今後は ATI から提供されている ATI Stream などもあることから、統合フレームワークの
OpenCL を利用した開発が効率的かと思われる。


基本的には演算処...
プログラマはハードウェアのスケールアップに依存した逐一的なプログラミングから、ハード
ウェアの性能を完全に引き出し、スケールする並列プログラミングの技術を習得することが重
要になると予測する。




引用:日経 BP 社


上記の Micr...
Cell の最大演算性能
http://todotani.cocolog-nifty.com/blog/2008/02/cell_1b22.html
Telsa
http://www.nvidia.com/docs/IO/43395/BD-04...
Upcoming SlideShare
Loading in...5
×

GPGPUによるパーソナルスーパーコンピュータの可能性

3,507

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,507
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
22
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "GPGPUによるパーソナルスーパーコンピュータの可能性"

  1. 1. GPGPU によるパーソナルスーパーコンピュータの可能性 <日付 2010/03/23> 渡辺 雄作 1
  2. 2. 概要.........................................................................................................................................3 NVIDIA CUDA について.....................................................................................................4 機能、特徴...........................................................................................................................4 アーキテクチャ....................................................................................................................5 CPU との性能比較..................................................................................................................6 開発環境..................................................................................................................................7 コンパイル、及びオプション.................................................................................................8 デバッグ..................................................................................................................................9 環境構築...............................................................................................................................10 Linux.....................................................................................................................................10 MacOS..................................................................................................................................10 環境の確認.............................................................................................................................11 演算パフォーマンス.............................................................................................................12 考察....................................................................................................................................... 13 2
  3. 3. 概要 現在の CPU はムーアの法則と呼ばれる経験則の通り処理能力を上げてきたが、トランジスタ の集積率の限界、発熱問題などにより限界に達しつつある。 そのため各ベンダーは Intel Core シリーズ、AMD Athlon64 などマルチコア化の道へ踏み出 している。 その流れに対して、GPU は座標変換や光源処理などに使う比較的単純な演算を大量に行うこ とでグラフィックス性能を今もなお大幅に上げ続けている。 単純な演算であるが故に演算処理をソフトウェアで処理せずに、ハードウェア化し高速化を図 っていることや、ハードウェアによるメニーコアによる処理が可能なことがその下支えとなっ ている。 GPGPU はそのメニーコア技術を汎用的に利用できるようにする仕組み( General Purpose Computation on Graphics Processing Unit)、汎用 GPU の」略である。 GPU に搭載されているメニーコアによる演算能力をグラフィックス以外にも利用する技術と して近年注目を集めている。 長崎大学では GPU を 760 個並列し 158TFLOPS の演算性能をたたき出し、地球シミュレータ の 122TFLOPS を上回る性能を出した。 ちなみに発表された開発費は 3800 万円である。(※地球シミュレータは 400 億円) 3
  4. 4. NVIDIA CUDA について NVIDIA が提供する GPU を利用した並列コンピューティングアーキテクチャ。 機能、特徴 • GPU で並列アプリケーション開発を行うための標準 C 言語 • FFT (高速フーリエ変換) および BLAS (線形代数の基本サブルーチン) 用標準数値ライブラリ • GPU と CPU 間での高速データ転送パスを使用したコンピューティング 専用 CUDA ドライバ • OpenGL および DirectX グラフィックスドライバと CUDA ドライバを同時使 用可能 • Linux 32/64 ビット、Windows XP 32/64 ビット、および Mac の OS を サポート 4
  5. 5. アーキテクチャ Global Memory Constant/Texture Memory Shared Memory Shared Memory Shared Memory Shared Memory Grid thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread Block Block Block Block thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread 実行される thread は Block という単位で束ねられ、それぞれの Block は共有のメモリを持つ (Shared Memory)。 Block を束ねるものとして Grid という概念があるが、GPU カーネル上で動作する Grid は一 つだけである。 Block は最大で 65536 個生成可能、1Block あたりの最大スレッド数は 512 となっている。 ※ ハードウェア的には Block に対応する Processor(StreamingMultiprocessor)と thread に対応する Processor(ScalarProcessor)の搭載数が違うので、実行順に各 Pocessor に割 り当てられる。 ちなみに各 thread の生成コストは非常に少ない(1 クロック)ので、ソフトウェアで生成 するスレッドのようにあまり生成コストをあまり気にかける必要はない。 メモリは thread ローカルメモリ→ SharedMemory→GlobalMemory の順でレイテンシが大 きくなるので注意が必要。 基本的に read/write 共に 1clock で完了するが、GlobalMemory に関しては 400〰600 クロッ クのレイテンシが加わる。 5
  6. 6. CPU との性能比較 演算装置 製品 クロック周波 core 数 TDP メモリクロッ メモリバンド 数 ク 幅 CPU Corei7 3.33GHz 8 130W 266MHz(DD 17.067GB/sec R3-2133 の場 (-975 (HT を含む) 合) Extreme Edition) GPU GeForce 1.35 GHz 112 105W 900MHz 57.6GB/sec 9800 GT GPU(Fel Tesla 1.40GHz 512 225W 2048MHz 170GB/sec mi 2070 GPU は CPU に比べて、クロック周波数が低いものの core 数が文字通り桁違いに多く搭載さ れていることがわかる。 またメモリ性能についても 3 倍~10 倍の性能差がある。 ※Felmi は NVIDIA の次世代 GPU アーキテクチャ 6
  7. 7. 開発環境  CUDA ドライバ  CUDA ツールキット一式  CUDA SDK コードサンプル が NVIDIA からダウンロード可能。 SDK には以下の内容が含まれる  nvcc C コンパイラ  GPU のための CUDA FFT および BLAS ライブラリ  プロファイラ  GPU のための gdb デバッガ  CUDA ランダムドライバ(標準 NVIDIA GPU ドライバでも使用可能)  CUDA プログラミングマニュアル 7
  8. 8. コンパイル、及びオプション C 言語で記載されたソースコード( cuda 用には拡張子.cu 使う)を nvcc を使ってコンパイル を行う。 主な(よく使う)オプションは  --output-file <file> (-o) ファイル出力先の指定をする  --pre-include <include-file> (-include) include ファイルの指定を行う。 Cuda 用のユーティリティとして cutil が提供されているので、そのヘッダーファイル (cutil.h)の指定を行う  --library <library> (-l) ライブラリの指定を行う。  --device-debug <level> (-G) デバッグ時はこのオプションをつけてコンパイルする必要がある。  --device-emulation (-deviceemu) GPU が搭載されていない環境で実行する際はエミュレーションモードで起動する必要が あるので、このオプションを付加する。 例) nvcc –g –G -o /home/hoge/cudaDev/affineConvertOnCuda –include /home/hoge/ /NVIDIA_GPU_Computing_SDK/C/common/inc/cutil.h /home/hoge/cudaDev/affineConvertOnCuda.cu 8
  9. 9. デバッグ cuda-gdb を利用する。 基本的な使い方は GDB を踏襲するが以下の拡張機能がある。  デバイス(GPU)メモリ上の変数を参照可能  スレッド間の切り替え可能(thread <<<(BX,BY),(TX,TY,TZ)>>>)  CUDA 上のブロック数、スレッド数を参照可能(info cuda threads) 上記機能拡張によりスレッドを切り替えて、ステップ実行というような細かいデバッグが可能 である。 [yuhsaku@localhost cudaDev]$ cuda-gdb affineConvertOnCuda ←cuda-gdb をプログラム指定で 起動 (cuda-gdb) break affineConvertOnCuda.cu :73 ←73 行 目 に ブ レ イ ク ポ イ ン ト を 設定 (cuda-gdb) run ←実行 [Current CUDA Thread <<<(0,0),(0,0,0)>>>] ←現在のスレッドが表示される Breakpoint 1, convert () at /home/yuhsaku/cudaDev/affineConvertOnCuda.cu:73 73 to_matrix_p[to_counter] = matrix_p[counter];←73 行目のコードが表示される Current language: auto; currently c++ (cuda-gdb) print counter ← 現 在 の ス レ ッ ド の 変 数 counter を 表 示 する $1 = 0 (cuda-gdb) info cuda threads ←現在の全スレッドを確認する <<<(0,0),(0,0,0)>>> ... <<<(15,0),(23,0,0)>>> convert () at /home/yuhsaku/cudaDev/affineConvertOnCuda.cu:73 (cuda-gdb) thread <<<(1,0),(1,0,0)>>> ←ブロック 1 の中のスレッド 1 に切り替え る (cuda-gdb) print counter ← 切 り 替 え た ス レ ッ ド の 変 数 counter を 表示する $1 = 1 (cuda-gdb) cont ←次のブレイクポイントまで実行する 9
  10. 10. 環境構築 Linux OS:CentOS 5.4 cudadriver_2.3_linux_64_190.18.run cudatoolkit_2.3_linux_64_rhel5.3.run cudasdk_2.3_linux.run の順番でインストール。 ホームディレクトリに NVIDIA_GPU_Computing_SDK というディレクトリが作成される。 libXmu-devel.x86_64 libXi-devel.x86_64 が必要になるのでインストールする。 MacOS drivers/cudadriver_2.3.1a_macos.pkg toolkit/cudatoolkit_2.3a_macos_32.pkg gpucomputingsdk_2.3a_macos_32.pkg の順番でインストール。 /Developer/GPU Computing というディレクトリにインストールされる。 ※ Linux、MAC ともに以下の環境変数をセットする。 C_INCLUDE_PATH="/Developer/GPU Computing/C/common/inc":/usr/local/cuda/include: $C_INCLUDE_PATH LIBRARY_PATH="/Developer/GPU Computing/C/common/lib":"/Developer/GPU Computing/C/lib":/usr/local/lib:$LIBRARY_PATH 10
  11. 11. 環境の確認 deviceQuery を実行し、CUDA が利用可能か確認する ※ GPU が対応していない、認識されない場合は以下の Device の箇所が Device 0: "Device Emulation (CPU)" と表示される。 以下に主要な情報について記載する [yuhsaku@localhost release]$ ./deviceQuery CUDA Device Query (Runtime API) version (CUDART static linking) There is 1 device supporting CUDA Device 0: "GeForce 9800 GT" CUDA Driver Version: 2.30 CUDA Runtime Version: 2.30 CUDA Capability Major revision number: 1 CUDA Capability Minor revision number: 1 Total amount of global memory: 1073020928 bytes ←グローバルメモリ Number of multiprocessors: 14 Number of cores: 112 ←コア数 Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 16384 bytes ←ブロック別の shared メモリ Total number of registers available per block: 8192 Warp size: 32 Maximum number of threads per block: 512 ←1 ブ ロ ッ ク 内 に 設 定 で き る thread 数 Maximum sizes of each dimension of a block: 512 x 512 x 64 Maximum sizes of each dimension of a grid: 65535 x 65535 x 1 Maximum memory pitch: 262144 bytes Texture alignment: 256 bytes Clock rate: 1.35 GHz ←クロック Concurrent copy and execution: Yes Run time limit on kernels: No Integrated: No Support host page-locked memory mapping: No Compute mode: Default (multiple host threads can use this device simultaneously) 11
  12. 12. 演算パフォーマンス 行列同士を積算させるプログラムをコンパイルして実行を行い検証する。 環境:CentOS5.4, Corei3、 mem4G, GeForce 9800GT ※ サンプルコードは別途参照 ※CPU での処理はシングルスレッドのため、1 コアしか利用していない 512*512 の行列同士の積算 処理方法 計算時間(sec) 計算結果 CUDA(GPU) 0.005285024642944335937500000000 17614889811968.000000 CPU 0.988089084625244140625000000000 17614889811968.000000 1024*1024 の行列同士の演算 処理方法 計算時間(sec) 計算結果 CUDA(GPU) 0.032414913177490234375000000000 563314824314880.000000 CPU 32.760878086090087890625000000000 563314824314880.000000 2048*2048 の行列同士の演算 処理方法 計算時間(sec) 計算結果 CUDA(GPU) 0.254090070724487304687500000000 18020237517520896.000000 CPU 279.387372016906738281250000000000 18020239665004544.000000 512*512 1 02 4*102 4 2 04 8*20 48 1. 05 35 30 0 1 0. 95 0.9 30 25 0 0. 85 0.8 0. 75 25 0.7 20 0 0. 65 0.6 20 0. 55 512*512 10 24 *10 24 15 0 20 48 *2 04 8 0.5 0. 45 15 0.4 0. 35 10 0 0.3 10 0. 25 0.2 50 0. 15 5 0.1 0. 05 0 0 0 C U D A (G P U ) CPU C UD A(G PU ) CP U CU DA (GP U) C PU ※あまりに差が開きすぎて 1024 行列積算以降は棒グラフには表示されず。 上記実行結果から今回利用している GPU の場合は 100 倍〰 200 倍の性能が出ていることが わかる。 12
  13. 13. 考察 今回は NVIDIA から提供されている CUDA を利用した。 今後は ATI から提供されている ATI Stream などもあることから、統合フレームワークの OpenCL を利用した開発が効率的かと思われる。 基本的には演算処理を文字通り桁違いに速くできる(並列化できる)ので、大量の計算処理が 必要な R&D 向きかと思われる。 実際、NVIDIA(CUDA)の採用事例としても物理シミュレーションから石油・ガス探査、製 品設計、医療用画像などが挙げられている。 しかし、今回の検証で得られたことは ・ 並列処理を意識したプログラミングスキルを習得することによって個人でも新た な可能性を生み出すことができる。 ・ 「演算のみ速くできても、(フロントエンドとしての) Web サービスでは利用シー ンがない」ではなく「常識を覆すほどの演算能力を手に入れることにより、常識を覆 す Web サービスを作ることができる可能性がある」ということを意識できる。 という点になる。 13
  14. 14. プログラマはハードウェアのスケールアップに依存した逐一的なプログラミングから、ハード ウェアの性能を完全に引き出し、スケールする並列プログラミングの技術を習得することが重 要になると予測する。 引用:日経 BP 社 上記の Microsoft ソフトウエアアーキテクトのハーブ・サッター氏による Fall Processor Forum 2005 の基調講演の資料ではハードウェアが提供してくれるスケールアップによる性 能向上(フリーランチ:無料の食事)の時代は終わったと宣言している。 1 コアあたりの性能限界を迎えつつある今、プログラマの技術転換の時代が来ているのかもし れない。 14
  15. 15. Cell の最大演算性能 http://todotani.cocolog-nifty.com/blog/2008/02/cell_1b22.html Telsa http://www.nvidia.com/docs/IO/43395/BD-04983-001_v01_New.pdf Cuda ZONE http://www.nvidia.co.jp/object/cuda_home_new_jp.html CUDA-GDB http://developer.download.nvidia.com/compute/cuda/2_1/cudagdb/CUDA_GDB_User_Man ual.pdf GPU コンピューティングの現状 http://www.slideshare.net/pfi/20091210-gpu マルチコア CPU でプログラミング言語が変わる? http://pc.nikkeibp.co.jp/article/trend/20080528/1003620/ 15

×