lumanman_ 学生  2016年01月19日
指针数组作为cuda kernel函数的参数
我有一个程序,功能就是有一个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;
}
...全文
265 点赞 收藏 5
写回复
5 条回复

还没有回复,快来抢沙发~

发动态
发帖子
高性能计算
创建于2008-07-01

1867

社区成员

1018

社区内容

高性能计算
社区公告
暂无公告