Dari perspektif pengembangan perangkat lunak, pengembang harus meninjau kembali implementasi perangkat lunak dan “memaralelkan” aplikasi serial sebelumnya. Pengembang harus menguraikan aplikasi ke dalam task, dan mengidentifikasi task-task yang independen satu sama lain sehingga task-task tersebut dapat dijalankan secara “paralel”. Dengan dukungan perangkat keras untuk vektorisasi, sangatlah bijaksana memanfaatkan paralelisme data dalam program. Untuk memanfaatkan platform multicore dengan kemampuan vektorisasi yang canggih, diperlukan model pemrograman yang mudah dan efisien untuk mewujudkan paralelisme task dan paralelisme data yang berpotensi menghasilkan eksekusi kode yang lebih cepat.
Intel Cilk Plus adalah platform pemrograman yang dirancang untuk memanfaatkan sistem komputer multicore saat ini oleh pengembang. Platform ini adalah hasil dari hampir dua dekade penelitian oleh beberapa industri. Intel Cilk Plus adalah teknologi yang menambahkan paralelisme task dan paralelisme data yang mendukung bahasa C dan C++, sehingga mudah menambahkan paralelisme pada perangkat lunak yang baru dan eksisting untuk memanfaatkan potensi multipel prosesor.
Intel Cilk Plus sangat cocok untuk algoritma “pecah-belah dan taklukkan”. Strategi ini menyelesaikan masalah dengan memecahnya menjadi sub-masalah (task) yang dapat diselesaikan secara independen kemudian hasilnya digabungkan. Fungsi rekursif sering digunakan untuk algoritma tersebut, dan didukung dengan baik oleh Intel Cilk Plus. Task bisa berupa fungsi atau iterasi dari suatu loop. Kata kunci Intel Cilk Plus mengidentifikasi panggilan fungsi dan looping fungsi yang dapat berjalan secara paralel. Runtime Intel Cilk Plus menjadwalkan semua task agar berjalan secara efisien pada prosesor yang tersedia.
Dari perspektif pengembang C/C++, Intel Cilk Plus adalah model yang sederhana tapi powerful karena hanya menambah overhead yang sangat kecil ketika mengubah program serial eksisting menjadi paralel. Pada awalnya, kesederhanaan ini mungkin tampak terbatas ketika dibandingkan dengan OpenMP atau Intel TBB, karena keduanya datang membawa banyak konsepsi pemrograman paralel. Akan tetapi, Intel Cilk Plus memiliki semua fitur yang dibutuhkan untuk mendukung penerapan algoritma paralel. Kecanggihannya terletak pada minimalisnya.
Intel Cilk Plus membutuhkan sedikit bahkan tidak ada intrusi ke dalam kode sumber, dengan hanya menambah beberapa kata kunci dari paralelisme, sehingga memudahkan transisi ke paralelisme bagi programmer yang terlatih menyelesaikan masalah secara serial. Bahkan, program yang diparalelkan menggunakan teknologi Intel Cilk Plus dapat diartikan sebagai program serial jika kata kunci diabaikan, sehingga program seperti itu mudah di-debug dan diuji. Contoh kode tentang penggunaan kata kunci Intel Cilk Plus seperti terlihat pada Gambar 1 dan 2.
void mergesort(int a[], int left, int right) { if(left < right) { int mid = (left + right)/2; /* Panggilan di bawah ini untuk fungsi mergesort bersifat independen satu sama lain. Dengan kata lain, paralel task. Paralelisme tersebut dapat dengan mudah diungkapkan dengan menggunakan kata kunci cilk_spawn seperti yang ditunjukkan di bawah ini. */ cilk_spawn mergesort(a, left, mid); mergesort(a, mid+1, right); /* Penggunaan cilk_sync memastikan penggabungan thread yang muncul dalam fungsi di atas. Eksekusi serial dilanjutkan setelah kata kunci tersebut */ cilk_sync; merge(a, left, mid, right); } } |
Gambar 1. Cilk_spawn dan cilk_sync
/* Kata kunci cilk_for di bawah ini memungkinkan iterasi looping paralel. Jika kata kunci cilk_for diganti oleh for, maka menjadi looping for biasa */ cilk_for(int i = begin; i < end; i += 2){ foo(i);} |
Gambar 2. Cilk_for
Semantik Intel Cilk Plus memungkinkan desain program tanpa harus menentukan jumlah prosesor agar program bisa dijalankan. Penjadwal runtime menangani load balancing program secara efisien pada seluruh prosesor yang tersedia. Ketika sebagian dari komputasi paralel dijalankan pada prosesor tunggal, Intel Cilk Plus dapat mengeksekusinya seperti kode C biasa. Dimulai dari kinerja core tunggal yang baik, Intel Cilk Plus memastikan bahwa program dengan paralelisme yang cukup mendapatkan speedup yang baik walaupun itu dijalankan pada banyak prosesor atau hanya sedikit.
Dalam praktiknya, sebagian besar program Intel Cilk Plus memerlukan beberapa kunci. Konsepsinya kendali paralel meniadakan kebutuhan untuk kunci, yang mana banyak model pemrograman paralel yang lain membutuhkannya untuk komunikasi dan sinkronisasi inter-thread. Pada banyak situasi, Intel Cilk Plus menyediakan hyperobject, yaitu struktur data baru yang memecahkan race pada variabel global tanpa mengorbankan kinerja atau determinisme.
Dengan menghindari kunci dan menggunakan hyperobject, Intel Cilk Plus menghindari banyak anomali kinerja yang disebabkan oleh kunci, seperti kunci yang bertentangan, yang dapat memperlambat jalannya program paralel; dan deadlock, yang dapat menyebabkan hang pada aplikasi. Bahkan, Intel Cilk Plus tidak memiliki kunci mutex tersendiri.
Dengan menggunakan pereduksi, pengembang hanya perlu mengidentifikasi variabel global sebagai pereduksi. Sebaliknya, sebagian besar platform concurrency yang lain mengalami kesulitan mengekspresikan paralelisasi bebas race. Alasannya adalah reduksi dalam sebagian besar bahasa pemrograman terikat pada konsepsi kendali. Sebagai contoh, reduksi dalam OpenMP terikat pada looping “parallel for”. Selain itu, kumpulan reduksi dalam OpenMP sudah terpasang sehingga tidak mendukung daftar tambahan.
Sebagai kesimpulan, Intel Cilk Plus adalah ekstensi bahasa pemrograman yang mendukung paralelisme task. Selain itu, ekstensi ini dapat memanfaatkan kecanggihan mikroprosesor modern.