سؤال

الحوسبة للأغراض العامة على وحدات معالجة الرسومات (GPGPU) هو مفهوم جذاب للغاية لتسخير قوة وحدة معالجة الرسومات لأي نوع من الحوسبة.

أحب استخدام GPGPU لمعالجة الصور والجزيئات والعمليات الهندسية السريعة.

في الوقت الحالي ، يبدو أن المتنافسين في هذا الفضاء هما CUDA و OPENCL. أود أن أعرف:

  • هل OpenCl قابلة للاستخدام حتى الآن من Java على Windows/Mac؟
  • ما هي طرق المكتبات للتفاعل مع OpenCl/CUDA؟
  • هل يستخدم JNA خيارًا مباشرة؟
  • هل أنسى شيئا؟

أي تجربة/أمثلة/أمثلة/قصص الحرب في العالم الحقيقي.

هل كانت مفيدة؟

المحلول

بقدر ما أعلم، Javacl / opencl4java هو الربط الوحيد Opencl المتوفر على جميع الأنظمة الأساسية في الوقت الحالي (بما في ذلك MacOS X و FreeBSD و Linux و Windows و Solaris ، وكلها في Intel 32 و 64 بت ومتغيرات PPC ، بفضل استخدامها لـ JNA).

يحتوي على عروض تجريبية تعمل بشكل جيد بالفعل من Java Web Start على الأقل على Mac و Windows (لتجنب حوادث عشوائية على Linux ، يرجى الاطلاع صفحة الويكي هذه, ، كهذه الجزيئات التجريبية.

كما يأتي مع بعض المرافق (GPGPU توليد الأرقام العشوائية ، وتقليل الموازي الأساسي ، الجبر الخطي) و Scala DSL.

أخيرًا ، إنها أقدم الروابط المتاحة (منذ يونيو 2009) لديها مجتمع مستخدم نشط.

(إخلاء المسؤولية: أنا جافاكلمؤلف :-))

نصائح أخرى

يمكنك أيضًا التفكير Aparapi. يتيح لك كتابة الكود الخاص بك في Java وسيحاول تحويل Bytecode إلى OpenCl في وقت التشغيل.

الكشف الكامل. أنا مطور Aparapi.

حسنًا ، CUDA هو تعديل C ، لكتابة kernel cuda عليك أن ترمز في C ، ثم تجميع النموذج القابل للتنفيذ مع برنامج التحويل البرمجي CUDA في NVIDIA. يمكن بعد ذلك ربط الكود الأصلي المنتجة بـ Java باستخدام JNI. من الناحية الفنية لا يمكنك كتابة رمز النواة من جافا. هناك jcuda http://www.jcuda.de/jcuda/jcuda.html, ، يوفر لك واجهات برمجة تطبيقات CUDA للذاكرة العامة/الجهاز وبعض أساليب Java التي يتم تنفيذها في CUDA و JNI ملفوفة (FFT ، بعض طرق الجبر الخطي .. الخ ..).

من ناحية أخرى ، فإن Opencl هو مجرد واجهة برمجة تطبيقات. نواة Opencl عبارة عن سلاسل واضحة تم تمريرها إلى واجهة برمجة التطبيقات ، لذا باستخدام OpenCl من Java ، يجب أن تكون قادرًا على تحديد نواةك الخاصة. يمكن العثور على OpenCl Binding لـ Java هنا http://www.jocl.org/.

لقد كنت أستخدم JOCL وأنا سعيد جدًا بها.

العيب الرئيسي لـ OpenCl على CUDA (على الأقل بالنسبة لي) هو الافتقار إلى المكتبات المتاحة (الدفع ، CUDPP ، إلخ). ومع ذلك ، يمكن نقل CUDA بسهولة إلى OpenCL ، ومن خلال النظر في كيفية عمل هذه المكتبات (الخوارزميات ، والاستراتيجيات ، إلخ) ، في الواقع لطيفة للغاية وأنت تتعلم الكثير معها.

أعلم أن الوقت متأخر ولكن ألق نظرة على هذا: https://github.com/pcpratts/rootbeer1

لم أعمل معها ولكن يبدو أن الاستخدام أسهل بكثير من الحلول الأخرى.

من صفحة المشروع:

Rootbeer أكثر تقدمًا من روابط لغة CUDA أو OpenCl Java. مع الروابط ، يجب على المطور تخصيص الرسوم البيانية المعقدة للكائنات في صفائف من الأنواع البدائية. مع الجذر يتم ذلك تلقائيًا. أيضًا مع روابط اللغة ، يجب على المطور كتابة نواة GPU في CUDA أو OpenCL. مع ROOTBEER ، يتم إنشاء تحليل ثابت لرمز JAVA BYTECODE (باستخدام SOOT) ويتم إنشاء رمز CUDA تلقائيًا.

يمكنني أيضا أن أوصي JOCL بواسطة jogamp.org, ، يعمل على Linux و Mac و Windows. كونراد, ، على سبيل المثال ، يستخدم Opencl بشدة مع JOCL.

إذا كنت ترغب في القيام ببعض عمليات معالجة الصور أو العمليات الهندسية ، فقد ترغب في مكتبة الجبر الخطية مع دعم GPU (مع CUDA على سبيل المثال). أود أن أقترح عليك الساحرة ND4J هي الجربرا الخطي مع دعم GPU CUDA الذي تم بناء DeepLearning4J. مع ذلك ، لا يتعين عليك التعامل مع CUDA مباشرةً ويجب أن تضطر إلى رمز منخفض المستوى في C. بالإضافة إلى ذلك ، إذا كنت ترغب في القيام بمزيد من الأشياء باستخدام Image باستخدام DL4J ، فستتمكن من الوصول إلى عمليات معالجة الصور المحددة مثل الالتفاف.

يمكنك إلقاء نظرة على API CUDA4J

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top