CUDA 快速数学
如 快速数学 中所述,对于某些使用浮点数的应用程序类别,严格遵守 IEEE-754 标准并不是必需的。对于这一类应用程序,可能会实现性能提升。
CUDA 目标通过两种差异实现了 快速数学 行为。
首先,
@jit 装饰器
的fastmath
参数仅限于True
和False
值。当为True
时,将启用以下优化:将非正规数刷新为零。
使用平方根函数的快速近似。
使用快速近似除法操作。
将乘法和加法操作合并为单一的融合乘加操作。
有关这些优化的更多详情,请参阅 nvvmCompileProgram 的文档。
其次,对
float32
操作数调用数学模块函数子集时,将使用 libdevice 库中的快速近似实现来实现。math.cos()
: 使用 __nv_fast_cosf 实现。math.sin()
: 使用 __nv_fast_sinf 实现。math.tan()
: 使用 __nv_fast_tanf 实现。math.exp()
: 使用 __nv_fast_expf 实现。math.log2()
: 使用 __nv_fast_log2f 实现。math.log10()
: 使用 __nv_fast_log10f 实现。math.log()
: 使用 __nv_fast_logf 实现。math.pow()
: 使用 __nv_fast_powf 实现。