Wie kann ich die CPU anweisen, Daten auf eine höhere/niedrigere Cache-Ebene zu verschieben, ohne sie vorher zu leeren?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie kann ich die CPU anweisen, Daten auf eine höhere/niedrigere Cache-Ebene zu verschieben, ohne sie vorher zu leeren?

Post by Anonymous »

Ich schreibe ein Cache-freundliches Programm mit vielen zufälligen Lese-/Schreibvorgängen und nehme an, ich verwende ein intrinsisches _mm_prefetch _MM_HINT_T0, um einige Daten in den L1-Cache zu laden. Dann möchte ich andere Dinge vorab in den L1-Cache abrufen, aber ich möchte die vorherigen Daten nicht aus dem Cache löschen, sondern sie einfach vorübergehend auf eine höhere Ebene (z. B. L2-Cache) verschieben, um sie später wieder in den L1-Cache zu legen. Ich möchte die Daten nicht aus dem Cache leeren, da ich dazwischen eine große CUDA-Rechenarbeitslast ausführe, um den Overhead zu eliminieren und sie „streamähnlicher“ zu machen.
Ungefähr so:

Code: Select all

batch:
prefetch [data] into L1
*CPU processing on [data]*

cudaLoad [data]
prefetch [data] from L1 into L2
prefetch [anotherData] to L1

*GPU processing on [data]*
*CPU processing on [anotherData]*

output GPU result into [anotherData]
flush [anotherData] from cache

goto batch;

// and it goes again in a cycle
Ich konnte dazu keine eindeutige Lösung finden, daher bin ich für jede Hilfe dankbar!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post