Dire se il core A sta modificando una variabile X e il core B sta leggendo quella variabile (X). Ovviamente in questo caso un protocollo di coerenza della cache aggiornerà la cache del core B, poiché X è stato modificato dal core A e naturalmente questa coerenza della cache rallenterà l'esecuzione sul core B. Tuttavia, questa coerenza della cache influenzerà anche le prestazioni del core A, supponendo che la variabile X risieda nella sua cache.In che modo la coerenza della cache influisce sulle prestazioni in questo caso
risposta
Sì. Esistono diversi modi in cui può influire sulle prestazioni. Il protocollo standard che le persone usano è una variante di MSI (Modificato, Condiviso, Invalido) a volte con O (Proprietario) e spesso E (Esclusivo) aggiunto al protocollo. Nel tuo esempio, il core A inizierà nello stato Modificato (o Esclusivo) e la lettura del nucleo B forzerebbe il core A a cambiarlo nello stato condiviso. Questa azione richiede cicli nella cache poiché ci sono solo così tante operazioni che il core può eseguire in un dato momento. L'impatto di questo sul Core A non è molto alto, poiché non si trova nel percorso critico. L'impatto maggiore è se il Core A esegue nuovamente una scrittura. Poiché la linea della cache si trova nello stato condiviso (o non valido), deve inviare una richiesta di aggiornamento a M o E. Tale richiesta deve andare a Core B. Questa operazione è sul percorso critico e la scrittura non può terminare fino a quando il blocco cache è aggiornato. Detto questo, le scritture sono generalmente memorizzate nel buffer e il processore in genere non verrà bloccato su questa operazione.
Sì, sulle microarchitettura attuali che utilizzano i protocolli di coerenza ME (O) SI, rallenterà anche gli aggiornamenti di A a X
. La ragione di ciò è che B's read metterà la linea cache contenente lo X
nello stato 'condiviso' prima di copiarlo, e quindi la scrittura di A dovrà invalidare la copia di B per entrare nello stato 'esclusivo' prima di poterlo modificare di nuovo.
Ciò detto, le scritture di A a X
potrebbero non bloccare la pipeline di esecuzione di A. Ciò dipende dal modello di consistenza di memoria dell'architettura e dal linguaggio di programmazione e dal fatto che la scrittura sia forzata come un'operazione atomica o una successiva barriera di scrittura.
- 1. In che modo Object.observe() influisce sulle prestazioni?
- 2. Che cos'è l'aliasing e in che modo influisce sulle prestazioni?
- 3. In che modo l'architettura NUMA influisce sulle prestazioni di ActivePivot?
- 4. setTimeout() influisce sulle prestazioni
- 5. L'offuscamento influisce sulle prestazioni?
- 6. L'hard coding della stringa influisce sulle prestazioni?
- 7. In che modo il DBMS influisce sulle prestazioni dell'applicazione? E gli strumenti della GUI Informix?
- 8. La dimensione della tabella influisce sulle prestazioni INSERT?
- 9. La lunghezza della chiave influisce sulle prestazioni del dizionario?
- 10. In che modo un vincolo univoco influisce sulle prestazioni di scrittura in Postgres DB
- 11. Il numero di colonne influisce sulle prestazioni della query?
- 12. fa favicon 404 influisce sulle prestazioni
- 13. Perché document.write influisce negativamente sulle prestazioni Web?
- 14. L'omissione dei punti e virgola influisce sulle prestazioni in JavaScript?
- 15. In che modo Dateadd influisce sulle prestazioni di una query SQL?
- 16. L'ordine Sql JOIN influisce sulle prestazioni?
- 17. Gestione della coerenza della cache DMA
- 18. La dimensione di un file jar influisce sulle prestazioni della JVM?
- 19. L'incapsulamento del codice Javascript negli oggetti influisce sulle prestazioni?
- 20. Overhead di Spin Loop in termini di coerenza della cache
- 21. L'utilizzo di un framework PHP influisce sulle prestazioni?
- 22. Alternative ai metodi statici sulle interfacce per l'applicazione della coerenza
- 23. Redis: in che modo "mem_fragmentation_ratio" influisce sulla performance?
- 24. La variabile `.0` inaccessibile in` locals() `influisce sulla memoria o sulle prestazioni?
- 25. In che modo il principale segno del dollaro influisce sulle virgolette singole in Bash?
- 26. In che modo il caching influisce sul consumo di memoria?
- 27. L'aggiunta di troppi listener di eventi influisce sulle prestazioni?
- 28. In che modo l'opacità CSS influisce sull'accessibilità?
- 29. Latenza indotta dalla raccolta dati obsoleti Java che influisce sulle prestazioni
- 30. In che modo l'esecuzione di una richiesta XMLHttpRequest da un callback influisce sulla memorizzazione nella cache?
Nel mio caso, il Core A sta scrivendo frequentemente, e il core B a volte legge frequentemente, quindi suppongo che danneggerà un po 'le prestazioni. destra? – pythonic
Se la maggior parte di ciò che il core a sta facendo è scrivere e la maggior parte di ciò che sta facendo il core b è la lettura, allora sì, è possibile incorrere in problemi. Questo è generalmente chiamato ping-pong. Che tipo di comunicazione stai cercando di fare? Ci sono tonnellate di carte su questa roba. Ad esempio, se stai producendo qualcosa sul core A e vuoi consumarlo sul core B, allora dovresti usare un datastructure della coda senza cache, che evita il ping-pong possibile. (Dovrebbe avere concetti come la testa dell'ombra e la coda dell'ombra.) –
Nathan, grazie per un commento così informativo. Vedrò in dettaglio questo ping-ponging. – pythonic