Ich möchte einen Speicherort lesen, ohne den Cache zu verschmutzen. Ich arbeite an X86 Linux Maschine. Ich habe versucht MOVNTDQA Assemblerbefehl mit:Wie kann ich Werte aus dem Speicher laden, ohne den Cache zu verschmutzen?
asm("movntdqa %[source], %[dest] \n\t"
: [dest] "=x" (my_var) : [source] "m" (my_mem[0]) : "memory");
my_mem ist ein int * mit neuen zugeordnet, my_var ist ein int.
Ich habe zwei Probleme mit diesem Ansatz:
- Der Code kompiliert, aber ich bin „Illegal Instruction“ Fehler bekommen, wenn es ausgeführt wird. Irgendwelche Ideen warum?
- Ich bin nicht sicher, welche Art von Speicher mit neuen zugeordnet ist. Ich würde diese WB annehmen. Laut Dokumentation funktioniert die MOVNTDQA-Anweisung nur für den USWC-Speichertyp. Woher weiß ich, an welchem Speichertyp ich arbeite?
Zusammenfassend meine Frage ist:
Wie kann ich einen Speicherplatz lesen, ohne den Cache auf einer X86-Maschine verschmutzen? Ist meine Herangehensweise in die richtige Richtung und kann sie zur Arbeit gebracht werden?
Danke.
Ist diese Frage verbunden? http: // Stapelüberlauf.com/questions/851286/how-to-use-movntdqa-zu vermeiden-cache-pollution – sharptooth
Ich denke, es ist verwandt :), aber leider hilft mir diese Frage/Antwort nicht mit dieser Frage. – Anna
Oh, noch eine Sache: Ich bin mir nicht sicher, ob das überhaupt möglich ist: -/Ich hoffe es ist es. – Anna