PDA

View Full Version : C++ και χρονος υπολογισμου


OnFire
09-01-2005, 20:08
Γεια σας παιδια... Υπαρχει προγραμμα που να υπολογιζει τον χρονο εκτελεσης ενος αρχειου C++ ή καποια εντολη μεσα σ'αυτην? Ευχαριστω

circular
09-01-2005, 20:28
Οταν λες το χρόνο εκτέλεσης ενός αρχείου θες να μετρήσεις πόσο χρόνο κάνει η εφαρμογή σου για να τρέξει? Μπορείας να χρησιμοποιήσεις αυτό που σου στέλνω, είναι γραμμένο σε MS VC++ (COM) αλλά με απλές μετατροπές μπορείς να το κάνεις να δουλέψει όπως θες σαν απλή κλάση (δουλευει και σε linux - mac με τις κατάλληλες αλλαγές)

yop
09-01-2005, 21:52
Απλη λυση επισης:
#include <time.h>
//...
clock_t begin, end;
double total_cycles_used;
//...
begin= clock();
//...
//οι εντολες των οποιων θες να δεις
//ποσους κυκλους χρειαστηκαν για να εκτελεστουν
//...
end = clock();
total_cycles_used = (double) end - begin;

(Στο linux που ειμαι σιγουρος μπορεις να το μετατρεψεις σε δευτερολεπτα:
double result_in_seconds;
//...
result_in_seconds=total_cycles_used/CLOCKS_PER_SEC;
)

DarthMoul
10-01-2005, 00:01
Μπορείς να καταβάσεις το pctbench από την υπογραφή μου. Περιέχει και τα sources. Εκεί υπάρχει η συνάρτηση timer στο αρχείο timer.c. Επιστρέφει milliseconds. Κάνεις μία μέτρηση στην αρχή και μία στο τέλος και η διαφορά είναι ο χρόνος εκτέλεσης σε milliseconds. Θα σου δουλέψει και σε VC.

H εντολή clock όπως έχουμε δείξει και παλιά, δεν είναι thread safe. Αν πρόκειτε να δουλέψεις με threads καλύτερα να την αποφύγεις.

JohnFishy
19-01-2005, 16:42
Και αν θες να δουλέψεις με thread πως θα το μετρήσεις?

DarthMoul
19-01-2005, 22:27
Και αν θες να δουλέψεις με thread πως θα το μετρήσεις?
Με την συνάρτηση timer που θα βρεις στο αρχείο timer.c από το pctbench :)
Κατέβασε το από την υπογραφή μου και θα δεις ;)
Το Dual G5 δικό σου είναι;

JohnFishy
19-01-2005, 22:35
ομορφα. θα το τεσταρω


Aπο αλλο thread:

@Johnfishy
Αν το dual G5 είναι δικό σου θέλουμε review και φωτογραφίες.

Το Dual G5 δικό σου είναι;

Oπως ειπα και τοτε: Οχι δυστυχως δεν ειναι αλλα μπορω να ονειρευομαι :038:

JohnFishy
20-01-2005, 00:34
darthmoul: εχω ενα error "storage size of tp isnt known"

παω να το κανω compile σκετο και σε win. Αυτα.

DarthMoul
20-01-2005, 00:54
darthmoul: εχω ενα error "storage size of tp isnt known"

παω να το κανω compile σκετο και σε win. Αυτα.
#include <sys/types.h>
#include <sys/timeb.h>

για να μην χτυπάει.

JohnFishy
20-01-2005, 01:13
[Linker error] undefined reference to `WinMain@16'

minigw ειναι ο compiler

DarthMoul
20-01-2005, 01:34
[Linker error] undefined reference to `WinMain@16'

minigw ειναι ο compiler
Σε εμένα το περνάει και ο mingw και η M$ C.

Μάλλον κάτι δεν κάνεις καλά

JohnFishy
20-01-2005, 01:40
μα δεν ειναι και πολλα να κανω. ανοιγω το αρχειο με το dev-c++, παταω build και περνω αυτο.

