有大量数据等待在CUDA设备上使用机器学习算法进行处理。但是我对设备的内存有一些担忧,因此我尝试使用浮点数而不是双数(我想这是一个很好的解决方案,除非有人表示更好)。有没有办法保持浮点数得到的结果的双精度?我猜不会。即使这是一个有点愚蠢的问题。那么在设备上处理大数据实例的另一种正确方法是什么呢?
答案 0 :(得分:2)
不,如果您将数据处理为double
,则无法在结果中保持float
精度。将其处理为double
。如果内存大小有问题,通常的方法是以块的形式处理数据。将块复制到GPU,启动GPU处理,并在处理过程中,将更多数据复制到GPU,然后复制一些结果。这是处理GPU内存大小“不适合”的问题的标准方法。
这称为复制和计算的重叠,您使用CUDA流来完成此任务。 CUDA样本(例如simple multi-copy and compute)有各种代码,用于演示如何使用流。
答案 1 :(得分:1)
您确实可以从浮点数据计算双精度结果。在计算的任何时候,您都可以将浮点值转换为double值,并根据standard C type promotion rules从那里开始,所有使用此值的计算都将是双精度。
只要您使用双精度变量来存储结果并且不将其强制转换为任何其他类型,这都适用。注意函数调用中的隐式转换。