2008-09-15 15 views
5

मैं दूसरे दिन दोपहर के भोजन के दौरान एक दोस्त के साथ तंत्रिका नेटवर्क (एनएन) पर चर्चा कर रहा था और उन्होंने दावा किया कि जावा में लिखे गए एनएन के प्रदर्शन सी ++ में लिखे गए एक जैसा होगा। मुझे पता है कि 'बस समय' कंपाइलर तकनीक के साथ जावा बहुत अच्छा कर सकता है, लेकिन किसी भी तरह से मैं इसे अभी नहीं खरीदता। क्या किसी के पास कोई ऐसा अनुभव है जो इस मुद्दे पर प्रकाश डालेगा? This page विषय पर मेरे पढ़ने की सीमा है।सी ++/तंत्रिका नेटवर्क के लिए जावा प्रदर्शन?

+0

इस प्रश्न का उत्तर देने से पहले, याद रखें कि वह तंत्रिका नेटवर्क के बारे में पूछ रहा है। मुझे लगता है कि अगर हम अभी भी विषय पर हैं तो हम पूरे देशी कोड बनाम दुभाषिया बहस को बाईपास कर सकते हैं। –

+0

सी ++ में एक ही समस्या को हल करने के लिए शुभकामनाएं 10x अधिक खर्च करती हैं। –

उत्तर

10

हॉटस्पॉट जेआईटी अब सी ++ की तुलना में तेज कोड बना सकता है। कारण रन-टाइम अनुभवजन्य अनुकूलन है।

उदाहरण के लिए, यह देख सकता है कि एक निश्चित पाश "झूठी" शाखा 99% समय लेती है और उसके अनुसार मशीन कोड निर्देशों को पुन: व्यवस्थित करती है।

इस बारे में बहुत सारे लेख हैं। यदि आप सभी विवरण चाहते हैं, तो Sun's excellent whitepaper पढ़ें। अधिक अनौपचारिक जानकारी के लिए, try this one

+0

सी ++ प्रोफाइल मार्गदर्शित ऑप्टमीमाइज़ेशन के साथ ऐसा ही कर सकता है। –

+0

यहां एक निष्पक्ष स्रोत है जो जावा को कुछ डबल परिशुद्धता गणित के काम में सी/सी ++ से 1 9% धीमा दिखा रहा है (अस्पष्ट रूप से एक तंत्रिका नेट के समान)। http://shootout.alioth.debian.org/u32q/benchmark.php?test=nbody&lang=all –

2

मुझे हॉटस्पॉट जेआईटी और प्रोफाइल-निर्देशित अनुकूलन अनुकूलित सी ++ के बीच तुलना में रुचि होगी।

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

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

+0

ध्यान दें कि आप जावा कोड के प्रोफाइल-निर्देशित अनुकूलन भी कर सकते हैं, इसलिए निष्पक्ष होने के लिए आपको प्रोफ़ाइल-निर्देशित करने की आवश्यकता है दोनों या न तो। –

+0

ओह यकीन है, लेकिन हॉटस्पॉट जेआईटी प्रोफाइल-निर्देशित है (केवल रन-टाइम पर निर्देशित)। मैं बस इतना कह रहा था कि हॉटस्पॉट जेआईटी वास्तव में प्रोफाइल-निर्देशित सी या सी ++ संकलन के खिलाफ तुलना की जानी चाहिए (जो वास्तव में आप मेरी टिप्पणी में बहस कर रहे हैं)। – Kevin

0

यह सी ++ बनाम जावा प्रदर्शन के बारे में सख्ती से नहीं है लेकिन फिर भी उस संबंध में दिलचस्प है: एक paper कचरा एकत्रित वातावरण में चल रहे कार्यक्रमों के प्रदर्शन के बारे में।

2

एकमात्र संभावित उत्तर है: प्रोटोटाइप बनाएं और अपने लिए उपाय करें। यदि मेरा अनुभव किसी भी रूचि का है, तो जावा और सी # मैं जिस प्रकार के काम कर रहा था उसके लिए सी ++ से हमेशा धीमा था - मुझे लगता है कि ज्यादातर मेमोरी खपत के कारण। बेशक, आप एक पूरी तरह से अलग निष्कर्ष पर आ सकते हैं।

0

यदि अत्यधिक कचरा संग्रह एक चिंता है, तो आप हमेशा अप्रयुक्त उच्च-मूर्ति वस्तुओं का पुन: उपयोग कर सकते हैं।

एक ऐसी फैक्ट्री बनाएं जो नई वस्तुओं को बनाने से पहले उन लोगों का उपयोग करके पुनर्नवीनीकरण वस्तुओं के लिए सॉफ्ट रेफरेंस की कतार रखती है। फिर इन ऑब्जेक्ट्स का उपयोग करने वाले कोड में, रीसाइक्लिंग के लिए कारखाने में स्पष्ट रूप से इन वस्तुओं को वापस कर दें।

-1

चीजों की भव्य योजना में, आप शायद 5% प्रदर्शन अंतर पर बहस कर रहे हैं जहां आपको सीयूडीए या समर्पित हार्डवेयर पर जाकर परिमाण में वृद्धि के कई आदेश मिलेंगे।

0

शायद सी ++, हालांकि मुझे विश्वास है कि धीमे स्टार्टअप समय के अलावा आप शायद ही अंतर को देखेंगे। जावा हालांकि विकास को तेजी से और रखरखाव आसान बनाता है।

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