2012-06-27 11 views
8

से कम स्मृति http://benchmarksgame.alioth.debian.org/ पर भाषा शूटआउट मानक संकेत मिलता है कि पांचवें वेतन आयोग प्रोग्राम हैं जो जी का उपयोग कर तुलनीय कार्यक्रमों ++ उपयोग स्मृति के बारे में 1/50 वें का उपयोग करें। क्या ये बेंचमार्क अनजाने में एफपीसी का पक्ष लेते हैं या क्या यह वास्तव में सच है कि एफपीसी है जी ++ से काफी बेहतर है? मैंने हमेशा इन बेंचमार्क को सभ्य माइक्रो-बेंचमार्क के संग्रह के रूप में माना है, इसलिए मैं इन परिणामों पर हैरान हूं, क्योंकि 50 गुना कारक काफी महत्वपूर्ण आईएमएचओ है।करता FreePascal वास्तव में उपयोग करें * दूर * जीसीसी

संदर्भ:

http://benchmarksgame.alioth.debian.org/u32/pascal.php http://benchmarksgame.alioth.debian.org/u64q/pascal.html

संपादित करें: इस के बाद से this पेज का दावा और भी दिलचस्प है कि पास्कल कार्यक्रम, जो आश्चर्यजनक कम लगता है में से कुछ के लिए इस्तेमाल किया केवल 8KB होता जा रहा है

+0

