Ich arbeite an einer leistungskritischen Anwendung, bei der ich eine detaillierte Kontrolle über die Cache-Residenz benötige. Insbesondere suche ich nach einer Möglichkeit, einen bestimmten Speicherblock explizit aus dem
L1-Datencache zu entfernen und sicherzustellen, dass er in den
L2-Cache (oder die nächste Ebene in der Hierarchie) „geschoben“ oder herabgestuft wird, ohne ihn unbedingt aus der gesamten Cache-Hierarchie zu entfernen oder ein Zurückschreiben in den Hauptspeicher (DRAM) zu erzwingen.
Mir sind Anweisungen wie CLFLUSH oder bekannt CLFLUSHOPT auf x86, aber ich verstehe, dass diese oft die Zeile über alle Cache-Ebenen hinweg ungültig machen.
- Gibt es eine bestimmte ISA-Anweisung (x86, ARM oder RISC-V), die speziell auf die L1-zu-L2-Herabstufung abzielt?
- Wenn keine direkte Anweisung vorhanden ist, was ist die effizienteste „Cache-Verschmutzung“ oder „Thrashing“-Strategie, um die Entfernung eines bestimmten Adressbereichs aus L1 zu erzwingen?
- Wie wirkt sich die inklusive/exklusive Natur der Cache-Hierarchie auf diesen Prozess aus?
Ich suche nach Architekturdokumentation oder intrinsischen C/C++-basierten Lösungen.