Вопрос

У меня есть программа, написанная моим профессором, которая имитирует способ записи памяти в кеш L2.Там есть пара мест, где я должен заполнить пробелы.Первое, что я должен сделать, это очистить действительный бит каждой записи кэша.Он дал нам следующее:

//number of cache entries (2^11)

#define L2_NUM_CACHE_ENTRIES (1<<11)

/***************************************************

This struct defines the structure of a single cache
entry in the L2 cache. It has the following fields:
v_d_tag: 32-bit unsigned word containing the
valid (v) bit at bit 31 (leftmost bit),
the dirty bit (d) at bit 30, and the tag
in bits 0 through 15 (the 16 rightmost bits)
cache_line: an array of 8 words, constituting a single
cache line.
****************************************************/

Typedef struct {

uint32_t v_d_tag;

uint32_t cache_line[WORDS_PER_CACHE_LINE];

} L2_CACHE_ENTRY;

//The L2 is just an array cache entries

L2_CACHE_ENTRY l2_cache[L2_NUM_CACHE_ENTRIES];

Итак, насколько я понимаю, очистка действительного бита означает просто установку его на ноль.Действительным битом является бит 31 v_d_tag, поэтому мне следует использовать битовую маску - я хочу сделать что-то вроде «v_d_tag ​​= v_d_tag ​​& 0x80000000;», я думаю?Но чего я не понимаю, так это того, как я могу сделать это для каждой записи в кэше.Я вижу массив записей кэша (l2_cache), но не понимаю, как с этим связан v_d_tag.

Может ли кто-нибудь объяснить мне это?

Это было полезно?

Решение

Структура typedef избыточна в C++, как и #define Я вижу, они могут быть static const int.

Чтобы очистить их все, вам нужно сделать

for(int i = 0; i < L2_NUM_CACHE_ENTRIES; i++)
    l2_cache[i].v_d_tag &= 0x80000000;

Другие советы

Структура определена в стиле C, поскольку в C общепринятой идиомой является typedef объявлять структуру, чтобы ее можно было использовать как тип без необходимости писать struct L2_CACHE_ENTRY по каждой ссылке.Эта идиома больше не нужна в C++, поскольку struct тег будет работать как отдельный тип.

Короче говоря, в C++ вы можете лечить

typedef struct {

uint32_t v_d_tag;

uint32_t cache_line[WORDS_PER_CACHE_LINE];

} L2_CACHE_ENTRY;

точно так же, как

struct L2_CACHE_ENTRY{

uint32_t v_d_tag;

uint32_t cache_line[WORDS_PER_CACHE_LINE];

};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top