Apanepai Δημοσ. 16 Απριλίου 2008 Δημοσ. 16 Απριλίου 2008 Καλησπέρα παιδιά. Θέλω να μελετήσω τους χρόνους εκτέλεσης κάποιων αλογορίθμων γραμμένων σε C. Αρχικά σκέφτηκα την συνάρτηση difftime() της time.h αλλά έχω προβλήματα στην ακρίβεια καθότι περιορίζεται στα sec. Έχω ένα κριτήριο σύγκρισης με την εντολή time από unix στον server στο σύστημα της σχολής όποου τρέχω τα προγράμματα, αλλά το αποτέλεσμα εξαρτάται αρκετά απο το φόρτο του συστήματος με αποτέλεσμα να υπάρχει προβλημα στην εγκυρότητα τον αποτελεσμάτων σε διαφορετικές χρονικές περιόδους. Έχω ακούσει για κάποιους αναλυτές εκτέλεσης αλλά δεν μπόρεσα να βρω κάτι. Ξέρεις κανείς πως μπορούμε να έχουμε έγκυρα αποτολέσματα είτε με κάποιο κώδικα C είτε με κάποιο άλλο πρόγραμμα το οποίο θα τρέχει το εκτελέσιμο και θα βρίσκει το χρόνο απασχόλησης της CPU?
Aesmade Δημοσ. 16 Απριλίου 2008 Δημοσ. 16 Απριλίου 2008 Έχεις δοκιμάσει την clock της time.h? (http://www.cplusplus.com/reference/clibrary/ctime/clock.html) Αν και δίνει τα ticks του εσωτερικού ρολογιού του υπολογιστή που έχουν περάσει, πιστεύω μπορείς να τη χρησιμοποιήσεις για να συγκρίνεις την ταχύτητα δύο αλγορίθμων.
Apanepai Δημοσ. 16 Απριλίου 2008 Μέλος Δημοσ. 16 Απριλίου 2008 Σε ευχαριστώ για την ιδέα, ήδη έχω αρχίσει δοκιμές. Αυτό που δεν καταλαβαίνω είναι ότι πχ σε ένα απλό προγραμματάκι όπως αυτό: http://www.dreamincode.net/code/snippet543.htm τα ticks παίζουν μεταξύ 15 και 31 και δεν μπορώ να καταλάβω γιατί δεν έχει σταθερή τιμή. Τι μπορεί να το επηρεάζει?
Aesmade Δημοσ. 16 Απριλίου 2008 Δημοσ. 16 Απριλίου 2008 Ο επεξεργαστής δεν μπορεί να τρέχει πάντα με ίδια ταχύτητα. Ακόμα και η θερμοκρασία του μπορεί να επηρεάσει πόσα ticks θα παίρνει κάθε φορά. Βέβαια, και πάλι θα πρέπει να μπορείς να συγκρίνεις δύο αλγορίθμους με βάση πόσα ticks παίρνουν. Αν πραγματικά θες ακρίβεια, μια άλλη ιδέα είναι να μετρήσεις πόσα bytes εκτελεί ο κάθε αλγόριθμος, ίσως με τη χρήση breakpoints, αν και να φτιάξεις κάτι τέτοιο θα ήταν μάλλον δύσκολο.
Dikemou Δημοσ. 17 Απριλίου 2008 Δημοσ. 17 Απριλίου 2008 Η ασυμπτωτική ανάλυση είναι απ' τους standard τρόπους σύγκρισης επίδοσης αλγορίθμων...
StavrosD Δημοσ. 17 Απριλίου 2008 Δημοσ. 17 Απριλίου 2008 Πολλά περιβάλλοντα προγραμματισμού έχουν εργαλεία για αυτή την λειτουργία. Το Visual Studio 2008 Team System έχει το profiler. http://blogs.interknowlogy.com/adamcalderon/archive/2007/11/08/22470.aspx http://blogs.msdn.com/ianhu/archive/2007/10/17/collecting-performance-counter-information-with-the-visual-studio-team-system-profiler.aspx
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.