फ्लॉप-काउंटिंग द्वारा एल्गोरिथम विश्लेषण अप्रचलित है?


43

मेरे संख्यात्मक विश्लेषण पाठ्यक्रमों में, मैंने समस्या के आकार के सापेक्ष फ्लोटिंग-पॉइंट ऑपरेशन (फ्लॉप) की संख्या की गणना करके एल्गोरिदम की दक्षता का विश्लेषण करना सीखा। उदाहरण के लिए, न्यूमेरिकल लीनियर बीजगणित पर ट्रेफेथेन एंड बाऊ के पाठ में, यहां तक ​​कि फ्लॉप काउंट्स की 3 डी लुकिंग तस्वीरें भी हैं।

अब यह कहना फैशनेबल है कि "फ्लॉप्स फ्री हैं" क्योंकि कैश में कुछ भी लाने के लिए मेमोरी लेटेंसी फ्लॉप की लागत से बहुत अधिक है। लेकिन हम अभी भी छात्रों को फ्लॉप गणना करने के लिए सिखा रहे हैं, कम से कम संख्यात्मक विश्लेषण पाठ्यक्रमों में। क्या हमें उन्हें मेमोरी एक्सेस की जगह गिनना सिखाना चाहिए? क्या हमें नई पाठ्यपुस्तकें लिखने की जरूरत है? या मेमोरी एक्सेस बहुत मशीन-विशिष्ट पर समय बिताने के लिए है? फ्लॉप या मेमोरी एक्सेस अड़चन है या नहीं, इसके संदर्भ में दीर्घकालिक रुझान क्या है?

नोट: नीचे दिए गए कुछ उत्तर एक अलग प्रश्न का उत्तर दे रहे हैं जैसे "क्या मुझे कुछ फ्लॉप को बचाने या कैश प्रदर्शन को बेहतर बनाने के लिए अपने कार्यान्वयन को जुनूनी रूप से फिर से लिखना चाहिए?" लेकिन मैं जो कुछ पूछ रहा हूं, वह " के साथ अधिक उपयोगी है " क्या अंकगणितीय संचालन या मेमोरी एक्सेस के संदर्भ में एल्गोरिथम जटिलता का अनुमान लगाना अधिक उपयोगी है ?


1
> "क्या अंकगणित संचालन या मेमोरी एक्सेस के संदर्भ में एल्गोरिथम जटिलता का अनुमान लगाना अधिक उपयोगी है?" । व्यावहारिक दृष्टिकोण से, एम्बेडेड सिस्टम अभी भी मेमोरी बैंडविड्थ के बजाय FPU गति से सीमित हैं। इस प्रकार, भले ही फ्लॉप काउंटिंग को एचपीसी मानकों द्वारा अप्रचलित माना जाता था, लेकिन यह अभी भी अन्य समुदायों के लिए व्यावहारिक उपयोग है।
डेमियन

जवाबों:


31

मुझे लगता है कि (पहले के आदेश) सही करने के लिए बात एल्गोरिथ्म में जरूरत बाइट्स फ्लॉप के अनुपात है, जो मैं फोन पर नज़र है । चलो एफ हूँ एक एक्स प्रोसेसर की अधिकतम फ्लॉप दर, और हो सकता है बी मीटर एक एक्स अधिकतम बैंडविड्थ। यदि F m a xβFmaxBmaxतो वह एल्गोरिथ्म, बैंडविड्थ सीमित हो जाएगा। तोबीमीटरएकएक्सβ>एफहूँएकएक्स, एल्गोरिथ्म सीमित फ्लॉप है।Fmaxβ>BmaxBmaxβ>Fmax

मुझे लगता है कि मेमोरी एक्सेस की गणना करना अनिवार्य है, लेकिन हमें इस बारे में भी सोचना चाहिए:

  • कितनी स्थानीय मेमोरी आवश्यक है

  • हमारे पास कितना संभव समवर्ती है

फिर आप आधुनिक हार्डवेयर के लिए एल्गोरिदम का विश्लेषण करना शुरू कर सकते हैं।


3
β

2
डेविड और 8 साल पहले कर रहा था।
मैट नेप्ले

3
ठीक है, इसलिए एक बेहतर, अधिक जटिल मॉडल (हमेशा की तरह) है। लेकिन यह मॉडल एक जवाब देता है जो मशीन पर निर्भर है। हमें पहले विश्लेषण के रूप में छात्रों को क्या सिखाना चाहिए?
डेविड केचेसन

3
मुद्दा यह है कि मशीन को एकल संख्या में घटा दिया गया है, चोटी बैंडविड्थ के लिए चोटी के फ्लॉप का अनुपात, जैसा कि एल्गोरिथ्म है। यह उतना ही सरल है जितना कि यह मिलता है। एक कम्प्यूटेशनल मॉडल के बिना, किसी भी जटिलता का अनुमान बेकार है और यह सबसे सरल यथार्थवादी है।
मैट नेप्ले

1
मुझे लगता है कि आप समस्या को गलत समझते हैं। हमारे पास पहले से ही ऑप्टिकल परिवहन है जो बड़े भार ले जा सकता है। समस्या यह है कि एक चिप पर हो रही है। आपके पास केवल बहुत सारे तार और एक शीर्ष घड़ी दर है। ऑप्टिकल ट्रांसपोर्ट केवल एक ऑप्टिकल चिप पर इस समस्या को कम करेगा।
मैट नेप्ले

22

O(N4)O(N)O(NlogN)O(N2)

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


7
O(NlogN)O(N2)

2
O(NlogN)O(N2)

9

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

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

नथ बीडीडी का विश्लेषण करते समय टीएओसीपी के वॉल्यूम 4 ए में गीगाम शब्द का उपयोग करता है । मुझे यकीन नहीं है कि अगर वह पिछले संस्करणों में इसका उपयोग करता है। उन्होंने 2010 में अपने वार्षिक क्रिसमस ट्री व्याख्यान में समय की कसौटी पर खड़े होने के बारे में उक्त टिप्पणी की।

दिलचस्प बात यह है कि , आप यह गलत कर रहे हैं कि स्मृति संचालन के आधार पर प्रदर्शन का विश्लेषण भी हमेशा सीधा नहीं होता है क्योंकि वीएम दबाव जैसे तत्व होते हैं जो डेटा को एक ही बार में भौतिक रैम में फिट नहीं होने पर खेलने में आते हैं।


8

आप एक एल्गोरिथ्म की लागत का निर्धारण कैसे करते हैं यह इस बात पर निर्भर करता है कि आप किस वैज्ञानिक कंप्यूटिंग के "स्तर" पर काम करते हैं, और समस्याओं के किस (संकीर्ण या व्यापक) वर्ग पर विचार करते हैं।

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

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

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

निष्कर्ष में, कैश ऑप्टिमाइज़ेशन केवल तभी उपयोगी होता है, जब समानता और फ़्लॉप की विषम संख्या को कम करने के लिए अनुकूलन करने के लिए कुछ भी नहीं बचा है।

मुझे लगता है कि सैद्धांतिक कंप्यूटर विज्ञान के रुख को अनुकूलित करना बुद्धिमानी है: अंत में, एल्गोरिथ्म की स्पर्शोन्मुख जटिलता में सुधार कोड की कुछ मौजूदा लाइनों के सूक्ष्म-अनुकूलन की तुलना में अधिक वापसी है। इसलिए, FLOPs की गिनती अभी भी पसंद की जाती है।


"कैश ऑप्टिमाइज़ेशन केवल तभी उपयोगी होता है जब समांतरता और FLOPs की असममित संख्या को कम करने के लिए अनुकूलन करने के लिए कुछ नहीं बचा हो"। मैं असहमत हूं। यदि आप संख्याओं के एक बड़े समूह की एक बड़ी अभिव्यक्ति की गणना करना चाहते हैं, तो प्रत्येक संख्या के लिए सभी चरणों की तुलना में सभी संख्याओं के साथ एक समय में एक चरण करना बेहतर है। दोनों के पास समान संख्या में FLOPS हैं, लेकिन एक मेमोरी एक्सेस में बेहतर है। बोनस यदि आप कैश में फिट होने के लिए गुच्छा के आकार का चयन करते हैं (या कंपाइलर आपके लिए करता है)। पायथन में यही होता है: github.com/pydata/numexpr
Davidmh

6

मैंने हमेशा फ्लॉप, मेमोरी एक्सेस या जो भी आपके पास है, उसके बारे में सोचने से इनकार कर दिया है। यह 1960 के दशक की एक अवधारणा है जब आपने जो किया वह बहुत अधिक दिया गया था और केवल यह कि आपने इसे एल्गोरिथम अनुकूलन के लिए कैसे किया था। जैकोबी पुनरावृत्ति के गाऊसी उन्मूलन का उपयोग करके एक समान xyz जाल पर एक परिमित तत्व समस्या को हल करने के बारे में सोचें।

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


वास्तव में मैं आपसे उच्च-स्तरीय सोच के बारे में पूछ रहा था, न कि निम्न-स्तरीय अनुकूलन। यह निर्धारित करने के लिए कि आपको मल्टीग्रिड और आपके प्रीकॉन्डिशनर विकल्पों में से अधिक तेज़ होंगे, क्या मीट्रिक का उपयोग करना चाहिए?
डेविड केचेसन

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

1
मुझे लगता है कि मैं पहले गलत समझा था कि आप क्या कर रहे थे, लेकिन मैं अभी भी आपकी बात से असहमत हूं। "आउटर एल्गोरिदम" (और मुझे तर्क करना चाहिए,) अभी भी मन में विषमता के साथ डिजाइन किया जाना चाहिए। निश्चित रूप से आप यह दावा नहीं करेंगे कि द्विघात एल्गोरिथ्म से निकट-रेखीय एल्गोरिदम की एक बूंद रनटाइम में 10% की कमी का सबसे अच्छा नेतृत्व करेगी; फिर भी, फ्लॉप और / या मेमोरी-ऑप्स की तुलना में असममित जटिलता को कैसे निर्धारित किया जाए?
जैक पॉल्सन

7
मुझे लगता है कि एल्गोरिदम के लिए यह "अपने हाथों को फेंक" दृष्टिकोण बकवास है। आपको केवल पहले-क्रम की लागतों को देखकर और मॉडल को सरल करके विश्लेषण को सरल बनाने की आवश्यकता है ताकि यह ट्रैक्टेबल हो, लेकिन यह कहना कि आप एमजी या चोल्स्की जैसी किसी चीज़ का विश्लेषण नहीं कर सकते क्योंकि यह बहुत जटिल है, गलत है।
23:22 पर मैट नॅपले

1
ठीक है, लेकिन एमजी या चोल्स्की का विश्लेषण करने का क्या मतलब है जब आपके द्वारा गिने जाने वाले प्रत्येक फ्लॉप को हाइपरथ्रेडेड प्रोसेसर, कैश, स्लो रैम, मल्टीसेलर प्रोसेसर और ऑटोमैटिक वैरिफिकेशन के कारण विलंबता की कई परतों के पीछे छिपाया जाता है? मैं जो बिंदु बना रहा हूं, वह यह है कि 5-10 के कारक के भीतर, आप अपने एल्गोरिदम के रन-टाइम का अनुमान लगा सकते हैं, बिना किसी समय के। 50 और 60 के दशक में यह पूरी तरह से अलग था जब लोग इस FLOP की गिनती शुरू करते हैं।
वोल्फगैंग बैंगर्थ

1

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

क्या इस तरह के अमूर्त एक शिक्षण उपकरण के रूप में उपयोगी हैं? हां, शिक्षण के लिए उपयोग किए जाने वाले बहुत सारे मॉडल की तरह, वे तब तक उपयोगी होते हैं, जब तक उन्हें मॉडल की सीमाओं के बारे में समझने के लिए रखा जाता है। शास्त्रीय यांत्रिकी ठीक है जब तक आप सराहना करते हैं कि यह छोटी दूरी या बड़े वेग के तराजू पर काम नहीं करेगा ...


-1

वास्तव में आपके प्रश्न का उत्तर नहीं दे रहा है, लेकिन विचार करने के लिए एक और चर जोड़ना: कुछ को ध्यान में रखना प्रोग्रामिंग भाषा की विशेषताएं हैं। उदाहरण के लिए, पायथन, Timsort एल्गोरिथ्म का sortउपयोग करता है, जो कि तुलना की संख्या को कम करने के लिए (अन्य अच्छे गुणों के बीच) डिज़ाइन किया गया है, जो कि पायथन ऑब्जेक्ट्स के लिए संभावित रूप से धीमा हो सकता है। दूसरी ओर, C ++ में दो फ्लोट्स की तुलना तेजी से धधक रही है, लेकिन उन्हें स्वैप करना अधिक महंगा है, इसलिए वे अन्य एल्गोरिदम का उपयोग करते हैं

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


यह सच है, लेकिन, जैसा कि आप कहते हैं, सवाल का जवाब नहीं देता है। यह एक अलग विषय पर है।
डेविड केचेसन

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