2012-01-02 13 views
5

आज मैं फोरट्रान 77 जैसे क्वाडपैक (last updated in 1987) में लिखे गए कुछ बहुत ही लोकप्रिय संख्यात्मक पुस्तकालयों से कोड पढ़ रहा था, और मैं सोच रहा था कि फोरट्रान 9 0 में उन पुस्तकालयों को फिर से लिखने का कोई कारण नहीं है, इसके अलावा काम की बड़ी मात्रा के अलावा महान सुधारों के कारण, फोरट्रान 90 को भाषा में लाया गया, जिसमें फ्री फॉर्म स्रोत, बेहतर नियंत्रण संरचनाएं शामिल हैं ताकि उन्हें भुलाया जा सके, वेक्टरेशन, इंटरफेस आदि।फ़ोरट्रान 90 प्रोग्राम फ़ोरट्रान 90 से अधिक तेज हैं?

ऐसा इसलिए है क्योंकि फोरट्रान 77 कंपाइलर अधिक अनुकूलित कोड उत्पन्न करते हैं, शायद यह समानांतर निष्पादन के लिए बेहतर है? ध्यान दें कि मैं उदाहरण के लिए फोरट्रान 2003 के बारे में भी बात नहीं कर रहा हूं, जो केवल 8 साल पुराना है: मैं फोरट्रान 9 0 के बारे में बात कर रहा हूं, इसलिए मुझे लगता है कि इसमें काफी व्यापक है और कंपेलर तैयार हैं। मैं उद्योग के साथ संपर्क नहीं है, वैसे भी।

संपादित करें: janneb सही है: LAPACK वास्तव में फोरट्रान में लिखा है 90.

+0

मुझे लगता है कि यह पहले से ही एक सिद्ध दावेदार के लिए "बड़ी मात्रा में काम करेगा" है। कई "उच्च स्तर" भाषा-संरचनाएं अच्छी हैं, लेकिन एक प्रतिमान शिफ्ट से कम, वे शायद ही कभी प्रदर्शन का लाभ उठाते हैं। यही है, "नए वाक्यविन्यास के साथ कोड" का अर्थ "बेहतर कंपाइलर अनुकूलन" नहीं है, और यहां तक ​​कि F77 (जितना मुझे इसे स्वीकार करने के लिए दर्द होता है) एक "उच्च स्तर" भाषा है। –

+0

कुशल फोरट्रान कोड उच्च प्रदर्शन के लिए अपने मूल पर F77 सुविधाओं से चिपके रहना चाहिए, अधिकतर नई सुविधाओं का परिणाम आमतौर पर कम कुशल निष्पादन योग्य होता है। F90 और नए कोड की रखरखाव और विस्तारशीलता के लिए मुख्य रूप से उपयोगी होंगे। – haraldkl

+0

@haraldkl - मुझे लगता है कि आपके पास ऐसे बयानों का समर्थन करने के लिए कुछ मजबूत सबूत हैं? – Rook

उत्तर

13

ठीक है, जैसा कि "पीएसटी" का उल्लेख है, "बड़ी मात्रा में यह काम करेगा" एक बहुत बड़ा कारण है।

