संक्षेप में, मुख्य अंतर IMO वापस पाने चाहते हैं:
- आप पहले से क्या आपके संभावना पता होना चाहिए बाधा (I/O या CPU) होगी और इसे हल करने के लिए सर्वोत्तम एल्गोरिदम और आधारभूत संरचना पर ध्यान केंद्रित करें। I/O अक्सर बाधा है।
- एल्गोरिदम का विकल्प और ठीक-ट्यूनिंग अक्सर किसी अन्य विकल्प पर हावी होती है।
- एल्गोरिदम और एक्सेस पैटर्न में भी मामूली परिवर्तन परिमाण के आदेश द्वारा प्रदर्शन को प्रभावित कर सकते हैं। आप बहुत अनुकूलन करेंगे। "सर्वश्रेष्ठ" समाधान सिस्टम-निर्भर होगा।
- अपने सहकर्मियों और अन्य वैज्ञानिकों से इन डेटा सेट के साथ अपने अनुभवों से लाभ प्राप्त करने के लिए बात करें। पाठ्यपुस्तकों में बहुत सी चालें नहीं मिल सकती हैं।
- प्री-कंप्यूटिंग और स्टोरिंग बेहद सफल हो सकती है।
बैंडविड्थ और मैं/हे
प्रारंभ में, बैंडविड्थ और मैं/हे अक्सर अड़चन है। आपको एक परिप्रेक्ष्य देने के लिए: SATA 3 के सैद्धांतिक सीमा पर, 1 टीबी पढ़ने में लगभग 30 मिनट लगते हैं। यदि आपको यादृच्छिक पहुंच की आवश्यकता है, तो कई बार पढ़ें या लिखें, आप इसे ज्यादातर समय मेमोरी में करना चाहते हैं या कुछ तेज़ी से तेज करना चाहते हैं (उदा।iSCSIInfiniBand के साथ)। आप जिस भी इंटरफ़ेस का उपयोग कर रहे हैं, सैद्धांतिक सीमा के करीब जितना संभव हो सके, अपने सिस्टम को आदर्श रूप से parallel I/O करने में सक्षम होना चाहिए। उदाहरण के लिए, MPI-2 I/O के शीर्ष पर विभिन्न प्रक्रियाओं में समानांतर में अलग-अलग फ़ाइलों को एक्सेस करना, या HDF5 बहुत आम है। आदर्श रूप से, आप समानांतर में गणना और I/O भी करते हैं ताकि दोनों में से एक "मुक्त" हो।
क्लस्टर
अपने मामले के आधार पर, या तो मैं/हे या अड़चन हो से सीपीयू हो सकता है। इससे कोई फर्क नहीं पड़ता कि यह कौन सा है, अगर आप अपने कार्यों को प्रभावी ढंग से वितरित कर सकते हैं तो उदाहरण के लिए विशाल प्रदर्शन वृद्धि क्लस्टर के साथ हासिल की जा सकती है (उदाहरण MapReduce)। इसे सामान्य पाठ्यपुस्तक उदाहरणों की तुलना में पूरी तरह से अलग एल्गोरिदम की आवश्यकता हो सकती है। यहां विकास का समय व्यतीत करना अक्सर सबसे अच्छा समय बिताया जाता है।
एल्गोरिदम
एल्गोरिदम के बीच चुनने में एक एल्गोरिथ्म के बड़े हे बहुत महत्वपूर्ण है, लेकिन इसी तरह बड़ी हे के साथ एल्गोरिदम इलाके के आधार पर प्रदर्शन में नाटकीय रूप से अलग हो सकता है। कम स्थानीय एल्गोरिदम है (यानी अधिक कैश मिस और मुख्य मेमोरी मिस), खराब प्रदर्शन होगा - स्टोरेज तक पहुंच आमतौर पर मुख्य स्मृति की तुलना में धीमी गति का क्रम होता है। मैट्रिक्स गुणाओं या loop interchange के लिए सुधार के लिए शास्त्रीय उदाहरण tiling होंगे।
कंप्यूटर, भाषा, विशेष उपकरणों
अपने टोंटी है मैं/हे, इसका मतलब है कि बड़े डेटा सेट के लिए एल्गोरिदम अधिक मुख्य स्मृति (जैसे 64 बिट) या प्रोग्रामिंग भाषाओं/डाटा संरचनाओं के साथ से लाभ उठा सकते कम स्मृति खपत (उदाहरण के लिए, पायथन __slots__
में उपयोगी हो सकता है), क्योंकि अधिक मेमोरी का मतलब प्रति CPU समय कम I/O हो सकता है। बीटीडब्ल्यू, मुख्य स्मृति के टीबी के साथ सिस्टम की अनदेखी नहीं की जाती है (उदा। HP Superdomes)।
इसी प्रकार, यदि आपके टोंटी सीपीयू, तेजी से मशीन, भाषाओं और compilers है कि आप एक वास्तुकला का विशेष सुविधाओं का उपयोग करने की अनुमति है (उदाहरण के लिए SIMDSSE) की तरह प्रदर्शन परिमाण के एक आदेश से बढ़ सकता है।
डेटा खोजने और एक्सेस करने का तरीका, और मेटा जानकारी स्टोर करने के लिए प्रदर्शन के लिए बहुत महत्वपूर्ण हो सकता है। डेटा को संग्रहीत करने के लिए आप अक्सर फ्लैट फ़ाइलों या डोमेन-विशिष्ट गैर मानक पैकेज का उपयोग करेंगे (उदा। सीधे एक रिलेशनल डीबी नहीं) जो आपको डेटा को अधिक कुशलता से एक्सेस करने में सक्षम बनाता है। उदाहरण के लिए, kdb+ बड़ी समय श्रृंखला के लिए एक विशेष डेटाबेस है, और ROOT कुशलता से डेटा तक पहुंचने के लिए TTree
ऑब्जेक्ट का उपयोग करता है। pyTables का उल्लेख आप एक और उदाहरण होगा।
अब काफी आम 64-बिट आर्किटेक्चर के साथ, कंप्यूटर * उस स्मृति को संबोधित कर सकता है: 64-बिट्स का मतलब है कि आप 2-32 ~ 4 बिलियन बार पता कर सकते हैं कि 32-बिट कंप्यूटर क्या संबोधित कर सकते हैं। यह * आपके डेटा के लिए पर्याप्त है। – EOL