我有以下代码供学习.
当在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)
我认为您应该根据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 值。
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |