Jumat, 18 Juni 2010

Implementasi Parallel Processing pada Ray Tracing Engine menggunakan POV-Ray berbasis MPI

Tujuan dari pekerjaan ini adalah mengimplementasikan parallel processing pada versi asli
program ray tracing yang terkenal yaitu POV -Ray. Parallel processing pada algoritma ini
melibatkan beberapa masalah yang biasa timbul pada komputasi parallel. Proses ray tracing
sangat kompleks dan membutuhkan komputasi yang tinggi, untuk citra yang sangat kompleks
dibutuhkan waktu berjam-jam bahkan berhari-hari untuk merender suatu kode POV-Ray.
Maka dari itu kebutuhan untuk menaikkan kecepatan dari proses ini diwujudkan dalam
implementasi parallel processing.

POV-Ray
POV-Ray (Persistence Of Vision Raytracer - www.povray.org) adalah rendering engine 3
dimensi . Program ini menterjemahkan informasi dari file teks eksternal, mensimulasikan
suatu cahaya yang berinteraksi dengan obyek dalam suatu scene untuk menghasilkan obyek 3
dimensi yang nyata.
Berawal dari file teks yang berisi deskripsi dari scene (objects, lights, point o f view), programini dapat merender citra yang diinginkan. Algoritmanya bekerja baris demi baris.
Fasilitas yang menarik dari POV-Ray ini adalah antialiasing. Antialiasing adalah teknik yang
membantu untuk membuang sampling error, yang dapat menghasilkan c itra lebih baik.
Dengan menggunakan antialiasing, POV-Ray memulai tracing a ray untuk setiap pixel. Jika
warna dari pixel berbeda dengan warna pixel tetangganya (pixel yang ada di sebelah kiri dan
di atas), kemudian dari jumlahnya lebih besar dari nilai th reshold, maka pixel tersebut adalah
supersampled tracing a fixed number of additional rays. Teknik ini disebut supersampling dan
dapat meningkatkan kualitas akhir dari sebuah citra namun itu juga meningkatkan waktu
rendering menjadi lebih lama. Setelah men guraikan data input, POV-Ray menguraikan semua
pixel dari citra untuk proses render, melalui horizontal scan dari setiap baris dari kiri ke
kanan. Setelah selesai penguraian dari suatu baris maka akan ditulis dalam sebuah file atau
ditampilkan pada layar lalu memperhitungkan baris berikutnya sampai pada yang terakhir.

MPI

The Message Passing Model

Message Passing Interface (MPI) merupakan implementasi standar dari model “message
passing” komputasi parallel.
Sebuah komputasi parallel terdiri dari sejumlah proses, dimana masing -masing bekerja pada
beberapa data lokal. Setiap prsoses mempunyai variabel lokal, dan tidak ada mekanisme suatu
proses yang bisa mengakses secara langsung memori yang lain.
Sharing data antar proses-proses dilakukan dengan message passing., yaitu dengan mengirim
dan menerima message antar proses -proses. Alasan menggunakan model ini sudah sangat
umum. Dan tipe komputasi parallel dapat dibuat dalam bentuk message passing. Model ini
juga dapat diimplementasikan pada bermacam-macam platform, seperti shared-memory
multiprocessors maupun single processor.

Penggunaan MPI
MPI perlu digunakan ketika kita menginginkan :
1. Menulis kode parallel yang portable
2. Mendapatkan performa yang tinggi dalam p emrograman parallel
3. Menghadapi permasalahan yang melibatkan hubungan data irregular atau dinamis yang
tidak begitu cocok dengan model data -parallel.
3.1.2 Fitur dasar dari program-program Message Passing
Program message passing terdiri dari multiple ins tan dari program serial yang berkomunikasi
dengan pemanggilan library. Pemanggilan ini dapat dibagi menjadi empat kelas :
1. Pemanggilan untuk inisialisasi, mengatur, dan memutuskan komunikasi.
2. Pemanggilan untuk mengkomunikasikan beberapa pasang proseso r.
3. Pemanggilan yang mewujudkan operasi -operasi komunikasi diantara kelompok -kelompok
prosesor.
4. Pemanggilan untuk membuat tipe data acak (arbitrary)
Kelas pertama dari pemanggilan terdiri dari pemanggilan -pemanggilan untuk memulai
komunikasi, mengidentifikasi jumlah prosesor yang sedang digunakan, membuat subgrup dari
prosesor-prosesor dan mengidentifikasi prosesor mana yang sedang menjalankan instan
khusus dari program.
Kelas kedua dari pemanggilan, dinamakan komunikasi point -to-point, terdiri atas tipe
pengiriman dan penerimaan yang berbeda.
Kelas ketiga dari pemanggilan adalah operasi kolektif yang memberikan sinkronisasi antar
grup proses dan pemanggilan yang melakukan operasi komunikasi/kalkulasi.
Kelas terakhir dari pemanggilan memberikan fleksibilitas dalam berurusan dengan struktur
data yang rumit.
4 Implementasi MPIPOV
Berdasar pada komputasi tinggi yang dibutuhkan oleh POV -Ray, implementasi parallel
sangatlah dibutuhkan dan banyak group penelit i mencoba untuk mengembangkan versi
parallel dari aplikasi ini. Yang paling terkenal adalah PVMPOV yang berdasar pada PVM.
Tujuan utama dari pekerjaan ini adalah menghasilkan versi POV -Ray dengan performa
parallel yang tinggi dan dengan segala fitur yang a da (antialiasing).
Setiap baris dari citra dibagi menjadi beberapa seksi, lebih besar dari jumlah processor yang
tersedia. Peningkatan kecepatan pada setiap processor dapat berbeda berdasar pada
karakteristik internal arsitekturnya atau pada machine load, namum juga dapat bergantung
pada bagian dari citra yang diproses bisa jadi sederhana atau kompleks.

MM Gambar Alur kerja MPIPOV
4.1 Instalasi program
Mempersiapkan sistem operasi Linux Debian Sarge, kemudia n mempersiapkan
environmentnya

1. Paket-paket LAM/MPI yang terdiri dari :
(a) lam4c2
(b) lam-runtime
(c) lam4-dev

2. Paket-paket SSH yang terdiri dari :
(a) openssh-server
(b) openssh-client
3. Paket-paket NFS (Network File System) yang terdiri dari :
(a) nfs-common
(b) nfs-kernel-server
4.2 Konfigurasi :

4.2.1 LAM/MPI

Booting LAM
Sebelum program mpi dijalankan, LAM runtime environment harus dijalankan. Hal ini biasa
disebut booting LAM. Proses booting yang sukses akan membuat instan dari LAM runtime
environment yang biasa disebut dengan LAM universe.
Untuk booting LAM, pada cluster of workstation dibutuhkan remote shell, seperti rsh dan ssh,
yang digunakan untuk mengeksekusi lamd (lam daemon), dan program pada workstation.
Ketika menggunakan remote shell, f ile boot schema diperlukan sebagai daftar dari komputer
sebagai node yang akan dijalankan LAM runtime. Nama lain dari bootschema adalah host file
atau machine file. Contoh isi dari bootschema adalah
File bootschema ini secara default berada di /etc/lam/bho st.def , namun apabila setiap user
ingin memiliki konfigurasi node -node yang berbeda bisa membuat file bootschema sendiri.
4.2.2 SSH ( Secure Shell )
SSH (Secure Shell) merupakan sebuah program untuk untuk login ke remote machine dan
mengeksekusi perintah-perintah di remote machine. Ssh memberikan komunikasi terenkripsi
yang aman antara dua untrusted hosts dalam sebuah jaringan yan tidak secure. SSH ditujukan
sebagai pengganti rlogin, rsh, rcp dan dapat digunakan untuk memb erikan kanal komunikasi
yang aman untuk aplikasi -aplikasi.
Dalam LAM/MPI SSH diperlukan untuk membuat node master dapat me -remote node slave
tanpa menggunakan password. Node master me -remote node slave untu menjalankan lamd,
dan menjalankan program MPI non interactively, sehingga tujuan dari portabilitas standar
MPI dapat tercapai.
Sebelumnya servis SSH pada node slave harus distart terlebih dahulu:
Kemudian membuat RSA-key pada node master, dengan cara :
Untuk membuat node master dapat me -remote need slave tanpa password maka passphrase
pada saat pembuatan RSA-key tidak perlu diisikan seperti pada contoh diatas.

