Class Profiler sederhana pada c++

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.

Advertisements
This entry was posted in Programming and tagged , , , , . Bookmark the permalink.

3 Responses to Class Profiler sederhana pada c++

  1. Inas Luthfi says:

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

  2. dominikus says:

    saya kok makin merasa sekecil kuman ya …

    nice post anyway, cheers 😀

  3. Felicia says:

    yang bener tuh optimisasi atau optimasi yah? 😕
    /gak nyambung

Leave a Reply

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 / Change )

Twitter picture

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

Facebook photo

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

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s