DarthMoul
20-01-2005, 09:20
μα δεν ειναι και πολλα να κανω. ανοιγω το αρχειο με το dev-c++, παταω build και περνω αυτο. Με dev C δουλεύεις; Την είχα δοκιμάσει κάποτε και έσπαγε τον κώδικα μου κάθε 4-5 γραμμές. Δεν ξαναασχολήθηκα μετά. Ο gcc στο mingw τι μήνυμα σου βγάζει;

JohnFishy
20-01-2005, 12:18
ναι αλλα ειναι ενα ευχρηστο ide κι απο την αλλη τι να βαλεις? αν βρω λιγο χρονο απο το παν θα στησει ξανα το linuxακι αλλα προς το παρον win.

Kαι απο command-line να το τρεξω παλι το ιδιο μνμ περνω. σε ενα linux box περνω undefined reference to main το οποιο λογικο δεν ειναι αφου δεν εχει main? μου το βγαζει σωστα σε .ο file (και στα win).

circular
20-01-2005, 12:19
WinMain... hmmm... μήπως πας να φτιάξεις γραφική εφαρμογή και όχι κονσολάδική?

JohnFishy
20-01-2005, 12:23
WinMain... hmmm... μήπως πας να φτιάξεις γραφική εφαρμογή και όχι κονσολάδική?

oχι, κονσολαδικη. darthmoul εριξα μια ματια στο pctbench-mt.c και καταλαβα πως παιζει, νομιζω. το κανεις ενα include στο αρχειο που θες να μετρησεις, κανεις ενα int start,end;και start = timer(); για να ξεκινησεις τη μετρηση και end = timer(); για να τη τελειωσεις ναι?δεν εχω χρονο να το δοκιμασω γιατι πρεπει να παω παν αλλα το απογευμα θα το δοκιμασω.

DarthMoul
20-01-2005, 13:17
oχι, κονσολαδικη. darthmoul εριξα μια ματια στο pctbench-mt.c και καταλαβα πως παιζει, νομιζω. το κανεις ενα include στο αρχειο που θες να μετρησεις, κανεις ενα int start,end;και start = timer(); για να ξεκινησεις τη μετρηση και end = timer(); για να τη τελειωσεις ναι?δεν εχω χρονο να το δοκιμασω γιατι πρεπει να παω παν αλλα το απογευμα θα το δοκιμασω.Θα πρέπει να φτιάξεις ένα δικό σου main και από εκεί να καλείς την timer.
Κάνεις μία μέτρηση στην αρχή και μία στο τέλος. Η διαφορά είναι ο χρόνος εκτέλεσης σε milliseconds.

JohnFishy
20-01-2005, 14:39
Θα πρέπει να φτιάξεις ένα δικό σου main και από εκεί να καλείς την timer.
Κάνεις μία μέτρηση στην αρχή και μία στο τέλος. Η διαφορά είναι ο χρόνος εκτέλεσης σε milliseconds.

Ναι αυτό εννοούσα. Αν βαριέσαι που ζεις και δεν ανοίγεις το άλλο .c αυτά παθαίνεις. Thanks

mandrav
01-02-2005, 00:35
[Linker error] undefined reference to `WinMain@16'
minigw ειναι ο compiler
Αυτό το κάνει γιατί έχεις ορίσει το project ως GUI. Όρισε το ως console και το προβλημα θα εξαφανιστεί ως δια μαγείας ;)

JohnFishy
01-02-2005, 00:46
δεν ειχα ορισει το project ως gui. Ειμαι σιγουρος. Αργησες ομως καπως να απαντησεις και το εχω βρει εδω και λιγο καιρο. Α και:

ΚΑΛΩΣ ΗΡΘΕΣ ΣΤΟ PCTECHNOLOGY.GR :D :D

mandrav
01-02-2005, 11:14
δεν ειχα ορισει το project ως gui. Ειμαι σιγουρος. Αργησες ομως καπως να απαντησεις και το εχω βρει εδω και λιγο καιρο.
Αυτό το μήνυμα εμφανίζεται όταν δεν έχεις WinMain() και χρησιμοποιείς το linker switch "-mwindows"...

ΚΑΛΩΣ ΗΡΘΕΣ ΣΤΟ PCTECHNOLOGY.GR :D :D
Καλώς σας βρήκα :023: