我在OpenCL中实现了一些并行BLAS例程。为了检查内核是否正确,我也以一种天真的方式实现了相同的例程。在执行内核之后,我将内核结果与朴素实现的结果进行比较。检查并行BLAS例程的结果
据我所知,我无法将float
的值与==
进行比较。因此,我计算两个floats
的绝对差异并检查它是否超出限制。我已阅读this article,其中描述了其他几种比较floats
的方法。然而,我的问题是,我不确定用于比较floats
的限制。在我的情况下,极限似乎高度依赖于BLAS例程和输入大小。
例如,我实现了asum
,它计算了浮点值向量的绝对和。对于大小为16 777 216的输入向量,天真实现和我的并行实现之间的差异是96!对于1 048 576的输入大小,差异仅为0.5。我相当肯定我的内核是正确的,因为我手动检查了小输入大小的结果。我猜测由于大的输入矢量,差异会累积。
我的问题是,有没有一种方法可以计算最大的差异,可以源自float
不准确?有没有办法知道由于内核代码中的错误而导致差异何时确定?
预期偏差取决于输入的大小,因此没有单个常量限制,您可以使用 – harold
我知道确切的输入大小,因为我只想检查一些正确性。 –
没有严格的规定? –