比如类似如下:
extern host device cudart_builtin float __cdecl atan2(float, float);
我看编译后代码很复杂,感觉上是软件算的,但为什么是builtin的?
楼主您好!
(1)atan2不是单独GPU硬件指令计算的。
(2)为何__cudart_builtin__, 这个修饰是给编译器看的,请楼主无视或者简单的理解为在kernel中调用时,会被编译器展开为一些内定的代码模板序列等。
(3)SFU集成的硬件完成的操作一般只有: cos, sin, ex2, lg2, rcp, rsq, rcp64h, rsq64h。其他的操作(例如楼主的atan2),一般均展开为软件代码序列。(以及,需要较高精度的时候,也会对硬件的结果进行进一步处理或者预处理或者完全软件展开)。