第3回 GPUクラスタ上での
プログラミング(CUDA)
長岡技術科学大学 電気電子情報工学専攻 出川智啓
今回の内容
GPGPU実践基礎工学
 CUDAによるプログラミング
 GPGPU教育計算機システムGROUSEの利用方法
2 2015/9/16
CUDA (Compute Unified Device Architecture)
 NVIDIA社製GPU向け開発環境
 Windows, Linux, Mac OS X
 2007年頃発表
 C/C++言語+独自のGPU向け拡張
 専用コンパイラ(nvcc)とランタイムライブラリ
 いくつかの数値計算ライブラリ(線形代数計算,FFTなど)
GPGPU実践基礎工学3 2015/9/16
CUDA付属のライブラリ
 cuBLAS
 BLASのGPU向け実装(密行列)
 BLAS(Basic Linear Algebra Subprogram)
 cuSPARSE
 BLASのGPU向け実装(疎行列)
 cuFFT
 高速フーリエ変換
 cuRAND
 乱数生成
 その他
 https://developer.nvidia.com/gpu‐accelerated‐libraries
GPGPU実践基礎工学4 2015/9/16
CUDAによるプログラミング
 CPUをホスト(Host),GPUをデバイス(Device)と表現
 ホスト(CPU)
 処理の流れやGPUを利用するための手続きを記述
 プログラムの書き方は従来のC言語と同じ
 利用するGPUの決定,GPUへのデータ転送,GPUで実行する
関数の呼び出し等
GPGPU実践基礎工学5 2015/9/16
CUDAによるプログラミング
 CPUをホスト(Host),GPUをデバイス(Device)と表現
 デバイス(GPU)
 処理する内容を関数として記述
 引数は利用可能,返値は利用不可(常にvoid)
 関数はkernelと呼ばれる
 関数呼び出しはlaunch, invokeなどと呼ばれる
GPGPU実践基礎工学6 2015/9/16
CUDAプログラムのコンパイル
 ソースファイルの拡張子は.cu
 nvccを用いてコンパイル
 CPUが処理する箇所はgcc等がコンパイル
 GPUで処理する箇所をnvccがコンパイル
GPGPU実践基礎工学7 2015/9/16
CUDAプログラムの実行
 実行時の流れ(CPU視点)
 利用するGPUの初期化やデータの転送などを実行
 GPUで実行する関数を呼び出し
 GPUから結果を取得
初期化の指示
初期化
カーネルの実行指示
カーネルを実行
結果の取得
実行結果をコピー
time
CPUとGPUは非同期
CPUは別の処理を実行可能
GPGPU実践基礎工学
必要なデータのコピー
メモリに書込
8 2015/9/16
#include<stdio.h>
int main(void){
printf("hello world¥n");
return 0;
}
Hello World
 何を確認するか
 最小構成のプログラムの作り方
 ファイル命名規則(拡張子は.c/.cpp)
 コンパイルの方法(gcc, cl等を使用)
GPGPU実践基礎工学9
helloworld.c
2015/9/16
CUDAでHello World
 何を確認するか
 最小構成のプログラムの作り方
 ファイル命名規則(拡張子は.cu)
 コンパイルの方法(nvccを使用)
#include<stdio.h>
int main(void){
printf("hello world¥n");
return 0;
}
GPGPU実践基礎工学10
#include<stdio.h>
int main(void){
printf("hello world¥n");
return 0;
}
違いは拡張子だけ?
helloworld.cu helloworld.c
2015/9/16
CUDAプログラムのコンパイル
 ソースファイルの拡張子は.cu
 nvccを用いてコンパイル
 CPUが処理する箇所はgcc等がコンパイル
 GPUで処理する箇所をnvccがコンパイル
 helloworld.cuにはCPUで処理する箇所しかない
GPGPU実践基礎工学11 2015/9/16
GPGPU教育計算機システムGROUSEの
利用方法
情報処理センターGPGPUシステム
 16台の計算サーバで構成
 NVIDIA Tesla M2050を搭載
 各サーバに4機ずつ計64機 grouse
tesla01 ‐ tesla04
M2050×16
tesla05 ‐ tesla08
M2050×16
tesla09 – tesla12
M2050×16
tesla13 – tesla16
M2050×16
外部ネットワーク
GPGPU実践基礎工学13 2015/9/16
grouseへのログイン
2015/9/16GPGPU実践基礎工学14
2013年度GPGPU講習会資料より引用
grouseへのログイン
2015/9/16GPGPU実践基礎工学15
2013年度GPGPU講習会資料より引用
統合アカウントとパスワード入力
ターミナルの起動
2015/9/16GPGPU実践基礎工学16
2013年度GPGPU講習会資料より引用
System→Terminal
ターミナルの起動
2015/9/16GPGPU実践基礎工学17
2013年度GPGPU講習会資料より引用
実行イメージ
grouse
処理
処理結果出力
キー入力,マウス入力
2015/9/16GPGPU実践基礎工学18
プログラムの作成と保存
2015/9/16GPGPU実践基礎工学19
2013年度GPGPU講習会資料より引用
実行イメージ
grouse
ファイル
保存
ハード
ディスク
共有
共有
2015/9/16GPGPU実践基礎工学20
tesla01 ‐ tesla04 tesla05 ‐ tesla08 tesla09 – tesla12 tesla13 – tesla16
共有
tesla??へのログイン
もう一つターミナルを起動し,下の
ターミナルでログイン
打ち込むコマンドは
$ ssh␣–l␣ユーザID␣tesla??
(??には01~16の番号を入力)
2015/9/16GPGPU実践基礎工学21
2013年度GPGPU講習会資料より引用
tesla??でのコンパイルとプログラム実行
2015/9/16GPGPU実践基礎工学22
grouseでの作業用
tesla??でのコンパイルと
実行用
2013年度GPGPU講習会資料より引用
tesla??でコンパイルとプログラム実行
 コンパイル
 $ nvcc˽ソースファイル名
 nvccがコンパイル対象とするソースファイルの拡張子は.cu
 エラーがなければa.outという実行ファイルが作成される
 実行
 $ ./a.out
 nvccはgccと同じオプションを持っていることが多い
 対応オプションの一覧は‐hオプションで確認
 $ nvcc˽‐h
2015/9/16GPGPU実践基礎工学23
実行イメージ
grouse
処理
処理結果出力
キー入力,マウス入力
$ ssh␣tesla16
tesla16
キー入力
処理
処理結果
2015/9/16GPGPU実践基礎工学24
実行イメージ
grouse
キー入力,マウス入力
$ ssh␣tesla16
$ nvcc ??.cu
キー入力
処理結果
ハード
ディスク
??.cu
コンパイル
2015/9/16GPGPU実践基礎工学
処理結果出力
tesla16
25
実行イメージ
grouse処理結果出力
キー入力,マウス入力
$ ssh␣tesla16
$ nvcc ??.cu
$ ./a.out
キー入力
処理結果
ハード
ディスク
a.out
実行
2015/9/16GPGPU実践基礎工学
tesla16
26
実行イメージ
grouse
キー入力,マウス入力
$ ssh␣tesla16
$ nvcc ??.cu
$ ./a.out
キー入力
ハード
ディスク
a.out
実行
2015/9/16GPGPU実践基礎工学
tesla16
GPU0
GPU1
GPU2
GPU3
処理結果出力
処理結果
27
情報処理センターでのCUDAの使い方
1. grouseやtesla??で開発する場合
 grouseやtesla??にログイン
 ソースファイルを作成し,tesla??上でコンパイル・実行
 grouseはGPUを搭載していないため実行できない(コンパイルは可能)
2. 研究室のPC等,情報処理センター外で開発する場合
 研究室のPCでソースファイルを作成
 WinSCPなどでファイルをgrouseにアップロード
 grouseを経由してtesla??にログインした後,コンパイル・実行
2015/9/16GPGPU実践基礎工学28
ターミナルのみの利用
(特に演習室外から利用する場合)
1. Tera Termでgrouseにログイン
2013年度GPGPU講習会資料より引用
2015/9/16GPGPU実践基礎工学29
ターミナルのみの利用
(特に演習室外から利用する場合)
2. sshでtesla??にログイン
$ ssh␣–l␣ユーザID␣tesla??
(??には01~16の番号を入力)
2013年度GPGPU講習会資料より引用
2015/9/16GPGPU実践基礎工学30
grouseへのファイル転送(WinSCP)
 Unixコマンドscp(secure copy)のWindows GUIクラ
イアント
 Secure Shell (ssh) に含まれるsshの機能を利用し
て安全性の高いファイル転送を行う
Host名 grouse
統合アカウントの
ユーザ名とパスワード
login
2015/9/16GPGPU実践基礎工学31
Windows上のソースファイルをコピー
grouse
ハード
ディスク
WinSCPでコピー
ハード
ディスク
共有
共有
2015/9/16GPGPU実践基礎工学32
tesla01 ‐ tesla04 tesla05 ‐ tesla08 tesla09 – tesla12 tesla13 – tesla16
共有
ソース
ファイル
ソース
ファイル
ログインしているサーバの確認
 grouseにログインしているかtesla??にログインしてい
るか分からなくなったら
$ hostname
2015/9/16GPGPU実践基礎工学33
実習
GPGPU実践基礎工学34
 GROUSEにログインしてhello.c, hello.cuを作成,実
行せよ
 以下のプログラムを作成,コンパイルし,正しく実行でき
ることを確認せよ(拡張子は.cuとすること)
#include<stdio.h>
__global__ void kernel(){}
int main(void){
kernel<<<1,1>>>();
printf("hello world¥n");
return 0;
}
GPUで実行される関数(カーネル)
修飾子__global__が追加されている
・・・
通常の関数呼出とは異なり,
<<< , >>>が追加されている
・・・
2015/9/16

2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)