Floating point 在Nvidia Tesla K20c上使用torch.float32而不是torch.float64是否有好处(在计算时间方面)?

Floating point 在Nvidia Tesla K20c上使用torch.float32而不是torch.float64是否有好处(在计算时间方面)?,floating-point,cuda,precision,nvidia,tesla,Floating Point,Cuda,Precision,Nvidia,Tesla,我在某个地方读到“除非你有特斯拉卡,否则float64比GeForce、Quadro和Titan卡上的float32慢32倍(自2014年以来,Maxwell和Pascal都是如此)。” 所以我想知道,在特斯拉gpu上,float32的计算速度会比float64快,还是性能保持不变。我对两个向量相乘所花费的时间特别感兴趣 当然,float32比float64占用的内存更少。但对于我的应用程序来说,内存不是问题 所以我想知道,在特斯拉GPU上,float32的计算速度会比float64快,还是性能

我在某个地方读到“除非你有特斯拉卡,否则float64比GeForce、Quadro和Titan卡上的float32慢32倍(自2014年以来,Maxwell和Pascal都是如此)。”

所以我想知道,在特斯拉gpu上,float32的计算速度会比float64快,还是性能保持不变。我对两个向量相乘所花费的时间特别感兴趣

当然,float32比float64占用的内存更少。但对于我的应用程序来说,内存不是问题

所以我想知道,在特斯拉GPU上,float32的计算速度会比float64快,还是性能保持不变

32位浮点在所有NVIDIA GPU上具有更高的理论最大吞吐量。K20c是一个具有计算能力的3.5 GPU,您可以看到,与float64相比,float32每个时钟每SM的最大FMAD指令吞吐量是float64的三倍。其他指令可能有更大的性能差异

我对两个向量相乘所需的时间特别感兴趣

这将是特定于实现的,可能取决于Pytorch内部的工作方式。这与CUDA没有直接关系

当然,float32比float64占用的内存更少。但对于我的应用程序来说,内存不是问题

但内存带宽可能是,float64的峰值内存吞吐量是float32的一半。64位类型还可能引入双向共享内存带冲突,其中32位类型没有

所以我想知道,在特斯拉GPU上,float32的计算速度会比float64快,还是性能保持不变

32位浮点在所有NVIDIA GPU上具有更高的理论最大吞吐量。K20c是一个具有计算能力的3.5 GPU,您可以看到,与float64相比,float32每个时钟每SM的最大FMAD指令吞吐量是float64的三倍。其他指令可能有更大的性能差异

我对两个向量相乘所需的时间特别感兴趣

这将是特定于实现的,可能取决于Pytorch内部的工作方式。这与CUDA没有直接关系

当然,float32比float64占用的内存更少。但对于我的应用程序来说,内存不是问题


但内存带宽可能是,float64的峰值内存吞吐量是float32的一半。64位类型还可能导致双向共享内存带冲突,其中32位类型没有。一般来说,fp32计算速度仍将高于fp64,即使在通常具有比消费品Geforce系列更高fp64性能的特斯拉产品上也是如此(T4是一个例外,它是专门针对fp32工作负载而设计的)。区别在于特斯拉卡通常有更多的fp64“核心”,用于这种类型的计算,而对于消费品而言,fp32精度足够,因此数量要少得多(或没有)fp64核。一般来说,fp32计算仍将比fp64快,即使在通常具有比消费品Geforce系列更高的fp64性能的特斯拉产品上(T4是一个例外,它是专门针对fp32工作负载而设计的)。差异源于特斯拉卡通常具有更多的fp64“核”这是为这种类型的计算而设计的,而对于消费品,fp32精度足够,因此数量要少得多(或没有)fp64核。两个向量的乘法是内存带宽限制操作。使用fp32向量比使用相同长度的fp64向量需要更少的带宽,因此使用fp32向量而不是fp64向量通常对性能有利。两个向量的乘法是内存带宽限制操作。使用fp32矢量比使用相同长度的fp64矢量需要更少的带宽,因此使用fp32矢量而不是fp64矢量通常对性能有利。