Pemrograman untuk prosesor multicore punya tantangan tersendiri. Ada delapan aturan pemrograman multicore yang dapat menolong programmer agar bisa sukses menghadapi tantangan paralelisme.
- Berpikir secara paralel.
Dekati semua masalah untuk mencari peluang paralelisme. Pahami dimana letak paralelisme, dan atur cara berpikir agar bisa mengekspresikan paralelisme. Ambil keputusan pada pendekatan paralel yang terbaik. Belajar untuk “berpikir secara paralel.”
- Gunakan abstraksi.
Fokus pada penulisan program komputer yang mengekspresikan paralelisme, dan hindari penulisan program komputer yang mengatur thread atau banyaknya core processor. Contoh dari penggunaan abstraksi adalah OpenMP dan Intel Threading Building Blocks (Intel TBB). Jangan gunakan thread sistem operasi (Pthreads, Windows threads, Boost threads, dan sejenisnya). Thread dan MPI adalah bahasa mesinnya paralelisme. Keduanya menawarkan fleksibilitas maksimum, tapi keduanya menguras waktu penulisan program komputer, debug program, dan pengaturan program. Program komputer seharusnya berada pada level cukup tinggi sehingga program komputer seharusnya hanya menyelesaikan masalah, bukan malah mengatur thread atau manajemen penggunaan core processor.
- Bekerja dalam task, bukan dalam thread.
Tinggalkan pemetaan task terhadap thread atau core processor yang nyata-nyata sudah jelas terpisah dalam program komputer, sebaiknya gunakan abstraksi yang menangani thread atau manajemen penggunaan core processor. Ciptakan banyak task dalam program komputer, atau satu task yang dapat disebar ke seluruh core processor (misalnya looping menggunakan OpenMP). Dengan menciptakan task, programmer bebas menciptakan sebanyak mungkin tanpa takut kelebihan permintaan.
- Desain program komputer dengan pilihan menonaktifkan concurrency.
Untuk mempermudah debugging, ciptakan program komputer yang berjalan tanpa menggunakan concurrency. Saat debugging, programmer dapat menjalankan program komputer dengan concurrency, kemudian tanpa concurrency, dan perhatikan apakah kedua program dapat berjalan sukses atau tidak. Masalah umum debugging adalah program komputer tidak berjalan secara serentak, sehingga lebih baik menggunakan peralatan debugging terkini, karena dapat diketahui sesuatu yang gagal ketika program berjalan secara serentak sehingga menjadi petunjuk pada jenis bug tertentu. Jika programmer mengabaikan aturan ini dan program tidak dapat berjalan menggunakan satu thread saja, maka programmer akan menghabiskan banyak waktu untuk debugging. Program komputer tidak harus efisien jika ingin berjalan menggunakan thread tunggal. Programmer cukup menghindar dari menciptakan program paralel yang membutuhkan concurrency, seperti model produsen-konsumen. Program berbasis MPI sering melanggar aturan di atas, sehingga menjadi alasan mengapa program MPI sangat bermasalah saat diimplementasikan dan debug.
- Hindari penggunaan lock.
Katakan “tidak” pada lock. Lock dapat memperlambat program komputer, mengurangi scalability, dan sumber bug dalam program paralel. Buatlah sinkronisasi implisit sebagai solusi untuk program komputer. Jika programmer membutuhkan sinkronisasi eksplisit, maka gunakan operasi atomik. Gunakan lock hanya sebagai pilihan terakhir.
- Gunakan tool dan pustaka yang dapat menolong concurrency.
Jangan gunakan peralatan debugging yang lama. Bersikaplah kritis terhadap peralatan debugging yang berinteraksi dengan paralelisme. Kebanyakan peralatan debugging belum siap untuk paralelisme. Carilah pustaka yang sesuai dengan thread yang didesain untuk memanfaatkan paralelisme.
- Gunakan pengalokasi memori yang dapat diskala.
Program komputer berbasis thread membutuhkan pengalokasi memori yang dapat diskala. Banyak solusi yang lebih baik daripada menggunakan fungsi “malloc()”. Menggunakan pengalokasi memori yang dapat diskala dapat mempercepat aplikasi komputer dengan cara menghilangkan bottleneck global, penggunaan ulang memori dalam thread untuk memanfaatkan cache, dan partisi untuk menghindari berbagi cache.
- Desain program komputer yang dapat menskala peningkatan workload.
Banyaknya beban program komputer yang meningkat seiring dengan waktu perlu untuk diperhatikan. Menggunakan penskalaan, program komputer akan menangani beban lebih banyak seiring dengan bertambahnya core processor. Desain program komputer seharusnya mendukung penggunaan paralelisme yang meningkat agar mendatangkan keuntungan saat menangani workload yang lebih besar dimasa mendatang.