4. 4INTRODUCTION TO OPENCL | JUNE, 2013
GPUの活用
} グラフィックスのタスク用のプロセッサ
} 並列度の高い汎用計算にも向いている
} CPUとは異なる設計
– CPU:逐次処理
– GPU:並列処理
} プログラミング言語
– OpenGL, GLSL
• ラスターグラフィックスのAPI
• 汎用計算用ではない
– グラフィックスAPIをハックしなければならない
• クロスプラットフォーム
– DirectX, HLSL
• ラスターグラフィックスAPI
• 汎用計算にはDirect Compute (DX11)
• DirectX11をサポートしたプラットフォームが必要 (Windows 7)
• Windows OSのみ
– OpenCL
CPU GPU
work
work work work work work work work work
work
work
work
38. 38INTRODUCTION TO OPENCL | JUNE, 2013
演算の可視化
} 二段階のreduction
– 20ローカルアトミクス
– 4グローバルアトミクス
} 単純な実装
– 20グローバルアトミクス
Work Group0 Work Group1 Work Group2 Work Group3
Global max
Local max
39. 39INTRODUCTION TO OPENCL | JUNE, 2013
二段階のREDUCTION KERNEL
#pragma OPENCL EXTENSION
cl_khr_global_int32_extended_atomics : enable
#pragma OPENCL EXTENSION
cl_khr_local_int32_extended_atomics : enable
__kernel
void reduction2levelKernel( __global int* a,
__global int* maxValue )
{
__local int localMax;
int i = get_global_id(0);
if( get_local_id(0) == 0 )
localMax = 0;
barrier(CLK_LOCAL_MEM_FENCE);
atomic_max( &localMax, a[i] );
barrier(CLK_LOCAL_MEM_FENCE);
if( get_local_id(0) == 0 )
atomic_max( &maxValue[0], localMax );
}
Enable Extensions
Initialize local max
Synchronization
Local reduction
Synchronization
Global reduction
50. 50INTRODUCTION TO OPENCL | JUNE, 2013
例
} 処理の粒度はまちまち
} 衝突判定
– Large vs Large => CPU
– Large vs Small => CPU
– Small vs Small => GPU
} CPUとディスクリートGPUを用いると多くのデータ転
送が必要
– パフォーマンスに響く
OpenCL Case Study: Mixed Particle Simulation, Heterogeneous Computing with OpenCL, Chapter 10