Question

informatique à usage général sur des unités de traitement graphique ( GPGPU ) est un concept très intéressant pour harnais la puissance du GPU pour tout type de calcul.

J'aimerais utiliser GPGPU pour le traitement d'image, des particules et des opérations rapides géométriques.

En ce moment, il semble que les deux prétendants dans cet espace sont CUDA et OpenCL. Je voudrais savoir:

  • est OpenCL encore utilisable à partir de Java sur Windows / Mac?
  • Quels sont les moyens de bibliothèques à l'interface à OpenCL / CUDA?
  • Est-ce à l'aide de la JNA directement une option?
  • Suis-je oublié quelque chose?

Toute l'expérience du monde réel / exemples / histoires de guerre sont appréciés.

Était-ce utile?

La solution

AFAIK, JavaCL / OpenCL4Java est la seule OpenCL liaison qui est disponible sur toutes les plates-formes en ce moment (y compris Mac OS X, FreeBSD, Linux, Windows, Solaris, tous dans Intel 32, 64 bits et variantes ppc, grâce à son utilisation de JNA ).

Il a des démos qui fonctionnent réellement bien de Java Web Start au moins sur Mac et Windows (pour éviter les plantages aléatoires sur Linux, s'il vous plaît voir cette page wiki , comme cela Démo particules .

Il est également livré avec quelques utilitaires (GPGPU génération de nombres aléatoires, réduction parallèle de base, l'algèbre linéaire) et un Scala DSL .

Enfin, ce sont les liaisons les plus anciennes disponibles (depuis juin 2009) et il a une communauté active d'utilisateurs .

(Disclaimer: Je suis JavaCL l 'auteur: -))

Autres conseils

Vous pouvez également envisager Aparapi . Il vous permet d'écrire votre code en Java et tente de convertir bytecode à OpenCL lors de l'exécution.

La divulgation complète. Je suis le développeur Aparapi.

Eh bien CUDA est une modification de C, de vous écrire CUDA noyau ont à coder en C, puis compiler à la forme exécutable avec le compilateur CUDA de nvidia. code produit natif pourrait alors être lié à Java en utilisant JNI. Ainsi, vous pouvez techniquement pas écrire du code du noyau de Java. Il y a JCUDA http://www.jcuda.de/jcuda/JCuda.html , il vous fournit les APIs de cuda pour la mémoire générale / dispositif menagement et certaines méthodes Java qui sont mises en œuvre dans CUDA et JNI enveloppé (FFT, certaines méthodes d'algèbre linéaire .. etc etc ..).

Par contre OpenCL est juste une API. noyaux OpenCL sont des chaînes simples transmis à l'API si en utilisant OpenCL de Java, vous devriez être en mesure de préciser vos propres noyaux. OpenCL obligatoire pour Java est disponible ici http://www.jocl.org/ .

Je me sers JOCL et je suis très content.

Le principal inconvénient de OpenCL sur CUDA (au moins pour moi) est le manque de bibliothèques disponibles (Thrust, CUDPP, etc.). Cependant CUDA peut être facilement porté à OpenCL, et en regardant comment les bibliothèques travail (algorithmes, stratégies, etc.) est en fait très agréable que vous apprenez beaucoup avec elle.

Je sais qu'il est tard, mais jeter un oeil à ceci: https://github.com/pcpratts/rootbeer1

Je n'ai pas travaillé avec elle, mais semble beaucoup plus facile à utiliser que d'autres solutions.

A partir de la page du projet:

Rootbeer est plus avancé que CUDA ou OpenCL langage Java Liaisons. Avec des liaisons le développeur doit sérialisation des graphiques complexes d'objets dans des tableaux de types primitifs. Avec Rootbeer cela se fait automatiquement. Aussi avec des liaisons de langage, le développeur doit écrire le noyau GPU CUDA dans ou OpenCL. Avec Rootbeer une analyse statique du code Java est fait (en utilisant suies) et le code CUDA est généré automatiquement.

Je peux également recommander JOCL par jogamp.org , fonctionne sur Linux, Mac et Windows. CONRAD , par exemple, utilise fortement OpenCL en combinaison avec JOCL.

Si vous voulez faire un peu de traitement d'image ou d'opérations géométriques, vous voudrez peut-être une bibliothèque d'algèbre linéaire avec support gpu (avec CUDA par exemple). Je vous suggère de sorcière ND4J est le algrebra linéaire avec le soutien GPU CUDA sur lequel DeepLearning4J est construit. Avec cela, vous ne devez pas traiter avec CUDA directement et doivent code de bas niveau dans c. De plus, si vous voulez faire plus de choses avec l'image avec DL4J vous aurez accès à des opérations de traitement d'image spécifique tels que convolution.

Vous pouvez jeter un oeil à l'API CUDA4J

http://sett.com/gpgpu/the-cuda4j-api

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top