cacheing beeinflussen
-
Hallo,
die CPU verwaltet ja einen eingebauten cache und versucht mit Algorithmen die beste einteilung zu finden, welche Daten dort gespeichert werden sollen.
Also Programmierer weiß man ja mehr über sein Programm als es der cache Algorithmus je kann.Meine Frage ist also: Kann man in den cacheing Vorgang eingreifen und durch irgend einen Befehl sagen was in den cache soll, da man durch die Kenntnisse seines Programms ja viel besser vorhersagen kann, welche Daten noch gebraucht werden ?
-
Nein kann man nicht, du kannst nur versuchen, die Daten und den Code so zu alignen, dass sie prima in den Cache deines Zielsystems passen und du solltest beim Zugriff auf andere Daten darauf achten, dass du nicht den Cache entleerst.
-
es gibt einige wege auf das caching einfluss zu nehmen.
du kannst z.b. mit movntq (oder irgendwie so hieß der assembler befehl) daten ohne caching direkt in den speicher schreiben, das ist z.b. sehr nützlich wenn du ein großes array mit z.b. nullen füllen möchtest, so bleibt der cache erhalten.
zudem kann man daten auf 32byte allignen, das bessert auch die cacheeffektivität, natürlich sollte man dann versuchen seine klassen auch auf 32byte größe zu halten.
man kann, bevor man daten benutzt, sie "anpingen", dazu ließt man alle 32byte 4bytes aus dem speicher mit dem man glecih arbeiten möchte, das ist so in etwa wie prefetching, prefetching wird jedoch von neueren prozessoren manchmal ignoriert, den mov ins register müssen sie jedoch ausführen.
man muss beim arbeiten mit hyperthreading und mehreren threads darauf aufpassen dass die stacks einen offset zueinander erhalten (dazu mehr in intelpaper), sonst gibt es kollisionen und ein thread zerschiesst dem anderen den cache.
naja... gibt da so paar dinge
rapso->greets();