वैज्ञानिक कंप्यूटिंग के संदर्भ में C ++ 11 चाल शब्दार्थ का क्या प्रभाव है?


10

C ++ 11 चालित शब्दार्थ का परिचय देता है, उदाहरण के लिए, उन परिस्थितियों में कोड प्रदर्शन में सुधार कर सकता है जहाँ C ++ 03 को कॉपी निर्माण या कॉपी असाइनमेंट करने की आवश्यकता होगी। यह लेख बताता है कि निम्नलिखित कोड 5x गति का अनुभव करता है जब C + 11 के साथ संकलित किया जाता है:

vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
    vector<int> x(1000);
    V.push_back(x);
}

वैज्ञानिक कंप्यूटिंग के संदर्भ में C ++ 11 चाल शब्दार्थ का क्या प्रभाव है?

मैं इस सवाल में दिलचस्पी रखता हूं, सामान्य है, लेकिन अधिक विशेष रूप से मैं बूस्ट एलीमेंट कोड्स के लिए बूस्ट एलिमेंट कोड्स को बढ़ावा देने के लिए लिखा गया हूं, जो बूस्ट लाइब्रेरी का उपयोग करके लिखा गया है। मैंने अपने कुछ C ++ 03 कोड का बूस्ट संस्करण 1.47.0 का उपयोग करके परीक्षण किया है (जब से जारी नोट्स का उल्लेख है कि गतिमान शब्दार्थ 1.48.0 में पेश किए गए हैं) और संस्करण 1.53.0 को बढ़ावा देते हैं, लेकिन मैंने बहुत सुधार नहीं देखा। मुझे लगता है कि किसी भी बचत का अनुमान है कि boost::numeric::ublas::vector/ के लिए कॉपी-कंस्ट्रक्शन नहीं किया जा सकता है matrixऔर boost::functionध्यान देने योग्य नहीं है क्योंकि सिस्टम मैट्रिक को हल करने के लिए कार्यभार का बड़ा हिस्सा बनता है।

संपादित करें: वास्तव में ऐसा लगता है कि चाल शब्दार्थ केवल के लिए लागू किया जाता है boost::function( संस्करण 1.52.0 रिलीज नोट्स देखें )। चाल शब्दार्थों का कोई उल्लेख नहीं है boost::numeric, मैंने सूत्रों को सुनिश्चित करने के लिए तैयार किया और कोई संदर्भ नहीं प्रतीत होते हैं।


1
जब तक आप अपने प्रश्न के अंतिम भाग में ध्यान देते हैं, जब तक कि आप अपने कोड को प्रोफाइल नहीं करते हैं और बहुत अधिक नकल करते हुए देखा जाता है, तो आप चाल शब्दार्थों का उपयोग करके अपने प्रदर्शन में काफी सुधार नहीं कर सकते हैं।
बिल बर्थ

जवाबों:


10

मुझे लगता है कि व्यवहार में प्रभाव सीमित है और सीमित होगा।

अभी यह सीमित होने का कारण यह है कि बड़े परिमित तत्व पैकेज कोड लिखने के लिए सावधान हैं जो पोर्टेबल है, और इसलिए वे अभी तक अपने कोड में C ++ 11 भाषा निर्माण का उपयोग नहीं करते हैं।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.