|
RDTSC (read time-stamp counter) merupakan suatu instruksi yang
digunakan untuk mengakses (mendapatkan) nilai dari time-stamp
counter suatu prosesor (mulai prosesor Pentium). Time-stamp counter
merupakan suatu counter yang secara terus menerus melakukan
perhitungan (pertambahan) pada setiap clock cycle yang terjadi pada
prosesor. Time-stamp counter pada prosesor Intel terdiri dari 64-bit
MSR (model specific register) yang akan bertambah terus setiap
siklus (clock cycle). Ketika komputer direset, time-stamp counter
diset kembali ke nol. Melalui time-stamp counter inilah kita bisa
mendapatkan kecepatan prosesor. Instruksi RDTSC (read time-stamp
counter) terdiri dari dua byte intruksi (opcode) – 0Fh 31h –.
Setelah dipanggil, instruksi ini akan “mengirimkan” nilai
(time-stamp counter) ke register EDX:EAX. Umumnya yang akan dipakai
adalah nilai low-nya saja (register EAX), kecuali kalau komputer
yang bersangkutan sudah nyala selama berhari-hari.
Yang perlu dicatat adalah bahwa satuan time-stamp counter adalah
“cycle”, bukan “waktu”. Sebagai contoh, lima ratus juta cycle pada
prosesor yang memiliki kecepatan 500MHz sama dengan satu detik
satuan waktu, dan jika pada prosesor yang 1000MHz (1GHz) akan sama
dengan setengah detik. Sehingga, membandingkan jumlah cycle hanya
masuk akal untuk prosesor dengan kecepatan yang sama. Kalaupun ingin
membandingkan prosesor dengan kecepatan yang berbeda-beda, jumlah
cycle harus dikonversi dulu ke dalam satuan waktu dengan rumus:
detik =
cycle / 106
Sehingga, cycle bisa disamakan dengan frekuensi atau kecepatan
prosesor.
Dari penjelasan di atas, kita dapat membuat suatu algoritma yang
akan mendeteksi kecepatan prosesor yang terpasang. Algoritmanya
adalah sebagai berikut:
- Ambil time-stamp counter dan simpan di variabel A.
- Biarkan komputer berhenti 1 detik (1000 milidetik), dengan
tujuan agar isi counter bertambah.
- Kemudian, ambil time-stamp counter lagi, tetapi sekarang
simpan di variabel B.
- Cari selisih antara variabel A dan B untuk kemudian dibagi
dengan 106. Hasilnya adalah kecepatan prosesor.
Untuk lebih lengkapnya, berikut potongan sourcecode-nya:
...
asm
dw 310Fh //RDTSC
mov TimerA, eax //yg diambil nilai low-nya, kecuali
komputernya
//nyala terus berhari-hari
end;
Sleep(1000); //delay 1 detik
asm
dw 310Fh //RDTSC kedua
mov TimerB, eax
end;
CPUSpeed := (TimerB-TimerA)/1000000;
...

Sebagai contoh buatlah sebuah form yang terdiri dari 2 komponen
Label dan sebuah komponen Edit. Untuk Edit beri nama dengan edSpeed.
Sedangkan untuk Label, cukup isi saja Caption-nya seperti gambar 1.
Kemudian pada event OnShow form Anda, tulis listing di bawah ini:
procedure
TForm1.FormShow(Sender: TObject);
//fungsi untuk mendeteksi kecepatan prosesor
function GetCPUSpeed: real;
var
TimerA, TimerB : DWORD;
begin
asm
dw 310Fh //RDTSC
mov TimerA, eax //yg diambil nilai low-nya,
kecuali komputernya
//nyala terus berhari-hari
end;
//tunda dulu selama 1 detik u/ mengupdate time-stamp counter
Sleep(1000);
asm
dw 310Fh //RDTSC
mov TimerB, eax
end;
Result := (TimerB-TimerA)/1000000;
end;
begin
edSpeed.Text := Format('%-4.0f MHz', [GetCPUSpeed]);
end;

Gambar 1. Informasi kecepatan prosesor.
Sebagai bahan perbandingan, penulis mencoba mengambil hasil
pendeteksian dari System Properties-nya Windows pada gambar berikut.

Gambar 2. Hasil pendeteksian prosesor pada System Properties milik
Windows.
Source code dari program ini bisa di-download pada bagian akhir
dari tulisan ini.
Referensi:
- Ario Sutomo, Borland Delphi Win32 API, Jakarta: Dinastindo,
2005.
- Intel Processor Identification and the CPUID Instruction,
Application Note 486, February 2004, Intel Corporation.
- Using the RDTSC Instruction for Performance Monitoring,
Intel Corporation, 1997.
Demikian tulisan mengenai bagaimana caranya mengetahui kecepatan
prosesor dengan instruksi RDTSC. Semoga
bermanfaat bagi Anda semuanya. Jika ada saran atau komentar bisa
dilayangkan ke
arioss@softhome.net. Untuk membaca tulisan menarik lainnya
silakan menuju ke situs Sony AK Knowledge Center dengan alamat di
www.sony-ak.com.
 |
Silakan download source code lengkap dari
project di atas |
Terimakasih.
| Send
your comments or suggestions |
|
|
|