我正在尝试通过生成一系列 FMA 指令来运行性能测试。但是,我似乎无法让 CC 2.0 和 CC 3.0 编译器生成 FMA 指令。
如果我编译:
for (float x = 0; x < loop; x++) {
a += x * loop;
a += x * loop;
... (6 more repetitions)
}
哪里loop
也是一个浮点数,我得到以下每一行a += x * loop;
:
计算_10,sm_10:
a += x * loop;
0x0001ffa0 [0103] mov.f32 %f11, %f2;
0x0001ffa0 MOV R3, R2;
0x0001ffa8 [0104] ld.param.f32 %f12, [__cudaparm__Z6kernelPfifS__loop];
0x0001ffa8 MOV32I R2, 0x28;
0x0001ffb0 LDC R2, c[0x0][R2];
0x0001ffb8 [0105] mov.f32 %f13, %f4;
0x0001ffb8 MOV R0, R0;
0x0001ffc0 [0106] mad.f32 %f14, %f12, %f13, %f11;
0x0001ffc0 FFMA.FTZ R2, R2, R0, R3;
0x0001ffc8 [0107] mov.f32 %f2, %f14;
0x0001ffc8 MOV R2, R2;
计算_30,sm_30:
a += x * loop;
0x00044688 [0101] mul.f32 %f14, %f30, %f7;
0x00044688 FMUL R5, R4, R0;
0x00044690 [0102] add.f32 %f15, %f13, %f14;
0x00044690 FADD R3, R3, R5;
也就是说,在为 CC 3.0 编译时,我得到的是 FMUL/FADD 指令而不是 FFMA。为 CC 1.0 编译时,我得到一条 FFMA 指令。
我也在带有 的 CC 2.0 编译器compute_20,sm_20
以及发布和调试版本上得到了这个结果。
我试图指定-use_fast_math
and --fmad=true
。我使用 CUDA 4.2 和 5.0 向导创建了项目,并且没有更改默认设置。
环境:
- Windows 7 64 位
- 视觉工作室 2010
- CUDA 4.2 + CUDA 5.0(5.0 安装在 4.2 之上)
- GPU:单GTX660
- Nsight 3.0 RC1
和
- Windows 7 64 位
- 视觉工作室 2010
- CUDA 4.2
- Nsight 2.2
- GPU:单GTX570