2012-08-12 16 views
5

Con il framework rootbeer è possibile la programmazione GPU per Java.Quale codice Java può essere spostato nella GPU?

Quale codice Java deve essere utilizzato per rootbeer e quale codice deve essere eseguito meglio nell'auto Java VM?

O altro: quale codice produce più overhead e non ha senso?

+0

Stai chiedendo che genere di algoritmi in generale ha senso essere eseguito sulla GPU? – Bart

+0

Non so se questo è in qualche modo rilevante per te, ma le password di forzatura brute (crittografia) sono un'area in cui l'ottimizzazione delle GPU per il tipo di operazioni richiesto per questo genere di cose viene utilizzata per ottenere un vantaggio temporale. –

+2

La mia domanda è specifica per rootbeer e non per la programmazione generale della GPU. – Horcrux7

risposta

3

È una cosa un po 'sciocca da dire, ma la risposta ovvia sarebbe "per problemi a cui una GPU è migliore di una CPU". Le GPU moderne hanno più di mille core, ma relativamente poca memoria, quindi, in generale, questo significa roba che è lends itself well to parallelization e non richiede troppa memoria.

G. Bach ha menzionato gli attacchi a forza bruta contro la crittografia nei commenti, questo è un buon esempio. Le simulazioni scientifiche sono un altro buon esempio, infatti alcuni anni fa alcune istituzioni di ricerca (in particolare la NASA) avevano gruppi di simulazioni in esecuzione su Playstation 3. L'articolo di Wikipedia su GPGPU computing lists several applications della tecnologia.

1

Uno dei limiti della GPU corrente è che può caricare un semplice metodo su ogni core ed eseguirlo contemporaneamente. Le CPU generiche possono caricare più codice e dati e farle in modo indipendente.

C'è un codice di stile vettoriale che potrebbe essere più veloce su una GPU e posso vederlo essere un'opzione un giorno, ma la maggior parte del codice (in volume se non con potenza di elaborazione) sarà sulle CPU.

3

In aggiunta alle altre risposte: Ci sono anche alcune funzionalità Java che non sono supportate per tradurre da rootbeer jet.

  1. metodi nativi
  2. riflessione
  3. metodo dinamico invocazione
  4. dorme mentre all'interno di un monitor.
  5. garbage collection (!)

si dovrebbe evitare di codice con queste caratteristiche utilizzate.

Gli aggiornamenti per Rootbeer sono in produzione per fornire garbage collection e altre funzionalità Java mancanti.

+0

I primi 4 punti sono chiari. Se capisco il problema con GC, il codice dovrebbe includere solo metodi statici o singleton. È giusto? Non ci dovrebbero essere frequenti allocazioni di oggetti perché gli oggetti non possono essere spazzatura? – Horcrux7

+0

Il GC sta per essere aggiunto. Finché questo non è finito, devi riciclare Oggetti invece di impostare i riferimenti a 'null' e creare un nuovo oggetto. O usi il codice con un numero di Oggetti costante o appena crescente. – Simulant

+0

È possibile utilizzare l'allocazione dinamica della memoria, ma non esiste garbage collection. Quindi se si esaurisce la memoria sulla GPU, un OutOfMemoryError è ribollito nella CPU. – pcpratts

2

Per ottenere accelerazioni con GPU, si desidera avere un sacco di calcoli per elemento dati perché il trasferimento dei dati è così lento. Di solito vuoi 2 o 3 cicli nidificati in esecuzione sulla GPU con almeno 1000 thread.

Problemi correlati