Mengetahui Kecepatan Kode Yang kita Tulis

Anda seorang programmer? Ya mungkin, tapi apakah anda pernah melakukan tes kecepatan kode-kode yang anda tulis. Ketika anda membuat sopware dan mempublikasikan ke public, lalu anda bilang ini cepat karena ditulis dengan kode yang efisien dalam bahasa pemrograman anda.

Tapi apakah anda sudah yakin yang anda tulis sudah efisien dan lebih cepat dari pada cara lain. Misal ada sebuah kasus pemograman pada VB atau bahasa lainya.

N = N ^ 5 disisi lain kita dapat memilih pernyataan N = N*N*N*N*N

Mana yang akan anda pilih?😀, apakah anda bingung, ups… sabar dulu. Saya coba menulis library untuk menghitung perputaran CPU dari satu blok kode, yang dapat anda manfaatkan untuk menghitung kcepatan kode yang anda tulis dari bahasa pemrograman apa saja (jika anda tidak dapat melakukan secara internal).

Jika anda pernah memakai fungsi GetTickCount dari kernel32 mungkin hampir sama, tapi tunggu dulu fungsi GetTickCount punya ketelitian 1 mili detik alias 1/1000 detik yang tentunya sangat jelek untuk membandingkan kode-kode singkat denganb model yang hampir sama kecepatanya dalam ukuran mili detik. Library yang saya buat ini punya ketelitian miliaran bahkan sampai triliunan putaran per detik tergantung kemampuan prosesor yang anda pakai.

Satuan yang dipakai disini adalalah cycle atau siklus CPU, dimana prosesor masa kini rata-rata mampu mengerjakan miliaran putaran dalam 1 detik. Artinya ketelitian library yang dibuat ini sanagatlah luar biasa, karena kita bisa membedakan perbedaan kecepatan kode walaupun skrip yang cukup sederhana.

Jika anda pemakai VB maka berikut adalah contoh kode untuk tes kcepatan kode yang akan anda tulis, namun sebelumnya ambil dulu library yang saya tulis (CPU.dll) bersama contoh kode dalam VB.

þ      Buatlah form dengan 2 CommandButton (biarkan nama default)

þ      Tulis kode berikut pada form

‘ deklarasi fungsi yang ada pada DLL CPU.dll

Private Declare Function CPUCYCLE Lib “F:\CPU.dll” (ByRef CCYCLE As Long) As Long

Private Declare Function CPUCYCLE_END Lib “F:\CPU.dll” (ByRef DCYCLE As Long) As Long

‘ ini untuk tes kcepatan blok kode yang anda tulis

‘ dengan ini anda bisa memilih fungsi2 mana yang lebih cepat yang anda tulis

‘ Tes setelah pemanggilan pertama (pemanggilan pertama anggap tidak valid karena VB butuh 100.000 cycles lebih untuk import fungsi2 std-dll pertama kali)

Dim AA As Long  ‘ seharusnya ini type QuadWord tapi VB gak mndukung Qword jadi kita pakai Long aja (1/2)

Dim N  As Double

Private Sub Command2_Click()

Call CPUCYCLE(AA)

N = 0

N = 1000

N = N ^ 5

N = N – N

Call CPUCYCLE_END(AA)

MsgBox “Kecepatan eksekusi blok tsb pada CPU anda = ” & Format(Abs(AA), “#,#”) & ” cycles”

End Sub

Private Sub Command1_Click()

Call CPUCYCLE(AA)

N = 0

N = 1000

N = N * N * N * N * N

N = (N / N) – 1

Call CPUCYCLE_END(AA)

MsgBox “Kecepatan eksekusi blok tsb pada CPU anda = ” & Format(Abs(AA), “#,#”) & ” cycles”

End Sub

‘ Pada VB hasil akhir dikurangi 1500-2000 karena pemanggilan fungsi CPUCYCLE dan CPUCYCLE_END VB memerlukan sekitar 1500-2000 cycles

‘ itu pada Prosesor saya (Dual Core 1.6 GH), prosesor lain skarang hampir sama lah

Private Sub Form_Load()

‘ Panggil pertama kalinya agar fungsi Diimport sebelum dipakai

‘ Disini VB butuh waktu banyak sekitar 100.000 cycle

‘ 1 detik seh bisa Miliaran sampai triliunan cycle

Call CPUCYCLE(AA)

Call CPUCYCLE_END(AA)

End Sub

Perhatikan

Pada bagian kode deklrasi ada pernyataan “F:\CPU.dll” ganti dengan path file CPU.dll di tempat anda. Jika anda taruh pada path program path tidak usah ditulis. Ketika anda menekan tombol command1 maka akan muncul putaran CPU yang menghitung 4 baris kode yaitu :

N = 0

N = 1000

N = N ^ 5

N = N – N

Anda boleh manambahakan sendiri baris kodenya, lalu jika anda menekan command2 maka akan muncul putaran CPU yang menghitung baris-baris kode ini:

N = 0

N = 1000

N = N * N * N * N * N

N = (N / N) – 1

Kedua blok baris kode di atas punya keluaran yang sama (proses yang sama) namun pastinya punya perbedaan kecepatan . Nah sekarang coba jawab kode mana yang menurut anda lebih cepat sesuai logika anda ?, lalu buktikan dengan program berapa putaran CPU pada blok kode 1 dan blok kode 2 ?. Semakin kecil nilai putaran CPU nya maka semakin cepata suatu blok kode di eksekusi oleh Mesin.

NB : Jika anda pengguna visual basic, maka hasil akhir putaran ada baiknya anda kurangi dengan nilai 1000-2000 (yang penting konstan) karena walapun DLL yang saya tulis ini adalah std-dll, ternyata VB itu emang terkenal sedikit leletnya. Dia butuh waktu sekitar 100.000 cycle untuk memanggil fungsi yang diimportnya pertama kali (pada prosesor saya), lalu butuh 1000-2000 cycle untuk memanggil fungsi yang sama selanjutnya dan hampir konstan seterusnya (2 fungsi pada kasus ini).

Hal ini sagat menarik karena dapat membantu kita menulis kode tercepat yang bisa kita tulis sesuai kemampuan kita. Jika anda pengguna bahasa ASM maka anda bisa tahu, kode yang anda tulis dengan susah payah memang dibayar dengan kecepatan yang luar biasa oleh mesin.

Contoh kasus !

A = 100

A = 100 * 100

Bandingkan dengan

Mov AX,100

Mov A,100

Mul A

Mov A, AX

Download Libraryny dan projeknya disini – KLIK

About revil

i'm just a stupid who wanted to be better..

Posted on February 20, 2010, in Programming, Tutorial and tagged . Bookmark the permalink. 1 Comment.

  1. Ajieb!!!!!!!!

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

%d bloggers like this: