Friday, March 25, 2016

Parallel programming pada Bash shell

Sejak tahun 2005, perkembangan processor komputer telah berganti paradigma, dari peningkatan clock CPU menjadi peningkatan jumlah core (Cek Wikipedia: Intel CPU Trends). Namun, pemrograman komputer yang banyak dipakai sekarang masih serial yang hanya mengandalkan single core. Artinya, kita belum banyak mengeksplorasi kemampuan komputer yang memiliki banyak core tersebut. Sebagai contoh, laptop saya memikil 4 physical core, jika saya hanya mengandalkan pemrograman serial, maka tiga core lainnya tak terpakai. Bagaimana cara memprogram secara parallel? Materi berikut saya peroleh dari workshop computational infrastructure dan scientific computing.

Screenshot workload 4 CPU (hyperthread) saat running parallel programming, keempat CPU menunjukkan beban kerja yang hampir 100% (baik pada "top" maupun system setting CPU history)

Instalasi

Cara termudah untuk parallel programming adalah dengan dengan menggunakan OS berbasis Linux. Saya menggunakan Ubuntu OS dengan library openmpi. Cara menginstallnya adalah sebagai berikut:
 sudo apt-get install openmpi-bin
Untuk mengeceknya, silakan ketik di terminal "mpirun" dan enter, Jika ada keterangan dan pesan "Report bugs to http://www.open-mpi.org/community/help/" berarti library openmpi sudah terinstall di Ubuntu.

Program Pertama

Program pertama yang bisa kita tes dengan mpirun adalah sebagai berikut,
 mpirun -np 12 /bin/hostname 
Program diatas artinya mencetak nama hostname (nama komputer) kita melalui 12 processor (-np 12). Meski jumlah processor kita hanya 4, namun kita bisa memerintahkan pada PC untuk me-run lebih dari jumlah CPU/processor. Sisa process (12-4=8) akan diluar setelah 4 process pertama, namun karena program diatas sangat ringan maka duabelas outputnya pun dapat ditampilkan bebarengan. Jika anda mendapat ouput 12 nama hostname, itu adalah hasil pemrograman parallel pertama anda. Hello world!

Parallell Programming di Bash Shell

Setelah terinstall, selanjutnya adalah mencoba paralallel programming dengan bash script. Buat file berikut dengan nama parallel.sh.
#!/bin/bash

myid=${OMPI_COMM_WORLD_RANK}

touch file$myid

Kemudian jalankan dengan parallel-programming di shell sebagai berikut:
mpirun -np 12 ./parallel.sh
Anda bisa mengganti jumlah CPU dengan jumlah CPU maksimal, misal 8. Untuk mengetahui jumlah physical core di Ubuntu bisa dicek dengan perintah "cat /proc/cpuinfo", sebaliknya perintah "top" kemudian tekan angka "1" akan memberikan tambahan fake CPU, misal dari 4 physical core menjadi 8 karena hyperthreading. Jika eksekusi program bash di atas berhasil, maka anda akan mendapat ouput sebagai berikut:
file0
file1
file4
file7
file3
file10
file11
file3
file5
file6
file8
file9
Urutan nomor file diatas random, tidak urut dan hampir pasti berbeda dengan output yang anda dapat. Jika anda tidak mendapat output seperti diatas, bisa jadi terjadi kesalahan memberikan perintah (mpirun...) atau pada program bash sebelumnya, parallel.sh.

Pemrograman Parallel LJMD

Pemrograman parallel banyak diaplikasikan untuk menyelesaikan simulasi yang kompleks khususnya dalam sains, misalnya pemodelan Lennard-Jones Molecular Dynamics (LJMD). Saya tidak membahas aspek fisika dalam LJMD tersebut, namun bagaimana mengaplikasikan parallel-programming untuk LJMD tersebut. Kode yang akan dirun saya host di akun github saya, repo parallel-wrapper, termasuk kode-kode diatas. Kode tersebut ditulis dalam bahasa C dan Fotran. Dalam repo tersebut terdapat file parallel_ljmd.sh, silahkan di run dengan,
mpirun -np 4 ./parallel_ljmd.sh
Jika anda mendapati angka-angka sebagai output diterminal, maka parallel programming untuk LJMD tersebut berhasil dijalankan (run "make" dalam folder 01_baseline jika terdapat error). Simulasi selesai. Anda bisa mengeksplorasinya dengan membandingkan serial programming dengan parallel programming, atau memvariasikan jumlah processor saat mengeksekusi mpirun.

Selamat belajar.
Related Posts Plugin for WordPress, Blogger...