PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist eine Cache Line?


Gast
2004-09-06, 10:10:59
Hi,
ich habe letztens hier diesen Begriff gelesen und würde nun
gern erfahren was dies ist.

Ich habe gelesen, dass man beim programmieren Cache Lines nicht verschwenden soll. Wie kann man vermeiden, dass man Cache Lines nicht verschwendet beim programmieren?

marco42
2004-09-06, 11:04:12
Hi,
ich habe letztens hier diesen Begriff gelesen und würde nun
gern erfahren was dies ist.

Ich habe gelesen, dass man beim programmieren Cache Lines nicht verschwenden soll. Wie kann man vermeiden, dass man Cache Lines nicht verschwendet beim programmieren?

Ok, ich bin da zwar kein Guru, aber stell dir vor, der Cache ist einzelne Teile zerlegt und die kannst du immer insgesamt laden. Wenn du also ein Byte aus dem Hauptspeicher laedst, werdem immer zB 128 Byte vom Hauptspeicher in den Cache geladen. Das nennt sich dann eine Cacheline. Ein 1MB grosser Cache besteht also aus 8182 Cachelines. Deshalb sollten deine Daten immer moeglichst lokal sein, da sie so nur einmal in den Cache geladen werden muessen und der Rest der Daten direkt daraus geladen werden kann. Da spielt dann noch Alignment eine Rolle. Deine Daten sollten immer auf einer bestimmten Adresse, zB ein vielfache von 128 Anfangen, damit sie nicht zwei, anstatt einer Cacheline belegen. Ausserdem gibt es da auch noch Collisionen, aber das geht zu weit. Cachelines sind also insofern beim Programmieren zu beachten, dass deine Daten eine gewisse Lokalitaet besitzen unf bei bestimmten Adressen anfangen. Die groesse einer Cacheline variiert mit dem Prozessor.

Muh-sagt-die-Kuh
2004-09-06, 11:42:55
Hi,
ich habe letztens hier diesen Begriff gelesen und würde nun
gern erfahren was dies ist.

Ich habe gelesen, dass man beim programmieren Cache Lines nicht verschwenden soll. Wie kann man vermeiden, dass man Cache Lines nicht verschwendet beim programmieren?Die Anordnung der Programmdaten auf dem Heap ist der Job des Compilers, du selbst musst dich eigentlich nicht darum kümmern.

mrdigital
2004-09-06, 11:45:19
Naja, auf die Anordung des Code hat man keinen direkten Einfluss, aber man kann bei seinen Datenstrukturen schon dafür sorgen, das die 4 Byte aligned oder auch Cachelinesize aligned sind ;)

Demirug
2004-09-06, 11:50:18
Beim auf Cachelines optimieren geht es ja unter anderem auch um die Frage ob man besser ein "Array of Structs" oder eine "Struct with Arrays" benutzt. Das Alignment ist ja eine Sache welche der Compiler/Heapmanager auch aleine machen kann. Beim Aufbau der Datenstrukturen selbst muss man sich dann schon eher Gedanken machen weil es da keinen Automatismuss gibt.

zeckensack
2004-09-06, 16:29:38
Hi,
ich habe letztens hier diesen Begriff gelesen und würde nun
gern erfahren was dies ist.Alle aktuellen Prozessoren lesen, wenn sie Daten aus dem Speicher brauchen, nicht nur die Daten selber, sondern auch deren direktes "Umland" in ihren Cache.

1)Damit nutzt man die "Burst"-Freudigkeit aktueller Speichertechnologien aus. Der erste Zugriff ist dabei relativ langsam (in der Größenordnung von 6 Speichertakten), darauf folgende dafür umso schneller (16 Bytes pro Speichertakt bei DDR-SDRAM, bzw sogar 32 Bytes pro Speichertakt bei Dual Channel).

2)Die Verwaltung des Caches wird dadurch vereinfacht. Es ist wesentlich leichter, anstatt jedes Byte einzeln zu verwalten, den Cache in zusammenhängende Segmente (eben die Cache Lines) aufzuteilen.

3)Die "nebenher" in den Cache geladenen Daten sind oft noch nützlich. Es ist bei "normalen" Code relativ wahrscheinlich, dass kurz nachdem ein Datum benutzt wurde, auch seine Nachbarn benutzt werden. Das nennt man "räumliche Lokalität".
Ich habe gelesen, dass man beim programmieren Cache Lines nicht verschwenden soll. Wie kann man vermeiden, dass man Cache Lines nicht verschwendet beim programmieren?a)Strukturen kompakt halten
b)nur das zusammen in eine Struktur packen, was auch zusammen gebraucht wird

Gast
2004-09-06, 22:22:00
thx für die Antworten :)