La compilazione JIT può essere non deterministica?

2

Ho profilato un sacco di javascript oggi nella stesura di un bug bug del motore firefox e ho iniziato a notare le lievi differenze tra le compilation JIT.

Mentre ci sono alcune cose ovvie che potrebbero causare la segnalazione non deterministica di sezioni di codice "hot" (ad esempio, inlining o non inlining di una funzione chiamata un numero casuale di volte), mi chiedevo se le fluttuazioni esterne di la velocità di esecuzione (come la limitazione della CPU) potrebbe causare la compilazione JIT non deterministica?

    
posta Burdock 07.10.2015 - 07:23
fonte

1 risposta

6

Ci sono molti modi in cui la compilazione JIT può essere non deterministica. Ad esempio:

  • se il JIT viene eseguito su un thread separato, a seconda della pianificazione del SO, durante una corsa, il JIT può essere programmato per primo e compilare una determinata funzione prima dell'esecuzione, mentre su un'altra esecuzione, l'interprete può essere pianificato per primo, ed esegui la funzione prima che sia compilata
  • se la JIT utilizza le informazioni di profilazione dinamica per l'ottimizzazione e il profiler è un profiler di campionamento, quindi anche le più piccole fluttuazioni nel tempo, il layout della memoria, ecc. possono causare il campionamento in diversi punti dell'esecuzione, che potrebbe portare a differenti risultati
  • più le ottimizzazioni sono aggressive, maggiore è il tempo e la memoria della CPU richiesti dal compilatore JIT. Se il sistema ha poca memoria, per esempio, un compilatore JIT può decidere di disabilitare alcune ottimizzazioni, o solo abilitarle per alcuni target di valore molto alto (cioè punti molto caldi)
risposta data 07.10.2015 - 12:11
fonte

Leggi altre domande sui tag