Mengetahui Kecepatan Kode Yang kita Tulis

10 02 2010

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

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

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 PROJEK VBNYA DI

http://www.4shared.com/file/218700977/c6a7ce3c/CPU-Speed.html

Mau belajar pemrograman visual basic, c#, java , internet, sharing teknologi dan informasi umum kunjungi blog sikoder di alamat ini :

http://sikoder.blogspot.com/


Aksi

Information

One response

10 02 2010
anhar

ijin sedot rin

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

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

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s




%d blogger menyukai ini: