Hardware che accelera il dereferenziamento del puntatore?

7

La maggior parte dei linguaggi moderni fa un uso pesante di puntatori / riferimenti: un tipico linguaggio OOP usa le ricerche VMT, un tipico linguaggio funzionale crea strutture di dati chiave fuori dai puntatori, ecc. Anche il tipico codice C spesso mette in mostra cose come foo->bar->baz .

È noto che il dereferenziamento di un puntatore è cache-unfriendly , a meno che il puntatore non sia puntato molto vicino ad alcuni posizione appena raggiunta e raggiunge la stessa riga della cache.

C'è o c'è stato hardware che tenta di risolvere questo problema? Al momento non è molto diffuso; perché?

Il colpire la cache L1 o L2 è molto più veloce che colpire la RAM sull'hardware corrente che l'obiettivo di rendere il dereferenziamento dei puntatori raccolga alcuni dei vantaggi di memorizzazione nella cache sembra degno.

    
posta 9000 08.07.2013 - 15:57
fonte

1 risposta

4
  • ci sono strategie di pre-riempimento della cache. Quelli di cui sono a conoscenza stanno tentando di rilevare (alcuni sottoinsiemi) schemi lineari di accessi alla memoria e quando hanno successo, sono piuttosto efficaci (ad esempio ricordo di avere misurato una differenza tra accessi sequenziali in avanti e indietro su un processore, differenza che non era più presente nelle generazioni successive). Non sono a conoscenza del tentativo di usare la memoria o di registrare il contenuto per fare questo pre-riempimento, ma non lo seguirò da vicino abbastanza da essere sicuro che nulla è stato fatto in quella zona, avrebbe potuto essere provato inutile nella pratica o meno utile di altre cose.

  • c'è tutta la serie di sforzi fatti attorno al principio di "se devi aspettare, prova a fare qualcos'altro e spera che sia utile". L'esecuzione di OoO è l'applicazione per il thread singolo (trovando alcune istruzioni nel thread che non devono attendere la memoria o il risultato di istruzioni non ancora finite, la previsione del ramo è lì per aiutare a trovare più candidati). E ci sono un sacco di varianti per rendere il thread del processore consapevole e provare a usare le risorse del processore per far avanzare gli altri thread mentre uno è bloccato su un accesso lento alla memoria, essendo l'hyperthreading solo uno di questi.

risposta data 08.07.2013 - 16:30
fonte

Leggi altre domande sui tag