【问题标题】:floor-then-convert_int vs convert_int_rtn - equivalent in OpenCL?floor-then-convert_int vs convert_int_rtn - OpenCL 中的等价物?
【发布时间】:2020-09-08 07:43:28
【问题描述】:

在 OpenCL 中,是:

convert_int(floor(my_float))

完全等价于

convert_int_rtn(my_float)

语义上?我会更喜欢前一个命令而不是后者吗?

如果您的回答取决于我选择了int,请尝试将其推广到任意整数类型T

注意事项:

  • OpenCL 1.2 documentation for convert_T
  • _rtn 表示“舍入到负无穷大”。

【问题讨论】:

  • 谈到浮点,而不是 OpenCL 规范,floor(−¼) 是 -1,因此将其转换为带有截断或舍入到最近的整数将产生与转换不同的结果 (-1) −¼ (0)。您可能需要trunc 而不是floor。然后,正确的trunc 实现没有错误,因为它只是删除(更改为零)浮点表示中的数字。如果OpenCL 到整数的转换被截断,那么该转换具有与浮点截断然后转换相同的效果。对于四舍五入到最近的转换,先截断是行不通的。
  • @EricPostpischil: _rtn 舍入到负无穷大。
  • 好的,那么建议的操作都是一样的,就浮点语义而言,

标签: floating-point type-conversion opencl


【解决方案1】:

取整后的取整运算结果与向 -∞ 舍入的整数转换所产生的结果相同。

整数范围内数字的证明:

  • 如果 x 为正数,则其下限仅可通过将浮点表示中的 base-b 数字归零来表示,其中 b 是表示中使用的基数。

  • 如果 x 为负数,则其下限在表示中具有相同的底数 b 指数 e 或更大。如果相同,则该下限是可表示的,因为其表示所需的位是 x 的有效位的子集。它更大,地板是可表示的,因为它正好是-be+1。 (这里我们假设它不四舍五入到 -∞,这对于具有异常小的指数范围和/或异常宽的有效位的浮点格式是可能的。)

  • 如果 x 的下限可以以目标整数格式表示,则将其转换为整数会生成它(使用任何舍入模式进行转换,因为不会进行舍入)。同样,将 x 转换为整数并舍入为 -∞ 将产生相同的值,即 x 的下限。

如果 x 的下限不可表示,则两次转换为整数是否产生相同的结果可能取决于它们的溢出规范。

【讨论】:

  • 我意识到这些操作是理论上等效的。问题是他们的 OpenCL 语义是否符合这一事实……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
相关资源
最近更新 更多