कुछ आगे नाबालिग अंक:

  • LAPACK, फोरट्रान 90, इन दिनों है इस अर्थ में कि नवीनतम संस्करण अब एक F77 संकलक के साथ संकलित में। ऐसा कहा जा रहा है, यह एक पुनर्लेख से बहुत दूर है, केवल कुछ चीजें जो बदली गई थीं।

  • आपके द्वारा उल्लेख की जाने वाली अधिकांश F90 सुविधाओं में मजबूत कार्यक्रम लिखना आसान और तेज़ बनाता है, परिणामस्वरूप प्रोग्राम को कोई तेज़ नहीं करना आवश्यक है।

  • यह बहुत समय पहले नहीं था कि मुफ्त F90 कंपाइलर्स उपलब्ध नहीं थे (बहुत से लोग g77 का उपयोग करते थे!), इसलिए व्यापक रूप से उपयोग की जाने वाली लाइब्रेरी जैसे LAPACK F90 सुविधाओं का उपयोग नहीं करने की संभावना एक सचेत निर्णय थी।

  • एक F77 कंपाइलर आमतौर पर F90 कंपाइलर की तुलना में तेज़ कोड उत्पन्न नहीं करता है। यदि किसी अन्य कारण से नहीं, तो यह संभवतः अप्रचलित है और नवीनतम CPU के लिए अनुकूल नहीं हो सकता है। एक आधुनिक फोरट्रान कंपाइलर F77 से समकक्ष F90 प्रोग्राम से तेज़ कोड बना सकता है जो पॉइंटर्स इत्यादि जैसी चीजों का व्यापक उपयोग करता है, लेकिन यह प्रश्न में प्रोग्राम पर अत्यधिक निर्भर है (उदा।पॉइंटर्स और फैनसीयर डेटा स्ट्रक्चर का उपयोग करने से बेहतर एल्गोरिदम का उपयोग करने की अनुमति मिल सकती है, जिससे F90 प्रोग्राम परिणामों को तेजी से उत्पन्न कर सकता है, भले ही यह CPU अंकगणितीय इकाइयों के कम औसत उपयोग पर निष्पादित हो)।

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

+1

बहुत अच्छी तरह से कहा। – milancurcic

+0

एक F90 कंपाइलर F77 कंपाइलर की तुलना में तेज़ कोड उत्पन्न कर सकता है, क्योंकि इसे अनुमान लगाने की आवश्यकता नहीं है कि सरणी संचालन कहां हैं, या सरणी तत्वों के उपनाम कैसे हैं; प्रोग्रामर इसे सीधे कई मामलों में बताता है। –

+0

हम, मुझे नहीं पता था कि इतने लंबे समय तक मुफ्त F90 कंपाइलर्स की कमी हुई है। अच्छा बिंदु और अच्छा जवाब, धन्यवाद! – astrojuanlu

1

F77 कार्यक्रम तो बराबर F90 कार्यक्रम, नए वाक्य रचना discussable है के साथ फिर से लिखा धीमी या तेज किया जाएगा या नहीं, लेकिन के लिए उपेक्षा कि चलो अभी व।

क्या फिर भी ध्यान में रखा जाना चाहिए, कि कोई भी वास्तव में गति केवल परवाह करता है। लोग केवल मामलों में निष्पादन की गति के बारे में परवाह है, जहां यह प्रासंगिक है, और यह वह जगह है जहाँ मास्टर ऑफ बिजनेस लाभदायक (मुझे यकीन है कि इस के लिए एक बेहतर अवधि होती है, लेकिन इस समय कुछ भी मन में आता है। .. लागत प्रभावी शायद)।

चूंकि उन दो (बल्कि लोकप्रिय पुस्तकालय) अभी भी F77 में हैं, यह स्पष्ट है कि यह सामान्य राय है कि उन्हें फिर से लिखने की लागत, लाभ की गति की अवधि में लाभ, निष्पादन की गति में लाभ, और लाभ के संदर्भ में लाभ उस पूरी प्रक्रिया की लागत प्रभावशीलता।

+0

हाँ, गति यहां महत्वपूर्ण कारक है, क्योंकि इन पुस्तकालयों का उपयोग मुख्य रूप से संख्या क्रंचिंग के लिए किया जाता है। – astrojuanlu

+0

@ जुआनlu001 - लोग इस शब्द को कैसे प्यार करते हैं :) यह अभी भी कभी-कभी कोई फर्क नहीं पड़ता; उदाहरण के लिए, यदि कोई कार्यक्रम सप्ताह में 24 घंटे चलता है, तो यह दो सप्ताह तक नहीं चलता है ... अगर कोई सप्ताह में 25 घंटे चलता है तो कोई भी परवाह नहीं करेगा ... – Rook

+1

@Idigas यह परिचालन में समय के साथ इतना अधिक तंग है उदाहरण के लिए मौसम पूर्वानुमान, जहां हर छोटी गति यहां और वहां मायने रखती है। – milancurcic

5

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

