स्टेटिक, डायनामिक और सिंगल डायनामिक लिंकिंग का क्या अर्थ है?


9

मैं BLAS के लिए Intel MKL का उपयोग करता हूं और कमांड लाइन विकल्पों के साथ मदद के लिए Intel MKL लिंक लाइन सलाहकार का उपयोग करता हूं ।

सलाहकार स्टेटिक, डायनामिक और सिंगल डायनेमिक लाइब्रेरी के लिए विकल्प प्रदान करता है। इन शब्दों का मतलब क्या है?

इस बारे में एसओ पर कई पोस्ट किए गए हैं लेकिन उनमें से सभी वैज्ञानिक / गणितीय कोड के बजाय सॉफ्टवेअर विकसित करने पर केंद्रित हैं। ( यह एक विशेष रूप से उपयोगी था)

  • ये शब्द समानांतर कम्प्यूटिंग के लिए कैसे प्रासंगिक हैं?
  • क्या यह दूसरे से बढ़िया है? (मुझे पता है कि बेहतर को अधिक सटीक रूप से परिभाषित करने की आवश्यकता होगी, लेकिन मुझे नहीं पता कि अब कैसे हो सकता है)
  • क्या अधिक सामान्यतः प्रयोग किया जाता है और क्यों?
  • लिंक करते समय प्रोग्रामर को क्या विचार करने की आवश्यकता है?

एक नोट के रूप में, यदि आपने इसे नहीं देखा है, तो नए इंटेल कंपाइलर (मुझे लगता है कि संस्करण 11 और नया) -mklध्वज प्रदान करते हैं, जो अधिकांश मामलों के लिए लिंक लाइन सलाहकार का उपयोग करने की आवश्यकता को दूर करना चाहिए।
ऐसिन

@ असिन, मैं सोच रहा था। क्या यह लिंक करने का सबसे इष्टतम तरीका है?
प्रात:

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

जवाबों:


14

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

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

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

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

सिंगल डायनेमिक लाइब्रेरी एक इंटेल-विशिष्ट शब्द है। यह लिंकिंग प्रक्रिया को आसान बनाने के लिए एक एकल मेटा-लाइब्रेरी में उनके गतिशील पुस्तकालयों की पैकेजिंग को संदर्भित करता है। यदि आप Intel पुस्तकालयों के साथ डायनेमिक लिंकिंग का उपयोग कर रहे हैं, तो यह फ़ॉर्म संभवतः तब तक पसंद किया जाता है जब तक आप कुछ जटिल नहीं कर रहे हैं।


बहुत बढ़िया जवाब! बस एक और बात: मुझे एहसास है कि डायनेमिक लिंकिंग अनावश्यक होगी और विकल्प स्टैटिक और सिंगल डायनेमिक के बीच होगा। आप कहते हैं कि मुझे बाद का चयन करना चाहिए जब तक कि मैं कुछ जटिल नहीं कर रहा हूं (जो मैं नहीं हूं)। तो, क्या मुझे सिंगल डायनामिक का उपयोग करके लिंक करना चाहिए? [Fwiw, मैं पर क्रीलोव उपस्पेस तरीके काम कर रहा हूँ]
जांच

माफ़ करना! मेरा मतलब है कि आपको डिफ़ॉल्ट रूप से स्थैतिक का उपयोग करना चाहिए लेकिन गतिशील पर एकल गतिशील पसंद करते हैं।
एरॉन अहमदिया

मैंने कुछ बेंचमार्किंग की और मैंने पाया: Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.971000 से अधिक मूल्यों का औसत।
इनक्वेस्ट

1
यह ध्यान देने योग्य बात की कीमत आपको लगता है कि कुछ एचपीसी सिस्टम पर है स्थिर लिंक करने के लिए - BlueGene / एल सिस्टम इस पर मामले क्योंकि गणना नोड्स पर कम ओएस गतिशील जोड़ने का समर्थन नहीं करता, उदाहरण के लिए, है।
ऐसिन

1
मैं आपके बयान से थोड़ा भ्रमित हूं: "सुपर कंप्यूटर की वर्तमान पीढ़ी पर, आमतौर पर प्रति नोड केवल एक ही काम चल रहा है, जो साझा पुस्तकालयों के कारण कम मेमोरी खपत के किसी भी लाभ को दृढ़ता से कम करता है।" क्या आपके कहने का मतलब है कि प्रति नोड केवल एक प्रक्रिया है? मुझे यकीन नहीं है कि प्रति नोड एक नौकरी कैसे स्थिति को प्रभावित करती है। जब सांख्यिकीय रूप से प्रत्येक प्रक्रिया को जोड़ने पर निष्पादन योग्य की एक पूरी प्रतिलिपि संग्रहीत होगी जो कोर के प्रति प्रोसेसर के रूप में महत्वपूर्ण हो सकती है। डायनामिक लिंकिंग को प्रति साझा मेमोरी स्पेस में डायनामिक लाइब्रेरी की केवल एक प्रति की आवश्यकता होगी।
andybauer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.