क्या करता है फोरट्रान उपवास?


41

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

उदाहरण के लिए, मुझे पता है-इसलिए मुझे लगता है कि - एक बात यह है कि मानक निर्दिष्ट करता है कि पॉइंटर्स मेमोरी में हमेशा सन्निहित होते हैं, जिसका अर्थ है तेज मेमोरी एक्सेस। मेरा मानना ​​है कि आप संकलक को एक झंडा देकर C ++ में ऐसा कर सकते हैं। इस तरह से यह जानने में मदद मिलती है कि फोरट्रान क्या अच्छा करता है, ताकि अगर दूसरी भाषा का उपयोग किया जाए तो हम उसका अनुकरण कर सकें।


7
मैं कहूंगा कि स्टैकओवरफ्लो के लिए यह एक बेहतर प्रश्न हो सकता है, भले ही मैं यह एक अच्छा सवाल है। एक त्वरित खोज ( stackoverflow.com/search?q=fortran+fast ) मुझे इस सवाल की ओर ले जाती है जो आपकी मदद कर सकती है: stackoverflow.com/questions/146159/is-fortran-faster-than-c
Yann

3
आपको यह निर्दिष्ट करने की आवश्यकता है कि आप किस प्रकार के फोरट्रान का उपयोग कर रहे हैं। 77 और 90+ के बीच पर्याप्त अंतर है। मैं कम से कम 90 संभालने कर रहा हूँ अगर हम संकेत के बारे में बात कर रहे हैं ...
qubyte

मैंने हमेशा फोरट्रान के सी। से बेहतर होने के बारे में पढ़ा, लेकिन शायद यह 2% की तरह तेज़ है या 50% की तरह तेज़ है?
शुहलो '

4
यह एक शहरी मिथक है। जब तक संकलक विशेष निर्देशों का उपयोग नहीं कर सकता है, आप लगभग किसी भी प्रोग्राम को संकलित कर सकते हैं, चाहे वह संकलक की परवाह किए बिना, एक ही मशीन भाषा के बारे में उत्पन्न करने के लिए हो।
माइक डनलवेई

जवाबों:


50

भाषा डिजाइनर कई विकल्पों का सामना करते हैं। केन केनेडी ने दो पर जोर दिया: (1) बेहतर अमूर्तता और (2) उच्च- या निम्न-स्तर (कम या अधिक मशीन-जैसे) कोड। जबकि हास्केल और योजना जैसी कार्यात्मक भाषाएं पूर्व, पारंपरिक वैज्ञानिक-कंप्यूटिंग भाषाओं जैसे फोरट्रान और सी / सी ++ पर ध्यान केंद्रित करती हैं। यह कहना कि एक भाषा दूसरे की तुलना में तेज़ है, आमतौर पर काफी भ्रामक होती है: प्रत्येक भाषा में एक समस्या डोमेन होती है जिसके लिए वह एक्सेल करता है। फोरट्रान दो मूल कारणों से अन्य भाषाओं की तुलना में सरणी-आधारित संख्यात्मक कोड के क्षेत्र में बेहतर किराया करता है: इसका सरणी मॉडल और इसका गवाह।

ऐरे मॉडल

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

भाषा के साक्षी

जबकि ऐसा लगता है कि एक सरल भाषा को एक अधिक जटिल से "बेहतर" संकलन करना चाहिए, यह वास्तव में ऐसा नहीं है। जब कोई असेंबली भाषा में लिखता है , तो ऐसा नहीं होता कि कोई कंपाइलर ऐसा कर सकता है: यह सब देखता है कि यह बहुत ही बारीक निर्देश है। फोरट्रान को खोजकर्ता की आवश्यकता है (इस प्रकार, प्रोग्रामर द्वारा अधिक काम) केवल उन मामलों में जो सरणी-आधारित कंप्यूटिंग के लिए वास्तविक पुरस्कार प्राप्त करते हैं। फोरट्रान सरल डेटा प्रकारों, बुनियादी नियंत्रण प्रवाह और सीमित नामस्थानों का उपयोग करता है; इसके विपरीत, यह कंप्यूटर को यह नहीं बताता कि रजिस्टर को कैसे लोड किया जाए (जो वास्तविक समय के लिए आवश्यक हो सकता है )। कहाँ फोरट्रान है स्पष्ट है, यह पूरा प्रकार निष्कर्ष है, जो novices के आरंभ करने के लिए मदद करता है जैसी चीजों के लिए सक्षम बनाता है। यह एक चीज से भी बचता है जो अक्सर C को धीमा बनाती है:अपारदर्शी संकेत

फोरट्रान धीमा हो सकता है

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


7
GUI / IO समस्याओं को "अधिक सामान्य उद्देश्य" भाषा में फोरट्रान क्रंचिंग को लपेटकर आसानी से हल किया जा सकता है। मैं अक्सर इस उद्देश्य के लिए आर का उपयोग करता हूं।
mbq 8

