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 of view), program ini 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 citra 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 threshold, 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 menguraikan 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.

flow povray

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 pemrograman 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 instan 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 prosesor.

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 peneliti 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 ada (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.

flow_povray2.png

MM Gambar Alur kerja MPIPOV

4.1 Instalasi program

Mempersiapkan sistem operasi Linux Debian Sarge, kemudian 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, file 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/bhost.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 memberikan 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 ; ssh-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 storage 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 defaults 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/sasuke/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 yang 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, # gzip -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-x-povray [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 langkah-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 baru. 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 contoh 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.

Selamat Mencoba, info lebih lanjut mohon lewat email.

6 Responses to “Implementasi Parallel Processing pada Ray Tracing Engine menggunakan POV-Ray berbasis MPI”

  1. sangar2… koyok’e cocok bgt dg smpyn mas… ya g jauh2 dg image editing/processing lah… kan photographer ;)

    September 18th, 2007 | 8:30 pm
  2. hebat…hebat….
    tapi aku g mudheng…
    yo opo iki tugas parallelnya??
    g da ide nie????

    September 24th, 2007 | 10:35 pm
  3. manteb!
    Tujuan utama dari pekerjaan ini adalah menghasilkan versi POV-Ray dengan performa parallel yang tinggi dan dengan segala fitur yang ada (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.

    Kira2 dari riset mas peningkatan kecepatannya sampai berapa persen mas?? hasil itu diambil dari spec dan besar citra yang diproses seperti apa?

    September 25th, 2007 | 1:52 pm
  4. iya nie.. ak juga blm nemu ide,, tak cari2 ko .. mbuh.. ak bingung.. mas arvy ayo sumbang ide tugas paralel ,, aplikasi paralel …..!!!!!

    September 25th, 2007 | 2:31 pm
  5. ara

    waah…bagus bgt nii..pas bgt sy jg lg nyari ttg povray..kira2 mas arvy tau gak dimana sy bisa cari tau ttg algoritma povray + cara kerja povray (gmana cara povray merender,perhitungannya, dll) ?????…..sebelumny makasiiiiiii bgt……

    October 29th, 2007 | 3:04 pm
  6. MAs dapetin MPI-POV nya kok ga bisa di download lagi. Aku sudah muter2 di google, rata2 da ga da link. Aku minta donk MPI-POV nya buat TA ku

    March 12th, 2008 | 2:31 pm

Leave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-Spam Image