ALGORITMA TREE BERHIRARKI UNTUK KOMPUTASI PARTIKEL FISIKA Slamet Santosa*, Aminus Salam* ABSTRAK ALGORITMA TREE BERHIRARKI UNTUK KOMPUTASI PARTIKEL FISIKA. Simulasi partikel N-Bodi telah banyak digunakan untuk mempelajari berbagai sistem fisika seperti fisika plasma, fisika akselerator, sistem dinamika molekuler dan astrofisika yang menggunakan interaksi antar partikel sebagai dasar komputasinya. Walaupun perkembangan teknologi komputer memungkinkan untuk mensimulasi banyak partikel yang berinteraksi secara elektrostatik ataupun gravitasi, tantangan untuk mengembangkan algoritma dari komputasi tersebut masih terbuka. Telah dikembangkan metode tree berhirarki yang lebih baik daripada metode titik jala sehingga orde komputasinya mencapai O (N log N). Pada makalah ini dibahas implementasi yang efisien dari algoritma tree berhirarki menggunakan teknik quick-sorting untuk penpartisi domain partikel pada pembentukan tree dan penjejakan tree dengan metode Breath First Search dalam menghitung gaya pada tiap partikel. ABSTRACT HIERARCHICAL TREE ALGORITHM FOR PARTICLE PHYSICS COMPUTATION. N-Body simulations have been used to study a wide variety of physical system such as plasma physics, accelerator physics, molecular dynamics and astrophysics where a large number of interacting particles are the basic of such simulations. Although computer technologies have made the particle simulations feasible, this type of N-Body problems including those of electrostatic or gravitational forces still present a challenge. The hierarchical tree method offers the possibility of computing the interaction between N particles in a time O(N log N) without using a grid. The efficient implementation of the algorithm using a divide-and-conquer technique based on a quick-sorting technique in the building tree and the tree traversal based on Breath First Search for force calculations are discussed. PENDAHULUAN Komputasi partikel fisika merupakan basis dari simulasi komputer di bidang fisika plasma, astrofisika, akselerator dan sistem dinamik molekuler [1, 2]. Komputasi yang dimaksud adalah penyelesaian algoritmik dari lintasan banyak partikel pada * Pusat Penelitian dan Pengembangan Teknologi Maju - BATAN sistem fisika klasik dan dikenal sebagai masalah N-Body, di mana diberikan suatu domain yang memuat banyak partikel yang saling berinteraksi secara elektrostatik ataupun medan gravitasi. Persamaan gerak dari lintasan banyak partikel sangat sederhana akan tetapi tidak mempunyai penyelesaian analitik yang efisien sehingga hanya efektif apabila dilakukan komputasi dengan komputer berkecepatan tinggi. Pada sistem dengan N buah partikel yang diketahui masing-masing posisinya, massa dan kecepatan awalnya akan bekerja gaya elektrostatik atau gaya gravitasi sehingga tiap-tiap partikel akan bergerak pada lintasannya. Lintasan partikel-partikel dapat dimodel dengan persamaan diferensial (PD) yang dapat diselesaikan dengan mengintegrasikan untuk tiap selang waktu tertentu. Sehingga pada tiap selang waktu selama simulasi dapat dihitung posisi dan parameter-parameter yang lain. Gaya pada tiap partikel f i akibat adanya n buah partikel disekelilingnya dihitung sebagai berikut: fi = n ∑f i, j untuk i ≠ j j =1 Akibat adanya gaya yang bekerja pada sistem, apabila posisi awal suatu partikel xi ( t 0 ) = X 0 maka pada saat t posisi partikel tersebut berpindah dan dapat dihitung dengan persamaan: xi' ( t ) = f ( t , xi ( t 0 )) Algoritma untuk menyelesaikan komputasi tersebut, dengan N = jumlah partikel, t = 0 dan dt = selang waktu tertentu adalah sebagai berikut: while t < tsimulasi for i = 1 to N f (i ) = ∑ N j =1 j ! = i , f (i , j ) call (integrator) update (posisi) end for t = t + dt end while Dengan demikian jelaslah bahwa komputasi tersebut berorde O(N2). Untuk mempercepat proses komputasi telah dikembangkan metode PIC (Particles In Cell), di mana dibentuk titik-titik jala pada domain partikel yang kemudian pada setiap titik jala dihitung potensial dari partikel yang dilingkupi sehingga dengan harga-harga potensial pada tiap titik jala dapat dihitung gaya-gaya dari tiap partikel. Metode PIC ini mempunyai orde komputasi O(N + M log M) dengan M = jumlah titik-titik jala dan N = jumlah partikel pada sistem. Sehingga metode ini mempunyai efisiensi yang tinggi untuk N yang sangat besar dan distribusi partikel serba sama. Algoritma Barnes and Hut (BH) [3] menghitung langsung gaya-gaya pada N buah partikel pada sistem 3D menggunakan struktur data tree berhirarki dan mempercepat komputasi sehingga berorde O(N log N). Teknik yang dipakai pada algoritma ini adalah divide and conquer, yaitu membagi domain partikel menjadi delapan apabila terdapat dua buah partikel berada pada domain yang sama. Sehingga apabila total domain partikel adalah sebagai root dari tree maka masing-masing subdomain adalah subtree. Pembagian domain dilakukan secara rekursif hingga pada tiap-tiap leaf dari tree terdapat sebuah partikel dan kemudian gaya pada tiap partikel dihitung dengan cara menjejaki oct-tree yang terbentuk. Pada makalah ini dibahas implementasi sekuensial dari algoritma BH tree berhirarki yang meliputi pembentukan tree dan teknik divide and conquer menggunakan metode yang berbasis pengurutan cepat (quick-sorting), penjejakan octtree yang terbentuk dengan metode Breath First Search (BFS) dan analisis kompleksitas orde komputasi. Untuk memudahkan pembahasan, dibahas untuk sistem 2D dimana tree yang terbentuk adalah quad-tree. LANDASAN TEORI Pada sistem dengan N buah partikel, Xi = <xi, yi, zi>, Vi = <V1, V2, …, VN> dan mi = <m1, m2, …, m3> akan bekerja gaya-gaya pada tiap partikel, F = m * A sehingga tiap partikel akan bergerak dan berpindah posisi dari X1(t = 0) ke X2 (t ≠ 0) dengan dX dV laju perubahan dan laju kecepatan gerak . Hubungan antara X(t) dan V(t) dt dt menyatakan bahwa sistem adalah merupakan PD rangkap, dan apabila diberikan suatu harga awal X(t0) = X0, penyelesaiannya dapat dituliskan sebagai berikut: X ' ( t ) = f ( t , X (t )), d ( t , X (t )) = A; X (t 0 ) = X 0 dt Pada masalah medan gravitasi [5] yang dipergunakan untuk uji masalah dalam implementasi algoritma ini, gaya yang bekerja pada satu partikel mengikuti hukum gravitasi, sehingga percepatan yang diderita oleh partikel tersebut adalah: Ai = N X j − Xi G * mj * mi j =1, j ≠i r 3i , j ∑ merupakan fungsi percepatan derivatif yang mempunyai dua buah argumen massa dan posisi. Dengan demikian harga ini harus dihitung sebelum proses update posisi untuk setiap step waktu berikutnya. Untuk menghitung fungsi kecepatan derivatif dipergunakan sebuah integrator. Metode Euler adalah integrator sederhana yang menghitung X n +1 = X n + h(t , X n ) dimana h dapat diperoleh menggunakan deret Taylor. Metode lain adalah metode Runge-Kutta, yang merupakan perluasan metode Euler dan dapat menghitung dengan dX lebih teliti. Metode ini menggunakan step penambahan kecil pada fungsi derivatif dt untuk menghitung harga X n+1 . Standar metode Runge-Kutta menggunakan empat buah step penambahan kecil k1, k2, k3 dan k4 sebagai parameter-parameter yang digunakan untuk menghitung harga X n+1 dengan persamaan: 1 X n +1 = X n + ( k 1 + 2 k 2 + 2 k 3 + k 4 ) 6 Dalam hal persamaan gerak partikel pada program yang dibuat, percepatan d (t , X ( t )) A= adalah fungsi Accel(mj, Xj) dengan mj = massa partikel-partikel lain dt dengan posisi Xj dan harga-harga k1, k2, k3 dan k4 dihitung sebagai berikut: k 1 = h( t n , X n ) = Vn k 2 = h (t n + k h h , X n + 1 ) = Vn + * Accel ( m j , X j ) 2 2 2 k 3 = h (t n + h , X n + k2 h h ) = Vn + * Accel ( m j , X j + * Vn ) 2 2 2 h h * Vn + * Accel ( m j , X j )) 2 2 Pada distribusi partikel yang tidak serba sama, akan didapati relatif kumpulan partikel, yang dibenarkan pada saat menghitung gaya, dianggap sebagai partikel tunggal apabila jaraknya relatif jauh dari partikel yang ditinjau [4]. Algoritma BH menggunakan cara tersebut dan dengan teknik open-test faktor ketelitian θ untuk menghitung gaya-gaya pada setiap partikel sebagai berikut. Pada sistem 2D, domain k 4 = h(t n + h, X n + k 3 ) = Vn + h * Accel( m j , X j + D , D = panjang sel dan r = jarak r dari partikel yang ditinjau ke pusat sel lebih kecil dari faktor ketelitian θ , maka partikel-partikel yang ada di dalam sel adalah partikel tunggal berposisi di pusat sel, dengan massa sama dengan total massanya. Proses pembentukan struktur tree berhirarki dari algoritma BH pada sistem 2D adalah sebagai berikut. Dibangkitkan partikel secara random pada domain partikel yang didefinisikan, apabila pada sektor yang sama terdapat dua buah partikel, sektor tersebut dibagi empat subsektor yang masing-masing sebagai “anak” pada struktur tree. Dengan demikian setiap struktur sektor adalah node dari tree yang terbentuk. Proses tersebut diulang secara rekursif sehingga pada setiap sektor terdapat satu buah partikel. Pada struktur sektor dilengkapi empat buah pointer, sehingga terbentuk struktur tree berhirarki, dimana root adalah domain yang memuat seluruh partikel. Jika sebuah node adalah v, maka *p(v) adalah subset dari node v, sehingga * p(v ) = U ki =1 p( vi ) untuk tiap-tiap k = 2-4. Gambar 1 memperlihatkan divide and conquer dari struktur oct-tree dari algoritma BH untuk sistem 3D. Untuk menghitung gaya pada setiap partikel dilakukan penjejakan struktur tree (tree traversal) dengan mengikuti pointer pada tiap sektor. partikel dibagi menjadi banyak sel, apabila rasio Gambar 1. Hasil Divide and Conquer pada Sistem 3D METODOLOGI Pada algoritma BH secara implisit menjelaskan bahwa pembentukan tree dimulai dengan didefinisikan domain partikel berupa kubus besar yang cukup memuat partikel dari sistem. Partikel kemudian dibangkitkan secara acak dan dimasukkan satu persatu, jika ada dua buah partikel menempati bidang yang sama, bidang tersebut dibagi delapan dan diaktifkan root pointer menunjuk delapan subbidang tersebut dan seterusnya. Pada implementasi algoritma BH ini, pembentukan tree dikembangkan dan dimulai dengan mendefinisikan domain partikel dan semua partikel dari sistem dimasukkan ke dalamnya sebelum pembagian domain partikelnya. Hal ini ternyata mempercepat proses pembentukan tree karena dapat dipakai teknik pengurutan cepat. Pembentukan Tree Didefinisikan P adalah sejumlah partikel dari sistem pada Rd dengan d adalah konstanta yang menyatakan dimensi. Untuk d = 2, sistem adalah 2D, sebuah sektor pada sembarang level h = i adalah produk Cartesian s = [ x i , yi ] ∈ R 2 yang memuat sejumlah partikel. S[P] adalah root dengan level h = 0. Domain root didefinisikan dengan l x [ P ] dan l y [ P] yang masing-masing adalah panjang bidang x dan y. Titik sudut kiri bawah dari tiap-tiap sektor didefinisikan sebagai (xl, yl) sehingga jumlah partikel termuat dalam suatu sektor dapat dicari dengan (xl, yl, xl + lx[P], yl + ly[P]). Teknik divide and conquer membagi tiap sektor melalui titik tengah sektor, karena pada program yang dibuat ditentukan lx[P] = ly[P] maka titik-titik tengah tiap sektor adalah c[ s] = ( x l , y l ) + l[ P ] / 2 . Data partikel disimpan pada sebuah array. Data posisi partikel disamakan dengan domain partikel dengan cara memetakan setiap partikel dengan memproyeksikan data posisi melalui variabel-variabel domain partikel. Proses selanjutnya adalah melakukan pengurutan secara parsial pada data partikel dengan cara membandingkan setiap koordinat partikel dengan titik tengah sektor c[s] dari sektor yang ditinjau. Dengan demikian dapat ditentukan segmen-segmen pemisah pada array yang menentukan subsektor1 sampai dengan subsektor4, yang masing-masing dinyatakan sebagai s[p1], …, s[p4]. Dengan didapatkannya subsektor-subsektor tersebut, masing-masing dapat ditentukan kondisi node-nya dengan cara tes kondisi yaitu dengan menghitung jumlah partikel yang termuat pada subsektor tersebut sebagai berikut: • Jika subsektor tidak memuat partikel maka subsektor adalah node = Nill • Jika subsektor memuat tepat satu partikel maka subsektor adalah node = leaf • Jika subsektor memuat banyak partikel maka subsektor adalah node yang padanya harus dilakukan pembagian lebih lanjut. Struktur node yang dipergunakan pada program adalah sebagai berikut: struct NODE { stuct NODE *subsnodes[4]; int num_subnodes; /* other data */ }; Gambar 2 adalah menyatakan quad-tree yang terbentuk. Gambar 2. Struktur Quad-tree Penjejakan Tree Ada beberapa metode yang efisien untuk menjejaki struktur tree untuk mencari node-node pada tree, antara lain metode Depth First Search (DFS) dan medode BFS. Untuk masalah komputasi partikel seperti pada algoritma BH, metode BFS lebih efisien daripada metode DFS karena node-node yang dicari dan memenuhi kriteria faktor ketelitian θ hanya akan dijejaki tepat satu kali, sehingga dengan DFS akan menimbulkan langkah balik yang tidak diinginkan. Prinsip kerja metode BFS untuk menghitung gaya pada tiap partikel dengan faktor ketelitian θ adalah sebagai berikut. Dimulai dengan meninjau root tree, jika root mempunyai subnode yang dinyatakan pada pointernya, ditinjau masing-masing subnode. Pada tiap-tiap subnode yang ditinjau dilakukan tes kriteria θ , jika dipenuhi maka subnode adalah sebagai partikel tunggal dan penjejakan dihentikan. Sebaliknya, jika kriteria tersebut tidak dipenuhi, penjejakan dilanjutkan pada subnode yang lain. Demikian seterusnya secara rekursif dilakukan penjejakan pada tiap-tiap subnode yang kriteria θ -nya belum dipenuhi sampai dengan dicapai leaf dari tree. Pada penjejakan tree dengan metode BFS untuk menghitung gaya-gaya pada tiap partikel diaktifkan tiga buah List yang fragmen programmnya dapat dijelaskan sebagai berikut: Function BFS((*KriteriaBH)(subnode *)); copy root ke input_work_List; while (!Empty (input_work_List)) { for (each daughter node) { if (KriteriaBH (daughter node)) { copy (daughter node (interaction_List)); else copy (daughter node (output_work_List)); } } input_work_List = output_work_List; }; Total gaya pada suatu partikel dapat dihitung dengan mengevaluasi gaya-gaya dari partikel-partikel pada interaktion_List. HASIL DAN PEMBAHASAN Proses pembentukan tree pada implementasi algoritma BH ini mempunyai orde komputasi O(N log N) dengan N = jumlah partikel pada sistem, yang dicapai pada kondisi paling buruk (worst-case), yaitu dicapai pada saat distribusi partikel serba sama. Hal tersebut pada sistem 2D, jumlah node yang terbentuk adalah 4 h , dimana h = level dari tree yang terbentuk. Proses penjejakan tree untuk menghitung gaya-gaya pada tiap partikel, untuk harga-harga faktor ketelitian θ yang tidak nol, dapat dianalisis menggunakan Gambar 3. Distribusi Speris Partikel Berhirarki pendekatan distribusi partikel speris seperti pada gambar 3. Kerapatan distribusi partikel pada sistem dapat dihitung dengan persamaan: 4π 3 n= N /( R ) 3 dimana R adalah radius dari domain partikel yang didefinisikan. Dengan mengorganisasi distribusi partikel di dalam sel-sel berhirarki, maka jumlah interaksi pada satu partikel adalah: nint = n0 + j .sel ∑ i =0 i n subsel = n0 + 4πri3θ 24 = n0 + 2 4π 3 3 θ ri θ / 8 3 dimana n0 = jumlah interaksi langsung partikel-partikel yang dekat dengan partikel yang ditinjau. Untuk N jumlah partikel pada sistem yang besar, maka jumlah interaksi pada satu partikel dapat dihitung sebagai berikut: nint = 24 log(θ ( 3 N / 4π ) 3 ) 4π 1 N * + ≈ log 2 2 3 log( 1 + θ ) 3 θ θ θ Dengan demikian, untuk kondisi paling buruk (worst-case) waktu yang diperlukan oleh CPU untuk menghitung gaya pada satu partikel dalam sistem adalah berorde O(log N), yang berarti jumlah operasi untuk menghitung gaya-gaya pada sistem dengan N buah partikel adalah O(N log N). Hasil eksekusi program untuk N = 104 jumlah partikel, dengan berbagai harga faktor ketelitian θ dan dibandingkan dengan algoritma interaksi langsung (PP) diberikan pada gambar 4. Gambar 4. Eksekusi Program dengan Berbagai Harga θ Dari gambar tersebut dapat dilihat transisi sekala dari orde komputasi O(N2) ke orde komputasi O(N) pada saat harga θ bertambah, yang menyatakan bahwa metode tree berhirarki akan lebih efisien apabila diaplikasikan untuk θ yang diperbesar. KESIMPULAN DAN SARAN Dengan menggunakan teknik pengurutan cepat pada pembentukan tree dan tiaptiap segmen pembagi dapat digunakan sebagai sentinel pada program, maka eksekusi program lebih efisien dan menjadi lebih cepat. Akan tetapi karena masih menggunakan empat buah pointer pada struktur data node yang dipakai, maka diperlukan jumlah memori yang lebih besar untuk mengalokasi data partikel yang termuat pada tiap node. Hal tersebut dapat diatasi secara dinamik dengan menempatkan sementara data partikel pada linked-list sehingga pada struktur data node cukup menggunakan satu buah pointer. Secara umum lama waktu eksekusi dari algoritma BH ini juga bergantung pada faktor ketelitian θ yang digunakan sebagai open-test pada perhitungan gaya pada tiap partikel, dimana θ adalah fungsi dari aplikasi apa algoritma ini akan digunakan. Pada saat distribusi partikel pada sistem tidak serba sama, pada level yang sama dari tree yang terbentuk akan terdapat node kosong. Sehingga pada pembentukan tree perlu dioperasikan teknik koleksi sampah (garbage collection) tertentu. DAFTAR PUSTAKA 1. GIBBON, P., A Hierarchical Tree Code for Quantum Molecular Dynamic Simulations, IBM Technical Report TR: 75.92.21 (1992) 2. LARS HERNQUIST, Hierarchical N-Body Methods, Computer Physics Communications 48 (1988) p. 107 – 115 3. BARNES, J. and HUT, P., A Hierarchical O(N log N) Force-Calculation Algorithm, Nature 324 (1987) p. 446 – 449 4. HANSEN, J.P., Computer Simulation of Basic Plasma Phenomena, Scottich Summer School Proceeding (1989) p. 433 – 496 5. BARNES, J. and LARS HERNQUIST, Computer Models of Colliding Galaxies, Physics Today (1993), p. 54 - 61 DISKUSI SARIFUDDIN MADENDA 1. Dalam pencarian tree, Bapak menggunakan BFS, informasi apa yang dipakai untuk menentukan solusi untuk menentukan node yang dicari? (apakah jarak terdekat atau gaya terbesar?) 2. Bagaimana bila digunakan metode beam search? SLAMET SANTOSA 1. Informasi acuan yang dipakai pada penjejakan tree dengan metode BFS adalah kriteria D/r ≤ θ, dimana D = lebar sektor (node) dan r = jarak dari partikel yang dihitung gayanya ke pusat node. Penjejakan dilakukan dari root, apabila kriteria tersebut belum dipenuhi, penjejakan dilakukan terus sampai node yang memenuhi atau sampai leaf. Dibandingkan dengan metode DFS (Depth First Search) metode BFS lebih efisien dan tidak mengalami penjejakan ulang (back tracking). 2. Terima kasih atas informasi tentang adanya metode beam search yang penjejakannya level demi level seperti halnya metode BFS, akan saya pelajari lebih lanjut tentang kapasitas memori yang digunakan untuk kedua metode tersebut. Kalau metode beam search adalah level demi level, dan pada prinsipnya juga tidak mengalami penjejakan ulang. DAFTAR RIWAYAT HIDUP 1. Nama : SLAMET SANTOSA 2. Tempat/Tanggal Lahir : Kebumen, 23 Februari 1958 3. Instansi : P3TM - BATAN 4. Pekerjaan / Jabatan : Staf. Bidang Akselerator 5. Riwayat Pendidikan : (setelah SMA sampai sekarang) • PAT-UGM, (D3) (1984) (D3) • ITS, (1990) (S1) • Univ. of Gifu (Japan) (1995) (S2) 6. Pengalaman Kerja : • 1979- 1986 : Teknisi Bidang Fisika (Instrumentasi Nuklir) • 7. Organisasi Professional 1990– sekarang : Staf Peneliti Bidang Akselerator : • ICMI Orsat Jepang Tengah • Himpunan Fisika Indonesia Cabang Yogyakarta HOME KOMPUTASI DALAM SAIN DAN TEKNOLOGI NUKLIR X