トップサービス導入事例強み開発ブログよくある質問会社案内 お問い合わせ
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使用率の様子