Saat pembuatan RSA-ke, dibuat pasangan dari key , yaitu public key dan private key, yang
secara defaults diletakkan pada memory pada directory .ssh . File id_rsa.pub adalah public key
sedangkan id_rsa adalah private -key. Agar node-master dapat login tanpa password, public -
key yang sudah dibuat oleh node master harus dimiliki oleh node slave. OpenSSH
menyediakan tools untu mengkopi public key yaitu ; s sh-copy-id.
# arv@debian8:~$ ssh-copy-id -i .ssh/id_rsa sasuke@10.122.67.5
15
# arv@10.122.67.5’s password:
Now try logging into the machine, with “ssh ‘arv@10.122.67.5'”, and check in:
.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting.
Setelah mengkopi public key ke node slave, koneksi melalui ssh perlu ditest untuk remote ke
OpenSSH server yang telah menerima public -key dari node master, dengan cara:
Test berhasil apabila node master dapat me -remote node slave tanpa ada permintaan
password.
4.2.3 NFS (Netwok File System)
Setelah berhasil menginstall dari paket nfs -kernel-server, perlu dilakukan konfigurasi dari
/etc/exports, untuk menentukan computer mana saja yang menjadi NFS client.
/home/arv/parallel
10.122.67.5(rw,insecure,no_root_squash,sync,no_subtree_check)
10.122.67.7(rw,insecure,no_root_squash,sync,no_subtree_check)
10.122.67.9(rw,insecure,no_root_squash,sync,no_subtree_check)
10.122.67.12(rw,insecure,no_root_squash,sync,no_subtree_check)
konfigurasi diatas artinya hosts yang tercantum pada /etc/exports diatas diberi hak baca tulis,
synchronous I/O , dan hak root pada NFS server dan client sama pada saat nfs client
melakukan mounting .
setelah dilakukan konfigurasi NFS server dapat dijalankan dengan perintah:
# /etc/init.d/nfs-kernel-server start
Konfigurasi Pada Client

Untuk menggunakan servis NFS yang disediakan oleh server, maka client hanya
membutuhkan utility mount yang biasanya sudah terpasang dengan waktu instalasi system
Linux. Pada aplikasi ini shared s torage diletakkan pada path yang sama pada semua node
dengan tujuan untuk memudahkan dalam menjalankan program MPI yang menggunakan
model SPMD ( Single Program Multiple Data ). Direktori yang di -share akan dimount pada
path /home/sasuke/parallel2. Sehingga perlu dibuatkan direktori /home/sasuke/parallel2
apabila belum ada.
Untuk melakukan mounting secara otomatis setiap kali sistem direstart maka file /etc/fstab
perlu diedit sebagaimana berikut :
10.122.67.8:/home/arv/parallel /home/arv/parallel nfs default s 0 0
selanjutnya untuk melakukan mounting nfs dari konfigurasi yang ada di file /etc/fstab
digunakan perintah sbb :
Contoh diatas adalah perintah untuk melakukan mount volume /home/sasuke/parallel2 pada
nfs-server 10.122..67.8 dan dimount pada directory target /home/sasuke/parallel2. Dengan
cara diatas berarti isi direktori /home/sasuke/parallel2 pada client akan sama persis dengan
direktori /home/sasuke/parallel2 pada nfs -server. Sebelum melakukan mounting NFS harus
dibuat terlebih dulu direktori /home/s asuke/parallel2.
4.2.4 Permissions
Permissions disini menyangkut soal hak akses terhadap file resource yang digunakan.
Sebelum memulai LAM/MPI harus dipastikan bahwa user yang ingin mengakses file resource
mempunyai hak akses atas file/program resource yan g ingin diproses secara parallel, yaitu
file/program yang dishare dengan NFS. Pada percobaan yang kami lakukan, kami
menyamakan uid dan gid dari user yang bersangkutan. Kalau hanya untuk menjalankan
program yang diparallel tidak perlu mengubah uid dan gid, cukup dengan chmod saja dengan
menambahkan option executable untuk other user.
4.2.5 MPIPOV
4.2.5.1 Langkah-langkahnya sebagai berikut :
1. Download kode sumber POV-Ray. MPI-POV-Ray hanya dapat bekerja pada rilis POV-Ray
lama yaitu versi 3.1
2. Ekstrak paket kode sumber POV-Ray. # tar xvfz povuni_s.tgz
3. Kemudian Download juga tambalannya dan tempatkan di dalam direktori hasil ekstrak
povray pada langkah 2. : # cp /xxx/mpi -povray-1.0.patch.gz povray31/
4. Terapkan tambalan tersebut. : # cd povray31, # gzi p -dc mpi-povray-1.0.patch.gz | patch -
p1
5. Kompilasi kode sumber tersebut menjadi ke bentuk binarinya (penting lihat Catatan
terlebih dahulu!), # cd source/mpi -unix, # make newxwin

