dim3 grid(3, 2);
dim3 block(5, 3);
可以转置一下理解
#include <stdio.h>
#include <iostream>
using namespace std;
__global__ void hello_from_gpu()
{
const int b = blockIdx.x;
const int c = blockIdx.y;
const int tx = threadIdx.x;
const int ty = threadIdx.y;
// cout<<b<<endl;
printf("Hello World from block-(%d,%d) and thread-(%d, %d)!\n", b,c, tx, ty);
}
int main(void)
{
const dim3 grid(3, 2);
const dim3 block(5, 3);
//const dim3 block_size(2, 4);
hello_from_gpu<<<grid, block>>>();
cudaDeviceSynchronize();
return 0;
}
dim3 grid(3, 2);
dim3 block(5, 3);
nvcc hello5.cu
./a.out
Hello World from block-(2,0) and thread-(0, 0)!
Hello World from block-(2,0) and thread-(1, 0)!
Hello World from block-(2,0) and thread-(2, 0)!
Hello World from block-(2,0) and thread-(3, 0)!
Hello World from block-(2,0) and thread-(4, 0)!
Hello World from block-(2,0) and thread-(0, 1)!
Hello World from block-(2,0) and thread-(1, 1)!
Hello World from block-(2,0) and thread-(2, 1)!
Hello World from block-(2,0) and thread-(3, 1)!
Hello World from block-(2,0) and thread-(4, 1)!
Hello World from block-(2,0) and thread-(0, 2)!
Hello World from block-(2,0) and thread-(1, 2)!
Hello World from block-(2,0) and thread-(2, 2)!
Hello World from block-(2,0) and thread-(3, 2)!
Hello World from block-(2,0) and thread-(4, 2)!
Hello World from block-(0,0) and thread-(0, 0)!
Hello World from block-(0,0) and thread-(1, 0)!
Hello World from block-(0,0) and thread-(2, 0)!
Hello World from block-(0,0) and thread-(3, 0)!
Hello World from block-(0,0) and thread-(4, 0)!
Hello World from block-(0,0) and thread-(0, 1)!
Hello World from block-(0,0) and thread-(1, 1)!
Hello World from block-(0,0) and thread-(2, 1)!
Hello World from block-(0,0) and thread-(3, 1)!
Hello World from block-(0,0) and thread-(4, 1)!
Hello World from block-(0,0) and thread-(0, 2)!
Hello World from block-(0,0) and thread-(1, 2)!
Hello World from block-(0,0) and thread-(2, 2)!
Hello World from block-(0,0) and thread-(3, 2)!
Hello World from block-(0,0) and thread-(4, 2)!
Hello World from block-(0,1) and thread-(0, 0)!
Hello World from block-(0,1) and thread-(1, 0)!
Hello World from block-(0,1) and thread-(2, 0)!
Hello World from block-(0,1) and thread-(3, 0)!
Hello World from block-(0,1) and thread-(4, 0)!
Hello World from block-(0,1) and thread-(0, 1)!
Hello World from block-(0,1) and thread-(1, 1)!
Hello World from block-(0,1) and thread-(2, 1)!
Hello World from block-(0,1) and thread-(3, 1)!
Hello World from block-(0,1) and thread-(4, 1)!
Hello World from block-(0,1) and thread-(0, 2)!
Hello World from block-(0,1) and thread-(1, 2)!
Hello World from block-(0,1) and thread-(2, 2)!
Hello World from block-(0,1) and thread-(3, 2)!
Hello World from block-(0,1) and thread-(4, 2)!
Hello World from block-(2,1) and thread-(0, 0)!
Hello World from block-(2,1) and thread-(1, 0)!
Hello World from block-(2,1) and thread-(2, 0)!
Hello World from block-(2,1) and thread-(3, 0)!
Hello World from block-(2,1) and thread-(4, 0)!
Hello World from block-(2,1) and thread-(0, 1)!
Hello World from block-(2,1) and thread-(1, 1)!
Hello World from block-(2,1) and thread-(2, 1)!
Hello World from block-(2,1) and thread-(3, 1)!
Hello World from block-(2,1) and thread-(4, 1)!
Hello World from block-(2,1) and thread-(0, 2)!
Hello World from block-(2,1) and thread-(1, 2)!
Hello World from block-(2,1) and thread-(2, 2)!
Hello World from block-(2,1) and thread-(3, 2)!
Hello World from block-(2,1) and thread-(4, 2)!
Hello World from block-(1,1) and thread-(0, 0)!
Hello World from block-(1,1) and thread-(1, 0)!
Hello World from block-(1,1) and thread-(2, 0)!
Hello World from block-(1,1) and thread-(3, 0)!
Hello World from block-(1,1) and thread-(4, 0)!
Hello World from block-(1,1) and thread-(0, 1)!
Hello World from block-(1,1) and thread-(1, 1)!
Hello World from block-(1,1) and thread-(2, 1)!
Hello World from block-(1,1) and thread-(3, 1)!
Hello World from block-(1,1) and thread-(4, 1)!
Hello World from block-(1,1) and thread-(0, 2)!
Hello World from block-(1,1) and thread-(1, 2)!
Hello World from block-(1,1) and thread-(2, 2)!
Hello World from block-(1,1) and thread-(3, 2)!
Hello World from block-(1,1) and thread-(4, 2)!
Hello World from block-(1,0) and thread-(0, 0)!
Hello World from block-(1,0) and thread-(1, 0)!
Hello World from block-(1,0) and thread-(2, 0)!
Hello World from block-(1,0) and thread-(3, 0)!
Hello World from block-(1,0) and thread-(4, 0)!
Hello World from block-(1,0) and thread-(0, 1)!
Hello World from block-(1,0) and thread-(1, 1)!
Hello World from block-(1,0) and thread-(2, 1)!
Hello World from block-(1,0) and thread-(3, 1)!
Hello World from block-(1,0) and thread-(4, 1)!
Hello World from block-(1,0) and thread-(0, 2)!
Hello World from block-(1,0) and thread-(1, 2)!
Hello World from block-(1,0) and thread-(2, 2)!
Hello World from block-(1,0) and thread-(3, 2)!
Hello World from block-(1,0) and thread-(4, 2)!
所以,一个线程需要两个内置的坐标变量(blockIdx,threadIdx)来唯一标识,它们都是dim3类型变量,其中blockIdx指明线程所在grid中的位置,而threaIdx指明线程所在block中的位置,如图中的Thread (1,1)满足: