kfoynt Δημοσ. 18 Ιουνίου 2011 Δημοσ. 18 Ιουνίου 2011 Καλησπέρα παιδιά! Τρέχω κάποια προγράμματα για αριθμητικές μεθόδους και πρέπει να μετρήσω τον χρόνο εκτέλεσης του ενός προγράμματος που τρέχω αποκλείοντας οποιαδήποτε ψευδο-παράλληλη επεξεργασία που γίνεται εκείνη τη στιγμή. Το πρόγραμμα είναι γραμμένο σε C (δεν τρέχει παράλληλα) και για να μετρήσω τον χρόνο αυτή τη στιγμή χρησιμοποιώ την εξής μέθοδο: > clock_t start_2 = clock(); ... rec_time = ((double)clock() - start_2) / CLOCKS_PER_SEC; printf("Time elapsed for reconstruction: %f\n", rec_time); Εδώ http://www.gnu.org/s/hello/manual/libc/Processor-And-CPU-Time.html αναφέρουν οτι αυτή η μέθοδος μέτραει μονο τον χρονο που έτρεχε το προγραμμα στην cpu. Όμως κάνοντας ένα πείραμα, ανοίξα πολλά MATLAB instances βάζοντας τα να κάνουν βαριές λειτουργίες και ανοίγοντας ταυτόχρονα το πρόγραμμα μου παρατήρησα διαφορά περίπου 20 sec σε σχέση με όταν δεν τρέχω τίποτα άλλο. Χρείζομαι μία μέθοδο που να μετράει τον πραγματικό χρόνο στην CPU γιατί θέλω να κάνω και άλλα πράγματα ταυτόχρονα και ειναι χρονοβόρο να περιμένω να τελειώσει το ένα για να αρχίσω το άλλο. Επίσης χρησιμοποιησα και gprof για να δω άν είναι πιο αξιόπιστο, αλλά δεν είχε διαφορά. Έχω κάνει κάτι λάθος?? Υπάρχει κάποιος καλύτερος τρόπος για να μετρήσω τον χρόνο? Το πρόγραμμα το κάνω compile με flag -O3 αν αυτό έχει κάποια σημασία στο πρόβλημα.
drentas Δημοσ. 18 Ιουνίου 2011 Δημοσ. 18 Ιουνίου 2011 Το κάνεις με αυτήν την λογική , γιατί δεν δοκιμάζεις να χρησιμοποιήσεις την processor time ?
kfoynt Δημοσ. 19 Ιουνίου 2011 Μέλος Δημοσ. 19 Ιουνίου 2011 Έριξα μια ματία στο processor time, γιατί το CPU time ειναι αυτο που χρησιμοποιώ ήδη. Από ότι λέει εδώ: http://www.gnu.org/s/hello/manual/libc/Processor-Time.html#Processor-Time In the GNU system, the CPU time is defined to be equivalent to the sum of the tms_utime and tms_stime fields returned by times. και όντως απο τα αποτελέσματα που παίρνω όταν χρησιμοποιώ και τις 2 μεθόδους έχω Real Time: 128, User Time 121, System Time 1 Time elapsed for reconstruction: 1.220000 δλδ Time elapsed for reconstruction: 1.220000 = (User Time 121 + System Time 1)/100 άρα cpu time και processor time το ίδιο και το αυτό. Παράξενο πάντως γιατι με την cputime στο matlab δεν δημιουργούνται τέτοια προβλήματα!
pagratios Δημοσ. 19 Ιουνίου 2011 Δημοσ. 19 Ιουνίου 2011 Δεν ξέρω αν σε βολέψει αλλά στο linux κάνω το εξής > #include <sys/time.h> main() { struct timeval start, end; gettimeofday(&start,NULL); ... ... gettimeofday(&end,NULL); printf("End at %lf sec\n\n",(double) (end).tv_sec + (double)(end).tv_usec / 1000000 - ((double) (start).tv_sec + (double)(start).tv_usec / 1000000)); }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.