我已经编写了一个CUDA程序来对大型数组进行一些操作。但是,当我将该数组传递给CUDA内核时,线程并没有访问它的所有元素。下面是一个简单的程序,说明我的用例:
我已经尝试了不同的
如果
#include <stdio.h>
#include <stdlib.h>
__global__
void kernel(int n){
int s = threadIdx.x + blockIdx.x*blockDim.x;
int t = blockDim.x*gridDim.x;
for(int i=s;i<n;i+=t){
printf("%d\n",i); //printing index of array which is being accessed
}
}
int main(void){
int i,n = 10000; //array_size
int blockSize = 64;
int numBlocks = (n + blockSize - 1) / blockSize;
kernel<<<numBlocks, blockSize>>>(n);
cudaDeviceSynchronize();
}
我已经尝试了不同的
blockSize = 256、128、64等
,但它没有打印出数组的所有索引。理想情况下,它应该打印任何0到n-1
的排列,但它只打印少于(<n)
的数字。如果
numBlocks
和blockSize
都为1,则它将访问所有元素。如果数组大小小于4096,则也会访问所有元素。
cat 文件名 | wc -l
命令。 - kayush206