Macos OpenCL:sincos vs native_cos和native_sin

Macos OpenCL:sincos vs native_cos和native_sin,macos,opencl,gpgpu,trigonometry,Macos,Opencl,Gpgpu,Trigonometry,我知道这个问题的答案取决于具体的OpenCL实现和硬件,但我需要在Mac应用程序中使用的sincos和native\u cos之间进行选择 预计哪个更快?您可以添加一个测试超越函数所有版本的迷你基准测试,并根据基准测试结果相应地更改内核字符串(例如,将native_前置为cos)。这需要基于事件的分析,并且适合于可移植性。然后,每N次迭代一次,它可以重新调整基准,如果上一个基准有任何错误,则会有相应的微小变化 您甚至可以对一系列函数的排列进行基准测试(例如,在第一个函数中使用本机,但在第二个函数

我知道这个问题的答案取决于具体的OpenCL实现和硬件,但我需要在Mac应用程序中使用的
sincos
native\u cos
之间进行选择


预计哪个更快?

您可以添加一个测试超越函数所有版本的迷你基准测试,并根据基准测试结果相应地更改内核字符串(例如,将
native_
前置为
cos
)。这需要基于事件的分析,并且适合于可移植性。然后,每N次迭代一次,它可以重新调整基准,如果上一个基准有任何错误,则会有相应的微小变化


您甚至可以对一系列函数的排列进行基准测试(例如,在第一个函数中使用本机,但在第二个函数中使用非本机,在第一个版本中在第三个函数中使用本机,然后在其他5个版本中使用备用本机,对所有函数进行基准测试)在功能顺序很重要的管道体系结构上更好地适应代码。

本地的总是更快。它们将1:1映射到HW指令,通常对于GPU,这是cos/sin顶点指令。精度由实现定义。正常的SINCO将具有更高的精度,以速度为代价(取决于系统),只需进行一次小的修正,我的2美分价值:本机函数不必将1:1映射到硬件指令(参见OpenCL 1.2标准的第250页)。根据实现的不同,它们映射到的指令可能比非本机版本少,因此速度会快一些。这还取决于输入值的范围。例如,Nvidia的sin、cos和sincos实现对于低于某个值的输入具有快速路径,对于高于该值的输入具有慢速路径。因此,使用本机函数时的速度增益可能取决于您的输入值。本机函数是否使用专用管道(数量少于加法器/乘法器)或使用硬件库调度中的所有管道来获得结果?