Aparapi数据类型

时间:2016-04-21 20:43:17

标签: java aparapi

我跟随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视网膜。

Edit2:我的计算方法的返回行导致问题。如果我返回Long.MAX_VALUE,它就可以了。但是(long) tc * 100(或((long) tc) * 100)没有给予(例如40681688900)

2 个答案:

答案 0 :(得分:2)

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

请记住尽可能简化代码。

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

修改 在你的calculate方法中,你使用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值。

答案 1 :(得分:1)

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

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