SlideShare une entreprise Scribd logo
1  sur  15
GPGPU によるパーソナルスーパーコンピュータの可能性



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




             1
概要.........................................................................................................................................3
   NVIDIA CUDA について.....................................................................................................4
      機能、特徴...........................................................................................................................4
      アーキテクチャ....................................................................................................................5
   CPU との性能比較..................................................................................................................6
   開発環境..................................................................................................................................7
   コンパイル、及びオプション.................................................................................................8
   デバッグ..................................................................................................................................9
環境構築...............................................................................................................................10
   Linux.....................................................................................................................................10
   MacOS..................................................................................................................................10
   環境の確認.............................................................................................................................11
演算パフォーマンス.............................................................................................................12
考察....................................................................................................................................... 13




                                                                       2
概要
現在の CPU はムーアの法則と呼ばれる経験則の通り処理能力を上げてきたが、トランジスタ
の集積率の限界、発熱問題などにより限界に達しつつある。
そのため各ベンダーは Intel Core シリーズ、AMD Athlon64 などマルチコア化の道へ踏み出
している。


その流れに対して、GPU は座標変換や光源処理などに使う比較的単純な演算を大量に行うこ
とでグラフィックス性能を今もなお大幅に上げ続けている。
単純な演算であるが故に演算処理をソフトウェアで処理せずに、ハードウェア化し高速化を図
っていることや、ハードウェアによるメニーコアによる処理が可能なことがその下支えとなっ
ている。


GPGPU はそのメニーコア技術を汎用的に利用できるようにする仕組み( General Purpose
Computation on Graphics Processing Unit)、汎用 GPU の」略である。
GPU に搭載されているメニーコアによる演算能力をグラフィックス以外にも利用する技術と
して近年注目を集めている。




長崎大学では GPU を 760 個並列し 158TFLOPS の演算性能をたたき出し、地球シミュレータ
の 122TFLOPS を上回る性能を出した。
ちなみに発表された開発費は 3800 万円である。(※地球シミュレータは 400 億円)


                                  3
NVIDIA CUDA について
NVIDIA が提供する GPU を利用した並列コンピューティングアーキテクチャ。




      機能、特徴


  •   GPU で並列アプリケーション開発を行うための標準 C 言語
  •   FFT (高速フーリエ変換) および BLAS (線形代数の基本サブルーチン)
      用標準数値ライブラリ
  •   GPU と CPU 間での高速データ転送パスを使用したコンピューティング
      専用 CUDA ドライバ
  •   OpenGL および DirectX グラフィックスドライバと CUDA ドライバを同時使
      用可能
  •   Linux 32/64 ビット、Windows XP 32/64 ビット、および Mac の OS を
      サポート




                            4
アーキテクチャ



                                      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
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
開発環境
   CUDA ドライバ
   CUDA ツールキット一式
   CUDA SDK コードサンプル
が NVIDIA からダウンロード可能。


SDK には以下の内容が含まれる
   nvcc C コンパイラ
   GPU のための CUDA FFT および BLAS ライブラリ
   プロファイラ
   GPU のための gdb デバッガ
   CUDA ランダムドライバ(標準 NVIDIA GPU ドライバでも使用可能)
   CUDA プログラミングマニュアル




                       7
コンパイル、及びオプション


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
デバッグ
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
環境構築
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
環境の確認
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
演算パフォーマンス
行列同士を積算させるプログラムをコンパイルして実行を行い検証する。
環境: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
考察
今回は NVIDIA から提供されている CUDA を利用した。
今後は ATI から提供されている ATI Stream などもあることから、統合フレームワークの
OpenCL を利用した開発が効率的かと思われる。


基本的には演算処理を文字通り桁違いに速くできる(並列化できる)ので、大量の計算処理が
必要な R&D 向きかと思われる。
実際、NVIDIA(CUDA)の採用事例としても物理シミュレーションから石油・ガス探査、製
品設計、医療用画像などが挙げられている。


しかし、今回の検証で得られたことは
・ 並列処理を意識したプログラミングスキルを習得することによって個人でも新た
  な可能性を生み出すことができる。
・ 「演算のみ速くできても、(フロントエンドとしての) Web サービスでは利用シー
  ンがない」ではなく「常識を覆すほどの演算能力を手に入れることにより、常識を覆
  す Web サービスを作ることができる可能性がある」ということを意識できる。
という点になる。




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




引用:日経 BP 社


上記の Microsoft ソフトウエアアーキテクトのハーブ・サッター氏による Fall Processor
Forum 2005 の基調講演の資料ではハードウェアが提供してくれるスケールアップによる性
能向上(フリーランチ:無料の食事)の時代は終わったと宣言している。
1 コアあたりの性能限界を迎えつつある今、プログラマの技術転換の時代が来ているのかもし
れない。




                          14
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

Contenu connexe

Tendances

1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門NVIDIA Japan
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)Takeshi HASEGAWA
 
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)Takeshi HASEGAWA
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Nobuto Murata
 
C#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめC#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめNVIDIA Japan
 
1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリ1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリNVIDIA Japan
 
1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法NVIDIA Japan
 
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12Nobuto Murata
 
物理マシンをケチる技術
物理マシンをケチる技術物理マシンをケチる技術
物理マシンをケチる技術Satoshi KOBAYASHI
 
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)株式会社サードウェア
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudsamemoon
 
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!Etsuji Nakai
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみようYou&I
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらTakuma Nakajima
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -zgock
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活Kuninobu SaSaki
 

Tendances (20)

1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
 
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
 
C#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめC#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめ
 
1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリ1072: アプリケーション開発を加速するCUDAライブラリ
1072: アプリケーション開発を加速するCUDAライブラリ
 
1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法1075: .NETからCUDAを使うひとつの方法
1075: .NETからCUDAを使うひとつの方法
 
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoyaLXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
 
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
 
物理マシンをケチる技術
物理マシンをケチる技術物理マシンをケチる技術
物理マシンをケチる技術
 
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
KVM Cluster with DRBD, ioDrive2 and Infiniband (130802 OSC京都)
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
 
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみよう
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったら
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
 
CPUの同時実行機能
CPUの同時実行機能CPUの同時実行機能
CPUの同時実行機能
 
retrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoFretrobsd-2012-JUL-07 at JNUG BSD BoF
retrobsd-2012-JUL-07 at JNUG BSD BoF
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 

En vedette

Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング   -GPGPUも- Pythonによる並列プログラミング   -GPGPUも-
Pythonによる並列プログラミング -GPGPUも- Yusaku Watanabe
 
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)智啓 出川
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門Yuya Unno
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Ken Morishita
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 

En vedette (7)

Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング   -GPGPUも- Pythonによる並列プログラミング   -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
 
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
 
More modern gpu
More modern gpuMore modern gpu
More modern gpu
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
Chainer, Cupy入門
Chainer, Cupy入門Chainer, Cupy入門
Chainer, Cupy入門
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 

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

NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門NVIDIA Japan
 
Hello, DirectCompute
Hello, DirectComputeHello, DirectCompute
Hello, DirectComputedasyprocta
 
Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報NVIDIA Japan
 
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018インフラ野郎 Azureチーム v18.11 at Tech Summit 2018
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018Toru Makabe
 
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来Preferred Networks
 
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来Preferred Networks
 
20170421 tensor flowusergroup
20170421 tensor flowusergroup20170421 tensor flowusergroup
20170421 tensor flowusergroupManaMurakami1
 
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123
もっとわかる Microsoft Azure最新技術アップデート編 - 20150123もっとわかる Microsoft Azure最新技術アップデート編 - 20150123
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123Kuninobu SaSaki
 
HPC 的に H100 は魅力的な GPU なのか?
HPC 的に H100 は魅力的な GPU なのか?HPC 的に H100 は魅力的な GPU なのか?
HPC 的に H100 は魅力的な GPU なのか?NVIDIA Japan
 
GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたRyo Sakamoto
 
RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩Ryo Fujita
 
1070: CUDA プログラミング入門
1070: CUDA プログラミング入門1070: CUDA プログラミング入門
1070: CUDA プログラミング入門NVIDIA Japan
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月VirtualTech Japan Inc.
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾外道 父
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルエンジニア通信
 

Similaire à GPGPUによるパーソナルスーパーコンピュータの可能性 (20)

NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
Hello, DirectCompute
Hello, DirectComputeHello, DirectCompute
Hello, DirectCompute
 
Cuda
CudaCuda
Cuda
 
Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報Magnum IO GPUDirect Storage 最新情報
Magnum IO GPUDirect Storage 最新情報
 
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018インフラ野郎 Azureチーム v18.11 at Tech Summit 2018
インフラ野郎 Azureチーム v18.11 at Tech Summit 2018
 
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
 
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
 
20170421 tensor flowusergroup
20170421 tensor flowusergroup20170421 tensor flowusergroup
20170421 tensor flowusergroup
 
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123
もっとわかる Microsoft Azure最新技術アップデート編 - 20150123もっとわかる Microsoft Azure最新技術アップデート編 - 20150123
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123
 
HPC 的に H100 は魅力的な GPU なのか?
HPC 的に H100 は魅力的な GPU なのか?HPC 的に H100 は魅力的な GPU なのか?
HPC 的に H100 は魅力的な GPU なのか?
 
GPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみたGPGPU deいろんな問題解いてみた
GPGPU deいろんな問題解いてみた
 
RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩RHEL on Azure、初めの一歩
RHEL on Azure、初めの一歩
 
