Perkenalan Ke Parallel Programming: CUDA Dan OpenCL
Dengan komputer yang sama, CPU yang sama, GPU yang sama, bahasa pemrograman yang sama,
Siapa yang gak mau liat program yang kita bikin jalan lebih cepat dari originalnya?
Akhir-akhir ini, mulai banyak framework untuk parallel programming yang bermunculan. Dan dengan bantuan dari programmer-programmer handal dari seluruh dunia, bahasa pemrograman parallel yang biasanya dilakukan dengan C atau C++, sekarang sudah bisa dilakukan dengan scripting language seperti Python, Ruby, atau Javascript. Ada juga yang mempunyai semangat tinggi untuk menggunakan framework parallel ini di bahasa yang lebih rumit untuk functional programming, seperti Haskell atau Clojure.
- Haskell: FFI binding to the CUDA interface for programming NVIDIA GPUs
- Ruby: SGC-Ruby-CUDA
- Python: PyOpenCL
Bagi yang masih belum merasakan kehebatan dari parallel programming ini, tunggu apalagi? Langsung menuju TKP dan download SDKnya, gan!
Pertama, ada CUDA yang di-maintain oleh NVIDIA. Saya sudah menggunakan framework ini selama kurang lebih 4 tahun. Frameworknya sendiri sangat simple dan straightforward untuk digunakan. Yang bikin saya makin terpana adalah, jumlah sample program yang disediakan oleh NVIDIA di dalam SDK(Software Development Kit)-nya. Bukan cuma hal-hal biasa seperti penggunakan CUDA APInya yang bisa kita pelajari dari SDK tersebut, tapi juga metode-metode yang bisa diimplementasikan dalam pengoptimisasian program (ke parallel program).
Dulu sewaktu CUDA SDK masih di dalam tahap pengembangan awal (versi 1.x), sangat susah sekali menggunakan SDK dan menulis program dengan CUDA API. Tetapi seiring berjalannya waktu, CUDA Toolkit yang paling baru, sangat praktis dan mudah digunakan/dimengerti. Tapi perlu diingat, karena CUDA adalah model yang dikembangkan oleh NVIDIA, dan merupakan benda proprietary, CUDA hanya bisa digunakan di GPU yang dimanufaktur oleh NVIDIA.
FYI: Teknik untuk melakukan komputasu yang biasanya dijalankan di CPU, biasa disebut komputasi GPGPU (General Purposed GPU).
Berikutnya, ada OpenCL, yang merupakan singkatan dari Open Computing Language. Awal mulanya, pengembangan OpenCL ini dipimpin oleh Apple dan Khronos Group (Sekarang Khronos Group yang memimpin development secara keseluruhan). OpenCL merupakan sebuah parallel programming framework, yang bisa dipakai di berbagai macam platform. Awal mulanya OpenCL hanya bisa digunakan dengan bahasa C saja, tetapi bermula dari spesifikasi OpenCL 1.2, bahasa C++ sudah mulai bisa digunakan dengan menggunakan wrapper library untuk bahasa C++.
Berbagai macam hardware vendor yang ternama ikut dalam pengembangan OpenCL: AMD, Intel, dan NVIDIA, dan menyediakan compiler dan library-nya masing-masing. Karena masing-masing vendor mempunyai blueprint yang berbeda untuk produknya, masing-masing vendor mengeluarkan SDK sendiri untuk dalam penggunaan OpenCL. Seperti misalnya, untuk architecture GPU NVIDIA, struktur kernel yang dieksekusi secara scalar akan mempunyai execution speed yang lebih besar. Sedangkan untuk architecture CPU Intel, struktur kernel yang di-craft untuk menggunakan vector register akan berjalan lebih cepat dibandingkan menggunakan struktur kernel scalar.
SDK dari masing-masing vendor bisa didownload dari website berikut: AMD OpenCL SDK, Intel OpenCL SDK, dan NVIDIA OpenCL SDK. Masing-masing SDK dilengkapi dengan sample yang disediakan oleh masing-masing vendor. Menurut saya, akan lebih mudah untuk mempelajari OpenCL apabila kita sudah mengerti programming dengan memakai CUDA terlebih dahulu.
Tentu saja masih banyak lagi framework untuk parallel programming di luar sana. Rata-rata bisa didapatkan secara gratis, tapi ada juga yang tidak gratis.
Contoh untuk framework yang gratis: OpenMP, Intel’s TBB, Intel’s ArBB, Pthreads
Tidak gratis: PGI’s Compiler with OpenACC, CAPS’ Compiler with OpenACC