OpenCL native_ Functions有什么作用?

ben*_*ope 3 opencl

我不明白OpenCL native_前缀函数的原因.文件说:

具有native_前缀的函数可以映射到一个或多个本机设备指令,并且与相应的函数(没有native__前缀)相比通常具有更好的性能.这些函数的准确性(在某些情况下是输入范围)是实现定义的.

好吧,所以我觉得这些native_功能可能会稍快一点,而且准确性稍差.还有其他优点和缺点吗?在什么用例中我可能想要使用类似log()对手native_log()

如果这是一个愚蠢的问题,请道歉.我想确保掌握native_功能存在的根本原因.

小智 6

如果要发布在所有可能设备上使用的软件,则应使用常规功能,因为您永远不会知道对native_function的期望.或者,您可以进行一项简单的测试,检查是否要使用native_,例如计算感兴趣范围内的一堆值,看看它们是否足够接近.

native_function最重要的部分是它们的精度完全是实现定义的.这很重要,因为OpenCL数值精度规范的某些部分是相当愚蠢的.作为一个例子,规范要求sin具有相对4 ULP的精度,这对于振荡函数非常有趣,并且当输入ULP值变高时使得实现非常困难.

在实践中,native_实现通常与您对设备的期望非常相似.在GPU上,native_function通常是DirectX规范中定义的.有些人甚至有更好的实施.作为AMD硬件的一个例子,与正常罪相比,native_sin函数非常快,根据我的经验,它具有输入值为1 ULP的绝对误差.在Intel集成GPU上,native_sin非常不精确,但仍然在DirectX规范中.

native_function在规范中的原因是允许不关心OpenCL规范所要求的极高精度的用户使用性能更好的东西.

tl; dr:如果你可以使用native_函数来做,因为它们通常比普通函数快得多.