2009-04-08 19 views
6

CPU profillemesi için Google'ın perftools'unu (http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html) kullanıyorum --- bu, büyük miktarda CPU zamanı iyileştirme gerçekleştirmeme yardımcı olan harika bir araçtır. benim uygulamam.C++ profil oluşturma/optimizasyon: İyileştirilmiş bir işlevde daha iyi profil oluşturma ayrıntı düzeyi nasıl elde edilir

Maalesef, kodun biraz yavaş olduğunu ve g ++ 's -O3 optimizasyon düzeyini kullanarak derlendiğimde, bildiğim tek şey, belirli bir fonksiyonun yavaş olduğunu, ancak hangi yönlerinin yavaş olduğunu değil. .

-O3 bayrağını çıkarırsam, programın dönüştürülmemiş bölümleri bu işlevi geçersiz kılar ve işlevlerin gerçek kısımlarına çok fazla açıklık getiremiyorum. -O3 bayrağını bırakırsam, işlevlerin yavaş kısımları belirtilir ve işlevlerin hangi bölümlerinin yavaş olduğunu belirleyemiyorum.

Herhangi bir öneriniz var mı? Yardım ettiğin için teşekkür ederim! Eğer geçerli saat (ya cputime) ölçmek çeşitli noktaları ifadeleri de ölçmek istediğiniz rutinine

Insert: Böyle bir şey için

cevap

5

Eğer linux kullanıyorsanız, oprofile kullanın. Windows kullanıyorsanız, AMD'nin CodeAnalyst kullanın.

Her iki örnek de, tek tek kaynak çizgilerinin veya montaj talimatlarının seviyesine kadar örnek tabanlı profiller verecektir ve işlevler içinde "sıcak noktalar" tanımlamakta sorun yaşamanız gerekir.

+0

CodeAnalyst için konuşamam ama oprofile harika! opannotate komutu, anlattığınız gibi bana kaynak satırı ek açıklamaları verdi. Teşekkürler! – Adam

+1

CodeAnalyst, özel bir oprofile sürümü üzerinde bir GUI'dir. CodeAnalyst'i Linux'ta da kullanabilirsiniz. – Carlos

6

, hep bunu yapmanın "eski okul" yolu kullandım. Ardından, aralarındaki farkları yazdırın veya günlüğe kaydedin ve kodun her bölümünün ne kadar sürdüğünü öğreneceksiniz. Oradan çoğu zaman ne yediğini öğrenebilir ve sorunun ne olduğunu ve nasıl düzeltileceğini anlayana kadar o bölümün içinde ince bir zamanlama elde edebilirsiniz.

İşlev çağrılarının ek yükü sorun değilse, aynı zamanda -fno-inline-small-functions -fno-inline-functions -fno-inline-functions-called-once -fno-inline ile kapalı olması için satır içi zorlamayı da zorlayabilirsiniz (Bu anahtarların birbirleriyle nasıl etkileştiğinden tam olarak emin değilim, ancak bağımsız olduğunu düşünüyorum). Ardından sıradan profilleyicinizi kullanarak arama grafiği profiline bakabilir ve hangi fonksiyon çağrılarının ne zaman aldığını görebilirsiniz.

+0

Teşekkürler Greg! Oprofile (aşağıda) olmasaydı, sanırım önerdiğiniz hassas zamanlama fikrine gitmiş olurdum. – Adam

1

Performans ayarlaması yapmak için onlarca yıl harcadım.

İnsanlar araçlarını çok sever ama yemin ederim this method.