CE121 Προγραµµατισµός ΙΙ. Χρόνος εκτέλεσης. Βάνα Ντουφεξή

Σχετικά έγγραφα
Προγραμματισμός συστημάτων UNIX/POSIX. Χρονομέτρηση

Προγραμματισμός συστημάτων UNIX/POSIX. Χρονομέτρηση, καθυστέρηση και ανάλυση επιδόσεων

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ενσωματωμένα Συστήματα

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Μη ανασταλτική/πολυπλεξία Ε/Ε (non-blocking/multiplexed I/O) Προγραμματισμός II 1

Εργαστήριο Λειτουργικών Συστημάτων Ακ. Έτος Άσκηση 3

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 2 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Οι δείκτες στη γλώσσα C

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Εισαγωγή στον Προγραμματισμό

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

Ταχύτερα compile με ccache και distcc

Διαδικασιακός Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 5/12/10, 23:59

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

ΕΣ 08 Επεξεργαστές Ψηφιακών Σηµάτων. Βιβλιογραφία Ενότητας

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

7. Βασικά στοιχεία προγραµµατισµού.

Προγραµµατισµός 2 The shell

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

Προγραμματισμός Η/Υ (ΤΛ2007 )


ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

scanf() scanf() stdin scanf() printf() int float double %lf float

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

CYGWIN Οδηγίες Χρήσης (Συγγραφέας: Γιώργος ούκας)

Κεφάλαιο 7: Υπορουτίνες

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ

είκτες και Πίνακες (2)

Προγραµµατισµός Ι Εισαγωγή Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι Νικόλαος Δ. Τσελίκας

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Προγραµµατισµός Ι Εργαστήριο 3ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

... s12 s13 s14. Σχήμα1: ΙεραρχίαΔιεργασιώνμε l=3καιβάθος d=3. Οκάθεεργάτης(worker)δουλεύειμετο 1/27του αρχείου των ψήφων.

(programming interfaceή/και application programming interface API).

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Δομημένος Προγραμματισμός

Προγραμματισμό για ΗΜΥ

Διαδικασιακός Προγραμματισμός

Χαρακτηριστικά αναδροµής

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΤΗΛΕΦΩΝΗΤΗΣ AG-GD20 GSM & PSTN

THERMOMETER TC-101 ΕΓΧΕΙΡΙ ΙΟ ΕΓΚΑΤΑΣΤΑΣΗΣ ΚΑΙ ΧΡΗΣΗΣ. 7/12/2011 AUTOGUARD-PG Σελ.1 7/12/2011 AUTOGUARD-PG Σελ.2

make Προγραμματισμός II 1

Δομημένος Προγραμματισμός

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Διαδικασιακός Προγραμματισμός

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

3. Τα αυτοκίνητα ιδιωτικής χρήσης, τα βιβλία, τα ψυγεία και οι τηλεοράσεις ανήκουν στα:

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Η Απάντηση. Ενδεικτικές Απαντήσεις Φύλλου Εργασίας. Μηνύματα. 1. Πληκτρολογήστε την εντολή:

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Γυµ.Ν.Λαµψάκου Α Γυµνασίου Γεωµ.Β2.6 γωνίες από 2 παράλληλες + τέµνουσα 19/3/10 Φύλλο εργασίας

Gprof - Scalasca - VTune

Gprof - Scalasca - VTune

Διαδικασιακός Προγραμματισμός

ΚΕΦΑΛΑΙΟ Web Services

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

Ανάλυση Αλγορίθµων 4. Πειραµατικές Μελέτες. Χρόνος Εκτέλεσης. Περιγραφή και Υλικό Ανάγνωσης

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Εισαγωγή στον Προγραµµατισµό «C»

Γεωγραφικά Συστήµατα Πληροφοριών και Αρχές Τηλεπισκόπησης

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Εισαγωγή στους Υπολογιστές

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

Διαδικασιακός Προγραμματισμός

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

3. Γράψτε μία εντολή που να εμφανίζει π.χ. «Πόσα είναι τα κορίτσια του;» και μία που να εμφανίζει: «Τα κορίτσια του Τζειμς Μποντ είναι 4»

Απαντήσεις. Απάντηση. Απάντηση

QR είναι ˆx τότε x ˆx. 10 ρ. Ποιά είναι η τιµή του ρ και γιατί (σύντοµη εξήγηση). P = [X. 0, X,..., X. (n 1), X. n] a(n + 1 : 1 : 1)

Transcript:

CE121 Προγραµµατισµός ΙΙ Χρόνος εκτέλεσης 1

Χρόνος! Wall clock time "πραγµατικός" χρόνος εκτέλεσης! User CPU time Χρόνος εκτέλεσης εντολών της εφαρµογής πχ. άθροιση των στοιχείων ενός πίνακα! System CPU time Χρόνος εκτέλεσης λειτουργιών του ΛΣ για την εφαρµογή πχ. εκτέλεση κλήσης συστήµατος 2

Εντολή time! Σύνταξη: time -p εφαρμογή ή: /usr/bin/time -p εφαρμογή! Έξοδος: χρόνος εκτέλεσης (πραγµατικός, user, system) Σε δευτερόλεπτα Τι κάνουµε αν το πρόγραµµα ολοκληρώνει την εκτέλεση σε λιγότερο από 1 sec? 3

Εντολή time Το πρόγραµµα calcsum αρχικοποιεί ένα πίνακα 5000!5000 και υπολογίζει το άθροισµα των στοιχείων του. Γιατί δεν ισχύει user + sys == real ; Τι περιµένετε να αλλάξει αν το πρόγραµµα περιέχει κάπου την εντολή sleep(5); Τι περιµένετε να αλλάξει αν προσθέσουµε κώδικα που γράφει τα περιεχόµενα του πίνακα στην οθόνη? 4

Εντολή time Κατά την εκτέλεση ενός προγράµµατος παρατηρήθηκαν τα παρακάτω: Πώς είναι δυνατό το system time να είναι µεγαλύτερο από το real time? Αν εκτελέσουµε ξανά την ίδια εντολή στο ίδιο µηχάνηµα θα έχουµε τα ίδια αποτελέσµατα? 5

Συναρτήσεις και κλήσεις! Εναλλακτικά, µπορούµε να χρησιµοποιήσουµε µέσα στο πρόγραµµα συναρτήσεις που µετρούν χρόνο: Καταγράφουµε το χρόνο αυτή τη στιγµή (start) Κάνουµε τη λειτουργία που θέλουµε να µετρήσουµε. Καταγράφουµε το χρόνο αυτή τη στιγµή (end) Υπολογίζουµε τη διαφορά Αν χρειάζεται, µετατρέπουµε τη διαφορά στη µονάδα που µας ενδιαφέρει. 6

Συναρτήσεις και κλήσεις! Υπάρχουν πολλές. Πώς διαλέγουµε? Τι είδους χρόνο µετρά? real, user, system? Μετρά και χρόνο παιδιών? Τι ακρίβεια έχει? δευτερόλεπτα, ms, µs, ns? Χρησιµοποιεί µονοτονικό ρολόι? Δεν επηρεάζεται από αλλαγές στην ώρα του συστήµατος. Κάνει wrap around? Πότε? Είναι standard? 7

Συναρτήσεις και κλήσεις: clock(3)! clock_t clock (void) CPU χρόνος από την αρχή της διεργασίας, σε CLOCKS_PER_SEC Διαιρέστε µε CLOCKS_PER_SEC για µετατροπή σε δευτερόλεπτα Μη θεωρείτε ότι ξεκινά από το 0! Μερικές φορές προσµετρά και το χρόνο των παιδιών (δείτε manual)! clock_t Αριθµητικός τύπος Εκφράζει χρόνο από την αρχή εκτέλεσης της διεργασίας Αναδιπλώνεται (wraps around). Μπορείτε να βρείτε κάθε πότε? Τύπος επιστροφής των clock(3), times(3) ΠΡΟΣΟΧΗ: Παρόλο που οι clock και times επιστρέφουν ίδιο τύπο, το αποτέλεσµα κάθε µίας είναι σε διαφορετική µονάδα (σε CLOCKS_PER_SECs της clock και σε clock ticks της times) 8

Παράδειγµα: clock(3) 9

Συναρτήσεις και κλήσεις! time_t time (time_t *t) µετρά δευτερόλεπτα από 1/1/1970 όχι πολύ ακριβής (δείτε manual) time_t: ακέραιος τύπος! int gettimeofday (struct timeval *tv, struct timezone *tz) [obsolete! Συνίσταται η clock_gettime] Χρόνος από 1/1/1970, σε sec και µsec Λάθος αποτελέσµατα αν αλλάξει η ώρα του υπολογιστή struct timeval πεδία: time_t tv_sec; /* sec */ su_seconds_t tv_usec; /* µsec */ 10

Συναρτήσεις και κλήσεις! int clock_gettime (clockid_t id, struct timespec *tp) link µε -lrt σε παλιές εκδόσεις glibc. Δεν υπάρχει σε mac CPU χρόνος σε sec και nsec. Ο χρόνος αυξάνεται µονοτονικά - δεν επηρεάζεται από αλλαγή του ρολογιού (δείτε manual για σχετικά flags τύπου clockid_t) struct timespec πεδία: time_t tv_sec; /* sec */ su_seconds_t tv_nsec /* nsec */ Σε ένα τεστ που κάναµε, η διαφορά των nanoseconds ήταν αρνητική. Γιατί συνέβη αυτό, και πώς µπορούµε να λύσουµε το πρόβληµα? 11

