Programmatically set core affinity in multicore environment

Prosesor multicore sudah tidak asing tetapi aplikasi yang umumnya dikembangkan biasanya hanya terdiri dari satu thread. Sejak dahulu ternyata sudah ada Win32 API untuk menentukan afinitas proses/thread ke prosesor tertentu. Kode di bawah menggunakan delphi 7.

Mendapatkan Jumlah core/Prosesor

var
  sinfo : TSystemInfo;
begin
  GetSystemInfo(sinfo);
  { jumlah prosesor ada di field dwNumberOfProcessors } 
  showmessage(inttostr(sinfo.dwNumberOfProcessors));

Menentukan Afinitas ke core tertentu
Afinitas ke core menggunakan bit vector. Tiap 1 bit diasosiasikan ke core tertentu mulai dari LSB. karena tipe data yang dilemparkan ke fungsi tsb adalah 32 bit unsigned integer maka mungkin maksimum prosesor yang bisa diakses sejumlah 32.

berikut ini contoh kode agar aplikasi yang sedang berjalan hanya menggunakan core pertama (cpu0) saja.

SetProcessAffinityMask(GetCurrentProcess, 1);

berikut ini contoh kode agar aplikasi yang sedang berjalan hanya menggunakan core pertama (cpu0) dan kedua (cpu1).

SetProcessAffinityMask(GetCurrentProcess, 3);

sedangkan berikut ini contoh kode agar aplikasi yang sedang berjalan hanya menggunakan core kedua (cpu0) saja.

SetProcessAffinityMask(GetCurrentProcess, 2);

2 comments

  1. waskita · Juni 5, 2009

    Wah keren, saya belum sampai ke menggunakan sistem multicore secara langsung. Biasanya pakai saja aplikasi yang memang sudah support multicore. (Apache, mysql, dsb)

  2. drew · Oktober 10, 2009

    gimana caranya spy saya bisa masuk ke (SetProcessAffinityMask(GetCurrentProcess, 1)
    (SetProcessAffinityMask(GetCurrentProcess, 3)
    (SetProcessAffinityMask(GetCurrentProcess, 2)
    apa yg harus saya jalanin utk bisa setting tsb?

    terima kasih

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