2010-08-21 19 views
5

मैंने अंतहीन रूप से विचार किया है कि कौन सी भाषा/ढांचा निम्नलिखित के लिए उपयुक्त है। मुझे एक एचपीसी ढांचा विकसित करने की जरूरत है। सभी प्रसंस्करण पूरी तरह से ओओ होगा। यह उदाहरणों (बाहरी) और आंतरिक रूप से धागे & इंजनों के बीच वस्तुओं को पारित करेगा। ऑब्जेक्ट्स Active Messages का विस्तार होगा।एचपीसी के लिए कौन सी भाषा/ढांचा: जावा/नेट/डेल्फी/सी/सी ++/उद्देश्य-सी?

इन उदाहरणों मोबाइल पर चल सके, विंडोज, मैक, लिनक्स, आदि

प्रणाली गति & दक्षता के साथ अत्यधिक समानांतर कंप्यूटिंग प्रदर्शन करने में सक्षम होने की जरूरत है, आदर्श SSE का लाभ लेने के लिए, और आदर्श समर्थन CUDA/OpenCL।

मैं निम्नलिखित पर विचार किया है:

जावा - यह स्मृति भूख लगी है और मैक (नहीं आधिकारिक तौर पर, वैसे भी)
नेट पर नहीं चलता है - स्मृति भूख; प्लेटफार्म दायरे में सीमित; कोई मूल एसएसई
डेल्फी - 64 बिट नहीं; सीमित प्लेटफ़ॉर्म स्कोप
सी/सी ++ - सीधे मैक द्वारा समर्थित नहीं है; कोड के लिए जटिल; हालांकि यह सर्वव्यापी
उद्देश्य-सी - मैक द्वारा समर्थित है; प्रतीत होता है कि कहीं और समर्थित है; संदेशों को पारित करके काम करता है, जो मेरी डिजाइन आवश्यकताओं के अनुसार है; इसके बारे में ज्यादा जानकारी नहीं

कोई सुझाव?

+1

जावा मैक जांच http://developer.apple.com/java/faq/ – YoK

+0

C और C++ बिल्कुल मैक द्वारा समर्थित हैं पर चलता है। आपको क्या लगता है कि मैक ओएस में लिखा गया है? – Joe

+0

"उत्तीर्ण संदेश" == "कॉलिंग विधियां"। बिलकुल अलग नहीं है। – Joe

उत्तर

5

यहां कुछ विकल्प (किसी विशेष क्रम में) के नीचे मेरी रन है:

C/C++

यदि सब आप ध्यान प्रदर्शन (और कुछ भी नहीं किसी और), इन प्रदान करती है। सिस्टम स्तर संरचनाओं के लिए प्रत्यक्ष पहुंच, जैसे कि प्रोसेसर एफ़िनिटी और इनलाइन असेंबली निश्चित रूप से प्रदर्शन पर प्रभाव डाल सकती है। हालांकि सी/सी ++ विकल्प में 2 मुख्य दोष हैं। सबसे पहले न तो एक अच्छी तरह से परिभाषित मेमोरी मॉडल है, इसलिए आप जिस मेमोरी मॉडल के खिलाफ विकास कर रहे हैं वह उस सीपीयू का है जिसे आप सिस्टम चला रहे हैं (यदि आपको नहीं पता कि स्मृति मॉडल क्या है जो यह समवर्ती प्रोग्रामिंग पर लागू होता है, तो आपको चाहिए यह नहीं कर रहा है)। यह आपको एक मंच पर बहुत कसकर जोड़ता है। दूसरा कचरा कलेक्टर की कमी है, मैन्युअल मेमोरी मैनेजमेंट सरल मामलों में मुश्किल (लेकिन करने योग्य) है, सी ++ के साथ कई सहायक उपयोगिताएं समस्या को सरल बनाती हैं (जैसे ऑटो पॉइंटर्स/स्मार्ट पॉइंटर्स)। समवर्ती कोड लिखते समय यह परिमाण का एक क्रम है क्योंकि नियमों को परिभाषित करने के लिए नियमों को परिभाषित करना बहुत मुश्किल हो जाता है। जैसे जब एक वस्तु को एक अलग धागे पर पारित किया जाता है, तो इसे जारी करने के लिए कौन जिम्मेदार है? यदि सी ++ का उपयोग करना यह सुनिश्चित करना महत्वपूर्ण है कि आप स्मृति प्रबंधित करने में सहायता के लिए उपयोग की जाने वाली कक्षाओं के थ्रेड सुरक्षित संस्करणों का उपयोग कर रहे हैं। जैसे बूस्ट स्मार्ट पॉइंटर केवल विभिन्न धागे (जैसे डीरफ्रेंसिंग ठीक है) में "कॉन्स्ट" के रूप में घोषित विधियों के उपयोग का समर्थन करता है, हालांकि गैर-कॉन्स्टेंस विधियां (उदा। असाइनमेंट) थ्रेड सुरक्षित नहीं हैं।

