Učím se logiku mezipaměti. Zajímalo by mě, jestli můžete ověřit, že jsem správně rozuměl. Pokud je mezipaměť v poli značky má 16 bitů, pole pole má 10 bitů a bajt v poli bloku je 6 bitů, pak mohu odvodit pouze z těchto informací že kapacita je 128 kbyte a je obousměrně nastavena asociativně s velikostí bloku 64 bajtů, protože 2⁶ = 64 bajtů od bajtu v poli bloku. 2¹⁰ = 1024, ale mohla by nějaká jiná kapacita s nějakým jiným číslem asociativity splnit požadavky? p>
Zjistil jsem, že vzorce jsou
počet bloků = kapacita / velikost bloku
počet sad = počet bloků / #associativity
Proto Mohl jsem zdvojnásobit obě asociativity na 4-way, ale nemohl jsem uspokojit požadavky s 4-way cache, protože to wo uld vyžaduje další počet bitů v nastaveném poli.
Rozuměl jsem správně?
Odpovědět
Pomůže vám tento obrázek pochopit, jak asociativní mezipaměti fungují? strukturálně?
vypůjčené od zde
Stručně řečeno, bitové offsetové bity určují velikost vašeho bloku (kolik bytů je v řádku mezipaměti, kolik sloupců, pokud chcete). Indexové bity určují, kolik řádků je v každé sadě. Kapacita mezipaměti je tedy 2 ^ (blockoffsetbits + indexbits) * #sets. V tomto případě to je 2 ^ (4 + 4) * 4 = 256 * 4 = 1 kilobyte.
Pro stejnou velikost mezipaměti (kapacita), pokud byste měli přejít ze 4 cest do dvou způsob asociativní sady, to je obousměrná asociativní, můžete to udělat zdvojnásobením řádků v každé sadě nebo zdvojnásobením sloupců v každé sadě, což znamená zdvojnásobení počtu řádků mezipaměti nebo zdvojnásobení velikosti bloku.
Pokud byste se rozhodli zdvojnásobit počet řádků, skončilo by to tak, že by vaše 12bitová adresa byla rozdělena na 5bitový index a 4bitový offset bloku, což by ponechalo 3bitovou značku.
Pokud byste se rozhodli zdvojnásobit velikost bloku, skončilo by to tak, že by vaše 12bitová adresa byla rozdělena na 4bitový index, 5bitový offset bloku a ponechání 3bitové značky.
Takže pro opětovnou iteraci si myslím, že řídící vzorce pro asociativní mezipaměti jsou:
Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets) Index Bits = LOG2(Blocks per Set) Block Offset Bits = LOG2(Block Size in Bytes) Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits)
Ve vašem původně uvedeném příkladu ne Nemyslím si, že můžete odvodit velikost mezipaměti na základě velikosti příslušných polí bitů adresy, aniž byste vytvořili předpoklad Asociativita. Pokud je obousměrný asociativní, dalo by se říci:
Cache Capacity = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 kilobajtů = 256 kilobajtů. Nejsem si jistý, jak jste přišli s 128 kB. To by byl případ, kdyby šlo o jednosměrné asociativní (přímé mapování).
U kapacity mezipaměti 128 kB (2 ^ 17 bajtů) můžete mohl vytvořit čtyřcestnou asociativní mezipaměť s velikostí bloku 64 bajtů slovy:
2^17 = 2^6 * (Blocks per Set) * 4 Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512
… a proto přidělil 9 indexových bitů, 4 blokové offsetové bity a zbytek (19) bitů značek.