提问人:tommsch 提问时间:2/7/2021 更新时间:2/7/2021 访问量:1576
快速 int 到 float 转换
Fast int to float conversion
问:
我正在使用 s 在 Cuda 中进行计算。由于 GPU 上没有足够的内存,因此我们将原始数据存储在 GPU 上。因此,在使用此数据之前,我必须将其转换为 s。
s 的数量不是那么大(大约 12k 和 相同的数量)。分析表明,转换数字需要相当长的时间(约5-10%)。其余的计算不能再优化了。
因此,我的 3+1 问题是:float
uint16_t
int16_t
float
int
uint16_t
int16_t
- 将 s 转换为 s 的最快方法是什么?
int
float
- 转换时是否有实质性差异或 .
int16_t
uint16_t
- 转换较大的类型时是否有实质性差异,例如 或。
int
int32
int64
- 为什么 SO 上的所有问题都是关于将
浮点数
s 转换为int
s 的。这是人们通常不会做的事情吗?
答:
6赞
πάντα ῥεῖ
2/7/2021
#1
- 将整数转换为浮点数的最快方法是什么。
简单的分配。有一些硬件类型转换指令,CUDA 编译器会自动发出这些指令,而无需您执行任何操作。硬件转换包括正确的IEEE舍入模式。
- 转换时是否有实质性差异或 .
int16_t
uint16_t
不。
- 转换较大的 int 类型时是否有实质性差异,例如 或。
int32
int64
不。是的。记录了类型转换指令的指令吞吐量。32 位和 16 位整数到浮点转换指令具有相同的吞吐量。在大多数架构上,64 位转换指令比 16 位和 32 位转换指令慢得多。
- 为什么 SO 上的所有问题都是关于将浮点数转换为整数的。这是人们通常不会做的事情吗?
因为许多人在将 or 类型转换为类型时不明白 和 类型之间的区别,以及为什么它们会失去精度。
在你的情况下,这没有什么需要担心的。float
int
float
double
int
上一个:如何确保不使用变量
下一个:生成无幂矩阵的数值算法
评论
int16_t x =...; float f = float(x);
while