Class Profiler sederhana pada c++
Februari 24, 2010 at 4:36 pm 3 komentar
Optimisasi adalah hal yang mungkin jarang kita perhatikan saat sedang membuat aplikasi, terutama aplikasi-aplikasi yang ringan. Dengan kemampuan CPU yang semakin tinggi, kita dapat membuat aplikasi dengan fitur yang banyak namun tetap dapat berjalan dengan cepat. Namun ada kalanya kita dihadapkan pada aplikasi yang membutuhkan komputasi kompleks yang mengakibatkan kinerja buruk (baca: ngelag) kalau kita tidak melakukan optimisasi. Contohnya pada semester ini saya mengambil kuliah Grafika 3D yang membutuhkan perhitungan kompleks sehingga mau tak mau optimisasi algoritma harus dilakukan.
Untuk membantu tahap optimisasi tersebut saya membuat sebuah class Profiler sederhana yang dapat menghitung rentang waktu yang dipakai komputer untuk menjalankan tahapan-tahapan proses. Setelah melihat tahapan mana yang membutuhkan waktu paling lama, baru saya mencoba melakukan optimisasi pada bagian tersebut. Source codenya dapat diunduh di sini. Contoh cara pemakaiannya adalah sebagai berikut:
Profiler::enabled = true;
Profiler::reportDelay = 30;
while (loop){
Profiler * profiler = Profiler::start("mainloop");
//lakukan perhitungan berat di sini
//
Profiler::stop(profiler);
Profiler::reportAll();
}
Untuk saat ini Profiler yang saya buat baru bisa mengenerate report sekali saja. reportDelay menunjukkan berapa kali reportAll() harus dipanggil sampai report yang sebenarnya ditulis. Pada setiap pemanggilan reportAll, Profiler akan mencatat waktu, lalu reportDelay akan dikurangi 1. Saat reportDelay mencapai 0, laporan ditulis ke stdout, setelah itu profiler berhenti berfungsi. Waktu yang ditampilkan merupakan rata-rata dari waktu yang dicatat pada setiap pemanggilan reportAll().
Laporan yang dicatat memiliki label nama yang dipassing pada fungsi start(), seperti label “mainloop” pada contoh di atas. Dengan cara ini kita bisa membagi-bagi program menjadi beberapa bagian dan menjalankan Profiler dengan label yang berbeda-beda. Di bawah ini contoh screenshot laporan Profiler dari tugas saya:
Hanya saja karena class Profiler ini sendiri belum dioptimisasi, penggunaan Profiler terlalu banyak malah akan menurunkan kinerja program. Dan karena perhitungannya dalam millidetik, presisinya kurang tinggi, tapi cukup untuk mengukur kinerja program yang berat.
Profiler ini saya buat untuk compiler gcc dan baru dites di Windows saja.
Entry filed under: Programming. Tags: algoritma, c++, optimisasi, profiler, Programming.
3 Komentar Add your own
Tinggalkan Balasan
Trackback this post | Subscribe to the comments via RSS Feed

1.
Inas Luthfi | Februari 24, 2010 pukul 7:31 pm
Wah keren van, dulu bikin profilernya ndak sampai bikin kelas, brutal saja saya
pelik memang
2.
dominikus | Februari 25, 2010 pukul 4:45 am
saya kok makin merasa sekecil kuman ya …
nice post anyway, cheers
3.
Felicia | Februari 25, 2010 pukul 8:36 am
yang bener tuh optimisasi atau optimasi yah?
/gak nyambung