22. GPGPU の基本
プログラムから GPU を扱う方法はいろいろある
CUDA
OpenCL
OpenACC
OpenMP (>4.0)
DirectX DirectCompute
OpenGL Compute Shader
今回はサンプルには CUDA を使う
23. CUDA とは
NVIDIA が開発・提供している、 GPU 向けの汎用
並列コンピューティングプラットフォーム(並列コ
ンピューティングアーキテクチャ)およびプログラ
ミングモデルである。 - Wikipedia より
CUDA C という言語を書くことで GPU 上で動く
プログラムを書くことが出来る
C++ とほぼ互換の言語
printf 等一部を除いて C++ 標準ライブラリは使えない
170. 例題:合計値の計算
int i = threadIdx.x + blockIdx.x * threadsPerBlock;
__shared__ unsigned long long tmp[threadsPerBlock];
tmp[threadIdx.x] = i + 1;
__syncthreads();
for (uint32_t s = threadsPerBlock/2; s > 0; s >>= 1) {
if (threadIdx.x < s) {
tmp[threadIdx.x] += tmp[threadIdx.x + s];
}
__syncthreads();
}
if (threadIdx.x == 0) {
atomicAdd(result, tmp[0]);
}
183. 参考文献
[0] CUDA Toolkit Documentation
http://docs.nvidia.com/cuda/index.html
[1] CUDA C Programming Guide
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html
[2] Better Performance at Lower Occupancy
http://www.nvidia.com/content/GTC-2010/pdfs/2238_GTC2010.pdf
184. 参考文献
[3] CUDA By Example 汎用 GPU プログラミング入門
インプレスジャパン ISBN: 978-4-8443-2978-7
[4] CUDA C プロフェッショナルプログラミング
インプレス ISBN: 978-4-8443-3891-8
[5] はじめての CUDA プログラミング
工学社 ISBN: 978-4-7775-1477-9