Непредсказуемые результаты в расчетах под Cortex-A53

Приведенный ниже код 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, 1886962617, 41137, 6952, 58489, 6151, 55208, 154, 57100, 20418, 57100, 20418, 57100, 20418, 57100, 20418, 57100, 20418 57100, 20418, 57100, 20418, 57100, 20418]

Если я использую float или же double или же int вместо 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, 1,0]

На других устройствах он работает как положено. Это проблема JVM или она вызвана ошибками процессора?

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 внутри runTestэто за цикл, он работает правильно. Кроме того, если я прочитал input значения внутри calculate оно работает.

Итак, что является причиной этой проблемы и где я должен оставить свой отзыв, чтобы решить эту проблему?

0 ответов

Другие вопросы по тегам