मैं C ++ में कुछ प्रदर्शन महत्वपूर्ण काम कर रहा हूं, और हम वर्तमान में उन समस्याओं के लिए पूर्णांक गणना का उपयोग कर रहे हैं जो स्वाभाविक रूप से अस्थायी बिंदु हैं क्योंकि "तेज"। यह पूरी तरह से कष्टप्रद समस्याओं का कारण बनता है और बहुत सारे कष्टप्रद कोड जोड़ता है।
अब, मुझे याद है कि फ्लोटिंग पॉइंट की गणना 386 दिनों में लगभग कितनी धीमी थी, जहां मुझे विश्वास है कि (IIRC) एक वैकल्पिक सह-प्रॉसेसर था। लेकिन निश्चित रूप से आजकल तेजी से अधिक जटिल और शक्तिशाली सीपीयू के साथ यह फ्लोटिंग पॉइंट या पूर्णांक गणना करते समय "गति" में कोई अंतर नहीं करता है? विशेष रूप से चूंकि वास्तविक गणना समय कुछ की तुलना में छोटा होता है जैसे कि पाइपलाइन स्टाल या मुख्य मेमोरी से कुछ प्राप्त करना?
मुझे पता है कि सही उत्तर लक्ष्य हार्डवेयर पर बेंचमार्क है, इसका परीक्षण करने का एक अच्छा तरीका क्या होगा? मैंने दो छोटे सी ++ प्रोग्राम लिखे और उनके रन टाइम की तुलना लिनक्स पर "टाइम" से की, लेकिन वास्तविक रन टाइम बहुत अधिक परिवर्तनशील है (मैं वर्चुअल सर्वर पर चलने में मदद नहीं करता)। मेरे पूरे दिन बिताने के कुछ समय, सैकड़ों बेंचमार्क बनाने, ग्राफ बनाने आदि में कुछ ऐसा है जिसे मैं सापेक्ष गति का उचित परीक्षण प्राप्त करने के लिए कर सकता हूं? कोई विचार या विचार? क्या मैं पूरी तरह से गलत हूं?
मैंने जिन कार्यक्रमों का उपयोग इस प्रकार किया है, वे किसी भी तरह से समान नहीं हैं:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
int accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += rand( ) % 365;
}
std::cout << accum << std::endl;
return 0;
}
कार्यक्रम 2:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
float accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += (float)( rand( ) % 365 );
}
std::cout << accum << std::endl;
return 0;
}
अग्रिम में धन्यवाद!
संपादित करें: जिस प्लेटफॉर्म की मुझे परवाह है, वह नियमित रूप से x86 या x86-64 डेस्कटॉप लिनक्स और विंडोज मशीनों पर चल रहा है।
2 संपादित करें (नीचे एक टिप्पणी से चिपकाया गया): हमारे पास वर्तमान में एक व्यापक कोड आधार है। वास्तव में मैं सामान्यीकरण के खिलाफ आया हूं कि हमें "फ्लोट का उपयोग नहीं करना चाहिए क्योंकि पूर्णांक गणना तेज है" - और मैं इस सामान्यीकृत धारणा को बाधित करने के लिए एक रास्ता खोज रहा हूं (यदि यह भी सच है)। मुझे एहसास है कि सभी कार्यों को करने और बाद में इसकी रूपरेखा तैयार करने में हमारे लिए सटीक परिणाम की भविष्यवाणी करना असंभव होगा।
वैसे भी, आपके सभी उत्कृष्ट उत्तर और मदद के लिए धन्यवाद। कुछ और जोड़ने के लिए स्वतंत्र महसूस करें :)।
float
गति को बढ़ावा मिलता है, लेकिन आमतौर पर double
नहीं होता है।
addl
प्रतिस्थापितfadd
)। वास्तव में एक अच्छा माप प्राप्त करने का एकमात्र तरीका आपके वास्तविक कार्यक्रम और उस के विभिन्न संस्करणों की रूपरेखा का एक मुख्य भाग है। दुर्भाग्य से यह बहुत कठिन प्रयास के टन का उपयोग किए बिना हो सकता है। शायद हमें टारगेट हार्डवेयर और आपका कंपाइलर बताने से लोगों को कम से कम आपको पहले से मौजूद अनुभव देने में मदद मिलेगी, आदि। आपके पूर्णांक उपयोग के बारे में, मुझे संदेह है कि आप एक तरह काfixed_point
टेम्प्लेट क्लास बना सकते हैं जो इस तरह के काम को जबरदस्त रूप से आसान कर देगा।