Saturday 16 June 2018

Parallel Processing: Teknik Mempercepat Pemrosesan pada Komputer

Setelah sebelumnya saya bahas tentang MapReduce, kali ini saya mau bahas ide di balik MapReduce, yaitu pemrosesan paralel. Umumnya, komputer memproses sesuatu secara seri, sekuensial atau berurutan. Jadi alurnya lurus terus dari awal hingga akhir proses. Walaupun ada perulangan atau percabangan, proses tersebut tetap dilakukan secara sekuensial. Kemudian, muncul sebuah masalah saat memproses sesuatu yang jumlahnya besar dan banyak, misalnya mengurutkan suatu data yang jumlahnya 10.000 record. Jika data tersebut diurutkan secara sekuensial dengan membandingkan tiap-tiap record (menggunakan Bubble Sort atau Selection Sort), komputer membutuhkan waktu yang sangat lama hingga seluruh data terurut.

Kemudian dikembangkanlah pendekatan baru agar masalah ini dapat diselesaikan lebih cepat. Pendekatan tersebut diberi nama Divide and Conquer. Pendekatan ini membagi sebuah masalah menjadi lebih kecil, kemudian masalah kecil tersebut diselesaikan dan hasilnya digabung kembali. Ini menjadi permulaan pemrosesan paralel. Pada pemrosesan paralel, tiap-tiap proses dikerjakan secara bersamaan atau hampir bersamaan sehingga proses tersebut dapat selesai lebih cepat. Jadi, masalah mengurutkan data dengan 10.000 record akan selesai lebih cepat dengan menggunakan pemrosesan paralel dibanding sekuensial. Ini seperti suatu pekerjaan dikerjakan oleh lebih dari 1 orang.

Perkembangan pemrosesan paralel didukung oleh perkembangan arsitektur komputer. Menurut Michael J. Flynn, arsitektur komputer itu dibagi menjadi 4 jenis, yakni:

  • Single Instruction stream, Single Data stream (SISD)
  • Single Instruction stream, Multiple Data stream (SIMD)
  • Multiple Instruction stream, Single Data stream (MISD)
  • Multiple Instruction stream, Multiple Data stream (MIMD)
Pada arsitektur SISD, komputer hanya memiliki satu buat prosessing unit (PU) yang mengakses satu jalur data. Komputer dengan arsitektur seperti ini sulit untuk melakukan pemrosesan paralel. Contoh sederhana dari komputer dengan arsitektur ini adalah PC sebelum tahun 2000 dengan single core prosessor.

Diagram Arsitektur SISD. Source: wikipedia.org

Arsitektur SIMD sedikit berbeda dari SISD. Pada SIMD, sebuah processing unit terhubung dengan beberapa jalur data. Ini membuat satu instruksi dapat melakukan hal yang sama dengan data yang berbeda secara simultan. SIMD sudah dapat melakukan pemrosesan paralel.

Diagram Arsitektur SIMD. Source: wikipedia.org

Arsitektur MISD mungkin arsitektur yang jarang kita lihat karena jarang sekali komputer yang dapat melakukan beberapa instruksi pada satu jalur data. Maksudnya adalah terdapat beberapa operasi yang berbeda (misal: penjumlahan dan perkalian matriks) yang dilakukan pada data yang sama (misal: dua buah matriks dilakukan operasi penjumlahan dan perkalian secara bersamaan). Salah satu contoh komputer dengan arsitektur MISD adalah komputer pengendali pesawat luar angkasa.

Diagram Arsitektur MISD. Source: wikipedia.org

Arsitektur terakhir yaitu MIMD. MIMD adalah arsitektur kedua yang sering ditemui setelah SIMD. Komputer dengan arsitektur ini memiliki beberapa prosessing unit yang bekerja pada beberapa jalur data. Komputer dengan MIMD umum digunakan untuk simulasi, modeling, CAD dan CAM. Komputer-komputer ini dapat dibagi menjadi shared-memory atau distributed memory. Pembagian ini berdasarkan bagaimana komputer mengakses memori. Pada shared-memory, komputer hanya terhubung pada sebuah memori yang secara global dapat diakses oleh seluruh processing unit yang ada. Pada distributed memory, tiap processing unit memiliki memorinya sendiri dan secara langsung tidak dapat mengetahui isi dari memori pada processing unit yang lain.
Diagram Arsitektur MIMD. Source: wikipedia.org

Kita coba bahas lagi contoh yang tadi, mengurutkan data yang memiliki 10.000 record. Data tersebut kita urutkan menggunakan algoritma merge sort. Algoritma ini akan membagi data menjadi beberapa bagian kemudian tiap bagian akan diurutkan dan selanjutnya digabungkan kembali.

Misal: 10.000 record dipecah menjadi n bagian sesuai dengan banyaknya processing unit. Tiap-tiap processing unit ini akan mengurutkan bagian record yang sudah diberikan secara bersamaan. Operasi pengurutan dilakukan secara sekuensial pada masing-masing processing unit. Setelah operasi pengurutan selesai, masing-masing processor akan melakukan operasi merge untuk menggabungkan bagian record yang telah terurut.