Direct Mapped Cache с использованием блоков - PullRequest
0 голосов
/ 28 марта 2012

Я знаю, что это домашнее задание, и я не прошу ответа. Я просто хотел бы понять этот вопрос, не стесняйтесь использовать другие примеры для объяснения.

Вопрос, на который мне нужно ответить, ...

Each reference is a read of a 4-byte integer value and is described by the byte 
address of that integer.

Assuming a 1KB, 16B block, direct-mapped cache, initially empty, fill in whether 
each reference is a hit or a miss. 

Нам предоставлен список ссылок размером 4 байта. Например, 0x00000000, 0x00000006, ...

Насколько я понимаю, есть 64 блока (1024/16), и каждый блок занимает 16 байтов. Когда он смотрит на первую ссылку, это будет пропущено, и это внесет это в кеш. Я знаю, что это приводит к следующей ссылке на кэш, потому что каждый блок будет содержать 16 байтов. Означает ли это, что при промахе он содержит 4 ссылки, потому что каждая ссылка составляет 4 байта?

Ответы [ 2 ]

1 голос
/ 29 марта 2012

@ Шайлеш прав, но будьте осторожны со словом ссылка .Шаблон эталон зависит от программы.Представьте себе случай, когда мы пишем программу на C, которая ссылается на массив символов с шагом 16 байт.Вот глупая процедура, которая в основном будет делать это:

void foo (char * x, int MAX) {
    int i;
    char a;

    for (i = 0; i < MAX; i += 16)
           a = x[i];
}

Предположим, x находится по адресу 0x00000000.Затем этот цикл будет ссылаться на адреса 0x00000000, 0x00000010, 0x00000020, 0x00000030 и т. Д.В этом случае после самой первой ссылки на x[0] в кэш будут занесены x[0] - x[15] из-за размера блока 16B.Но следующая ссылка , то есть x[16] , не имеет .Другими словами, для вашего кеша здесь каждая ссылка в этом цикле приведет к потере кеша.

Вы обнаружите, что при оптимизации производительности размышления об организации и поведении кэша машины помогут вам избежать таких плохих шаблонов доступа к памяти, как этот.

1 голос
/ 28 марта 2012

Да, то, что вы поняли, правильно. Когда байт считывается из памяти, временная локализация предполагает, что следующие несколько байтов также будут впоследствии считаны. Таким образом, кэши обычно имеют размер блока более 1 ссылки, в данном случае 4 ссылки. При следующем обращении к памяти, если процессор запрашивает следующую ссылку, он уже находится в кэше!

Адрес памяти можно разделить на две части: адрес блока и смещение блока. Смещение блока будет использоваться для выбора между этими ссылками, которые находятся в одном и том же блоке кэша. Другая часть, адрес блока, далее делится на поля тегов и индексов. Поле индекса используется для выбора набора доступа (в случае кеша прямого сопоставления каждый блок кэша равен 1 комплекту). Поле тега выбирает блок кэша из набора.

...