2012-08-12 10 views
5

Con el marco rootbeer es posible la programación de GPU para Java.¿Qué código Java se puede mover a la GPU?

¿Qué código de Java se debe utilizar para rootbeer y qué código debe ejecutarse mejor en la propia máquina virtual de Java?

u otro: ¿qué código produce más sobrecarga y no tiene sentido?

+0

¿Está preguntando qué tipo de algoritmos en general tienen sentido para ser ejecutados en la GPU? – Bart

+0

No sé si esto es de alguna manera relevante para usted, pero las contraseñas de fuerza bruta (criptografía) es un área donde la afinación de las GPU para el tipo de operaciones requeridas para este tipo de cosas se utiliza para obtener una ventaja de tiempo. –

+2

Mi pregunta es específica de rootbeer y no para la programación general de GPU. – Horcrux7

Respuesta

3

Es un poco tonto decirlo, pero la respuesta obvia sería "para problemas en los que una GPU es mejor que una CPU". Las GPU modernas tienen más de mil núcleos, pero comparativamente poca memoria, por lo que, en general, esto significa cosas que lends itself well to parallelization y no requieren demasiada memoria.

G. Bach mencionó ataques de fuerza bruta contra criptografía en los comentarios, ese es un buen ejemplo. Las simulaciones científicas son otro buen ejemplo, de hecho, hace unos años algunas instituciones de investigación (especialmente la NASA) tenían grupos de simulaciones en ejecución de Playstation 3. Artículo de Wikipedia sobre computación GPGPU lists several applications de la tecnología.

1

Una de las limitaciones de la GPU actual es que puede cargar un método simple en cada núcleo y ejecutarlo a la vez. Las CPU de propósito general pueden cargar más código y datos y hacerlos de forma independiente.

Hay un código de estilo vectorial que puede ser más rápido en una GPU y puedo verlo como una opción algún día, pero la mayoría del código (por volumen si no es por potencia de procesamiento) estará en las CPU.

3

Además de las otras respuestas: También hay algunas características de Java que no son compatibles con la traducción por rootbeer jet.

  1. métodos nativos
  2. reflexión
  3. método dinámico invocación
  4. dormir mientras que dentro de un monitor.
  5. recolección de basura (!)

Usted debe evitar código con estas características utilizadas.

Las actualizaciones de Rootbeer están en producción para proporcionar recolección de basura y otras características de Java que faltan.

+0

Los primeros 4 puntos son claros. Si entiendo el problema con GC, entonces el código solo debe incluir métodos estáticos o singleton. ¿Es esto correcto? No debe haber una asignación frecuente de objetos porque los objetos no pueden ser basura. – Horcrux7

+0

GC está en camino de ser agregado. Hasta que esto finalice, debe reciclar objetos en lugar de establecer las referencias a 'null' y crear un nuevo objeto. O usa código con una constante o simplemente incrementando el número de Objetos. – Simulant

+0

Puede usar la asignación de memoria dinámica, pero no hay recolección de basura. Entonces, si se queda sin memoria en la GPU, se borra un OutOfMemoryError hasta la CPU. – pcpratts

2

Para obtener aceleraciones con GPU, desea tener muchos cómputos por elemento de datos porque la transferencia de datos es muy lenta. Por lo general, desea 2 o 3 anidados para bucles que se ejecutan en la GPU con al menos 1000 hilos.

Cuestiones relacionadas