Большинство ваших чтений данных происходит из переменной цикла i.
21 из условного i <20 <br>20 чтений из i ++.
20 чтений из i в lvalue arr [0][i].
Я не в курсе того, как работает кэш, но, учитывая 32-битный массив int, ваши записи занимают 10 строк кэша.Неожиданное предположение: последние две строки - ваши пропуски при записи, так как это как-то не предсказывает вашу следующую запись.
Если вы развернете цикл, вы увидите, что счетчики свернуты в маленькие числа.
arr[0][0]=0;
arr[0][1]=0;
..