Posted on 2020/10/31, 10:55 AM By admin22
GPUを使った並列処理について、今回はわかりやすい例を画像を使ってテストしてみました。
https://co-crea.jp/wp-content/uploads/2016/07/File_2.pdf
こちらのドキュメントが並列処理をする単位についてわかりやすく書かれています。
1 2 3 4 5 |
for(i=0;i<100;i++){ for(j=0;j<100;j++){ foo(1,j); } } |
このような処理をCUDAで書くと
1 2 3 4 5 6 7 8 9 10 11 |
__global__ void kernel(void) { uint i = 10 * blockIdx.y + threadIdx.y; uint j = 10 * blockidx.x + threadIdx.x; foo(i, j); } dim3 grid(10, 10); //10x10のblockからなるgrid (max 65535x65535) dim3 block(10,10,1); //10x10x1 のthreadからなるblock (max:512) kernel<<<grid, block >>>(); |
となります。
下記にでてきますが、10というのがblockDimになります。
こうやって見るとイメージしやすいです。
参考: https://http.download.nvidia.com/developer/cuda/jp/CUDA_Programming_Basics_PartII_jp.pdf
また、下記サイトのコードを参考にして、処理単位をテストしてみました。
https://yuki67.github.io/post/cuda_bitmap/
コメントの数をいろいろと変えて試すと、理解が深まります。
Categories: 未分類 タグ: CUDA