如何获得唯一标识符
如果block只有一维
blockDim.x表示block的总数,
blockIdx.x 表示当前是第几个block
#include<stdio.h>__global__ void cuda_hello(void){int bid = blockIdx.x;int tid = threadIdx.x;int idx = bid*blockDim.x+tid;printf("idx:[%d], bid:[%d], tid:[%d] Hello World from GPU!\n",idx,bid, tid);}int main(){int numOfBlocks = 5;int numOfThreads = 3;cuda_hello<<<numOfBlocks , numOfThreads>>>();cudaDeviceReset();return 0;}
#include<stdio.h>__global__ void narcissistic_and_four_leaf_rose_numbers_gpu(void){// ToDoint bid = blockIdx.x;int tid = threadIdx.x;int idx = bid*blockDim.x+tid;if (idx>=100&&idx<10000){int tho, hun, ten, ind,i;i = idx;tho = i/1000;hun = i/100;ten = (i-hun*100)/10;ind = i%10;if(tho>0){hun=(i-tho*1000)/100;ten=(i-tho*1000-hun*100)/10;ind=i%10;if(i==tho*tho*tho*tho + hun*hun*hun*hun + ten*ten*ten*ten + ind*ind*ind*ind){printf("%d ", i);}}else{if(i==hun*hun*hun + ten*ten*ten + ind*ind*ind){printf("%d ", i);}}}}void narcissistic_and_four_leaf_rose_numbers_cpu(int x1, int x2){int tho, hun, ten, ind;for(int i=x1; i<x2; i++){tho = i/1000;hun = i/100;ten = (i-hun*100)/10;ind = i%10;if(tho>0){hun=(i-tho*1000)/100;ten=(i-tho*1000-hun*100)/10;ind=i%10;if(i==tho*tho*tho*tho + hun*hun*hun*hun + ten*ten*ten*ten + ind*ind*ind*ind){printf("%d ", i);}}else{if(i==hun*hun*hun + ten*ten*ten + ind*ind*ind){printf("%d ", i);}}}}int main(){int numLowerBound = 100;int numUpperBound = 10000;printf("Narcissistic and four-leaf rose numbers from %d to %d (CPU version):\n", numLowerBound, numUpperBound);narcissistic_and_four_leaf_rose_numbers_cpu(numLowerBound, numUpperBound);printf("\nNarcissistic and four-leaf rose numbers from %d to %d (GPU version):\n", numLowerBound, numUpperBound);// ToDo (Tip: call the function narcissistic_and_four_leaf_rose_numbers_gpu)narcissistic_and_four_leaf_rose_numbers_gpu<<<10,1024>>>();cudaDeviceReset();return 0;}