1070: CUDA プログラミング入門
1070: CUDA プログラミング入門1070: CUDA プログラミング入門
1070: CUDA プログラミング入門
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
GPU Container as a Serviceを実現するための最新OSS徹底比較 - OpenStack最新情報セミナー 2017年7月
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
Cmc cmd slim
Cmc cmd slimCmc cmd slim
Cmc cmd slim
 
オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)オラクルのHPC/GPUソリューションご紹介(2021/08版)
オラクルのHPC/GPUソリューションご紹介(2021/08版)
 

Plus de Yusaku Watanabe

組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagement組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagementYusaku Watanabe
 
エンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのかエンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのかYusaku Watanabe
 
Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014Yusaku Watanabe
 
Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talksYusaku Watanabe
 
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形Yusaku Watanabe
 
PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験Yusaku Watanabe
 
スケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるスケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるYusaku Watanabe
 
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまでYusaku Watanabe
 

Plus de Yusaku Watanabe (10)

組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagement組織をシステム化するReactiveManagement
組織をシステム化するReactiveManagement
 
エンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのかエンジニアがプロダクトマネージャーに進化すると何が起きるのか
エンジニアがプロダクトマネージャーに進化すると何が起きるのか
 
QCon SF-feedback
QCon SF-feedbackQCon SF-feedback
QCon SF-feedback
 
Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014Regional Scrum Gathering® Tokyo 2014
Regional Scrum Gathering® Tokyo 2014
 
Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talks
 
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
WEB開発を加速させる。アジャイル開発に最適なデータ構造とORマッパの形
 
PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験PageRankアルゴリズムを使った人事評価についての実験
PageRankアルゴリズムを使った人事評価についての実験
 
スケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考えるスケーラブルなアプリケーション開発を考える
スケーラブルなアプリケーション開発を考える
 
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
実録 WEBエンジニアが Titanium Mobileアプリを開発するまで
 
Ameba Piggの裏側
Ameba Piggの裏側Ameba Piggの裏側
Ameba Piggの裏側
 

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

  • 2. 概要.........................................................................................................................................3 NVIDIA CUDA について.....................................................................................................4 機能、特徴...........................................................................................................................4 アーキテクチャ....................................................................................................................5 CPU との性能比較..................................................................................................................6 開発環境..................................................................................................................................7 コンパイル、及びオプション.................................................................................................8 デバッグ..................................................................................................................................9 環境構築...............................................................................................................................10 Linux.....................................................................................................................................10 MacOS..................................................................................................................................10 環境の確認.............................................................................................................................11 演算パフォーマンス.............................................................................................................12 考察....................................................................................................................................... 13 2
  • 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. 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. アーキテクチャ 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. 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. 開発環境  CUDA ドライバ  CUDA ツールキット一式  CUDA SDK コードサンプル が NVIDIA からダウンロード可能。 SDK には以下の内容が含まれる  nvcc C コンパイラ  GPU のための CUDA FFT および BLAS ライブラリ  プロファイラ  GPU のための gdb デバッガ  CUDA ランダムドライバ(標準 NVIDIA GPU ドライバでも使用可能)  CUDA プログラミングマニュアル 7
  • 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. デバッグ 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. 環境構築 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. 環境の確認 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. 演算パフォーマンス 行列同士を積算させるプログラムをコンパイルして実行を行い検証する。 環境: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. 考察 今回は NVIDIA から提供されている CUDA を利用した。 今後は ATI から提供されている ATI Stream などもあることから、統合フレームワークの OpenCL を利用した開発が効率的かと思われる。 基本的には演算処理を文字通り桁違いに速くできる(並列化できる)ので、大量の計算処理が 必要な R&D 向きかと思われる。 実際、NVIDIA(CUDA)の採用事例としても物理シミュレーションから石油・ガス探査、製 品設計、医療用画像などが挙げられている。 しかし、今回の検証で得られたことは ・ 並列処理を意識したプログラミングスキルを習得することによって個人でも新た な可能性を生み出すことができる。 ・ 「演算のみ速くできても、(フロントエンドとしての) Web サービスでは利用シー ンがない」ではなく「常識を覆すほどの演算能力を手に入れることにより、常識を覆 す Web サービスを作ることができる可能性がある」ということを意識できる。 という点になる。 13
  • 14. プログラマはハードウェアのスケールアップに依存した逐一的なプログラミングから、ハード ウェアの性能を完全に引き出し、スケールする並列プログラミングの技術を習得することが重 要になると予測する。 引用:日経 BP 社 上記の Microsoft ソフトウエアアーキテクトのハーブ・サッター氏による Fall Processor Forum 2005 の基調講演の資料ではハードウェアが提供してくれるスケールアップによる性 能向上(フリーランチ:無料の食事)の時代は終わったと宣言している。 1 コアあたりの性能限界を迎えつつある今、プログラマの技術転換の時代が来ているのかもし れない。 14