BAB 4 PENGUJIAN SISTEM
2.5 Struktur Uniform Grid
Permasalahan utama pada metode ray tracing adalah kebutuhan komputasi yang sangat besar untuk dapat menggambar satu gambar dengan jumlah polygon yang banyak. Salah satu cara untuk mempercepat penggambaran adalah dengan menggunakan accelerated structure yang membagi scene menjadi kumpulan da-ta spasial. Salah satu accelerated structure yang banyak digunakan adalah uni-form grid. Gambar 2.20 merupakan gambaran struktur uniuni-form grid yang digu-nakan. Uniform grid telah dikembangkan dan dipublikasikan pada makalah [Chr05, IDC09, KS09, LD08]. Secara sederhana struktur uniform grid dapat diumpamakan sebagai sebuah bidang koordinat baru dengan skala satu pixelnya adalah sama den-gan besar satu cell pada uniform grid.
Perhitungan ray tracing dengan menggunakan struktur uniform grid memer-lukan dua tahapan dasar yaitu konstruksi struktur uniform grid dan traversing struk-tur uniform grid. Tahapan pertama diperlukan untuk membentuk strukstruk-tur uniform grid sesuai dengan keadaan scene sedangkan tahapan kedua dilakukan pada saat penggambaran yaitu bagaimana program secara selektif melakukan perhitungan perpotongan antara garis perjalanan partikel cahaya dengan polygon yang ada pada scene.
2.5.1 Resolusi Uniform Grid
Resolusi pada struktur uniform grid menjadi faktor yang cukup krusial un-tuk menenun-tukan kecepatan penggambaran. Hal tersebut dikarenakan jika struk-tur terlalu rapat atau terlalu renggang maka akan menghasilkan waktu
penggam-Gambar 2.21: Uniform grid traversal
baran yang lebih lama. Pada makalah [WIK+06] digunakan persamaan 2.15 untuk menentukan resolusi dari struktur uniform grid.
Nx= dx3 r kP V Ny= dy 3 r kP V Nz= dz 3 r kP V (2.15)
Variabel Nx, Ny, dan Nz adalah resolusi uniform grid pada setiap axis. Variabel kadalah user konstanta yang bisa berubah sesuai dengan keinginan, nilai k menen-tukan apakah struktur uniform grid yang dihasilkan akan renggang atau rapat. Vari-abel P adalah jumlah polygon pada scene sedangkan variVari-abel V adalah volume dari scene. Terakhir, variabel dx, dy, dan dz adalah diagonal dari masing-masing axis pada scene. Pada makalah [WIK+06], melalui beberapa percobaan maka diambil kesimpulan bahwa nilai k yang paling optimal adalah disekitar nilai 5.
2.5.2 Konstruksi Uniform Grid
Setelah menentukan resolusi yang digunakan untuk pembentukan struktur uni-form grid, langkah berikutnya adalah memetakan seluruh polygon yang ada pada scene untuk dimasukkan pada cell-cell yang ada pada uniform grid. Tahapan ini disebut dengan konstruksi struktur uniform grid serta menghasilkan struktur uni-form grid yang pada cell-cellnya tercatat index dari polygon-polygon yang berpo-tongan dengan cell. Pada tahap ini digunakan metode pemetaan dari AABB sebuah polygonke koordinat uniform grid dengan titik (0,0,0) berada di koordinat paling minimum pada AABB scene.
2.5.3 Uniform Grid Traversal
Proses uniform grid traversal merupakan proses yang dilakukan pada saat peng-gambaran, yaitu melakukan perjalanan partikel cahaya (ray) dengan posisi koor-dinat voxel dari uniform grid. Proses traversal dilakukan dengan menggunakan metode 3D-DDA (3D Digital Differential Analyzer), yaitu suatu metode pemben-tukan garis pada suatu bidang koordinat. Pada makalah [AW87] diperkenal metode increment 3D-DDA, yaitu metode 3D-DDA dengan melakukan penambahan ter-hadap variabel tertentu untuk setiap tahapannya. Secara skematik dua dimensi, uniform grid traversal dapat digambarkan pada gambar 2.21. Algoritma traver-sal yang digunakan harus memproses semua cell dari uniform grid yang dilewati, dan ini sedikit berbeda dengan algoritma pembentukan garis biasa yang tidak mem-perhitungkan ketelitian setiap pixel yang dilewati.
Algoritma 3D-DDA yang diperkenalkan oleh [AW87] bisa disebut dengan al-goritma 3D-DDA dengan koneksi 6, yaitu alal-goritma 3D-DDA yang tidak menggu-nakan koordinat tengah dari cell tetapi menggumenggu-nakan koordinat yang asli dari garis tersebut sehingga tidak ada cell yang terlewatkan pada saat melakukan traversal. Algoritma 2.3 merupakan psedo code dari algoritma 3D-DDA. Pada psedu code tersebut variabelX, Y, dan Z adalah koordinat cell dari uniform grid sedangkan vari-abelstepX, stepY, dan stepZ merupakan kenaikan setiap koordinat cell (nilai -1 atau 1 tergantung vektor arah pada ray). Variabel tMaxX, tMaxY, dan tMaxZ di-gunakan untuk menyimpan nilai t (nilai t didi-gunakan sebagai media pembanding untuk memutuskan koordinat cell mana yang akan ditambah). Tiga variabel ter-akhir adalahtDeltaX, tDeltaY, dan tDeltaZ digunakan untuk penambahan nilai tpada masing-masing axis koordinat.
2.6 GPGPU
GPGPU adalah singkatan dari general purpose GPU yaitu dimana GPU di-gunakan sebagai media komputasi paralel. Perkembangan GPU sangat signifikan dengan kebutuhan kualitas penggambaran grafik pada game dan desain grafik. Pada awalnya, peneliti GPGPU menggunakan GPU shader untuk melakukan perhitun-gan tetapi seiring denperhitun-gan berkembangnya perangkat keras GPU (kartu grafik) maka muncul standar yang mengatur pemakaian GPU sebagai media komputasi paralel. 2.6.1 NVIDIA CUDA
NVIDIA CUDA adalah salah satu standar komputasi paralel pada GPU. CU-DA (Compute Unified Device Architecture) dikeluarkan oleh NVIDIA pada tahun
Algoritma 2.3 Voxel traversal, diambil dari [AW87] list= NIL; do { if(tMaxX < tMaxY) { if(tMaxX < tMaxZ) { X=X+stepX;tMaxX=tMaxX+tDeltaX; if(X==justOutX)return(NIL); } else { Z=Z+stepZ;tMaxZ=tMaxZ+tDeltaZ; if(Z==justOutZ)return(NIL); } } else { if(tMaxY < tMaxZ) { Y=Y+stepY;tMaxY=tMaxY+tDeltaY; if(Y==justOutY)return(NIL); } else {
Z=Z+stepZ;tMaxZ=tMaxZ+tDeltaZ; if(Z == justOutZ)return(NIL); }
}
list= ObjectList[X][Y][Z]; } while(list == NIL);
return(list);
2007 dan banyak digunakan untuk penelitian-penelitian yang membutuhkan daya komputasi yang besar. Perkembangan kartu grafik / GPU sangat pesat dan men-galahkan perkembangan yang dicapai oleh CPU. Perbandingan perkembangan daya komputasi GPU dengan CPU dapat dilihat pada gambar 2.22.
Desain arsitektur perangkat keras GPU adalah multiprosessor SIMT (Single In-struction Multiple Thread) dengan menggunakan sejumlah SM (Stream Multipro-cessor). Pada manul [Nvi09a, Nvi09b] dijelaskan bahwa setiap SM akan bertang-gung jawab untuk mengeksekusi setiap block dari instruksi yang dijalankan. Setiap SM akan mempunyai on-chip shared memory, 32-bit register, dan instruksi unit untuk menjalankan suatu block thread.
2.6.2 SIMT Programming
SIMT programming yang diperkenalkan oleh NVIDIA menggunakan beberapa istilah penting yaitu kernel, block, grid, dan thread. Kernel merupakan kode pro-gram yang akan dijalankan secara paralel pada GPU. Block, grid, dan thread adalah manajemen yang digunakan untuk mengeksekusi suatu instruksi. Thread adalah in-struksi yang dikerjakan pada satu prosessor sedangkan block adalah kumpulan dari threadyang dieksekusi secara bersama-sama. Resolusi dari block bisa berupa satu dimensi atau dua dimensi. Grid adalah kumpulan dari block dan mempunyai reso-lusi yang bisa berupa satu dimensi maupun dua dimensi. Satu block akan dieksekusi oleh satu SM (pada standar lama 1 SM = 8 prosessor dan pada standar baru 1 SM = 16 prosessor) dan satu grid akan dieksekusi di beberapa SM secara bersama-sama
Gambar 2.22: Operasi floating point antara CPU dan GPU [Nvi09a]
Gambar 2.24: Hirarki memori pada CUDA [Nvi09a]
maupun bergantian. GPU mempunyai thread schedular yang berfungsi untuk men-gatur eksekusi yang dilakukan. Istilah thread, block, dan grid dapat divisualisasi secara sederhana pada gambar 2.23.
Mekanisme lain yang perlu diperhatikan adalah hirarki memori pada standar CUDA. Terdapat 3 jenis hirarki memori pada CUDA yaitu per thread local memo-ry, per block shared memomemo-ry, dan global memory. Per thread local memory adalah registeryang digunakan setiap thread untuk menampung nilai sementara pada per-hitungan dan scope aksesnya hanya pada satu thread. Per block shared memory digunakan untuk menampung sementara nilai yang akan diakses oleh thread lain yang berada pada satu block dan scope aksesnya adalah semua thread yang ada pada satu block. Hirarki terakhir adalah global memory yaitu memori yang bera-da pabera-da GPU bera-dan bera-dapat diakses oleh seluruh thread yang sebera-dang dieksekusi tanpa kecuali. Skema hirarki memori pada CUDA dapat dilihat pada gambar 2.24.