2008-09-16 21 views
7

Performansı yalnızca birkaç işleve dayanan bir programa sahip olmamdan nadir değildir ve değişikliklerin gerçekten gelişip iyileşmediğini bilmek için tek bir döngü veya kod parçasının hızını tekli saat hassasiyetine ölçmek istiyorum. performans veya "optimize" kodun plasebo için sadece düşüyor olsaydı.Favori alt seviye profil oluşturma aracınız nedir?

Şahsen kendimi, saat zamanını ölçmek ve bağlam anahtarlarını ve benzerlerini otomatik olarak telafi etmek için rdtsc kullanan bir C makroları seti olan ffmpeg'in "bench.h" numarasını kullanarak buluyorum. Elbette, bu yaklaşımın kendi zayıflıkları vardır; StackOverflow kullanıcıları hangi düşük seviyeli profilleme yöntemlerini kullanıyor?

cevap

2

Şimdi düşük düzeyli programlama yapmıyorum, ancak eğer yapsaydım, kesinlikle dtrace; Okuduğum şeyden son derece ilginç görünüyor. OS X kullanıcıları için ayrıca shark vardır. Unix tabanlı sistemlerde benim tercihim olan

0

Asıl sorun, 'karşılaştırmanızı' derlediğinizde sonuçlarınızı potansiyel olarak değiştirmenizdir (uygulamanın nasıl ve ne zaman yapıldığına bağlı olarak). Ve bu düşük seviyedeki şeylerle, muhtemelen derleyicinizin seçiminden çok etkilendiniz.

Ama Linux'ta kişisel olarak oprofile için yumuşak bir noktam var (oprofile) bu, bir çekirdek modülü olarak gömülü ve uygulamanızın zaman harcadığı periyodik olarak izlenen sistem çapında bir profilerdir. Yani bu profiller tüm sisteminizi değil, sadece bir uygulamayı değil. Ama size yeterli ayrıntı vermemesi olabilir.

0

Kodunuzu profillemek için uyarlamamanızı tavsiye ederim. Verebileceğim en iyi cevap, Intel'den PTU (Performans Ayarlama Yardımcı Programı) kullanmak olabilir, şu adreste bulunabilir:

Bu yardımcı program, VTune'nin doğrudan torunu ve mevcut en iyi örnekleme profilerini sunmaktadır. CPU'nun harcadığı veya harcadığı zamanı (mevcut donanım olaylarının yardımıyla) izleyebileceksiniz ve bu da uygulamanızın yavaşlamasını veya profilin bozulmasını engelleyemeyecektir.

1

valgrind önce de söz edildiği, ancak callgrind aracıyla özellikle yararlıdır:

$ valgrind --tool=callgrind your_program 

Sonra verileri görselleştirmek için KCacheGrind kullanabilirsiniz. Linux için

0

: Google Perftools

  • valgrind daha hızlı (henüz, taneli kadar güzel değil)
  • kod enstrümantasyon ihtiyaç duymaz
  • Güzel grafik çıkışı (-> KCacheGrind)
  • mu bellek profili oluşturma, işlemci profili oluşturma, sızıntı denetimi
0

OK -spot durumu - zamanın büyük bir kısmını kaplayan ve işlev çağrıları içermeyen sıkı bir döngü.

Yaptığınız değişikliklerin herhangi bir etkisi olup olmadığını bilmek istersiniz.İşte

ben öyle yapardım:

  • yapmak için değiştirmek olduğunu görmek için daha hızlı iki yöntem, kemik basit: iç döngü içinde

1) Tek aşamalı Tam olarak ne yaptığını ve neden olduğunu görmek için. Şanslar oldukça iyi, daha iyi yapılabilecek bazı şeyleri göreceğim.

ve/veya

2) büyük bir dış döngü içinde çalışan ve daha sonra elle müdahale alın. Bunu birkaç kez yapın. En çok hesaba katılacak talimatlar/ifadeler, bu örneklerde maliyetleriyle kabaca orantılı olarak görünecektir.

  • herhangi bir fark
    , başka kemik basit bir tekniktir yaptıysanız anlatmak için: bir dış döngü içinde

Run bir milyar katı ve saniye sayar. Bu iç döngü kaç nanosaniye sürer söyler.

İlgili konular