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: , , , , .

C++: Mengatasi Circular Reference C++ vector iterator: a foolish amateur mistake by me

3 Komentar Add your own

  • 1. Inas Luthfi  |  Februari 24, 2010 pada 7:31 pm

    Wah keren van, dulu bikin profilernya ndak sampai bikin kelas, brutal saja saya :| pelik memang

    Balas
  • 2. dominikus  |  Februari 25, 2010 pada 4:45 am

    saya kok makin merasa sekecil kuman ya …

    nice post anyway, cheers :D

    Balas
  • 3. Felicia  |  Februari 25, 2010 pada 8:36 am

    yang bener tuh optimisasi atau optimasi yah? :-?
    /gak nyambung

    Balas

Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Ubah )

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Tulisan Terkini


Ikuti

Get every new post delivered to your Inbox.