Recentemente ho fatto un po 'di scavo nella memoria e come usarlo correttamente. Ovviamente, sono incappato anche sul prefetching e su come posso rendere la vita più facile per la CPU.Esiste un modo per "riscaldare" un processo?
Ho eseguito alcuni benchmark per vedere i reali vantaggi di una corretta archiviazione/accesso di dati e istruzioni. Questi benchmark hanno mostrato non solo i benefici attesi nell'aiutare il prefetch della CPU, ma ha anche dimostrato che il prefetching velocizza il processo anche durante il runtime. Dopo circa 100 cicli di programma, la CPU sembra averlo capito e ha ottimizzato la cache di conseguenza. Questo mi consente di risparmiare fino a 200.000 tick per ciclo, il numero scende da circa 750.000 a 550.000. Ho ottenuto questi numeri usando qTestLib.
Ora per la domanda: C'è un modo sicuro per utilizzare questa runtime-accelerazione, lasciandola riscaldare, per così dire? O non si dovrebbe calcolare questo in tutto e basta costruire codice più veloce dall'inizio?
Se si beneficia principalmente di una previsione di branca migliore, è possibile utilizzare l'ottimizzazione guidata profilo per suggerimenti migliori e codice ottimizzato. – Hasturkun
Puoi essere più specifico su cosa esattamente hai benchmarkato? A che livello di cache stai parlando di riscaldamento? –
il benchmark riguarda la memorizzazione dei dati in memoria. nel caso di questo confrontando std :: vector con QList. La mia ipotesi migliore sull'ottimizzazione automatica della cache è, il TLB impara quali indirizzi non sfrattare. – FruitSokrat