输出blockId

global void getBlockId(int a)
{
int blockId = blockIdx.x ;
printf(“BlockId : %d \n”,blockId);
}

调用为getBlockId<<<1,4>>>(1);
输出
BlockId : 0
BlockId : 0
BlockId : 0
BlockId : 0

希望的输出是
BlockId : 0
BlockId : 1
BlockId : 2
BlockId : 3

上面的程序如何修改呢?

LZ您好,您的输出是忠诚于您的代码的。

因为您invoke kernel时给的参数是<<<1,4>>>,这表示您安排了一个block,里面有4个threads。
所以这4个threads都隶属于block 0,所以是如此的输出。

如果您需要设定4个blocks,那么简单地<<<4,1>>>表示4个blocks,每个block里面1个thread。
但是此时并不保证输出顺序是0~3,一般是乱序的。

大致如此,供您参考,祝您愉快~

谢谢您的回复

不客气的,欢迎您常来,我和其他版主十分乐意为您解答问题,祝您在论坛过的愉快~