2
shootout.alioth.debian.org अब उपलब्ध नहीं है! और नए संस्करण में बहुत कम जानकारी है :(
astrojuanlu

23

फोरट्रान का डिज़ाइन संकलक को कुछ मामलों में मजबूत अनुकूलन करने की अनुमति देता है, अनुकूलन जो आमतौर पर सी के लिए उपलब्ध नहीं हैं।

एक प्रसिद्ध उदाहरण अलियासिंग की हैंडलिंग है । फोरट्रान में, आप किसी विशिष्ट मेमोरी क्षेत्र तक ही पहुँच सकते हैं, हालांकि उस मेमोरी क्षेत्र से जुड़े विशिष्ट चिन्ह। यह ज्ञान संकलक को स्मार्ट ट्रिक को नियोजित करने की अनुमति देता है जब यह कैश होने का समय होता है: यह जानता है कि क्या मूल्य संभावित रूप से बदल गया है या नहीं। F90 तक, यह आसानी से सत्यापित किया गया था। जब फोरट्रान 90 पेश किया pointersगया था, तो यह धारणा अब सही नहीं थी: आप एक ही मेमोरी क्षेत्र को दो (या अधिक) प्रतीकों के माध्यम से एक्सेस कर सकते हैं। यही कारण है कि आपको उन targetबिंदुओं को निर्दिष्ट करना होगा जिन्हें आप संकेत के माध्यम से संबोधित करना चाहते हैं।

एक और दिलचस्प तथ्य यह है कि कई निर्माण उपयोगकर्ता के हस्तक्षेप के बिना संकलक को प्रदर्शन करने की अनुमति देते हैं। ऐसी विलासिता एक भाषा के रूप में फोरट्रान के रिश्तेदार "प्लेटफॉर्म एग्नोस्टिकवाद" के कारण संभव है।

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

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


2
जब आपके कंप्यूटर> $ 100 मिलियन की सीमा में आते हैं, तो लोगों का समय (ग्रेड छात्र) तुलना में काफी महंगा दिखता है।
फिल मिलर

6
@ नोवेलोक्रेट: कोड की राशि जो $ 100 मिलियन कंप्यूटर पर चलती है, बेशुमार मैन आवर्स द्वारा लिखी गई है, जो कि $ 100 मिलियन के निशान से भी बेहतर है, यहां तक ​​कि ग्रेड के छात्र मूल्य पर भी। याद रखें किसी व्यक्ति की लागत उसकी आय से दोगुनी है। बाकी टैक्स और सहसंबद्ध में चला जाता है। इसके अलावा, एक कंप्यूटर बर्न ऑफ का अनुभव नहीं करता है। एक व्यक्ति करता है, और नौकरी बदल देगा।
स्टेफानो बोरीनी

1
@StefanoBorini मेरे पास पीसी का एक लंबा इतिहास है जो जलने का अनुभव करता है ...
N74

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

आज, हमेशा की तरह, फोरट्रान का उपयोग सभी समान उद्देश्य के लिए किया जाता है - संख्यात्मक गणना।
अनुक्रम

12

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

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


8

यहां शहरी मिथकों से सावधान रहें। यदि दो कंपाइलर एक ही असेंबली कोड जनरेट करते हैं, तो परिणामस्वरूप प्रोग्रामों का प्रदर्शन समान होगा।

किसी भी दिए गए तर्क के लिए, विधानसभा भाषा में एक कार्यक्रम है जो इसके निष्पादन समय को कम करता है। उस प्रोग्राम की परवाह नहीं है कि किस कंपाइलर ने उसे उत्पन्न किया।

उस ने कहा, संकलित भाषाएं प्रोग्रामर के लिए जीवन को आसान बनाने के लिए मौजूद हैं। इसकी लागत का एक हिस्सा यह है कि वे उपयोगकर्ता को उन सुविधाओं का उपयोग करने के लिए लुभा सकते हैं, जिनके परिणामस्वरूप न्यूनतम निष्पादन समय नहीं होता है। इसका प्रमुख उदाहरण newC ++ में है। (यह कितना धीमा हो सकता है - यह केवल तीन वर्ण है?) यह व्यावहारिक रूप से आपको गतिशील रूप से स्मृति आवंटित करने के लिए भीख माँगता है, और रनटाइम लागत पर कोई ध्यान नहीं देता है। यदि आप ऐसा करना चाहते हैं, तो यह बहुत अच्छा है, लेकिन फोरट्रान सिर्फ इसलिए तेज हो सकता है क्योंकि उसने आपको ऐसा करने में नहीं चूसा है।

लेकिन इससे परे, मैंने कभी ऐसा कार्यक्रम नहीं देखा है, जैसा कि पहले लिखा गया था, उस तरह के प्रदर्शन में सुधार के लिए प्रमुख जगह नहीं थी कि कंपाइलर कभी भी आपके लिए सफाई न कर सके। एक उदाहरण के रूप में, समय के एक बड़े अंश को खर्च करने expऔर / या logएक ही तर्क के साथ बार-बार। एक अन्य उदाहरण के रूप में, DGEMM को मैट्रिसेस को गुणा करने और यह पता लगाने के लिए कि समय का एक बड़ा अंश अपने इनपुट चरित्र तर्कों को समझने के लिए LSAME को कॉल करने में जाता है।

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


4
मुझे नहीं लगता कि यह सिर्फ एक शहरी मिथक है। संपूर्ण सरणी संचालन, शुद्ध / वैकल्पिक कार्यों आदि के लिए फोरट्रान का समर्थन कंपाइलरों को आसानी से अनुकूलन / वेक्टराइज़ या समांतर बनाने में मदद कर सकता है। उदाहरण के लिए, सोच- समझकर देखें . com/2007/ 08/14/… । संकलक वास्तव में क्या करते हैं यह एक अलग कहानी है (विक्रेता पर निर्भर करता है)।
१०:२०

@stali: यह विक्रेता से अधिक पर निर्भर करता है। यह कार्यक्रम के संकलित होने पर निर्भर करता है। मैंने देखा है कि लोग "वहाँ एक कार्यक्रम है कि फोरट्रान तेजी से बना सकते हैं" से "फोरट्रान किसी भी कार्यक्रम में तेज है" मौजूद है। यदि आप इसे इंगित करते हैं, तो लोग हेम और हॉव और विभाजित बालों को शुरू कर सकते हैं, और यह वास्तव में अंत में क्या आता है, मूल रूप से कुछ भी नहीं है जो लोग सोचना चाहते हैं।
माइक डनलैवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.