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 komentar

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.