È possibile creare in modo esplicito oggetti statici nella cache della CPU, in modo da assicurarsi che tali oggetti rimangano sempre nella cache, in modo che nessun impatto sulle prestazioni venga mai raggiunto dal raggiungimento della RAM o di Dio non voglia - memoria virtuale hdd?Assegna memoria statica nella cache della CPU in c/C++: è possibile?
Sono particolarmente interessato al targeting della cache condivisa L3 di grandi dimensioni, non intendendo il targeting di L1, L2, istruzione o qualsiasi altra cache, solo il più grande cavedano di memoria on-die che ci sia.
E solo per chiarire per differenziare da altri thread ho cercato prima di postare questo, non sono interessato a privatizzare l'intera cache, solo una piccola, poche classi vale la pena di regione.
Penso che il meglio che puoi fare sia usare la [__builtin_prefetch macro] di GCC (http://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/Other-Builtins.html). La cache IIRC non è indirizzabile dal codice, la CPU la gestisce da sé (almeno su x86). –
Che tipo di processore? Alcune architetture hanno istruzioni per fornire suggerimenti sulla cache o per dirigere i prefets della cache prima che i dati siano necessari. – TJD
Breve anwer: no non puoi. L'unica cosa che puoi fare è mantenere la località di riferimento stretta. Non saltare in memoria, ma provare ad accedere ai dati che sono vicini ai dati a cui è stata effettuata l'operazione precedente. Inoltre: mantenere i tuoi dati allineati sui limiti della cache può aiutarti a evitare un altro recupero della cache. BTW gli slot * cache * non devono essere consecutivi. Su x86, ci sono IIRC quattro slot L1 e centinaia o migliaia di slot L2. (che devi condividere con altri processi su una macchina multiprocesso). – wildplasser