社区
CUDA
帖子详情
CUDA计算精度问题
程序峰峰
2018-06-24 10:32:21
为什么程序用CUDA并行计算得到的结果和在CPU上得到的结果有一定的差异(虽然不大),而且多次调用核函数后用CUDA得到的结果是一堆0,求大佬们指点
...全文
1203
9
打赏
收藏
CUDA计算精度问题
为什么程序用CUDA并行计算得到的结果和在CPU上得到的结果有一定的差异(虽然不大),而且多次调用核函数后用CUDA得到的结果是一堆0,求大佬们指点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
YCMyTot
2018-07-05
打赏
举报
回复
寄存器或者共享内存不够用,试下多卡+openmp?
程序峰峰
2018-06-29
打赏
举报
回复
谢谢各位大佬,问题解决了,原因是核函数里面直接定义了一个大数组,导致寄存器不够用,我把数组定义为设备的全局变量就可以了,而且误差就没了。。但是计算速度受到了影响。请问如果寄存器不够用(共享内存也不够用)的话,有没有好的处理方法? CUDA新手,求大佬们指导
xinxin0998
2018-06-28
打赏
举报
回复
在申请内存的时候要注意根据类型大小申请,例如sizeof(int)*N,sizeof(float)*N或者sizeof(double)*N,一定要和你使用的类型一一对应,在核函数中进行引用的时候,如果传入的指针类型是float,那就按照1个float数来计算地址偏移,如果传入的类型是void*或者char*,要按照4个字节数计算偏移
xinxin0998
2018-06-28
打赏
举报
回复
看看是否存在地址超出范围的情况
ywx20170810
2018-06-27
打赏
举报
回复
差异肯定会有点,一般都自动四舍五入了
程序峰峰
2018-06-27
打赏
举报
回复
改成double还是有差异 然后我发现增大传入到GPU的数据大小后,核函数就不执行了,导致数据全是0,必须减小导入到GPU里的数据大小才能正常运行,这是什么原因呀,我导入的数据大小还不到10M,但是显存是4G(程序在linux里跑的)
YCMyTot
2018-06-26
打赏
举报
回复
试下double?
任意维度的
CUDA
矩阵相乘
CUDA
矩阵相乘A*B=C代码,任意输入矩阵A的宽度和矩阵B的宽度(A[wB][wA]*B[wA][wB]),
cuda
MallocPitch开辟显存空间,
cuda
Memcpy2D数组复制,Kahan's Summation Formula提高浮点
计算精度
。
CUDA
编程 float计算速度更快以及解决float精度
问题
方法
在使用
CUDA
并行编程设计radon变换函数时,由于我的GPU计算能力仅有3.5,没办法使用双精度double的原子操作,于是用float代替全部的double,结果发现计算速度提高了一倍(如果用double的话,在release下是450ms,使用float,仅需要225ms),感觉可能GPU计算float的速度比double要快(个人感觉,还没被验证) 如果使用官方提供的利用atomicCA...
FFmpeg系列之35:FFmpeg+
CUDA
硬件加速原理与案例
FFmpeg+
CUDA
硬件加速原理与案例实战FFmpeg系列之35FFmpeg第2季编解码专题之5:FFmpeg+
CUDA
硬件加速原理与案例实战本课程主要讲解的知识点包括:GPU高性能编程
CUDA
入门、
CUDA
编程模型的原理解析、
CUDA
编程小白案例入门实战、
CUDA
官方经典案例实战与解析、FFmpeg+CUVID硬件加速原理与命令行、Qt+FFmpeg实现
cuda
硬解码加速代码实战等。---------------------------------------------------------------目前FFmpeg第二季【编解码专题】,主要包括以下课程:FFmpeg4.3系列之31:图像格式与压缩FFmpeg4.3系列之32:MPEG-1/2视频编解码FFmpeg4.3系列之33:H.264/H.265视频编码FFmpeg4.3系列之34:FFmpeg+DXVA2+D3D硬件加速FFmpeg4.3系列之35:FFmpeg+
CUDA
硬件加速
CUDA
并行计算对精度的影响
并行归约(Parallel Reduction): 在并行计算中,例如在进行归约操作时,如果不小心处理浮点数相加可能导致累积误差。在一些科学计算应用中,数值精度是非常关键的,因此在选择并行算法和优化技术时需要仔细考虑。在这个简单的向量相加的
CUDA
内核中,如果输入数组 a 和 b 中包含极小或极大的浮点数,那么在并行计算中可能会由于浮点数舍入误差而引入一些微小的差异。数据依赖性: 并行计算中,如果存在数据依赖性,即某个计算的结果依赖于其他计算的结果,可能会导致数值不稳定性。虽然这在串行计算中也存在,但。
CUDA
编程:GPU float 与 double 精度
问题
本人在开发项目时,遇到这个非法访问内存的错误: Check failed: error ==
cuda
Success (77 vs. 0) an illegal memory access was encountered 检查了很长时间代码,也没检查出错误,最后通过逐步输出中间结果进行调试,发现某些变量被GPU计算错了,而导致这个错误的原因就是:float 精度不够,索引是根据中间计算而来,当误差特别大时,会导致内存索引所以变得非常大,而导致非法访问内存的错误。 我在代码中使用了float类型,而在 GPU
CUDA
580
社区成员
2,919
社区内容
发帖
与我相关
我的任务
CUDA
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
复制链接
扫一扫
分享
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章