6. Kemudian mendapatkan sebuah berkas binari yaitu mpi -x-povray yang dapat dipakai untuk
menjalankan program POV-Ray secara paralel memakai MPI. : # mpirun -np ? ./mpi-xpovray
[options]
4.2.5.2 Catatan
Ketika melakukan kompilasi POV-Ray memerlukan beberapa library pendukung seperti
libpng-dev dan xlibs-dev.
# sudo apt-get install libpng12-dev
# sudo apt-get install xlibs-dev
[!] Apabila berencana untuk menggunakan library PNG versi terbaru (dalam kasus ini ingin
menggantikan libpng-1.0.3 dengan libpng-1.2.8) maka sebelum melakukan kompilasi pada
langkah 5 perlu dilakukan langka h-langkah berikut:
1. Ambil kode sumber untuk libpng12 -0 dari repositori
# cd /tmp
# apt-get source libpng12-0 Nantinya Anda akan mendapatkan direktori /tmp/libpng3 -
1.2.8rel/
2. Gantikan direktori libpng yang terdapat povray31/source/libpng dengan yang bar u.
Lakukan backup data yang lama apabila diperlukan.
# cd /tmp/povray31/source
# mv libpng/ libpng.OLD/
# cp -r /tmp/libpng3-1.2.8rel/ libpng/
3. Setelah itu baru dilanjutkan langkah instalasi nomor 5 di atas.
5 Memulai MPIPOV
5.1 Langkah-langkahnya :
1. Perintah booting untuk LAM adalah dengan mengetikan lamboot pada shell. Contohnya: #
lamboot
2. Untuk mengetahui berapa banyak node dan CPU pada LAM universe adalah menggunakan
perintah lamnodes pada shell : # lamnodes
3. Menjalankan MPI-POVRAY dengan mengetikkan : # mpirun n0 N mpi -x-povray
+Igrenadine.pov +A +w800 +H600 /home/arv/parallel +FN
4. Perintah lamclean, Perintah lamclean secara komplit menghilangka semua proses sari
program yang berjalan pada LAM universe. Lamclean berguna jika program paralel
mengalami crash/leave state pada LAM runtime environment. penggunaan lamclean biasanya
digunakan tanpa argumen: # lamclean, Penggunaan lamclean biasanya dibutuhkan saat
melakukan developing/debugging dari aplikasi MPI. Sebgai contoh program yang hang,
message yang tersisa, dan lain-lain.
5. Shutdown LAM Universe, Setelah selesai, tidak meggunakan LAM universe lagi maka
LAM universe perlu untuk di -shutdown menggunakan perintah lamhalt.
6. Ada saat keadan tertentu, lamhalt gagal, sebagai conto h salah satu node mengalami
kegagalan komunikasi sehinga terjadi crash, apabila lamhalt dipanggil maka akan terjadi
timeout sehingga tidak semua node halting LAM Universe. Pada kasus seperti ini dibutuhkan
perintah lamwipe untuk memastikan bahwa semua node halting LAM universe.

Tidak ada komentar:

Posting Komentar