Aparapi数据类型

Hyp*_*ion 7 java aparapi

我有以下代码供学习.

当在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
Run Code Online (Sandbox Code Playgroud)

编辑:如果我设置executionMode JTP或CPU,我得到真实的结果(结果==预期)但在GPU模式下有一个问题.我正在使用2013年末的macbook pro视网膜与Windows 10.

Edit2:我的计算方法的返回行导致问题.如果我回来Long.MAX_VALUE,它的确有效.但是(long) tc * 100(或((long) tc) * 100)不给予(例如40681688900)

aba*_*one 2

我认为您应该根据Aparapi Java 内核指南检查您的代码,特别注意其他限制注意副作用部分。

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

查看您的代码,在该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 值。