Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 快速整型到浮点型转换_C++_Floating Point_Cuda_Type Conversion_Integer - Fatal编程技术网

C++ 快速整型到浮点型转换

C++ 快速整型到浮点型转换,c++,floating-point,cuda,type-conversion,integer,C++,Floating Point,Cuda,Type Conversion,Integer,我正在使用浮点数在Cuda中进行计算。由于GPU上没有足够的内存,我们将原始数据存储为uint16和int16。因此,在使用此数据之前,我必须将其转换为浮点数。 整数的数量没有那么大,大约12k的uint16和相同数量的整数16。分析表明,转换数字需要相当长的时间,大约5-10%。计算的其余部分无法进一步优化。 因此,我的3+1问题是: 将整数转换为浮点数的最快方法是什么。 在转换int16或uint16时是否存在实质性差异。 在转换较大的int类型(例如int32或int64)时是否存在实质性

我正在使用浮点数在Cuda中进行计算。由于GPU上没有足够的内存,我们将原始数据存储为uint16和int16。因此,在使用此数据之前,我必须将其转换为浮点数。 整数的数量没有那么大,大约12k的uint16和相同数量的整数16。分析表明,转换数字需要相当长的时间,大约5-10%。计算的其余部分无法进一步优化。 因此,我的3+1问题是:

将整数转换为浮点数的最快方法是什么。 在转换int16或uint16时是否存在实质性差异。 在转换较大的int类型(例如int32或int64)时是否存在实质性差异。 为什么所有关于将浮点数转换为整数的问题都是这样。这是人们通常不做的事情吗? 将整数转换为浮点数的最快方法是什么。 简单的作业。CUDA编译器会自动发出一些硬件,而无需您执行任何操作。硬件转换包括正确的IEEE舍入模式

在转换int16或uint16时是否存在实质性差异。 没有

在转换较大的int类型(例如int32或int64)时是否存在实质性差异。 不,是的。类型转换指令的指令吞吐量为。32位和16位整数到浮点转换指令具有相同的吞吐量。在大多数体系结构上,64位转换指令比16位和32位转换指令慢得多

为什么所有关于将浮点数转换为整数的问题都是这样。这是人们通常不做的事情吗? 因为很多人在将浮点型或双精度型转换为int型时,不了解浮点型和int型之间的区别,也不知道为什么会失去精度。
在你的情况下,这没什么好担心的。

你对convert的确切意思是什么?int16_t x=。。。;浮动f=浮动x@churill是的,没错。这种转换是发生在CUDA还是发生在CUDA/非CUDA边缘?我想是第一个。您现有的转换是什么样子的?剩下的计算是什么样子的,至少在伪代码中是这样的?您是否使用您生产的所有浮动?这些值的可分性如何?16位int到32位float应该是位移位;签名稍微复杂一点。与您的问题相关,16位整数将在很大程度上适合小数部分,但我担心用于确定所需移位的while循环将更慢…GPU编译器将发出用于简单转换的硬件指令。文档中指出,每个多处理器的吞吐量为每个时钟周期16或32条指令。在此基础上,我猜你们的微基准是错误的,你们认为转换成本是另外一回事