Προς το περιεχόμενο

Υπολογισμός χρόνου CPU για ένα συγκεκριμένο process


kfoynt

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα παιδιά!

 

Τρέχω κάποια προγράμματα για αριθμητικές μεθόδους και πρέπει να μετρήσω

τον χρόνο εκτέλεσης του ενός προγράμματος που τρέχω αποκλείοντας

οποιαδήποτε ψευδο-παράλληλη επεξεργασία που γίνεται εκείνη τη στιγμή.

 

Το πρόγραμμα είναι γραμμένο σε 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 αν αυτό έχει κάποια σημασία

στο πρόβλημα.

Δημοσ.

Έριξα μια ματία στο 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 δεν δημιουργούνται τέτοια προβλήματα!

Δημοσ.

Δεν ξέρω αν σε βολέψει αλλά στο 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));
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...