Bagaimana anda profil kode anda?

Saya harap tidak semua orang menggunakan Rasional Memurnikan.

Jadi apa yang anda lakukan ketika anda ingin mengukur:

  • waktu yang dibutuhkan oleh fungsi
  • puncak penggunaan memori
  • cakupan kode

Pada saat ini, kami melakukannya secara manual [menggunakan log pernyataan dengan cap waktu dan lain script parse log dan output ke excel. fiuh...)

Apa yang akan anda rekomendasikan? Menunjuk ke alat-alat atau teknik-teknik yang akan dihargai!

EDIT: Maaf, saya tidak't menentukan lingkungan pertama, polos C pada proprietary mobile platform

I've dilakukan ini banyak. Jika anda memiliki IDE, atau ES, ada teknik yang mengambil beberapa upaya manual, tetapi bekerja tanpa gagal.

Peringatan: modern programmer benci ini, dan saya'm akan mendapatkan downvoted. Mereka mencintai alat-alat mereka. Tapi itu benar-benar bekerja, dan anda don't selalu bagus alat-alat.

Saya asumsikan dalam kasus anda kode adalah sesuatu seperti DSP atau video yang berjalan pada timer dan harus cepat. Misalkan apa yang anda jalankan di masing-masing timer adalah subrutin A. Menulis beberapa uji kode untuk menjalankan subrutin Yang di loop sederhana, katakanlah 1000 kali, atau cukup lama untuk membuat anda menunggu setidaknya beberapa detik.

Sementara itu's berjalan, secara acak berhenti dengan jeda dan sampel panggilan stack (bukan hanya program counter) dan merekamnya. (Yang's manual bagian.) Lakukan ini beberapa kali, seperti 10. Sekali tidak cukup.

Sekarang mencari kesamaan di antara tumpukan sampel. Mencari setiap petunjuk atau instruksi call yang muncul pada setidaknya 2 sampel. Akan ada banyak dari ini, tetapi beberapa dari mereka akan menjadi kode yang bisa anda optimalkan.

Melakukannya, dan anda akan mendapatkan yang bagus speedup, dijamin. 1000 iterasi akan memakan waktu kurang.

Alasan anda don't membutuhkan banyak sampel adalah anda're tidak mencari hal-hal kecil. Seperti jika anda melihat panggilan tertentu instruksi pada 5 dari 10 sampel, hal ini bertanggung jawab untuk kira-kira 50% dari total waktu eksekusi. Lebih banyak sampel akan memberitahu anda lebih tepatnya apa yang persentasenya, jika anda benar-benar ingin tahu. Jika anda're seperti saya, semua yang anda ingin tahu di mana itu, sehingga anda dapat memperbaiki itu, dan beralih ke yang berikutnya.

Lakukan ini sampai anda dapat't menemukan sesuatu yang lebih untuk mengoptimalkan, dan anda akan berada pada atau di dekat top speed.

Komentar (0)
Larutan

Anda mungkin ingin alat yang berbeda untuk pengukuran performa dan cakupan kode.

Untuk profil saya sukai ikan Hiu di MacOSX. Hal ini bebas dari Apple dan sangat baik. Jika aplikasi anda vanili C kau harus bisa menggunakannya, jika anda bisa mendapatkan sebuah Mac.

Untuk profil pada Windows anda dapat menggunakan LTProf. Murah, tapi tidak besar: http://successfulsoftware.net/2007/12/18/optimising-your-application/

(Saya pikir Microsoft benar-benar menembak dirinya di kaki dengan tidak menyediakan rumah yang layak profiler dengan versi yang lebih murah dari Visual Studio.)

Untuk cakupan yang saya sukai Cakupan Validator pada Windows: http://successfulsoftware.net/2008/03/10/coverage-validator/ Update cakupan secara real time.

Komentar (0)

Untuk aplikasi yang kompleks saya seorang penggemar besar dari Intel's Vlagu. Itu adalah sedikit berbeda pola pikir tradisional profiler bahwa instrumen kode. Ia bekerja dengan sampling prosesor untuk melihat di mana instruksi pointer adalah 1.000 kali per detik. Ini memiliki keuntungan besar tidak membutuhkan perubahan apapun untuk anda binari, yang sesering tidak akan mengubah waktu dari apa yang anda mencoba untuk mengukur.

Sayangnya hal ini tidak baik untuk .net atau java karena ada isn't cara untuk Vlagu untuk memetakan instruksi pointer ke simbol seperti yang ada dengan kode.

Hal ini juga memungkinkan anda untuk mengukur segala macam prosesor lainnya/hardware sentris metrik, seperti jam per instruksi, cache hits/meleset, TLB hit/meleset, dll yang memungkinkan anda mengidentifikasi mengapa bagian-bagian tertentu dari kode yang dapat mengambil lebih lama untuk lari dari yang anda harapkan hanya dengan memeriksa kode.

Komentar (0)

Jika anda're melakukan 'pada logam' tertanam 'C' system (I'm tidak yakin apa yang 'mobile' tersirat di postingan anda), maka anda biasanya memiliki beberapa jenis timer ISR, di mana ia's cukup mudah untuk sampel kode alamat yang mengganggu terjadi (dengan menggali kembali dalam stack atau melihat link register atau apapun). Maka itu's sepele untuk membangun sebuah histogram alamat pada beberapa kombinasi dari granularity/range-of-interest.

It's biasanya maka tidak terlalu sulit untuk menyusun beberapa kombinasi dari kode/script/lembar Excel yang menggabungkan histogram menghitung dengan alamat dari linker simbol/daftar file untuk memberikan anda informasi profil.

Jika anda're RAM sangat terbatas, hal ini dapat menjadi sedikit sakit untuk mengumpulkan data yang cukup untuk ini untuk menjadi sederhana dan berguna, tetapi anda akan perlu untuk memberitahu kita lebih banyak tentang platform anda.

Komentar (0)

nProf - Gratis, apakah itu untuk .NET.

Mendapatkan pekerjaan yang dilakukan, setidaknya cukup untuk melihat 80/20. (20% dari kode, mengambil 80% dari waktu)

Komentar (0)

Google Perftools yang sangat berguna dalam hal ini.

Komentar (0)

Saya menggunakan devpartner dengan MSVC 6 dan XP

Komentar (0)

Windows (.NET Asli dan Ongkos): AQTime adalah alat yang hebat untuk uang. Standalone atau sebagai Visual Studio plugin.

Jawa: aku'm penggemar JProfiler. Lagi, dapat dijalankan standalone atau sebagai Gerhana (atau lain berbagai Ide) plugin.

Saya percaya keduanya memiliki versi trial.

Komentar (0)

Bagaimana setiap alat akan bekerja jika anda platform proprietary OS? Saya pikir anda're melakukan yang terbaik yang anda bisa sekarang

Komentar (0)