为OpenCL中的单个操作强制执行舍入模式



假设我想在CUDA内核中对x除以y进行(单精度(除法,不管其他什么,都会得到一个四舍五入的结果(=四舍五舍五入到正无穷大(。这很容易:而不是:

float r = x / y;

我写:

float r = __fdiv_ru(x, y);

我可以对rn(舍入最近(、rd等做同样的操作

我如何在OpenCL中做同样的事情?

如果我查看数学函数的文档(OpenCL 3.0(,我只找到native_divide,并被告知:

内置数学函数不受调用环境中盛行的舍入模式的影响,并且始终返回与使用舍入到最接近的偶数舍入模式调用时相同的值。

所以,这不是办法。做什么我做什么?

根据这个页面,有一个扩展可以让我们做到这一点。

启用扩展后,这应该会起作用:

#pragma OPENCL SELECT_ROUNDING_MODE rtp
float r = x / y; 

(这里,"rtp"代表四舍五入到正无穷大=四舍五进。(

不幸的是,该扩展被否决了,我不确定我们是否可以"信任;这种方法。这显然也涉及到某种宏观伎俩。

相关内容

  • 没有找到相关文章

最新更新