cudamalloc 分配出错 cudamalloc一次最多分配多少?

weitherd 2014-12-22 05:06:31

short IF(const short a[],const short m_lumaFilter[],short Val[],char Out[]) //m_lumaFilter为滤波器系数
{
short *d_a,*d_c,*d_b,*d_d,*d_e;

cudaError_t cudaStatus;

short asize=Expix*sizeof(short);//待插值大小 104481*2
short m_lumaFiltersize=31*sizeof(short);//滤波器大小
short csize= Nu_IF_Hor*sizeof(short);//水平插值后大小 411008*2
short Valsize=Nu_IF_Ver*sizeof(short);//垂直插值后大小 1597440*2

cudaMalloc((void **)&d_a,asize);

cudaStatus = cudaMalloc((void **)&d_b,m_lumaFiltersize);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudamalloc d_b failed!");
return 1;
}

cudaStatus =cudaMalloc((void **)&d_c,csize); //fail here!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudamalloc d_c failed!");
return 1;
}

cudaStatus =cudaMalloc((void **)&d_d,Valsize);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudamalloc d_d failed!");
return 1;
}



cudaStatus =cudaMalloc((void **)&d_e,Valsize);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudamalloc d_e failed!");
return 1;
}


问题来了,不论是d_c,d_d.d_e,哪一个放前面哪一个出错。而前面的d_a,和m_lumaFiltersize就正常。后面的cudamalloc改为asize也不报错。就是csize和valsize报错。按道理不会啊,devicequery运行结果显示显卡显存512M,应该还是充足的。
cudamalloc一次最多能分配多少呢?



救命啊
...全文
1062 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
YCMyTot 2014-12-25
  • 打赏
  • 举报
回复
https://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=6448 这个帖子你看一下,是否对你有帮助、
YCMyTot 2014-12-24
  • 打赏
  • 举报
回复
引用 2 楼 weitherd 的回复:
[quote=引用 1 楼 u014693181 的回复:] 我在想是不是这里: short asize=Expix*sizeof(short);//待插值大小 104481*2 short m_lumaFiltersize=31*sizeof(short);//滤波器大小 short csize= Nu_IF_Hor*sizeof(short);//水平插值后大小 411008*2 short Valsize=Nu_IF_Ver*sizeof(short);//垂直插值后大小 1597440*2 short int 能够表示的范围:-32767 ~ +32768 , 貌似越界了。 建议使用 size_t 类型。
把*sizeof(short)放到cudamalloc里面就又对了,理解不能。为啥放这里就是错,放cudamalloc里面就是对。 [/quote] 你试一下 使用 size_t 类型去定义 字节数。 其他的 就不晓得了!
weitherd 2014-12-24
  • 打赏
  • 举报
回复
引用 1 楼 u014693181 的回复:
我在想是不是这里: short asize=Expix*sizeof(short);//待插值大小 104481*2 short m_lumaFiltersize=31*sizeof(short);//滤波器大小 short csize= Nu_IF_Hor*sizeof(short);//水平插值后大小 411008*2 short Valsize=Nu_IF_Ver*sizeof(short);//垂直插值后大小 1597440*2 short int 能够表示的范围:-32767 ~ +32768 , 貌似越界了。 建议使用 size_t 类型。
把*sizeof(short)放到cudamalloc里面就又对了,理解不能。为啥放这里就是错,放cudamalloc里面就是对。
YCMyTot 2014-12-23
  • 打赏
  • 举报
回复
我在想是不是这里: short asize=Expix*sizeof(short);//待插值大小 104481*2 short m_lumaFiltersize=31*sizeof(short);//滤波器大小 short csize= Nu_IF_Hor*sizeof(short);//水平插值后大小 411008*2 short Valsize=Nu_IF_Ver*sizeof(short);//垂直插值后大小 1597440*2 short int 能够表示的范围:-32767 ~ +32768 , 貌似越界了。 建议使用 size_t 类型。

581

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