2015-07-09 10 views
6

मैं एक बहु-थ्रेड प्रोग्राम के निष्पादन समय को मापने की कोशिश कर रहा हूं। मैं (प्रत्येक धागा एक कोर पर चल रहा है) 4 धागा के साथ अपने कार्यक्रम चलाने, उदाहरण के लिए :निष्पादन समय

clock_t startTime = clock(); 
//do stuff 
clock_t stopTime = clock(); 
float secsElapsed = (float)(stopTime - startTime)/CLOCKS_PER_SEC; 

अब समस्या मेरे पास है है: मैं समय की गणना के लिए मुख्य कार्यक्रम में कोड के इस टुकड़े का उपयोग किया है निष्पादन समय 21.3 9 है। मैं रन सिस्टम में अपने सिस्टम मॉनीटर की जांच करता हूं, जहां निष्पादन का समय लगभग 5.3 है।

ऐसा लगता है कि वास्तविक निष्पादन समय THREADS की संख्या से गुणा किया जाता है।

समस्या क्या है ??

+0

आप बनाने का प्रयास करें कृपया एक [, मिनिमल पूर्ण, और सत्यापन योग्य उदाहरण] (http://stackoverflow.com/help/mcve) और हमें दिखाओ? क्योंकि केवल कोड के साथ आप हमें दिखाते हैं कि निश्चित रूप से कुछ भी कहना असंभव है। –

उत्तर

8

यह इसलिए है क्योंकि आप CPU time जो संचित सीपीयू द्वारा खर्च अपने कोड और नहीं Wall time जो वास्तविक दुनिया समय अपने startTime और stopTime के बीच गुजरे है क्रियान्वित करने का समय है की निगरानी कर रहे हैं।

दरअसल clock_t:

रिटर्न प्रोसेसर समय कार्यक्रम द्वारा खपत।

आप गणित करते हैं: 5.3 * 4 = 21.2 है जो आप जिसका अर्थ है कि आप 4 की एक speedup के साथ अच्छे बहु कोड है प्राप्त करते हैं।

तो दीवार के समय को मापने के लिए, आपको उदाहरण के लिए std::chrono::high_resolution_clock का उपयोग करना चाहिए और आपको 5.3 वापस जाना चाहिए। आप क्लासिक gettimeofday() का भी उपयोग कर सकते हैं।

आप multithreading के लिए OpenMP का उपयोग करते हैं तो आप भी omp_get_wtime()

double startTime = omp_get_wtime(); 
// do stuff 
double stopTime = omp_get_wtime(); 
double secsElapsed = stopTime - startTime; // that's all ! 
+0

आपके सहायक उत्तर के लिए धन्यवाद। :) – stella

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