我如何使用编译器内在__fmul_?

时间:2012-06-16 21:11:32

标签: c compiler-construction cuda intrinsics

我正在使用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。

2 个答案:

答案 0 :(得分:3)

您应该使用ru(向上舍入)或rd(向下舍入)指定舍入模式。没有功能__fmul_,但可用的功能签名为__fmul_rd__fmul_ru

答案 1 :(得分:0)

CUDA Programming Guide解释了后缀:

  • _rd:向下舍入。
  • _rn:舍入到最近的偶数。
  • _ru:围捕。
  • _rz:向零舍去。

有关这些功能的详细信息,请参阅CUDA's Single Precision Intrinsics documentation