为什么CUDA浮动程序在全速FP64模式下变得更快?

Ash*_*ppa 10 double performance cuda gpu

我的CUDA程序只使用float,int,shortchar在它的计算类型.输入或输出数组都没有类型的成员double.并且double在计算过程中没有内核在其中创建任何类型.

该程序是使用NSight Eclipse在发布模式下使用CUDA SDK 5.5编译的.典型的编译行如下所示:

nvcc -O3 -gencode arch=compute_35,code=sm_35 -M -o "src/foo.d" "../src/foo.cu"
Run Code Online (Sandbox Code Playgroud)

我在Linux上的GTX Titan上运行这个程序.令我惊讶的是,当我在Titan上启用全速FP64模式时,我注意到该程序的运行速度提高了10%.这可以通过在NVIDIA X Server Settings程序中启用CUDA Double Precision选项来完成.

虽然我很高兴获得这个免费速度奖金,但我想了解为什么CUDA浮动程序在FP64模式下可以更快的原因?

Mar*_* A. 0

Titan 卡默认情况下对 FP64 实现进行“限制”,这主要是由于电源效率和时钟速度的原因。

NVIDIA 特意选择默认不启用此功能,而是让您通过将 FP64 设置为全速 (1/3 FP32) 或减速 (1/24 FP32) 来控制行为。

参考文献:http://www.anandtech.com/show/6760/nvidias-geforce-gtx-titan-part-1/4