指针数组作为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;
}
...全文
相关推荐
pytorch中使用cuda扩展的实现示例
主要介绍了pytorch中使用cuda扩展的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
CUDA cpp class texture demo
CUDA cpp class texture demo MD5:a740adf3cbdbd2dcf823a120a0eec9d7 cuda_cpp_class_texture_demo.rar
调试CUDA Kernel方法详解[源码]
本文详细介绍了调试CUDA Kernel并进入__device__函数的两种主要方法:使用Nsight VSCode Edition(图形化界面,推荐)和cuda-gdb(命令行)。首先强调调试需要安装NVIDIA驱动、CUDA Toolkit,并在编译时使用-G或-lineinfo标志生成调试信息。方法一详细说明了Nsight VSCode的配置步骤,包括创建launch.json、设置断点、使用Step Into/Over/Out控制执行流程,以及查看变量和调用堆栈。方法二介绍了cuda-gdb的命令行操作,包括设置断点、运行程序、切换线程和打印变量值。文章还提醒了硬件兼容性(需支持TCC模式或Compute Preemption)、性能影响(-G编译会降低速度)以及焦点线程概念。最后总结调试__device__函数的核心步骤:用-G编译、设置断点、使用Step Into命令。
CUDA任意维矩阵乘
仅需输入矩阵A的行高,列宽以及矩阵B的列宽即可实现矩阵乘的CUDA计算
多batchCUFFT.txt
多batchCUFFT.txt


高性能计算
