[attach]3312[/attach]
我就是这么几行代码怎么会报错?有可能是哪里出现了问题?
应该是cudaMalloc 没有申请成功。
看下 cudaMalloc 的返回值是否为cudaSuccess.
可能是 imageSIze太大,超出了显卡内存大小
我的显卡内存是1G的,我处理的图像是1920x1080的YUV数据,怎么会超出了显卡内存大小那?我一共才开辟了两个类似的buffer。
cudaMemcpy 的返回成功了吗
也有可能是vx 的问题,你把m_dst_devicemem2 再memcpy到host ,输出看下是否有正确的值
返回成功了,我发现我这地方是有的时候指针有值,有的时候指针没有值,奇了怪了。
cudaMalloc返回cudasucess,cudaMemcpy返回一个很大的负数,出现错误。
这个错误解决不了,后面的没法继续啊,着急啊。
你没有对m_dst_devicemem2 进行赋值,当然是一个随机数了
cudaMalloc 返回sucess,说明m_dst_devicemem2分配空间成功。
可以这样测试:
unsigned char* m_dst_devicemem2 ;
cudaMalloc( m_dst_devicemem2 ,pDst->imageSize);
kernel<<<1,1>>>(m_dst_devicemem2 ,10); // 对m_dst_devicemem2 赋值
unsigned char p[10];
cudaMemcpy(p, m_dst_devicemem2, 10, cudaMemcpyDeviceToHost);
再看下 P 的值是否和kernel 中给m_dst_devicemem2的赋值一样。
楼主您好,济南暴风雨+雷电! 抱歉给您回复晚了。
楼主这不是一个编译错误,而是运行错误,甚至可能不是一个错误:
(1)如果您没有执行cudaMalloc,直接就将鼠标移动到了m_dst_devicemem2上试图查看他的值,然后您看到了0x00000000(NULL), 这个是有可能的。
(2)如果在执行过cudaMalloc后,才将鼠标移动过去的,那么此值显然表示您的内存分配失败了。
您应当检查下cudaMalloc的返回值的。
感谢来访。
我是运行完了cudaMalloc后才把鼠标移至m_dst_devicemem2的啊,cudaMalloc的返回值有时是cudasuccess,有时是错误的。怎么我分配个显存都报错那?怎么会出现时对时错的情况那?CUDA这么神奇?
ps:版主在济南啊?老乡啊,版主上班了还是上学?
LZ您好:
cudaMalloc()是成熟的API函数,一般仅在参数错误的时候才不成功,如果您有分配失败的情况,请您检查一下您使用的参数。
祝您好运~
试过了您的方法,第一次是正确的,第二次是错误的。很是奇怪啊.难道跟我前面C++代码有关?
这种错误跟我用cuda之前,也就是前面纯C++代码分配内存等操作有没有关系?怎么时对时错那?
LZ您好:
这个一般只和参数有关的,如果发生了连带性的错误,请您检查您前面的代码。在程序正确的前提下,cudaMalloc()应当不会受到其他代码的影响。
祝您好运~