Παράδειγµα: clock_gettime 12

Συναρτήσεις και κλήσεις! clock_t times (struct tms *buf); CPU χρόνος σε clock ticks από την αρχή της διεργασίας, user, sys και τερµατισµένα παιδιά Ο γονιός πρέπει να έχει κάνει wait τα παιδιά για να συνυπολογιστεί ο χρόνος τους. Για να µετατραπεί η τιµή σε δευτερόλεπτα χρησιµοποιήστε τη sysconf(3) µε παράµετρο _SC_CLK_TCK struct tms πεδία: clock_t tms_utime; /* user */ clock_t tms_stime; /* sys */ clock_t tms_cutime; /* child user */ clock_t tms_cstime; /* child sys */! int getrusage (int who, struct rusage *usage) CPU χρόνος και άλλες πληροφορίες για τους πόρους της διεργασίας 13

Παράδειγµα: times(2) ΠΡΟΣΟΧΗ: Μην παραλείψετε τους ελέγχους! 14

times: Παράδειγµα ΠΡΟΣΟΧΗ: Μην παραλείψετε τους ελέγχους! 15

Άλλα εργαλεία! Μειονέκτηµα όλων των παραπάνω συναρτήσεων: Χρειάζεται να εισαχθεί ειδικός κώδικας στο πρόγραµµα.! Εναλλακτική λύση: εργαλεία profiling (gprof, vtune, valgrind, etc.) Non-invasive Παρέχουν περισσότερες πληροφορίες για το πού "καταναλώνει" χρόνο το πρόγραµµα. Μεγαλύτερη καθυστέρηση 16

gprof! Βήµα 1: Κάνουµε compile µε ενεργοποιηµένο το profiling gcc -pg! Βήµα 2: Εκτελούµε το πρόγραµµα για να δηµιουργηθεί ένα αρχείο µε δεδοµένα profiling Το αρχείο έχει όνοµα gmon.out! Βήµα 3: Εκτελούµε τον profiler. gprof εκτελέσιµο > αρχείο_εξόδου Το αρχείο εξόδου περιέχει πληροφορίες για χρόνους εκτέλεσης, κλήσεις συναρτήσεων κτλ. Υπάρχουν εργαλεία που παρουσιάζουν τα αποτελέσµατα σε µορφή γράφου. 17

gprof! Πώς δουλεύει? Προσθέτει κώδικα στο πρόγραµµά µας για να µαζεύει πληροφορίες Διακόπτει το πρόγραµµα κάθε τόσο κι ελέγχει την κατάστασή του. 18

gprof! %time: ποσοστό χρόνου εκτέλεσης συνάρτησης σε σχέση µε το υπόλοιπο πρόγραµµα! calls: πόσες φορές κλήθηκε η συνάρτηση! self ms/call: χρόνος εκτέλεσης (σε ms) για κάθε κλήση αυτής της συνάρτησης! total ms/call: χρόνος εκτέλεσης (σε ms) για κάθε κλήση αυτής της συνάρτησης συµπεριλαµβανοµένων συναρτήσεων που καλούνται από αυτή (οι αναδοµικές µετρούνται µία φορά)! name: όνοµα συνάρτησης 19

valgrind! Συλλογή εργαλείων για ανίχνευση λαθών σε µνήµη και profiling: memcheck: memory error detector cachegrind: cache profiler callgrind: call-graph profiler massif: heap profiler sgcheck: array overrun detector (πειραµατικό) 20

valgrind! Βήµα 1: κάνουµε compile µε -g! Βήµα 2: τρέχουµε το εργαλείο που µας ενδιαφέρει για το memcheck (default) valgrind εκτελέσιµο για το cachegrind valgrind --tool=cachegrind εκτελέσιµο γράφει τα αποτελέσµατα σε αρχείο cachegrind.pid για το callgrind valgrind --tool=callgrind [options] εκτελέσιµο γράφει τα αποτελέσµατα σε αρχείο callgrind.pid! To KCachegrind µας παρέχει και γραφική εµφάνιση των αποτελεσµάτων. 21

valgrind! Ενδεικτική έξοδος του cache profiler για πρόγραµµα πολλαπλασιασµού πινάκων, ανά γραµµή 22

valgrind! Ενδεικτική έξοδος του cache profiler για πρόγραµµα πολ/σµού των ίδιων πινάκων µε πριν, ανά στήλη. Πού οφείλεται η διαφορά? 23

24