快速整型到浮点转换

tom*_*sch 2 c++ floating-point integer cuda type-conversion

我正在使用floats 在 Cuda 中进行计算。由于 GPU 上没有足够的内存,因此我们将原始数据存储在 GPU 上uint16_tint16_t因此,在使用这些数据之前,我必须将其转换为floats。s的数量int并没有那么大(大约 12kuint16_t和 相同数量int16_t)。分析显示,转换数字需要相当长的时间(大约 5-10%)。其余的计算无法进一步优化。因此我的3+1问题是:

  • int将s 转换为s的最快方法是什么float
  • int16_t转换或.时是否有实质性差异uint16_t
  • int转换较大类型(例如int32或 )时是否存在实质性差异int64
  • 为什么 SO 上的所有问题都是关于将floats 转换为ints. 这是人们通常不会做的事情吗?

πάν*_*ῥεῖ 6

  • 将整数转换为浮点数的最快方法是什么。

简单的作业。CUDA 编译器会自动发出硬件类型转换指令,而无需您执行任何操作。硬件转换包括正确的 IEEE 舍入模式。

  • int16_t转换或.时是否有实质性差异uint16_t

不。

  • int32转换较大的 int 类型(例如或 )时是否存在实质性差异int64

不,是的。记录了类型转换指令的指令吞吐量。32 位和 16 位整数到浮点转换指令具有相同的吞吐量。在大多数体系结构上,64 位转换指令比 16 和 32 位转换指令慢得多。

  • 为什么所有关于将浮点数转换为整数的问题都是如此。这是人们通常不会做的事情吗?

因为许多人在将or类型转换为类型时不明白float和类型之间的区别,以及为什么会失去精度。 在您的情况下,您无需担心这一点。intfloatdoubleint