Sunday - May 18, 2008

Home | Site Map | Channels | Profile | Press Room | Services | Contact 

currently 12 user(s) online

search 

   Latest News

»

sony-ak.com Luncurkan Kamus Teknologi Informasi (May 27, 2006)

»

sony-ak.com Luncurkan IT Event Calendar (May 20, 2006)

»

Web Chat Berbasis AJAX dari sony-ak.com (May 09, 2006)

»

sony-ak.com Advertising Program (May 01, 2006)

»

Sony AK di Tabloid PCplus (April 18, 2006)

news archives » 


   Random Article

»

Memberikan Instruksi Ke Thread Lain Secara Serial (4556)

»

Mengetahui Informasi Waktu Modifikasi File Dengan PHP (2814)

»

Konsep Membuat Fasilitas "Forget Password" dengan PHP+MySQL (5847)

»

Langkah-langkah Persiapan Presentasi dengan Pihak Klien (3848)

»

Tips PHP: Membuat Random Password (2517)

   Newsletter

Join our newsletter, you will get alert about content updates

powered by Yahoo! Groups















Nedstat Basic - Free web site statistics

 
 
Mengetahui Kecepatan Prosesor dengan Instruksi RDTSC

Author: Ario Sutomo
Published: July 10, 2005
Visits: 2795 - Category:
Hardware
 
     
 

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.




 Recommended articles
 

»

Membuat Hasil Pencarian Google Anda Selalu "Open New Window" pada Web Browser (2642)

»

Tips dalam Melakukan Transaksi Pembelian Online di Internet (3510)

»

Menerapkan KM untuk UKM (1783)

»

Konversi dari MS Word ke LaTeX (1488)

»

Tips MySQL: Mengganti Nama Tabel pada MySQL (3194)

 Send your comments or suggestions
Full Name :
E-mail :
Comments :
 
 

  Privacy | Site Map | Advertise

  Copyright © 2003 - 2006 Sony AK Knowledge Center - all rights reserved

  info@sony-ak.com