Forum: D Programlama Dili RSS
Programın zamanını nerede harcadığını görmek için -profile
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Programın zamanını nerede harcadığını görmek için -profile
dmd'nin -profile seçeneği, programın kullandığı zaman hakkında bilgi veriyor.

Öncelikle, programı derlerken -profile seçeneği belirtiliyor:

dmd -profile -w deneme.d

Öyle yapınca, derleyici program kodları arasına zamanını nerede harcadığını gösteren kodlar da ekliyor. Ondan sonra yapılması gereken tek şey, programı çalıştırmak:

./deneme

Program normal olarak çalıştıktan sonra trace.log ve trace.def isminde iki dosya oluşturuyor. Bunlardan trace.log'u açarsanız, içinde iki tür bilgi bulunuyor:

1) her işlev kimin tarafından çağrılıyor, ve kimi çağırıyor

2) her işlevde ne kadar zaman harcanıyor

Programı istediğiniz kadar çalıştırabiliyorsunuz. trace dosyaları, bütün çalıştırmaların toplam bilgisini tutuyorlar.

Örnek:

import std.stdio;
 
void main()
{
    anaİşlev();
}
 
void anaİşlev()
{
    foreach (i; 0 .. 10) {
        altİşlev();
    }
}
 
void altİşlev()
{
    writeln("merhaba dünya");
}

O programı -profile ile derleyip çalıştırınca oluşan trace.log dosyasının baş tarafında şöyle bilgilre var (işlev isimleri korkunç! :) ):

------------------
_Dmain    0    391108    296
        1    _D6deneme10anaİşlevFZv
------------------
       10    _D6deneme10anaİşlevFZv
_D6deneme10altİşlevFZv    10    387539    12450
       10    _D3std5stdio16__T7writelnTAyaZ7writelnFAyaZv
------------------
        1    _Dmain                         <-- bunu çağıran işlev(ler)
_D6deneme10anaİşlevFZv    1    390812    3273   <-- hakkında bilgi verilen işlev
       10    _D6deneme10altİşlevFZv         <-- bunun çağırdığı işlev(ler)
------------------
[... gerisini kırptım ...]

Yukarıdaki bölümlerde, hangi işlev hakkında bilgi veriliyorsa, o işlev en sola dayalı olarak gösteriliyor. Onun üstünde ve girintili olarak yazılan işlevler, onu çağıran işlevler... Altında ve girintili yazılanlar da onun çağırdığı işlevler...

Yani yukarıdaki son bölümden anlaşıldığına göre, deneme.anaİşlev işlevini tek bir işlev çağırıyor: main... deneme.anaİşlev'in çağırdığı da tek bir işlev var: deneme.altİşlev...

Dosyanın son tarafındaki bilgiler de şöyle (satırlar uzun olduğu için sağ taraflarını kırptım):

======== Timer Is 3579545 Ticks/Sec, Times are in Microsecs ========
  Num          Tree        Func        Per
  Calls        Time        Time        Call
     10       54961       54961        5496     _D3std5stdio4File17LockingText...
     10       26557       26557        2655     _D3std5stdio4File17LockingText...
     10      104065       10930        1093     _D3std5stdio4File16__T5writeTA...
     20        4517        4219         210     _D3std6format65__T19writeUpToF...
     10       66576        3804         380     _D3std6format60__T14formattedW...
     10      108264        3478         347     _D6deneme10altİşlevFZv
     10        2509        2509         250     _D3std6format10FormatInfo14__T...
      1      109179         914         914     _D6deneme10anaİşlevFZv
     10       55745         783          78     _D3std6format57__T13formatGene...
     10      104786         721          72     _D3std5stdio16__T7writelnTAyaZ...
     20         297         297          14     _D3std5stdio4File17LockingText...
      1      109261          82          82     _Dmain
     10           0           0           0     _D3std5array13__T5emptyTxaZ5em...
     10           0           0           0     _D3std4conv15__T2toTAxaTAxaZ2t...

Başlık satırında iki bilgi var:

- Ticks/sec: saniyede kaç kere örnekleyebildiği

- Microsecs: zamanlar mikro saniye düzeyinde

Sonra beş sütun halinde şu bilgiler geliyor:

- Num Calls: işlevin kaç kere çağrıldığı

- Tree Time: bu işlevin ve onun çağırdığı işlevlerin harcadıkları zaman

- Func Time: tam bu işlev içinde harcanan zaman (bunun çağırdıkları hariç)

- Pre Call: çağrı başına harcanan zaman; yani (Func Time) / (Num Calls)

Bu bilgileri şu sayfadan aldım:

  http://www.digitalmars.com/ctg/trace.html

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 00:42:10 (UTC -08:00)