我正在使用CUDA编写一个大规模并行GPU应用程序。我一直在手工优化它。我使用__fdividef_(x, y)
获得了20%的性能提升,并且根据 Cuda C编程指南(第C.2.1节),使用类似的乘法和加法函数也是有益的。
该功能如下:__fmul_[rn,rz,ru,rd](x,y)
。
__fdividef(x,y)
。我在想,那些括号是什么?
如果我运行简单代码:
int t = __fmul_(5,4);
我收到有关如何__fmul_
未定义的编译器错误。我有CUDA运行时,所以我不认为它是一个设置的东西;而这与方括号有关。我该如何正确使用此功能?谢谢。
编辑:我应该澄清,编译器是CUDA编译器NVCC。
答案 0 :(得分:3)
您应该使用ru
(向上舍入)或rd
(向下舍入)指定舍入模式。没有功能__fmul_
,但可用的功能签名为__fmul_rd
或__fmul_ru
。
答案 1 :(得分:0)
CUDA Programming Guide解释了后缀:
_rd
:向下舍入。_rn
:舍入到最近的偶数。_ru
:围捕。_rz
:向零舍去。有关这些功能的详细信息,请参阅CUDA's Single Precision Intrinsics documentation。