it-swarm-eu.dev

Proč existují samostatné mezipaměti L1 pro data a pokyny?

Právě jsem prošel několika snímky a všiml jsem si, že mezipaměť L1 (alespoň na procesorech Intel) rozlišuje mezi mezipamětí dat a instrukcí, rád bych věděl, proč je to ..

23
Nils

Ve skutečnosti existuje několik důvodů.

Za prvé a pravděpodobně především, data uložená v mezipaměti instrukcí jsou obecně poněkud odlišná od toho, co je uloženo v mezipaměti dat - spolu s samotnými instrukcemi existují anotace pro věci jako kde začíná další instrukce, aby pomohly dekodérům. Některé procesory (např. Netburst, některé SPARC) používají "trasovací mezipaměť", která ukládá výsledek dekódování instrukce namísto uložení původní instrukce v její kódované podobě.

Za druhé, trochu zjednodušuje obvody - datová mezipaměť musí řešit čtení a zápis, ale instrukční mezipaměť se zabývá pouze čteními. (To je součástí toho, proč je samopravující kód tak drahý - namísto přímého přepisování dat v mezipaměti instrukcí prochází zápis datovou mezipamětí do mezipaměti L2, a pak je řádek v mezipaměti instrukcí zneplatněn a znovu - načteno z L2).

Zatřetí to zvyšuje šířku pásma: většina moderních procesorů umí číst data z instrukční mezipaměti a datové mezipaměti současně. Většina také má fronty u „vstupu“ do mezipaměti, takže mohou ve skutečnosti provádět dvě čtení a jedno psaní v daném cyklu.

Za čtvrté, může to ušetřit energii. I když je třeba udržovat energii v samotných paměťových buňkách, aby se udržel jejich obsah, některé procesory mohou/mohou vypnout některé přidružené obvody (dekodéry apod.), Když se nepoužívají. Se samostatnými mezipaměťmi mohou tyto obvody napájet samostatně pro instrukce a data, což zvyšuje šanci na to, že obvod zůstane bez napájení během jakéhokoli daného cyklu (nejsem si jistý, že to provedou všechny procesory x86 - AFAIK, je to spíše = ARM věc).

28
Jerry Coffin

Stejně jako u nemovitostí je používání mezipaměti řízeno třemi věcmi: umístění, umístění, umístění. Celý bod mezipaměti je v tom, že většina programů vykazuje vzory umístění: pokud přistupují k bajtu 1111111, pak další bajt, ke kterému budou mít přístup, je pravděpodobně 1111110 nebo 1111112, a ne tolik bajtů 9999999. Většina programů však bude vykazovat velmi odlišné vzorce umístění pro jejich pokyny a data. To znamená, že by bylo nepravděpodobné, že by instrukce a data mohly účinně sdílet mezipaměť. Protože instrukce a data nejsou nutně blízko sebe v paměti. Přístup k datům by narazil instrukce z mezipaměti a instrukce pro načtení by narazila data z mezipaměti.

5