2014-10-11 6 views
5

her çalıştırmada için talimat farklı sayıda verir aynı elf üzerinde analiz 'perf' her sırasında talimatlar değişikliklerinperf istatistik</p> <pre><code>#include <stdio.h> int main() { } </code></pre> <p>ile birlikte (derleme ve dediğim şu çıktıyı var ./a.out perf, stat çalıştırdıktan sonra, aşağıdaki boş programında analiz perf koştu

418,869 instructions # 0.87 insns per cycle 

sayısı: döngülerinin sayısı, görev saat vb) gibi diğer verileri.

Asıl gereksinim, yazdığım belirli bir işlevdeki yönergelerin sayısını bulmaktır. Bu yüzden, yukarıdaki sayıyı yeni programdaki komutların sayısından çıkaracağım. (Programın satır sayısı, gcc'de -S etiketi kullanılarak oluşturuldu, ancak mükemmel davranışa baktıktan sonra kafam karışmış olabilir)

Neden talimat sayısı tutarlı değil, aynı değil mi?

Güncelleme Ben başlayıp işlevin girişinde perf_event_open() sayma olayları durdurmak için önermek için işlevi tarafından çalıştırılan komutların sayısını ölçmek için C

içinde()

cevap

4

perf_event_open kullanmak man page verilen örnek izledi ve programınız ile ve işlevsiz olarak programınızın iki katını çalıştırmak yerine çıkış yapın.

Boş programınız tarafından yürütülen yönergelerin sayısının belirlenememesine ilişkin olarak, hem kullanıcı hem de çekirdek alanlarındaki olayları sayıyor olabilirsiniz. Kullanıcı arazi sayımının iki çalışma arasında aynı kalması gerektiğini düşünüyorum, ancak çekirdek kısım için bu programı yürütmek için sahnenin arkasında pek çok şey oluyor, bu yüzden kararsızlık, çekirdek kodunda olup bitenlerden geliyor. Yalnızca kullanıcı alanı yönergelerini saymak için aşağıdakileri kullanabilirsiniz:

perf stat -e instructions:u a.out 

Farklılıklar hakkında daha ayrıntılı bilgi verebilir misiniz?

+0

perf_event_open() bana .s dosyasındaki yönergelerin sayısına eşit bir sayı verdi. mükemmel stat -e yönergeleri: u a.out her seferinde farklı sayım sayısı verir ancak varyasyon, soruda açıklanan senaryodaki kadar büyük değildir. Perf_event_open kullanarak – Vignesh

+0

tam olarak neyi ölçtüğünüzü biliyorsunuz. Ekledikten sonra bile kalan (küçük) varyasyon için: u, programınızdaki ana işlev çağrılmadan önce kullanıcı alanında hala birçok şeyin yapıldığını tahmin ediyorum ve burada belki de bazı değişiklikler var. –

İlgili konular