2010-06-30 16 views
8

Sentitevi liberi di correggermi se qualche parte della mia comprensione è sbagliata.È possibile che un compilatore JIT utilizzi la GPU per determinate operazioni dietro le quinte?

La mia comprensione è che le GPU offrono un sottoinsieme delle istruzioni fornite da una CPU normale, ma le eseguono molto più velocemente.

So che ci sono modi per utilizzare i cicli GPU per scopi non grafici, ma sembra (in teoria) un linguaggio che è Just In Time compilato in grado di rilevare la presenza di una GPU adatta e scaricare parte del lavoro in GPU dietro le quinte senza modifica del codice.

La mia comprensione è ingenua? È solo una questione di esso è davvero complicato e non è stato fatto?

+0

Intendi JIT come con CLR o JVM? Bytecodes generici? DSL come R? – Stringer

+0

Stavo pensando allo stile CLR/JVM, ma sono interessato anche a qualsiasi altra risposta. – Davy8

risposta

8

mia comprensione è che le GPU offrono una sottoinsieme delle istruzioni che un normale CPU fornisce ma esegue loro molto più veloce.

Non è così semplice. La GPU è adattata principalmente all'elaborazione vettoriale/SIMD. Quindi, anche se il potenziale teorico delle GPU al giorno d'oggi è di gran lunga superiore alle CPU, solo i programmi che possono beneficiare delle istruzioni SIMD possono essere eseguiti in modo efficiente sulla GPU. Inoltre, c'è ovviamente una penalità di prestazioni quando i dati devono essere trasferiti dalla CPU alla GPU per essere processati lì.

Quindi per un compilatore JIT essere in grado di utilizzare la GPU in modo efficiente, deve essere in grado di rilevare codice che può essere parallelizzato per trarre vantaggio dalle istruzioni SIMD e quindi deve determinare se il sovraccarico indotto dal trasferimento dei dati dalla CPU per la GPU sarà outweight dai miglioramenti delle prestazioni.

+0

Esatto, ho dimenticato che molta della velocità della GPU deriva dalla parallelizzazione con le GPU moderne che hanno centinaia di core (logici?). Ciò riduce l'utilità poiché pochissime applicazioni sono configurate per questo. – Davy8

0

È possibile utilizzare GPU (ad esempio, uno abilitato CUDA o OpenCL) per accelerare JIT stesso. Sia l'allocazione del registro che la programmazione delle istruzioni potrebbero essere implementate in modo efficiente.

Problemi correlati