1. Χρησιμοποιώντας την ενδογενή συνάρτηση CPU_TIME` (απλούστερη, αλλά λιγότερο ακριβή):
Αυτή είναι η ευκολότερη μέθοδος, χτισμένη απευθείας στο Fortran. `Cpu_time` επιστρέφει τον χρόνο επεξεργαστή που χρησιμοποιείται από το πρόγραμμα από την έναρξη του σε δευτερόλεπτα. Είναι γενικά λιγότερο ακριβές από άλλες μεθόδους, ιδιαίτερα σε συστήματα πολλαπλών πυρήνων, όπου μπορεί να μην αντικατοπτρίζουν τον πραγματικό χρόνο τοίχου.
`` `Fortran
Πρόγραμμα χρονομέτρησης_example
κανένας
real ::start_time, end_time, elapsed_time
Καλέστε το CPU_TIME (start_time)
! Ο κωδικός σας για να είναι χρονομετρημένος πηγαίνει εδώ
! ... μακροχρόνιοι υπολογισμοί ...
Καλέστε το CPU_TIME (end_time)
elapsed_time =end_time - start_time
Εκτύπωση *, "Πέρα από την ώρα CPU:", Elapsed_time, "Seconds"
end πρόγραμμα χρονομέτρησης_example
`` `
2. Χρησιμοποιώντας την ενδογενή υπορουτίνα `system_clock` (πιο ακριβή, εξαρτώμενη από την πλατφόρμα):
Το `system_clock` παρέχει περισσότερο έλεγχο και ενδεχομένως υψηλότερη ακρίβεια. Σας επιτρέπει να καθορίσετε τις μονάδες του χρόνου που επιστρέφεται (π.χ. δευτερόλεπτα, χιλιοστά του δευτερολέπτου, μικροδευτερόλεπτα). Ωστόσο, οι διαθέσιμες μονάδες και η ακρίβεια εξαρτώνται από το σύστημα.
`` `Fortran
Πρόγραμμα timing_example_system_clock
κανένας
Ακέραιος, Παράμετρος ::count_rate =1000! Ποσοστό μέτρησης σε χιλιοστά του δευτερολέπτου
ακέραιος ::start_count, end_count, elapsed_count
Real ::Elapsed_time
Κλήση System_Clock (start_count, count_rate)
! Ο κωδικός σας για να είναι χρονομετρημένος πηγαίνει εδώ
! ... μακροχρόνιοι υπολογισμοί ...
Κλήση System_Clock (end_count, count_rate)
elapsed_count =end_count - start_count
elapsed_time =real (elapsed_count) / real (count_rate)
Εκτύπωση *, "Χρόνος που έχει περάσει:", Elapsed_time, "δευτερόλεπτα"
ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΧΡΟΝΟΠΟΙΗΣΗ_EXAMPLE_SYSTEM_CLOCK
`` `
3. Χρησιμοποιώντας βιβλιοθήκες συγκεκριμένης πλατφόρμας (πιο ακριβή, λιγότερο φορητά):
Για την υψηλότερη ακρίβεια και τις ακριβέστερες μετρήσεις τοίχου του ρολογιού, ίσως χρειαστεί να διασυνδέετε με βιβλιοθήκες που σχετίζονται με το λειτουργικό σύστημα. Αυτή η προσέγγιση είναι λιγότερο φορητή επειδή ο κώδικας θα χρειαστεί προσαρμογές για διαφορετικά συστήματα (Linux, Windows, MacOS).
* Linux (χρησιμοποιώντας το `gettimeOfday '): Θα χρειαστεί να δηλώσετε μια διεπαφή στη λειτουργία `getTimeOfday 'από το αρχείο κεφαλίδας`
`` `Fortran
Πρόγραμμα Timing_Example_GettimeOfday
Χρησιμοποιήστε το ISO_C_BINDING
κανένας
Συμπεριλάβετε το 'TIME.h' // ή χρησιμοποιήστε μια κατάλληλη εναλλακτική λύση για τον μεταγλωττιστή σας. Ορισμένοι μεταγλωττιστές δεν απαιτούν ρητή περιλαμβάνουν.
Τύπος (C_PTR) ::TV
ακέραιος (C_INT) ::RC
Διπλή ακρίβεια ::Start_Time, End_time, Elapsed_time
κατανομή (τηλεόραση)
rc =c_gettimeofday (τηλεόραση, c_null_ptr)! Λάβετε χρόνο έναρξης
start_time =c_f_double (c_loc (tv)%Ώρα) + c_f_double (c_loc (tv)%tv_sec)
! Ο κωδικός σας για να είναι χρονομετρημένος πηγαίνει εδώ
! ... μακροχρόνιοι υπολογισμοί ...
rc =c_gettimeofday (τηλεόραση, c_null_ptr)! Λάβετε το τέλος
end_time =c_f_double (c_loc (tv)%Ώρα) + c_f_double (c_loc (tv)%tv_sec)
deallocate (τηλεόραση)
elapsed_time =end_time - start_time
Εκτύπωση *, "Χρόνος που έχει περάσει:", Elapsed_time, "δευτερόλεπτα"
ΤΕΛΙΚΟ ΠΡΟΓΡΑΜΜΑΤΟΣ ΠΡΟΓΡΑΜΜΑ_EXAMPLE_GETTIMEOFDAY
`` `
Θυμηθείτε να συντάξετε με τις κατάλληλες σημαίες για σύνδεση με τις απαραίτητες βιβλιοθήκες (π.χ. `-lrt` για` gettimeofday 'στο Linux). Η εντολή ακριβούς συλλογής εξαρτάται από τον μεταγλωττιστή σας (Gfortran, Ifort κ.λπ.).
Επιλέξτε τη μέθοδο που ταιριάζει καλύτερα στις ανάγκες σας. Για απλό χρονοδιάγραμμα, το `cpu_time` είναι επαρκές. Για καλύτερη ακρίβεια, χρησιμοποιήστε το `system_clock`. Για την υψηλότερη ακρίβεια και τον πιο ακριβή χρόνο τοίχου, εξετάστε τη χρήση βιβλιοθηκών που σχετίζονται με την πλατφόρμα, αλλά προσέξτε τις συνέπειες της φορητότητας. Πάντα να γνωρίζετε ότι η ανάλυση του χρονοδιακόπτη ποικίλλει σε μεγάλο βαθμό σε όλα τα συστήματα. Επομένως, δεν πρέπει να περιμένετε ακρίβεια μικροδευτερολέπτων σε όλες τις πλατφόρμες και τις διαμορφώσεις.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα