在Cortex-A53下进行计算时出现不可预测的结果

时间:2017-12-28 13:54:38

标签: android jvm arm cpu errata

下面的Java代码在Cortex-A53上运行时会返回不可预测的结果,特别是在Xperia XA设备上运行。

第一次迭代打印正确的值:

  

[24,42,61,45,29,46,35,36,48,47,20,64,45,15,37,70,70,   70,70,70,70,70,70,70,70,70,70,70,70,70,70]

经过一些重复后打印出来:

  

[24,61,29,35,48,20,45,37,1886626217,41137,6952,58489,6151,   55208,154,57100,20418,57100,20148,57100,20418,57100,20418,   57100,201418,57100,20418,57100,20418,57100,20418]

如果我使用floatdoubleint代替long,结果仍然错误但不同:

  

[24.0,61.0,29.0,35.0,48.0,20.0,45.0,37.0,1.0,1.0,1.0,1.0,   1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]

在其他设备上,它按预期运行。这是JVM的问题还是由CPU勘误引起的?

public static void runTest() {

    long[] t = new long[]{ 23,41, 60, 44, 28, 45, 34, 35, 47, 46, 19, 63, 44, 14, 36, 69};

    for(int i = 0; i < 40; i++) {
        long[] output = calculate(t);

        Log.e("TEST", Arrays.toString(output));
    }
}

private static long[] calculate(long[] input) {
    long[] result = new long[31];

    for (int i = 0; i < 16; i ++) {
        for (int j = 0; j < 16; j++) {
            result[i + j] = input[i] + 1;
        }
    }

    return result;
}

如果我从calculate的for循环中移动代码runTest,它会正确运行。另外,如果我读取input内的calculate值,则可以正常工作。

那么,这个问题的原因是什么?我应该在哪里留下反馈来解决这个问题?

0 个答案:

没有答案