各位大大,
我想问一下,CUDA里面,传进kernel里面的参数可以是double类型的吗?或者在CUDA里面产生的计算结果可以保存为double类型的吗?
最近写了一些代码,比如矩阵相乘,我同时用GPU和CPU计算两个相同矩阵相乘(矩阵式float的),区别是GPU里面是用float来计算和保存结果,而CPU上则是用double来保存计算结果。最后大概计算了一下误差,平均误差在 e-9 级别。
各位大大,
我想问一下,CUDA里面,传进kernel里面的参数可以是double类型的吗?或者在CUDA里面产生的计算结果可以保存为double类型的吗?
最近写了一些代码,比如矩阵相乘,我同时用GPU和CPU计算两个相同矩阵相乘(矩阵式float的),区别是GPU里面是用float来计算和保存结果,而CPU上则是用double来保存计算结果。最后大概计算了一下误差,平均误差在 e-9 级别。
楼主您好,可以使用double,
前提是您至少需要一张计算能力1.3的卡。
以及,请用compute_13,sm_13或者更高代码生成配置以便成功启用double.
(例如:compute_30,sm_30之类,请根据您卡的实际计算能力写入)
感谢来访。
LZ您好:
1:CUDA是支持使用double类型计算的。这需要1.3或者更高的计算能力,推荐使用2.0及以上的计算能力的GPU以获得更好的精度。
2:您这样一边用double,一边用float,最终比较结果差别并不是十分合适。以及即便两边的精度选取是一致的,因为浮点数计算的固有因素,CPU和GPU的结果也可能不相同。
大致如此,祝您编码顺利~
多谢大大指教!OTZ