के कम्प्यूटेशनल लागत क्या है


26

आणविक सिमुलेशन में हमें जिन प्रमुख मुद्दों से निपटना है, उनमें से एक दूरी पर निर्भर बलों की गणना है। हम जुदाई दूरी के भी अधिकार के लिए बल और दूरी कार्यों को सीमित कर सकते हैं , तो हम सिर्फ दूरी के वर्ग की गणना कर सकता आर 2 = आर आर और के बारे में चिंता करने की ज़रूरत नहीं आर । अजीब शक्तियों देखते हैं अगर, हालांकि, तो हम सौदा करने के लिए के साथ की जरूरत है r = rr2=rrrr=r2

मेरा प्रश्न है: कैसे महंगा कंप्यूटिंग है सामान्य भाषाओं (C / C ++, फोरट्रान, पायथन) आदि के पुस्तकालयों में लागू किया गया? क्या विशिष्ट आर्किटेक्चर के लिए कोड को हाथ से ट्यून करने से वास्तव में बहुत सारे प्रदर्शन सुधार होते हैं?x

जवाबों:


39

करने के लिए एक विस्तार के रूप moyner का जवाब , पर चिप sqrtआम तौर पर एक है rsqrt, यानी एक पारस्परिक वर्गमूल कि computes । इसलिए यदि आपके कोड में आप केवल1/rका उपयोग करने जा रहे हैं(यदि आप आणविक गतिशीलता कर रहे हैं, तो आप हैं), आपसीधेगणना कर सकतेहैं और अपने आप को विभाजन को बचासकते हैं। इसकेबजाय गणनाक्योंकी जातीहै, इसका न्यूटन पुनरावृत्ति में कोई विभाजन नहीं है, केवल जोड़ और गुणा है।a1/a1/rr = rsqrt(r2)rsqrtsqrt

एक साइड-नोट के रूप में, डिवीजनों को भी पुनरावृत्त रूप से गणना की जाती है और rsqrtहार्डवेयर में लगभग धीमी गति से होती है। यदि आप दक्षता की तलाश कर रहे हैं, तो आप बेहतर विभाजन को हटाने की कोशिश कर रहे हैं।

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

इंटरैक्शन पोटेंशिअल के लिए, sqrtसंभावित फ़ंक्शन के एक बहुपद इंटरपोलेंट का उपयोग करके ऑपरेशन को पूरी तरह से टाला जा सकता है, लेकिन इस क्षेत्र में मेरे अपने काम (कार्यान्वित mdcore) से पता चलता है कि, कम से कम x86- प्रकार के आर्किटेक्चर पर, sqrtनिर्देश काफी तेज है।

अद्यतन करें

चूँकि यह उत्तर काफी हद तक ध्यान देने वाला प्रतीत होता है, इसलिए मैं आपके प्रश्न के दूसरे भाग को भी संबोधित करना चाहूंगा, जैसे कि बुनियादी कार्यों को बेहतर बनाने / समाप्त करने का प्रयास करना वास्तव में इसके लायक है sqrt?

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

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

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


6
एसएसई rsqrtpsऔर एवीएक्स vrsqrtpsभी अनुमान हैं, उन्हें पहले 11 से 12 बिट्स सही मिलते हैं और यदि आपको अधिक सटीकता चाहिए तो आपको न्यूटन के पुनरावृत्ति या दो के साथ परिशोधित करना चाहिए। ये सैंडी ब्रिज पर 5/1 और 7/1 (लेटेंसी / इनवर्स थ्रूपुट) निर्देश हैं (इंटेल डॉक्स या एग्नर फॉग के इंस्ट्रक्शन टेबल देखें जो गुणा करने के लिए तुलनीय है। इसके विपरीत, पूर्ण सटीकता (v)sqrtps(या दोहरी सटीकता (v)sqrtpd) 10-43 /। 10-43 (विवरण के लिए निर्देश तालिका देखें)।
जेड ब्राउन

@JedBrown: यह इंगित करने के लिए धन्यवाद! मैं यह भूल गया था कि SSE और इसके एक्सटेंशन इसे भी प्रदान करते हैं।
पेड्रो

16

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

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

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

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

अलग-अलग भाषाओं को बेंचमार्क करना काफी आसान होना चाहिए: बस एक फ़ाइल में यादृच्छिक संख्याओं की एक लंबी श्रृंखला लिखें, इसे विभिन्न भाषाओं का उपयोग करके लोड करें और फिर वर्गमूलों को समय दें।


0

प्रदर्शन में वृद्धि हो सकती है, लेकिन पहले यह जानने के लिए प्रोफाइल बनाना चाहिए कि sqrt के पारस्परिक को गणना करना बोतल-गर्दन (और नहीं, कहते हैं, पदों को लोड करना और बलों को बचाना है)।

GROMACS एमडी परियोजना के परिशिष्ट B.3 वर्गमूल के पारस्परिक करने के लिए एक स्वीकार्य सन्निकटन की गणना के लिए एक न्यूटन- Raphson यात्रा योजना बीज के आईईईई फ्लोटिंग प्वाइंट प्रारूप का ब्यौरा फायदा उठाने के लिए (देखें एक विचार के हिसाब से विकसित http: / /www.gromacs.org/Documentation/Manual ), लेकिन उपयोग में कोई HPC CPU नहीं है जहां अभी भी GROMACS इस विचार का उपयोग करता है।

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