तो यह वास्तव में कोई फर्क नहीं पड़ता। एक आधुनिक कंपाइलर के लिए, अच्छी तरह से लिखित फोर्टन 77 उतना ही अनुकूल है - यह बिना किसी टुकड़े के केक की तरह है। यहां, फोरट्रान 9 0 और बाद में, आईस्किंग स्वाद से बेहतर दिखता है - यह प्रोग्रामर की सुविधा है, लेकिन यह प्रोग्राम दक्षता में सुधार नहीं करता है।

+2

आईआईआरसी, वास्तव में फोरट्रान मानक ** ** ** पीछे संगत नहीं हैं। फोरट्रान 90 ने फोरट्रान 77 से कुछ फीचर्स को हटा दिया, और फोरट्रान 95 ** ** पिछले मानक में कुछ बहिष्कृत विशेषताएं हटा दी गईं, उदाहरण के लिए। – astrojuanlu

+0

@ जुआनlu001 आप सही हैं। मैं खुद से आगे चला गया। फोरट्रान 9 0 मानक फ़ोरट्रान 77 के साथ पिछड़ा संगत है (और इसमें भाषा में सबसे अधिक सुविधाएं भी शामिल हैं)। – milancurcic

+2

आईआरओ-बॉट, @ जुआनlu001 - आगे बढ़ गया, लेकिन बहुत कुछ नहीं ... एक फोर्टन मानक से हटाए जाने की सुविधा के लिए, इसे कई चरणों से गुज़रना पड़ता है, और अभी तक कुछ ही हटा दिए गए हैं (बहुत गैर -पोर्जेबल, और शायद ही कभी इस्तेमाल किया)। हालांकि, यहां तक ​​कि दिमाग में, मानक के बावजूद, अधिकांश विक्रेता अभी भी उनका समर्थन करते हैं। तो, हाँ, भले ही मानक ने उन्हें निष्कासित कर दिया हो, कोई भी कह सकता है कि किलेर कंपाइलर बहुत पिछड़े संगत हैं। एफ 0 9 में कोई हटाई गई विशेषताएं नहीं थीं, और एफ 5 9 ने कुछ पेश किए, हालांकि मुझे अभी तक एक कंपाइलर नहीं दिख रहा है जो उनका समर्थन नहीं करता है। – Rook

5

वहाँ एक प्रमुख कारण फोरट्रान 77 कार्यक्रमों में तेजी से हो सकता है:

आवंटित सरणियों (फोरट्रान 90) घोषित-एट-संकलन समय सरणियों तुलना में बहुत धीमी है। दोनों स्मृति में एक ही स्थान पर नहीं रखे गए हैं। फोर्ट्रान में यह ढेर बनाम मेमोरी प्रबंधन है।

See here for instance

यह कहा जा रहा है, फोरट्रान 90 + तेजी से 'सभी ब्लॉक में' सरणी संचालन किया है। मैं आकार एन की एक सरणी एक के लिए जीसीसी-fortran (gfortran) और किसी भी संकलन विकल्प के बिना का एक बड़ा प्रशंसक हूँ,

a = a + 1 

से कम 4 गुना तेजी से

do i = 1 , N 
    a(i) = a(i) + 1 
end do 

इस बेंच मेरे लिए है , मेरी मशीन पर, ऑप्टिमाइज़ेशन विकल्प के बिना gfortran पर, और किसी भी claming के बिना कि यह पेशेवर बेंचमार्किंग है।

आवंटन "समस्या" (जो कोई समस्या नहीं है लेकिन एक विशेषता है) आर्किटेक्चर, कंपाइलर या कुछ भी नहीं बल्कि फोरट्रान मानक से संबंधित है।

+3

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

+0

लेकिन जहां आवंटित सरणी आवश्यक हैं, हमें उनका उपयोग करना होगा, है ना? :) महान जवाब मैक्सिमिलियन, इसे इंगित करने के लिए धन्यवाद! सीएस छात्र नहीं, इसलिए यह चीजें मेरे लिए तुच्छ नहीं हैं। और वेक्टरेशन चीज भी बहुत उपयोगी है। – astrojuanlu

+0

बहुत ही रोचक ब्लॉग बीटीडब्ल्यू। – astrojuanlu

संबंधित मुद्दे