Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako môžem implementovať časovač vo Fortrane na meranie času vykonávania môjho programu?

Fortran ponúka niekoľko spôsobov, ako implementovať časovač na meranie času vykonávania. Najlepší prístup závisí od vašich potrieb presnosti a prenosnosti. Tu sú tri bežné metódy:

1. Použitím vnútornej funkcie `CPU_Time` (najjednoduchšie, ale menej presné):

Toto je najjednoduchšia metóda zabudovaná priamo do spoločnosti Fortran. `CPU_Time` Vráti čas procesora, ktorý používa program od začiatku v sekundách. Všeobecne je to menej presné ako iné metódy, najmä na viacjadrových systémoch, kde nemusí odrážať skutočný čas na stenu.

`` Fortran

program na časovanie

implicitné žiadne

real ::start_time, end_time, uplynuté_time

volajte CPU_time (start_time)

! Váš kód, ktorý sa má načasovať, ide sem

! ... zdĺhavé výpočty ...

volajte CPU_Time (end_time)

elapsed_time =end_time - start_time

Print *, „Time uplynutý procesor:“, voliteľné_time, „sekundy“

koncový program TIMING_example

`` `

2. Pomocou vnútorného podprogramu `system_clock` (presnejšie, závislá od platformy):

`System_clock` poskytuje väčšiu kontrolu a potenciálne vyššiu presnosť. Umožňuje vám špecifikovať jednotky vráteného času (napr. Seconds, miliseConds, MicroseConds). Dostupné jednotky a presnosť sú však závislé od systému.

`` Fortran

Program TIMING_EXMTOR_SSTEMSTION_CLOCK

implicitné žiadne

Celé číslo, parameter ::count_rate =1000! Miera počtu v milisekundách

Celé číslo ::start_count, end_count, eLpsed_count

Skutočné ::uplynuté_time

call system_clock (start_count, count_rate)

! Váš kód, ktorý sa má načasovať, ide sem

! ... zdĺhavé výpočty ...

call system_clock (end_count, count_rate)

elapsed_count =end_count - start_count

elapsed_time =real (elapsed_count) / real (count_rate)

Print *, „uplynulý čas:“, uplynul_time, „sekundy“

koncový program TIMING_EXAMPLE_SSTEM_CLOCK

`` `

3. Používanie knižníc špecifických pre platformu (najpresnejšie, najmenej prenosné):

Pre najvyššiu presnosť a najpresnejšie merania času na stenu, možno budete musieť prepojiť s knižnicami špecifickými pre operačný systém. Tento prístup je menej prenosný, pretože kód bude potrebovať úpravy pre rôzne systémy (Linux, Windows, MacOS).

* Linux (pomocou `getTimeofday`): Musíte deklarovať rozhranie funkcie „getTimeofday` z funkcie` `súbor hlavičky. Zahŕňa to použitie modulu `ISO_C_Binding` a starostlivého typu manipulácie. Príklad (vyžaduje spracovanie chýb pre výrobný kód):

`` Fortran

Program TIMING_EXAMPLE_GetTimeOfday

Použite ISO_C_Binding

implicitné žiadne

Zahrňte „Time.h“ // alebo použite vhodnú alternatívu pre svoj kompilátor. Niektoré kompilátory nevyžadujú explicitné vrátane.

Typ (c_ptr) ::TV

celé číslo (c_int) ::rc

Dvojitá presnosť ::start_time, end_time, uplynuté_time

prideliť (TV)

rc =c_getTimeofday (TV, C_NULL_PTR)! Získajte čas začiatku

start_time =c_f_double (c_loc (tv)%čas) + c_f_double (c_loc (tv)%tv_sec)

! Váš kód, ktorý sa má načasovať, ide sem

! ... zdĺhavé výpočty ...

rc =c_getTimeofday (TV, C_NULL_PTR)! Získajte konečný čas

end_time =c_f_double (c_loc (tv)%čas) + c_f_double (c_loc (tv)%tv_sec)

DealLocate (TV)

elapsed_time =end_time - start_time

Print *, „uplynulý čas:“, uplynul_time, „sekundy“

koncový program Timing_example_getTimeOfday

`` `

Nezabudnite zostaviť s príslušnými príznakmi, aby ste sa spojili s potrebnými knižnicami (napr. `-Lrt` pre` getTimeofday` v systéme Linux). Presný príkaz kompilácie závisí od vášho kompilátora (Gfortran, IFORT atď.).

Vyberte metódu, ktorá najlepšie vyhovuje vašim potrebám. Pre jednoduché načasovanie je postačujúce `CPU_Time`. Pre lepšiu presnosť použite `System_Clock`. Pre najvyššiu presnosť a najpresnejší čas na stenu zvážte použitie knižníc špecifických pre platformu, ale pamätajte na dôsledky prenosnosti. Vždy si uvedomte, že rozlíšenie časovača sa v systémoch veľmi líši. Preto by ste nemali očakávať presnosť mikrosekundy na všetkých platformách a konfiguráciách.

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené