Массив оптимизации кэш-памяти Transpose: C
typedef int array[2][2];
void transpose(array dst, array src) {
int i, j;
for (j = 0; j < 2; j++) {
for (i = 0; i < 2; i++) {
dst[i][j] = src[j][i];
}
}
}
Массив src начинается с адреса 0, а массив dst начинается с адреса 0x10.
Кэш данных L1, прямое отображение, запись-распределение, размер блока 8 байт.
общий размер кэша составляет 16 байтов данных.
Что такое попадание или промах в каждой записи массива src и dst?
Ответ:
src:
[0][0] -> miss,
[0][1] -> miss,
[1][0] -> miss,
[1][1] -> hit
dst:
[0][0] -> miss,
[0][1] -> miss,
[1][0] -> miss,
[1][1] -> miss
Если общий размер кэша составляет 32 байта данных, ответ:
src:
[0][0] -> miss,
[0][1] -> hit,
[1][0] -> miss,
[1][1] -> hit
dst:
[0][0] -> miss,
[0][1] -> hit,
[1][0] -> miss,
[1][1] -> hit
Я не уверен в обоих результатах. Я неЯ действительно не понимаю концепцию с массивами и кэшированием.