指针数组作为cuda kernel函数的参数

lumanman_ lumanman_ 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有一个程序,功能就是有一个3页的数据,高为Height,宽为Width,然后我一个block中的线程数为Height*Width,一维的,(这只是测试,用的Height和Width比较小,所以就这样分配吧),grid也是一维,大小是3,kernel函数的功能就是每个线程输出自己的blockIdx.x,threadIdx.x和所要处理的数据data。因为我在别的程序中必须要用到指针数组做函数新参数,所以这个程序只是对指针数组做函数参数做一个测试,没有什么实际的作用。可是一直不对,核函数不会有任何输出,所有线程好像都没有执行,实在不知道咋弄了,求各位帮帮忙!

#include<stdio.h>
#include<cuda_runtime.h>
#define Height 3
#define Width 5

__global__ void printf_kernel(int **dev_ptr)
{
if(blockIdx.x < 3)
{
//printf("(%d,%d)\n",blockIdx.x,threadIdx.x);

int pos=threadIdx.x;

int *pptr=*(dev_ptr+blockIdx.x);

int data=pptr[pos];

printf("(%d,%d): %d\n",blockIdx.x,threadIdx.x,data);

}
}


int main()
{
int a[3*Height*Width];
int i,j,k;
for(k=0;k<3;k++)
{
for(i=0;i<Height;i++)
{
for(j=0;j<Width;j++)
{
a[k*Width*Height+i*Width+j]=k+i+j;
printf("%d ",a[k*Height*Width+i*Width+j]);
}
printf("\n");
}
printf("\n");
printf("\n");
}

int *dev_ptr[3];
for(i=0;i<3;i++)
{
cudaMalloc((void**)&dev_ptr[i],sizeof(int)*Width*Height);

cudaMemcpy(dev_ptr[i],a+i*Width*Height,sizeof(int)*Width*Height,cudaMemcpyHostToDevice);
}


dim3 block(Height*Width);
dim3 grid(3);

printf_kernel<<<grid,block>>>(dev_ptr);

cudaDeviceSynchronize();

return 0;
}
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
lumanman_
高性能计算 2,409 成员 1,025 内容