【问题标题】:Aparapi data typesAparapi 数据类型
【发布时间】:2016-04-21 20:43:17
【问题描述】:

我有关注code学习。

我的计算函数在 aparapi 上运行时会产生意想不到的结果。

我的代码或 aparapi 有什么问题吗?

结果是;

Result      Num         Expected
2026982348  406816880   40681688012
2026982516  406816881   40681688180
2026982594  406816882   40681688258
2026982662  406816883   40681688326
2026982830  406816884   40681688494
2026982898  406816885   40681688562
2026982966  406816886   40681688630
2026983044  406816887   40681688708
2026983212  406816888   40681688876
2026983280  406816889   40681688944
2026983338  406816890   40681689002
2026983506  406816891   40681689170
2026983584  406816892   40681689248
2026983652  406816893   40681689316
2026983820  406816894   40681689484
2026983888  406816895   40681689552
2026983956  406816896   40681689620
2026984134  406816897   40681689798
2026984202  406816898   40681689866
2026984270  406816899   40681689934

编辑:如果我设置 executionMode JTP 或 CPU,我会得到真实的结果(结果 == 预期),但在 GPU 模式下会出现问题。我在 Windows 10 上使用 2013 年末的 macbook pro Retina。

Edit2:我的计算方法的返回行导致问题。如果我返回Long.MAX_VALUE,它会起作用。但是(long) tc * 100(或((long) tc) * 100)不给(例如40681688900)

【问题讨论】:

  • 为什么要投反对票?显然有问题……

标签: java aparapi


【解决方案1】:

我认为您应该根据Aparapi Java Kernel Guidelines 检查您的代码,特别注意其他限制提防副作用部分。

请记住使您的代码尽可能简单。

查看您的代码,在 calculate 方法中,您广泛使用了模数 (%) 运算符。我建议您记录每个计算,以便能够比较您在 JTP 模式下得到的结果和在 GPU 模式下得到的结果,以了解此运算符是否存在问题。

编辑: 在您的计算方法中,您使用 int 变量来保存值,它可以保存数字直到 2^31-1,即 2147483647,称为 Integer.MAX_VALUE。 如果您执行int value=2147483647; value++;,您将得到 -2147483648 的结果,即 Integer.MIN_VALUE。

您也可以尝试使用较低的起始数字或将变量声明更改为 long,这可能包含 Long.MAX_VALUE,即 2^63-1。

Aparapi 支持 long 和 int 值。

【讨论】:

  • 如果你在 JTP 或 CPU 模式下运行代码,你可以看到我得到了正确的输出。另一方面,我有乘法问题。例如。我有数字 406816889,如果我执行 num * 10 + 4,我会得到 4068168894,但 num * 100 + 44 在 GPU 模式下不会给出 40681688944。也许有溢出?
  • 对于您的编辑,我的号码最多 9 位数字,所以应该没问题。但我的结果是 11 位数字,我把它们保存得很长:/
  • 您是否尝试通过日志或变量观察来调试代码?
  • 代码运行良好,除了calculate 的返回行。问题是tc * 100 部分。
  • 为什么不尝试将 tc 声明为 long 修改计算方法签名?
【解决方案2】:

您好,我是新 Aparapi.com 和新 github 存储库的主要维护者。我们在新的项目主页上更加活跃,甚至已经在 Maven 中心发布了大约十几个版本。您可能需要考虑改用新的 Aparapi。

话虽如此,我是新 Aparapi 的开发人员并运行了这个测试用例并确认它是一个合法的 Aparapi 错误。我将调查导致该错误的原因,并希望能在下一个版本之前为您修复错误。 issue has been reported here 如果您想跟踪它。为新的 Aparapi 项目记住这一点,因此错误修复不太可能出现在旧的 Aparapi 项目中。

【讨论】:

  • 非常感谢!我在这个问题上发布了一些内容。
猜你喜欢
  • 2017-06-04
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多