[NVIDIA CUDAを使用したGPUプログラミング] 第1話 GPU Computing・並列演算処理の仕組み

まずはじめに、皆さま「CUDA」とは何かご存知でしょうか。CUDA(Compute Unified Device Architecture)は、NVIDIA社が開発したGPUプログラム開発環境です。CUDAを使用するとC言語のようなプログラム記述を使用して、GPUの複数の演算器を利用した高速な並列演算処理をおこなうことができるようになります。

この並列コンピューティング技術は近年AI分野で注目を集めているディープラーニングによる物体検出など、以下のような様々な応用に活用されています。本連載ではCUDAを使用したプログラミング事例の紹介を通して、GPUを使用した並列演算処理の仕組みについてご紹介したいと思います。

第1話 GPU Computing・並列演算処理の仕組み
第2話 CUDAプログラムの構造
第3話 CUDAプログラム実行リソースの可視化
第4話 CUDAの実行モデル
第5話 pythonを使用したCUDAプログラミング

Data Science Data Science
Data Science
Machine Learning Machine Learning
Machine Learning
Computational Chemistry Computational Chemistry
Computational Chemistry

GPUとは?

GPUはGraphics Processing Unitの略で、3Dグラフィックスなどの画像描写をおこなうための演算処理をおこなうプロセッサーのことです。3Dグラフィックスでは、各物体を複数の平面の板(ポリゴン)の組み合わせで表現しています。例えば、以下の例ではリンゴを三角形のポリゴンの集合で構成しています。(このポリゴンの粒度を細かくすれば、より滑らかな3Dモデルとして表示できます。)

三角形の ポリゴンの集合で構成するリンゴ

3Dグラフィックスでは、各物体を構成するポリゴン座標の変換・回転等のために膨大な量の行列演算処理を高速におこなって次々に画像を作り出しており、GPUはこの行列演算を同時に並列実行することができるように大量の演算器を備えたアーキテクチャーとなっております。

三角形の ポリゴンの集合で構成するリンゴ

このように、GPUは膨大な演算を同時に実行できる仕組みを備えていることから、グラフィック処理だけでなくGPU Computingとして、AIや科学技術計算等の様々な領域でHPC(High-performance computing)技術としても注目されています。

GPU Computingの応用例

GPU Computingは様々な分野で使用されていますが、その応用例の一つにAI処理(ディープラニング)があります。

ディープラーニングは、人間の知的なふるまいをコンピューターにおこなわせるディープニューラルネットワークを使用したAI技術のひとつで、以下のような様々な応用例が研究されています。

 ・画像認識

 ・物体検出

 ・自然言語処理 など

 

例えば画像認識の処理では、入力された画像データをニューラルネットワークに入力し、その演算結果の出力から、入力した画像を分類しています。(参考リンク)

具体的には、入力画像の画素データ列をネットワークに入力し、各ノードで行列演算をおこなった計算結果を確率として出力するような仕組みが知られています。

例えば、以下のように猫の画像データ列を入力し、出力ノードの中で最も確率が高いout[0]に割り当てられた”cat”であると判定することができます。

AI処理

ディープラーニングの分野ではこのネットワーク階層を増やすことで性能を向上させる方法が知られていますが、層数を増やすことに伴って、ネットワークのノードでの演算量が増大してしまうことが課題となっていました。ニューラルネットワークには依存関係のない膨大なノードの行列演算が存在していることから、大量の演算器を使用した並列演算処理を実行できる仕組みを備えるGPU技術への期待が高まっています。

こちらのリンク記載事例のようにディープラーニング領域ではフレームワークや開発ツールが充実してきており、CUDAのコーディング部分を直接記述する必要性がなくなってきています。本連載ではCUDAのコーディング部分を直接確認できるNVIDIA社から公開されているシンプルなサンプルコードの事例を使用し、GPUプログラミングの仕組みを紹介したいと思います。

サンプルコードの実行

では、まず実際にサンプルコードを実行してみましょう。

CUDAを使用したサンプルコードに関する情報はこちらのリンクに記載の通り、Windows、Linuxの両方で準備があるようです。

今回はJetson Xavier NX Developer Kitを使用してLinux版のデモを動作させる方法を紹介します。

 

 

Jetson Xavier NX Developer Kit

こちらのリンクの手順を参考に起動用のSDカードを作成し、Jetsonを起動します。

(今回はJetPack4.5.1を使用した実行例のご紹介となっています。)

起動用のSDカードには既にCUDAがインストールされていますので、

実行したいサンプルコードのフォルダーでビルドをおこない、実行させることができます。

以下にいくつかの実行例をご紹介します。

実行例1 (smokeParticles)

$ cp -r /usr/local/cuda-10.2/samples/ ./cuda_samples
$ cd ~/cuda_samples/5_Simulations/smokeParticles
$ make
$ ./smokeParticles
実行例1

実行例2 (simpleGL)

$ cd ~/cuda_samples/2_Graphics/simpleGL
$ make
$ ./simpleGL
実行例2

実行例3 (oceanFFT)

$ cd ~/cuda_samples/5_Simulations/oceanFFT
$ make
$ ./oceanFFT 
実行例3

実行例4 (postProcessGL)

$ cd ~/cuda_samples/3_Imaging/postProcessGL
$ make
$ ./postProcessGL 
実行例4

次回、サンプルコードの中身について解説

本記事では、GPU Computingや並列演算処理の仕組み、さらにCUDAのサンプルコードを動作させる方法までの流れをご紹介しましたがいかがでしたでしょうか。

次回はサンプルコードのプログラム記述の解説を通して、CUDAを使用したプログラミングの仕組みについてご紹介します。

 

お問い合わせはこちら