2010-04-13 10 views
85

ग्राफिक्स प्रोसेसिंग इकाइयों (GPGPU) पर सामान्य प्रयोजन कंप्यूटिंग किसी भी तरह के कंप्यूटिंग के लिए जीपीयू की शक्ति का उपयोग करने के लिए एक बहुत ही आकर्षक अवधारणा है।जावा में जीपीजीपीयू/सीयूडीए/ओपनसीएल के लिए सर्वश्रेष्ठ दृष्टिकोण?

मुझे छवि प्रसंस्करण, कणों और तेज़ ज्यामितीय परिचालनों के लिए जीपीजीपीयू का उपयोग करना अच्छा लगेगा।

अभी, ऐसा लगता है कि इस जगह में दो दावेदार सीयूडीए और ओपनसीएल हैं। मुझे जानना है:

  • क्या ओपनसीएल अभी भी विंडोज/मैक पर जावा से उपयोग योग्य है?
  • OpenCL/CUDA में इंटरफ़ेस करने के लिए पुस्तकालयों के तरीके क्या हैं?
  • जेएनए सीधे एक विकल्प का उपयोग कर रहा है?
  • क्या मैं कुछ भूल रहा हूँ?

कोई असली दुनिया अनुभव/उदाहरण/युद्ध कहानियों की सराहना की जाती है।

+1

मुझे लगता है कि जावा में प्रोग्रामिंग जीपीयू कठिन होगा, क्योंकि मैं कूडा प्रोग्रामिंग में पॉइंटर्स का कितना उपयोग करता हूं। मुझे नहीं पता कि डिवाइस प्रोग्रामिंग में जावा का उपयोग करने के लिए बहुत अधिक लाभ होगा, क्योंकि आपको पूर्ण जावा फीचर्स/लाइब्रेरी लागू करने की संभावना नहीं है जो जावा + सी ++ – Anycorn

+2

से जावा को अलग करता है मैंने कुछ प्रभावशाली जावा डेमो देखे हैं जो जीएलएसएल और शायद सीयूडीए का इस्तेमाल करते हैं, तो यह निश्चित रूप से संभव है। – Frederik

+1

क्या आपने jcuda.org और jocl.org की जांच की? – bakkal

उत्तर

56

AFAIK, JavaCL/OpenCL4Java केवल OpenCL बाध्यकारी है कि सही (अब MacOS एक्स, FreeBSD, लिनक्स, विंडोज, सोलारिस, इंटेल 32 में सभी, 64 बिट्स और पीपीसी वेरिएंट, JNA के अपने प्रयोग के लिए धन्यवाद सहित सभी प्लेटफार्मों पर उपलब्ध है)।

यह क़ौम है कि वास्तव में लिनक्स पर यादृच्छिक दुर्घटनाओं से बचने के लिए कम से कम मैक और विंडोज (पर जावा वेब प्रारंभ से ठीक चलाने है, कृपया this wiki page, इस तरह इस Particles Demo के रूप में देखते हैं।

यह भी कुछ उपयोगिताओं के साथ आता है (। GPGPU यादृच्छिक संख्या पीढ़ी, बुनियादी समानांतर कमी, रेखीय बीजगणित) और एक Scala DSL

अंत में, यह सबसे पुराना उपलब्ध बाइंडिंग है (जून 2009) और it has an active user community के बाद से

(अस्वीकरण:। मैं JavaCL के लेखक हूँ: -))

+0

ओह मैं जेएनएलपी के लिए बहुत उत्साहित था, लेकिन जाहिर है कि यह मेरी मैकबुक पसंद नहीं करता है। क्रॉस प्लेटफ़ॉर्म के लिए बहुत कुछ। – Karl

+4

@ करल ओह क्षमा करें, मैंने जेएनएलपी तोड़ दिया (जेएआर हाल ही में नाम बदल गए)! अब यह तय हो गया है, आशा है कि आप दोबारा प्रयास करेंगे ... (और क्रॉस-प्लेटफ़ॉर्म-वार: यह सभी प्लेटफ़ॉर्म पर लगातार टूट गया था ;-)) – zOlive

+3

हाल ही में जावा 7 सुरक्षा में कसने से कण डेमो वेब शुरू हो गया है अपवाद। –

11