पूर्वाग्रह के सामान्य अर्थों में से एक पूर्वाग्रह है - क्या आप कोई आरोप लगा रहे हैं या कोई प्रश्न पूछ रहे हैं? "पक्षपातपूर्ण" की बजाय यह हमेशा संभव है कि एफपीसी प्रोग्राम मेमोरी उपयोग के तरीके से कुछ गलत हो रहा है। क्या आपने देखा [उन मापों को कैसे बनाया जा रहा है] (http://shootout.alioth.debian.org/help.php#memory)? – igouy

+3

@igoguy मुझे लगता है कि जंगली रूप से भिन्न स्मृति संख्याओं को समझने की कोशिश करने के अलावा इसे कुछ भी समझना एक खिंचाव है। यह सवाल पूछने का एक बिल्कुल सही तरीका है। –

+0

@ डेव न्यूटन - यह पूछना आसान है कि स्मृति उपयोग में इतना बड़ा अंतर क्यों दिखाया गया है, बिना पूर्वाग्रह के किसी भी आरोप के। उदाहरण के लिए, केवल पूर्वाग्रह का कोई उल्लेख छोड़ दें और पूछें - "क्या यह वास्तव में सच है कि एफपीसी जी ++ से बेहतर है?" – igouy

उत्तर

11

ध्यान दें कि स्टार्टअप समय IIRC एक और बेंचमार्क जहां पांचवें वेतन आयोग शिखर

मैं जवाब में मुख्य रूप से तथ्य यह है कि मुफ्त पास्कल स्थिर, डिफ़ॉल्ट रूप से कार्यक्रमों लिंक libc और अन्य सहायक पुस्तकालयों

से बचने में मांग की जानी चाहिए लगता है ,

  • सरल प्रोग्राम हैं जो बेंचमार्क किया जा रहा है के लिए पांचवें वेतन आयोग के कार्यक्रमों केवल खुद RTL का उपयोग कर स्थिर कर रहे हैं (कोई स्थिर:

    यह कई परिणाम है libc की प्रति) और कोई गतिशील लिंकिंग ओवरहेड नहीं है (समय और मेमोरी दोनों में)। मैपिंग साझा ग्लिब सेगमेंट (क्या ऐसा है?) जिसमें एप्लिकेशन मेमोरी उपयोग के लिए गलत हो सकता है।

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

सब कुछ, मुझे लगता है कि यह देखा गया व्यवहार एफपीसी के बारे में कम है, और अन्य बेंचमार्क किए गए विकास प्रणालियों के बीच भिन्नता की कमी के बारे में अधिक है। एफपीसी केवल खड़ा है, क्योंकि लगभग हर चीज जीसीसी/ग्लिबैक प्रौद्योगिकी के शीर्ष पर बनाई गई है (या तो क्योंकि वे प्रत्यक्ष जीसीसी व्युत्पन्न हैं या क्योंकि उनके वीएम/दुभाषिया जीसीसी के शीर्ष पर बनाए गए हैं), और इस प्रकार सभी libc के सामान्य व्यवहार साझा करते हैं। एफपीसी अलग-अलग कार्यक्रमों की ओर अलग-अलग हाइलाइट्स (जी?) Libc की खराब स्केलिंग है। (*)

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

या तो या तो मूलभूत रूप से गलत है (जी) libc। (मैं उस पर कोई विशेषज्ञ नहीं हूँ)। अधिक प्रासंगिक जानकारी प्राप्त करने का एक संभावित समाधान फ्रीबीएसडी पर बेंचमार्क, या यूक्लिब के साथ लिनक्स चलाने के लिए होगा। कुछ और संक्षेप में glibc।

आईजीयू के पोस्ट राज्यों के रूप में, libc से लिंक करते समय, एफपीसी को अन्य विकास प्रणालियों की (खराब) विशेषताओं को प्राप्त होता है।यह एक और संकेत है कि प्रश्न होना चाहिए "क्यों का उपयोग कर glibc करते बाइनरी शूटआउट स्मृति बेंचमार्क में बुरा प्रदर्शन" बजाय "क्यों पांचवें वेतन आयोग शूटआउट बेंचमार्क में अच्छा प्रदर्शन करता है"

ध्यान दें कि पांचवें वेतन आयोग मूल रूप से की वजह से libc बचा है क्रॉस-वितरण संगतता चिंताओं, और प्रदर्शन या फाइलसाइज नहीं।

तो यह मानने वाले सभी को एफपीसी के मेमोरी उपयोग को मापने के लिए एक झुकाव wrt है, कभी भी यह माना जाता है कि यह ग्लिब मेमोरी उपयोग या इसके माप के साथ एक समस्या है? या बल्कि, उच्च glibc संख्या गलत है, और नहीं कम पांचवें वेतन आयोग संख्या ....

.... एक पांचवें वेतन आयोग डेवलपर .... कि

(*) और आप कह सकते हैं पहले यह केवल "बड़े" अनुप्रयोगों के लिए कुशल होने के लिए विकसित किया गया है, याद रखें कि यूनिक्स दर्शन एक साथ छोटे टूल्स को चेन करने के बारे में है, और कई यूनिक्स प्रक्रियाओं को कम किया जाता है।

+0

>> libc से लिंक करते समय << (सुविधा के लिए मैं प्रक्रिया के लिए जीनोम सिस्टम मॉनिटर द्वारा प्रदर्शित मेमोरी उपयोग का उल्लेख करूंगा।) एकल थ्रेडेड मंडलब्रॉट फ्री पास्कल # 3 प्रोग्राम [28 केआईबीबी] के लिए, उसी कार्यक्रम के लिए "cthreads का उपयोग करता है" के साथ संकलित किया गया है [300KiB] – igouy

3

हां, यह वास्तव में सच है कि यूनिक्स उपयोगिता top रिपोर्ट करता है कि पास्कल प्रोग्राम उस स्मृति का उपयोग करते हैं, और उन सी ++ प्रोग्राम उस स्मृति का उपयोग करते हैं।

VIRT  RES  SHR 
608   4   0 FPC 
7208  420  332 C++ 

स्मृति उपयोग शीर्ष मुफ्त पास्कल कार्यक्रमों के लिए रिपोर्ट -

उदाहरण के लिए, 64 पर है, जबकि Free Pascal n-body program चलाया जाता है और जब तक C++ n-body program चलाया जाता है, शीर्ष इन मापों की रिपोर्ट नि: शुल्क पास्कल कार्यक्रमों के लिएthe memory use that the benchmarks game reports है।


अब जब कि x64 quad-core comparison

को देखो हम 2 अलग मामलों देख सकते हैं:

  1. दोनों पास्कल और सी ++ कार्यक्रमों कई एमबीएस का उपयोग करें और स्मृति उपयोग बहुत समान है, ~ 2x से कम से भिन्न। जब अतिरिक्त मेमोरी कार्य को हल करने के लिए आवंटित की जाती है, तो प्रोग्राम्स के बीच बहुत अंतर नहीं होता है।

  2. सी ++ प्रोग्राम कुछ सौ केबी का उपयोग करता है और पास्कल प्रोग्राम कुछ KB का उपयोग करता है। जब कार्य को हल करने के लिए अतिरिक्त मेमोरी आवंटित नहीं की जाती है, तो पास्कल प्रोग्राम कुछ सौ KB कम का उपयोग करते हैं।


प्रश्न 2 विकल्प प्रस्तुत करता है, लेकिन वहां आम तौर पर एक तिहाई विकल्प है - मैं गलत समझा है क्या हो रहा है?

तथ्य यह है कि एक सी ++ मैंडलब्रॉट कार्यक्रम एक पास्कल मैंडलब्रॉट कार्यक्रम की तुलना में 4000x अधिक स्मृति इस्तेमाल कर सकते हैं बहुत ज्यादा ओपी पर विश्वास करने के लिए, यह ओपी लिए असंभव लग रहा था था - लेकिन वहाँ एक सरल पर्याप्त विवरण, समय आ गया है/स्पेस ट्रेडऑफ

C++ program is multi threaded, बहु कोर का उपयोग करने के लिए लिखा गया; लेकिन Pascal program is single threaded, एकल कोर का उपयोग करने के लिए लिखा गया है।

Pascal multi threaded mandelbrot program का मेमोरी उपयोग सी ++ बहु थ्रेडेड प्रोग्राम के समान ही है।


+0

मुझे यकीन नहीं है कि मैं आपकी बात समझता हूं, क्या यह दिखाने का एक प्रयास है कि इस विशेष बेंचमार्क के लिए यह 50 नहीं है, बल्कि केवल परिमाण या दो का क्रम है? –

+0

बिंदु यह है कि मेमोरी उपयोग ** शीर्ष ** रिपोर्ट *** *** *** स्मृति उपयोग है जो बेंचमार्क गेम रिपोर्ट करता है। – igouy

+0

-1 वास्तव में इस मुद्दे का जवाब नहीं है। – Marcin

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