George818 Δημοσ. 29 Νοεμβρίου 2014 Δημοσ. 29 Νοεμβρίου 2014 Καλησπέρα παιδιά, Τώρα τελευταία ασχολούμαι με απλά προγραματάκια για C και Java τα οποία τα μεταφράζω σε εκτελέσιμα αρχεία (exe). Χθες ήρθα αντιμέτωπος με ένα αρκετά δύσκολο πρόγραμμα που έπρεπε να φτιάξω. Τα κατάφερα σε γενικές γραμμές. Το πρόβλημα που έπρεπε να λύσω δεν είχε να κάνει τόσο με την δυσκολία υλοποίησης του κώδικα όσο με του πόρους που καταναλώνει. Συγκεκριμένα. Το αρχείο exe θα πρέπει να κάνει τους υπολογισμούς που χρειάζεται το πρόγραμμα μέσα σε 2 δευτερόλεπτο και να δαπανήσει μόνο μέγιστο όριο μνήμης 70MB. Εγώ πιστεύω ότι είμαι μέσα στους χρόνους ωστόσο θέλω να έχω μια γραπτή απόδειξη. Η ερώτησή μου είναι η εξής: Γνωρίζει κανένας κάποιο πρόγραμμα σε Windows που να ελέγχει αυτά τα δεδομένα? Δηλαδή με το που να εκτελώ το αρχείο να αρχίζει να δημιουργεί μια γραφική συνάρτηση όπου στο οριζόντιο άξονα να γράφει τα second που χρειάστηκαν και στον κατακόρυφο το πόσο μνήμη ξόδεψε! ή κάτι ανάλογο.
Nikosgiann Δημοσ. 29 Νοεμβρίου 2014 Δημοσ. 29 Νοεμβρίου 2014 η matlab σιγουρα κανει αυτο με το χρονο με τις εντολες tic toc απο τις οποιες μπορεις να παρεις τα αποτελεσματα τους κ να κανεις Plot τωρα για τη μνημη δε ξερω
ZAKKWYLDE Δημοσ. 29 Νοεμβρίου 2014 Δημοσ. 29 Νοεμβρίου 2014 Για Java μπορείς να χρησιμοποιήσεις αυτό: http://visualvm.java.net/ 1
George818 Δημοσ. 29 Νοεμβρίου 2014 Μέλος Δημοσ. 29 Νοεμβρίου 2014 Για Java μπορείς να χρησιμοποιήσεις αυτό: http://visualvm.java.net/ H C με ενδιαφέρει ποιο πολύ
nilosgr Δημοσ. 29 Νοεμβρίου 2014 Δημοσ. 29 Νοεμβρίου 2014 H C με ενδιαφέρει ποιο πολύ πιο** Δες το http://valgrind.org/ 1
George818 Δημοσ. 30 Νοεμβρίου 2014 Μέλος Δημοσ. 30 Νοεμβρίου 2014 Η διαχείριση των win δεν σου κανει το πρόγραμμα εκτελείται πολύ γρήγορα. 2 - 3 second το πολύ. Αυτό που με ενδιαφέρει είναι τα δέκατα του δευτερολέπτου! Έστω και 2,003 να είναι είμαι εκτός! Γι'αυτό θέλω κάτι λεπτομερές.
migf1 Δημοσ. 1 Δεκεμβρίου 2014 Δημοσ. 1 Δεκεμβρίου 2014 το πρόγραμμα εκτελείται πολύ γρήγορα. 2 - 3 second το πολύ. Αυτό που με ενδιαφέρει είναι τα δέκατα του δευτερολέπτου! Έστω και 2,003 να είναι είμαι εκτός! Γι'αυτό θέλω κάτι λεπτομερές. Μπορείς να τα χρονομετράς μόνος σου. Π.χ... // --------------------------------------------------------------------------------- double timer1() { clock_t tend, tstart; tstart = clock(); /* Code you want timed here */ tend = clock(); return ((double) (tend - tstart)) / CLOCKS_PER_SEC; } // --------------------------------------------------------------------------------- double timer2() { time_t tstart = time(NULL); /* Code you want timed here */ time_t tstop = time(NULL); return (double) difftime(tstop, tstart); } Απλώς δες αν θέλεις να μετράς wall-time ή cpu-time, για να δεις ποια από τις διαθέσιμες συναρτήσεις της standard libc θα χρησιμοποιήσεις.
George818 Δημοσ. 1 Δεκεμβρίου 2014 Μέλος Δημοσ. 1 Δεκεμβρίου 2014 Μπορείς να τα χρονομετράς μόνος σου. Π.χ... // --------------------------------------------------------------------------------- double timer1() { clock_t tend, tstart; tstart = clock(); /* Code you want timed here */ tend = clock(); return ((double) (tend - tstart)) / CLOCKS_PER_SEC; } // --------------------------------------------------------------------------------- double timer2() { time_t tstart = time(NULL); /* Code you want timed here */ time_t tstop = time(NULL); return (double) difftime(tstop, tstart); } Απλώς δες αν θέλεις να μετράς wall-time ή cpu-time, για να δεις ποια από τις διαθέσιμες συναρτήσεις της standard libc θα χρησιμοποιήσεις. Το δοκίμασα ήδη και αν σε κάποιες περιπτώσεις η χρονομέτρηση βγήκε σωστή και πάλι δεν ήτανε. Δεν γίνεται ο cmd να εκτελείται 1s και το αποτέλεσμα να είναι 0,00003 ! Ο.ο (η μετατροπή έγινε για να βλέπω μέχρι και τα χιλιοστά του δευτερολέπτου!
migf1 Δημοσ. 1 Δεκεμβρίου 2014 Δημοσ. 1 Δεκεμβρίου 2014 Το δοκίμασα ήδη και αν σε κάποιες περιπτώσεις η χρονομέτρηση βγήκε σωστή και πάλι δεν ήτανε. Δεν γίνεται ο cmd να εκτελείται 1s και το αποτέλεσμα να είναι 0,00003 ! Ο.ο (η μετατροπή έγινε για να βλέπω μέχρι και τα χιλιοστά του δευτερολέπτου! Ποιος είναι ο "cmd"; Δεν καταλαβαίνω τι εννοείς (cmd.exe π.χ. στα Windows είναι η γραμμή εντολών, οπότε δεν καταλαβαίνω τι εννοείς παραπάνω). Όπως έγραψα και πριν, διευκρίνησε πρώτα αν σε ενδιαφέρει το wall-time ή το cpu-time και κατόπιν διάλεξε ποια συνάρτηση θα χρησιμοποιήσεις από την libc (και επίσης διασταύρωσε το και με την τεκμηρίωση του compiler που χρησιμοποιείς, γιατί νομίζω πως για παράδειγμα η clock() σε κάποιος compilers στα Windows μετράει wall-time αντί για cpu-time που είναι το στάνταρ). Αν δεν σε ενδιαφέρει το portability, τότε μπορείς να χρησιμοποιήσεις timing functions από το API της πλατφόρμας σου (αν και με τη στάνταρ libc πάλι στο ίδιο μηχάνημα/πλατφόρμα πρέπει να γίνονται οι μετρήσεις για να είναι αξιόπιστες). ΥΓ. Οι 2 συναρτήσεις που σου έδωσα δεν χρειάζονται μετατροπή, βγάζουν απευθείας το αποτέλεσμα σε secs και framgments των secs.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα