トップサービス導入事例強み開発ブログよくある質問会社案内 お問い合わせ
Dev Blog

CUDAでGPUプログラミング

■目的

  • Tensorflow や Pytorch で間接的にしかGPUを使っていなかったので、もっと根っこの部分を知って GPUについての知見を深めたい。
  • cuda でサンプルプログラムを書いてみる。

■実験環境

  • OS・・Windows10 Pro
  • CPU・・Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz 3.19 GHz
  • GPU・・RTX2070

■準備

  • CUDA Toookit 12.5 をダウンロードしインストール。
  • nvcc にPATHを通す。nvcc が cuda のコンパイラ。

■実験内容

  • 1~nまでの合計値を出すプログラムで、CPUとGPUでの違いを見る。
  • nvcc でコンパイルし、実行ファイルを実行する。

■結果

1億まで合計する所要時間
合計値:5000000050000000
10億まで合計する所要時間
合計値:500000000500000000
CPU 0.04 秒 0.4秒
GPU 0.00001秒 0.00003秒

※100億はGPUのメモリ不足で実行できず。

■所感

  • cudaはほぼC言語だった。

  • 実行順序を問わないお題であればGPUのメリットが活かせる。ものによっては1000分の1くらいの時間で済む。

  • GPUのグリッド、ブロック、スレッドといった基本構造を知ることができた。

  • スレッドを使った並列処理がどれくらい強力であるか実感できた。

  • pyCUDAを使えば、pythonからcudaを実行できるので選択肢が広がった。cudaを知れて、世界が広がった気がする。

  • 複数マシンかつ複数GPU環境での分散並列処理も実現可能。 Tensorflowなら「MultiWorkerMirroredStrategy」 Pytorchなら「DistributedDataParallel」 が用意されている。

■追加実験

  • 複数GPU環境が用意できなかったのでKaggle環境(GPU T4 * 2)でTensorflowの「MirroredStrategy」を試してみた。 使用率から複数GPUで分散処理ができていそう。
Kaggle環境での複数GPU使用率の様子