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

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

Δημοσ.

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

 

Τώρα τελευταία ασχολούμαι με απλά προγραματάκια για C και Java τα οποία τα μεταφράζω σε εκτελέσιμα αρχεία (exe).

 

Χθες ήρθα αντιμέτωπος με ένα αρκετά δύσκολο πρόγραμμα που έπρεπε να φτιάξω. Τα κατάφερα σε γενικές γραμμές. Το πρόβλημα που έπρεπε να λύσω δεν είχε να κάνει τόσο με την δυσκολία υλοποίησης του κώδικα όσο με του πόρους που καταναλώνει.

 

Συγκεκριμένα. 

 

Το αρχείο exe θα πρέπει να κάνει τους υπολογισμούς που χρειάζεται το πρόγραμμα μέσα σε 2 δευτερόλεπτο και να δαπανήσει μόνο μέγιστο όριο μνήμης 70MB.

 

Εγώ πιστεύω ότι είμαι μέσα στους χρόνους ωστόσο θέλω να έχω μια γραπτή απόδειξη. Η ερώτησή μου είναι η εξής:

 

Γνωρίζει κανένας κάποιο πρόγραμμα σε Windows που να ελέγχει αυτά τα δεδομένα? Δηλαδή με το που να εκτελώ το αρχείο να αρχίζει να δημιουργεί μια γραφική συνάρτηση όπου στο οριζόντιο άξονα να γράφει τα second που χρειάστηκαν και στον κατακόρυφο το πόσο μνήμη ξόδεψε! ή κάτι ανάλογο.

Δημοσ.

η matlab σιγουρα κανει αυτο με το χρονο με τις εντολες tic toc απο τις οποιες μπορεις να παρεις τα αποτελεσματα τους κ να κανεις Plot

τωρα για τη μνημη δε ξερω

Δημοσ.

Η διαχείριση των win δεν σου κανει

το πρόγραμμα εκτελείται πολύ γρήγορα. 2 - 3 second το πολύ. Αυτό που με ενδιαφέρει είναι τα δέκατα του δευτερολέπτου! Έστω και 2,003 να είναι είμαι εκτός! Γι'αυτό θέλω κάτι λεπτομερές.

Δημοσ.

το πρόγραμμα εκτελείται πολύ γρήγορα. 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 θα χρησιμοποιήσεις.
Δημοσ.

Μπορείς να τα χρονομετράς μόνος σου. Π.χ...

// ---------------------------------------------------------------------------------
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 ! Ο.ο (η μετατροπή έγινε για να βλέπω μέχρι και τα χιλιοστά του δευτερολέπτου! 

Δημοσ.

Το δοκίμασα ήδη και αν σε κάποιες περιπτώσεις η χρονομέτρηση βγήκε σωστή και πάλι δεν ήτανε. Δεν γίνεται ο 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.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...