CUDA编程中从主机传递一个数组给设备

  • 1 replies
  • 566 views
*

sisiy

  • *****
  • 234
    • 查看个人资料
CUDA编程中从主机传递一个数组给设备
« 于: 二月 18, 2021, 04:55:16 pm »
CUDA编程中从主机传递一个数组给设备,当数组长度较小时结果正确,当数组长度较大时报非法内存访问。已经排除了GPU设备线程块不够和开辟数组的问题,还能是什么问题?

*

sisiy

  • *****
  • 234
    • 查看个人资料
Re: CUDA编程中从主机传递一个数组给设备
« 回复 #1 于: 二月 18, 2021, 04:58:01 pm »
答复:报非法内存访问是在Host上, 还是在Device上?前者如果是CPU端的缓冲区不够, 也会报Access Violation的(0xc0000005)
如果是在device上,那是后续的kernel挂了。他在cudaMemcpy*()前后分别加上cudaError_t r = cudaDeviceSynchronize(); 然后看看,这样可以确定一点。(不看也行, cudaMemcpy*()给错设备指针/大小方面的参数会直接报告参数有问题之类的, 不会中途挂在device上), cuda-memcheck 他的程序 回车, 这种方式检测一下。
   需要强调的是:你执行cudaMemcpy*(), 和你的"GPU设备线程块数量", 这有毛关系? 你确定报错是在传输该数组的时候吗?