अच्छी तरह से सीयूडीए सी का एक संशोधन है, सीयूडीए कर्नेल लिखने के लिए आपको सी में कोड करना है, और उसके बाद निष्पादन योग्य फॉर्म को एनवीडिया के CUDA कंपाइलर के साथ संकलित करना है। उत्पादित मूल कोड जेएनआई का उपयोग कर जावा के साथ जोड़ा जा सकता है। तो तकनीकी रूप से आप जावा से कर्नेल कोड नहीं लिख सकते हैं। जेसीयूडीए http://www.jcuda.de/jcuda/JCuda.html है, यह आपको सामान्य मेमोरी/डिवाइस मैनेजमेंट के लिए क्यूडा एपिस प्रदान करता है और कुछ जावा विधियां जो सीयूडीए और जेएनआई लिपटे (एफएफटी, कुछ रैखिक बीजगणित विधियों आदि) में लागू की जाती हैं।)।

दूसरी ओर ओपनसीएल सिर्फ एक एपीआई है। ओपनसीएल कर्नेल एपीआई को सादे तारों को पारित कर रहे हैं ताकि जावा से ओपनसीएल का उपयोग करके आप अपने स्वयं के कर्नेल निर्दिष्ट कर सकें। जावा के लिए ओपनसीएल बाध्यकारी http://www.jocl.org/ पाया जा सकता है।

+2

यदि आपके प्लेटफ़ॉर्म पर जेएनए (http://jna.dev.java.net) समर्थित है, तो मैं मूल कोड का आह्वान करने के लिए इसका उपयोग करें, क्योंकि यह जेएनआई लाइब्रेरी को कोड करने से बहुत कम प्रयास है। – mdma

11

मैं जेओसीएल का उपयोग कर रहा हूं और मैं इसके साथ बहुत खुश हूं।

सीयूडीए (कम से कम मेरे लिए) पर ओपनसीएल का मुख्य नुकसान उपलब्ध पुस्तकालयों (थ्रस्ट, सीयूडीपीपी, आदि) की कमी है। हालांकि सीयूडीए को ओपनसीएल में आसानी से पोर्ट किया जा सकता है, और यह देखकर कि वे पुस्तकालय कैसे काम करते हैं (एल्गोरिदम, रणनीतियों, आदि) वास्तव में बहुत अच्छा है क्योंकि आप इसके साथ बहुत कुछ सीखते हैं।

32

आप Aparapi पर भी विचार कर सकते हैं। यह आपको जावा में अपना कोड लिखने की अनुमति देता है और रनटाइम पर ओपनसीएल में बाइटकोड को कन्वर्ट करने का प्रयास करेगा।

पूर्ण प्रकटीकरण। मैं अपरापी डेवलपर हूं।

+0

क्या अपारपी अभी भी बनाए रखा है? –

+0

@MrJedi: मुझे ऐसा लगता है, जीथ्यूब पर नवीनतम प्रतिबद्धता केवल कुछ दिन पुरानी है: https://github.com/aparapi/aparapi –

+0

यह "कुछ हद तक बनाए रखा" है;) मैं एक रखरखाव हूं। – barneypitt

7

मैं जानता हूँ कि यह देर हो चुकी है, लेकिन इस पर एक नज़र डालें: https://github.com/pcpratts/rootbeer1

मैं इसके साथ काम नहीं किया है, लेकिन बहुत से अन्य समाधान का उपयोग करना आसान लगता है।

परियोजना पृष्ठ से:

rootbeer CUDA या OpenCL जावा भाषा बाइंडिंग की तुलना में अधिक उन्नत है। बाइंडिंग के साथ डेवलपर को प्राचीन प्रकार के सरणी में वस्तुओं के जटिल ग्राफ को क्रमबद्ध करना होगा। रूटबीर के साथ यह स्वचालित रूप से किया जाता है। भाषा बाइंडिंग के साथ, डेवलपर को सीयूडीए या ओपनसीएल में जीपीयू कर्नेल लिखना होगा। रूटबीर के साथ जावा बाइटकोड का एक स्थिर विश्लेषण किया जाता है (सूट का उपयोग करके) और CUDA कोड स्वचालित रूप से जेनरेट किया जाता है।

2

मैं JOCL by jogamp.org की भी सिफारिश कर सकता हूं, लिनक्स, मैक और विंडोज पर काम करता है। उदाहरण के लिए, CONRAD, जेओसीएल के साथ संयोजन में भारी ओपनसीएल का उपयोग करता है।

-2

पर एक नज़र ले जा सकते हैं गूगल के अंतिम उपलब्धियों के बाद, मुझे लगता है tensorflow GPU पर गणना करने के लिए सबसे अच्छा तरीका बिल्कुल ही OpenCL नहीं है,। टेन्सफोर्लो एक ही एपीआई के साथ ओपनसीएल और सीयूडीए कंप्यूटेशंस का समर्थन करता है।

संबंधित मुद्दे