जावा

जावा मेरी सिफारिश होगा, यह प्लेटफार्मों आप का उल्लेख (मोबाइल, उदा JavaME और Android सहित) के सभी पर समर्थन के रूप में अच्छी तरह से CUDA support के रूप में है। जावा में एक अच्छी तरह से परिभाषित मेमोरी मॉडल है जो प्लेटफॉर्म, एक मजबूत और परिपक्व जेआईटी और ऑप्टिमाइज़र, और अच्छे और कचरा कलेक्टरों में सुधार करने के लिए लगातार है। जावा में लिखे गए अधिकांश सामान्य उद्देश्य अनुप्रयोगों को उनके सी/सी ++ समकक्षों के जितना तेज़ होगा। हालांकि यह स्मृति स्मृति का थोड़ा सा है, यदि आप एचपीसी काम कर रहे हैं तो आप समस्या पर कुछ सभ्य हार्डवेयर फेंकने की संभावना रखते हैं। यह देखते हुए कि आप कमोडिटी हार्डवेयर पर जीबी के 100 जी को संबोधित कर सकते हैं, स्मृति समस्या किसी समस्या से कम है।मोबाइल एकमात्र वास्तविक क्षेत्र है जहां स्मृति उपयोग को बाधित किया जाता है और विशेषज्ञ रनटाइम वातावरण इस संबंध में बेहतर प्रदर्शन करते हैं (ऊपर देखें)। जावा (एचपीसी परिप्रेक्ष्य से) के लिए एकमात्र मुख्य दोष कॉपी जटिल प्रकारों (यानी सी # में structs) द्वारा पारित होने की कमी है, इसलिए सभी जटिल वस्तुओं को जीसी पर दबाव डालने के लिए आवंटित किया जाना चाहिए। एस्केप विश्लेषण इस हद तक मदद करने के लिए माना जाता है, हालांकि इसे सामान्य मामलों में अच्छी तरह से काम करना मुश्किल है (ध्यान दें कि यह हाल ही में जेडीके के विभिन्न संशोधनों में शामिल हो गया है)।

व्यापक भाषा समर्थन (स्काला और ग्रूवी ++ काफ़ी अच्छा प्रदर्शन प्रोफ़ाइल है) का उल्लेख है और संदेश गुजर समवर्ती चौखटे ( actors, akka, kilim) के एक नंबर देखते हैं वर्थ

सी # /। नेट

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

गूगल जाओ

बहुत नया है, लेकिन नजरिए से दिलचस्प है कि यह मूल रूप से संकलित किया गया है (कोई JIT भूमि के ऊपर), लेकिन अभी भी एक मजबूत क्रम, स्मृति मॉडल, कचरा कलेक्टर और प्रत्यक्ष समर्थन सीएसपी के लिए (समवर्ती अनुक्रमिक प्रसंस्करण है) भाषाओं (चैनल) में विशेषताएं। शायद कुछ तरीकों से जाने के लिए, एक नए जीसी के विकास के रास्ते में हो गया है लेकिन अभी तक सामने नहीं आया है और संभवतः वे कंपाइलर से बाहर निकल सकते हैं।

हास्केल और अन्य कार्यात्मक भाषाओं

नहीं अनुभव यहाँ का एक बहुत है, लेकिन इस तरह के अचल स्थिति और लगातार संग्रह के रूप में कार्यात्मक निर्माणों में से कुछ मजबूत समवर्ती अनुप्रयोगों के निर्माण के लिए काफी उपयोगी हो सकता है।

+0

मैन्युअल मेमोरी प्रबंधन * + * सी ++ में मुश्किल नहीं है। इसमें कंटेनर, स्मार्ट पॉइंटर्स और आरएआईआई हैं जिसका अर्थ है कि आप मैन्युअल रूप से कभी भी हटा या मुक्त नहीं करते हैं। – Inverse

+0

मैंने सी ++ सेक्शन को अपडेट किया है, हालांकि बिंदु अधिक था कि सी/सी ++ मेमोरी मैनेजमेंट (यहां तक ​​कि सहायक पुस्तकालयों का उपयोग भी) एक समवर्ती परिदृश्य में बहुत मुश्किल हो जाता है। –

0

प्रणाली, गति & दक्षता के साथ अत्यधिक समानांतर कंप्यूटिंग प्रदर्शन करने के लिए आदर्श SSE का लाभ लेने के लिए, और आदर्श CUDA/OpenCL समर्थन में सक्षम होने की जरूरत है।

यह C या C++ तक इसे संक्षिप्त करता है। और चूंकि आप ओओ चाहते हैं, यह केवल C++ तक सीमित हो गया है।

गंभीरता से हालांकि, लेने क्या आप या आपके डेवलपर्स में सबसे अच्छा कर रहे हैं।

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