no of pc's loading configuration loading bytecodes preparing uploaders starting uploaders...
TRANSCRIPT
BAB 2
OVERVIEW TOOLS PROGRAMMING
2.1. JAVA RMI
Remote Method Invocation (RMI) dibuat berdasarkan ide dasar dari local objects
dan Remote objects. Konsep ini bersifat relatif. Local objects adalah objek-objek
yang dijalankan pada host tertentu. Remote objects adalah objek-objek yang
dijalankan pada host yang lain. Objek-objek pada remote host diekspor (exported)
sehingga dapat diminta (invoked) secara remote. Suatu objek diekspor dengan cara
meregistrasi dengan suatu remote registry server. Server remote registry
membantu objek pada host yang lain untuk mengakses secara remote objek yang
teregister oleh server itu. Hal itu dilakukan dengan memelihara database nama
dan objek yang terasosiasi dengan nama itu (Jaworski [1999]).
Local Host
local object
Local Host
remoteobject
Remoteregistryaccess to remote object
Registring remoteobject
accessing
Gambar 2.1.1. Registrasi dari suatu remote object untuk remote access
(Jaworski [1999])
Objek yang mengekspor dirinya sendiri untuk akses secara remote harus
mengimplementasi Remote interface. Interface ini mengidentifikasi objek sebagai
6Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
dapat diakses secara remote. Setiap metode yang diminta secara remote harus
“membuang” (throw) Remote Exception. Eksepsi ini digunakan untuk
mengindikasi error yang terjadi selama proses RMI (Jaworski [1999]).
Metode pendekatan RMI pada java (Java RMI) adalah objek-objek diorganisir
dalam suatu framework klien / server. Suatu local object yang meminta (invoke)
metode dari remote object dijadikan sebagai client object atau client. Sebuah
remote object yang metodenya diminta oleh local object dijadikan sebagai sebagai
server object atau server (Jaworski [1999]).
Java RMI menggunakan stub dan skeleton. Stub adalah suatu local object yang
berlaku sebagai local proxy untuk remote object. Stub menyediakan metode yang
sama seperti remote object. Local object meminta (invoke) metode dari stub
seakan seperti metode dari remote object. Stub kemudian mengkomunikasikan
permintaan (invocation) metode kepada remote object melalui suatu skeleton yang
diimplementasikan di remote host. Skeleton adalah suatu proxy pada remote
object yang berada pada host yang sama dengan remote object. Skeleton
berkomunikasi dengan local stub dan menyampaikan invokasi metode pada stub
kepada Remote object yang sebenarnya. Skeleton kemudian menerima nilai yang
dihasilkan dari RMI (jika ada) dan menyampaikan nilai itu kembali ke stub. Stub
selanjutnya mengirim nilai tersebut kepada local object yang menginisiasi RMI
(Jaworski [1999]).
7Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Stub dan skeleton berkomunikasi melalui remote reference layer. Layer ini
meyediakan stub dengan kemampuan untuk berkomunikasi dengan skeleton
melalui suatu protocol transport. RMI biasanya menggunaan TCP untuk transport
informasi, walaupun bersifat fleksibel untuk dapat menggunakan protokol lainnya
(Jaworski [1999]).
Local host
Object A
Object BStub
ReferenceLayer
TransportLayer
Remote host
Object B
Object BSkeleton
ReferenceLayer
TransportLayer
RemoteRegistry
Communicationsupported by lower layer
Gambar 2.1.2. Java RMI menggunakan stub dan skeleton untuk mensupport
komunikasi klien / server (Jaworski [1999]).
8Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
2.2. JAVA CORBA
Teknologi Common Object Request Broker Architecture (CORBA) merupakan
teknologi standard yang digunakan untuk melakukan computing dengan
menggunakan bahasa pemograman yang heterogen (Sun Microsystem [2003]).
CORBA terdiri dari beberapa layer. Layer terendah adalah Object Request Broker
(ORB). ORB merupakan bahasa netral, yang artinya kita dapat membuat object
dengan menggunakan bahasa pemrograman apapun dan menggunakan ORB untuk
dapat mengakses metode-metode yang terdapat pada object tersebut.
Jika kita menggunakan bahasa pemrograman yang berbeda-beda maka diperlukan
bahasa pemetaan antara bahasa yang digunakan, yaitu dengan menggunakan
CORBA’s Interface Definition Language (IDL). Ketika kita membuat IDL maka
kita akan membuat stub dan skeleton di dalam bahasa pemrograman yang kita
gunakan. Stub merupakan interface antara klien dan ORB. Skeleton merupakan
interface antara ORB dan object yang terdapat di server. Stub dan skeleton
berkomunikasi melalui ORB.
9Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Gambar 2.2.1. COBRA clients menggunakan ORB untuk dapat mengakses metode yang terdapat pada COBRA server.
Gambar ini menunjukkan hubungan antara ORB dan klien yang akan
menggunakan metode yang terdapat pada object di server.
10Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
BAB 3
Studi Kasus: Integrasi Numerik dan Perkalian Matrik
Bahan studi kasus ini diambil dari banyak permasalahan yang berpotensi untuk
dijadikan obyek dalam komputasi terdistribusi. Eksperimen ini menggunakan
studi kasus berupa perkalian matrik dan perhitungan Integral Monte Carlo untuk
fungsi pi, torus, dan gauss.
3.1. INTEGRAL MONTE CARLO Teorema dasar dari integrasi Monte Carlo untuk mengestimasi integral dari suatu
fungsi f diberikan sebagai berikut (Coddington [1996], Carter [1996]):
∑
∫
=
−≈
=
N
ii
b
a
xfN
ab
dxxfI
1)()(
)(
(3.1.1)
dimana xi dipilih secara acak pada selang batas integrasi yang telah ditentukan dan
error berdasarkan statistik, α 1/ √ N (independen terhadap dimensi dari integral) .
Dalam tesis ini akan dihitung estimasi numerik dari beberapa persamaan:
11Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
(a) Pi (π) :
∑
∫ ∫
=
− −
≈
=
N
iii yxp
N
dxdyyxp
1
1
1
1
1
),(4
),(π
(3.1.2)
dimana
p (x,y) =1 x2 + y2 ≤ 1
= 0 lainnya
(b) Torus:
∑
∫ ∫ ∫
=
− −
≈
=
N
iiii zyxp
N
dxdydzzyxpzyxV
1
4
1
4
3
1
1
),,(42
),,(),,(
(3.1.3)
dimana
p (x,y,z) =1 z2 + [[x2 + y2]1/2 –3]2 ≤ 1
= 0 lainnya
(c) Normal Baku:
2
21
1
96,1
96,1
2192,3
)()(
ixN
ie
N
dxxpx
−
=
−
∑
∫
≈
=Φ
π
(3.1.4)
12Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
3.2. PERKALIAN MATRIK (MATRIX MULTIPLICATION)
Perkalian dua buah matrix, yaitu A dan B akan menghasilkan matrix C, dimana
elemen cij ( mjni )<≤<≤ 0,0 , didapatkan dari hasil perhitungan sebagai
berikut (Wilkinson,Barry and Allen, Michael [1999]):
jk
l
kkiji baC ,
1
0,, ∑
−
=
= (3.2.1)
dimana
A adalah matrik i x j
B adalah matrik j x k
Implementasi pemrograman terdistribusi inimenggunakan Java RMI dan Java
CORBA. Penjumlahan pada pers. 3.1.2, 3.1.3 dan 3.1.4 dipisah menjadi sub
penjumlahan dan setiap subtask dilakukan oleh server yang terpisah dan berjalan
pada mesin berbeda. Masing-masing server menjalankan proses sebanyak N/S,
dimana N adalah jumlah titik bangkitan dan S adalah jumlah server. Sedangkan
pada perhitungan perkalian matrik (pers. 3.2.1), matrik A akan dipartisi barisnya
berdasarkan jumlah server menjadi beberapa sub matrik. Masing-masing server
menjalankan perkalian antara sub matrik A dengan matrik B. Pembagian proses
untuk masing-masing server dilakukan secara otomatis oleh aplikasi (lihat Bab 6).
Komputer yang menjalankan aplikasi klien merupakan komputer yang melakukan
pembagian proses untuk masing-masing server, dimana dalam eksperimen ini
komputer klien merupakan salah satu dari ketiga komputer server. Dari komputer
klien ini akan dilakukan pengiriman jumlah titik bangkitan atau jumlah baris dan
13Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
formula yang akan dieksekusi oleh server yang lain. Dalam eksperimen ini
masing-masing komputer server tersebut akan menjalankan aplikasi klien. Hasil
pada eksperimen ini merupakan hasil rataan dari eksekusi yang dilakukan oleh
ketiga komputer tersebut ketika menjadi klien dan menjadi server.
Sistematika pembagian tugas dalam menyelesaikan suatu masalah adalah sebagai
berikut: bila jumlah titik bangkitan atau baris pada matrik A tidak habis dibagi
dengan jumlah server yang bekerja, maka sisa dari pembagian tugas tersebut akan
ditambahkan ke beberapa server sesuai dengan urutannya. Misalkan jumlah titik
bangkitan sebanyak 4 titik bangkitan dikerjakan dengan menggunakan 3 server
maka masing-masing server akan mengeksekusi 1 titik bangkitan dimana 1 titik
bangkitan yang tersisa ditambahkan ke server 1, sehingga titik bangkitan yang
dieksekusi server 1 menjadi 2 titik bangkitan. Hal serupa juga terjadi pada saat
pembagian baris yang dieksekusi pada matrik.
14Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
BAB 4
DIAGRAM UNIFIED MODELING LANGUAGE (UML)
4.1. JAVA RMI Aplikasi Terdistribusi menggunakan Java RMI terdiri dari dua package dengan
class-class sbb:
• Package client
o Client.class
o Config.class
o Uploader.class
o Worker.class
o Computable.class
o Engine.class
o Service.class
• Package server
o Server.class
o Computable.class
o Engine.class
o Service.class
server client
Gambar 4.1.1. Package pada aplikasi RMI
15Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
4.1.1. INTEGRAL MONTE CARLO
Berikut ini definisi UML dari masing masing class dan interface:
Clientvalue : Double = 0.0time : Long = 0
<<Constructor>> Client(file : String)main(args[] : String) : void {static}log(host : String, time : Long) : void {synchronized}log(host : String, points : Long, time : Long) : void {synchronized}update(value : Double) : void {synchronized}terminate(ex : Exception) : void {synchronized}wait(thread[] : Thread) : voidlog(reference : Long) : voidisCompileable(path : String) : BooleangetBytes(path : String) : Byte
Gambar 4.1.1.1 Class Client
Double[][]String[]
Configfunction : String = ""compiled : Boolean = falsebounds : Double[][] = nullpoints : Long = 0servers : Integer = 0server : String[] = null
<<Constructor>> Config(file : String)getFunction() : StringisCompiled() : BooleangetBounds() : DoublegetPoints() : LonggetServer() : StringgetServers() : Integer
Gambar 4.1.1.2 Class Config
16Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
ClientService
<<Interface>> Byte[]
Thread
Uploaderclient : Client = nullservice : Service = nullhost : String = ""name : String = ""data : Byte[] = null
<<Constructor>> Uploader(client : Client, host : String, name : String, data : Byte[])run() : void
<<extend>>
Gambar 4.1.1.3 Class Uploader
Thread
Service<<Interface>> Double[][]Client
Workerclient : Client = nullhost : String = ""serv ice : Serv ice = nullf unction : Computable = nullbounds : Double[][] = nullpoints : Long = 0
<<Constructor>> Worker(client : Client, host : String, f unction : Computable, bounds : Double[][], points : Long)run() : void
<<extend>>
Gambar 4.1.1.4 Class Worker
17Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Server
main(args : String[]) : void {static}<<Constructor>> Server(host : String)
Gambar 4.1.1.5 Class Server
Serializable<<Interface>>
Computable
compute(x[] : Double) : Double
<<Interface>>
<<extend>>
Gambar 4.1.1.6 Interface Computable
Unicast Remote Object
Engine
<<Constructor>> Engine()storeClass(name : String, data : Byte[]) : voidevaluate(function : Computable, bounds[][] : Double, points : Long) : DoublegetClient() : String
Service
<<extend>>
Gambar 4.1.1.7 Class Engine
18Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Remote
Service
storeClass(name : String, data : Byte[]) : voidevaluate(function, partisi, matrix1, matrix2) : Double[][]
<<extend>>
Gambar 4.1.1.8 Interface Service
19Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
4.1.2. MATRIX MULTIPLICATION
Berikut ini definisi UML dari masing masing class dan interface:
ClientMatrixvalue : Double = 0.0time : Long = 0res : Integer = 0rem : Integer = 0result : Double[][] = null
<<Constructor>> ClientMatrix(file : String)main(args[] : String) : void {static}printMatrix(matrix : Double[][]) : voidprintTranspose(matrix : Double[][]) : voidlog(host : String, time : Long) : void {synchronized}update(index : Integer, row : Integer, submatrix[ : Double[][]) : void {synchronized}terminate(ex : Exception) : void {synchronized}wait(thread[] : Thread) : voidlog(reference : Long) : voidisCompileable(path : String) : BooleangetBytes(path : String) : Byte
Double[][]
Gambar 4.1.2.1 Class ClientMatrix
Double[] Double[][]
String[]
ConfigMatrixfunction : String = ""compiled : Boolean = falsematrix1 : Double[][] = nullmatrix2 : Double[][] = nullmatrix : Double[] = nulldimension : Integer[][] = nullservers : Integer = 0server : String[] = null
<<Constructor>> ConfigMatrix(file : String)getFunction() : StringisCompiled() : BooleangetServer() : StringgetDimension() : IntegergetMatrix1() : DoublegetMatrix2() : DoublegetServers() : Integer
Integer[][]
Gambar 4.1.2.2 Class ConfigMatrix
20Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
ClientMatrixService
Byte[]
Thread
UploaderMatrixclient : ClientMatrix = nullhost : String = ""function : String = ""service : Service = nulldata : Byte[] = null
<<Constructor>> UploaderMarix(client : ClientMatrix, host : String, function : String, data : Byte[])run() : void
<<extend>>
Gambar 4.1.2.3 Class UploaderMatrix
ClientMatrixService Computable
Matrix
Double[][] Integer[]
Thread
WorkerMatrixclient : ClientMatrix = nullhost : String = ""serv ice : Serv ice = nullf unction : ComputableMatrix = nullmatrix1 : Double[][] = nullmatrix2 : Double[][] = nullpartisi : Integer[] = nulltime : Long = 0v alue : Double[][] = null
<<Constructor>> WorkerMatrix(client : ClientMatrix, host : String, f unction : ComputableMatrix, matrix1 : Double[][], matrix2 : Double[][], part isi : Integer[])run() : v oid
<<extend>>
Gambar 4.1.2.4 Class WorkerMatrix
21Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Server
main(args : String[]) : void {static}<<Constructor>> Server(host : String)
Gambar 4.1.2.5 Class Server
Serializable<<Interface>>
ComputableMatrix
compute(x : Double[], y : Double[], index : Integer) : Double
<<Interface>>
<<extend>>
Gambar 4.1.2.6 Interface ComputableMatrix
Unicast Remote Object
Engine
<<Constructor>> Engine()storeClass(name : String, data : Byte[]) : voidevaluate(function : ComputableMatrix, partisi : Integer[], matrix1 : Double[][], matrix2 : Double[][]) : Double[][]getClient() : String
<<extend>>
Service
Gambar 4.1.2.7 Class Engine
22Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Remote<<Interface>>
Service
storeClass(name : String, data : Byte[]) : voidevaluate(function, partisi, matrix1, matrix2) : Double[][]
<<Interface>>
<<extend>>
Gambar 4.1.2.8 Interface Service
23Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
4.2. JAVA CORBA Aplikasi Terdistribusi menggunakan Java CORBA terdiri dari tiga package
dengan class-class sbb:
• Package client
o Client.class
o Config.class
o Uploader.class
o Worker.class
o Computable.class
• Package server
o Server.class
o Computable.class
• Package EngineApp
client
EngineApp
server
Gambar 4.2.1. Package pada aplikasi CORBA
Package server dapat berkomunikasi dengan package client dengan menggunakan
package EngineApp. Package EngineApp terdiri dari class-class yang
menggunakan bahasa standard (bahasa pemetaan) yang dihasilkan secara otomatis
24Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
dengan melakukan kompilasi pada script IDL. Package EngineApp dibuat agar
server dan client dapat berkomunikasi dengan adanya pemetaan object. Bahasa
pemetaan disebut juga dengan Interface Definition Language (IDL).
4.2.1. INTEGRAL MONTE CARLO
Berikut ini definisi UML dari masing masing class dan interface:
Clientvalue : Double = 0.0time : Long = 0
<<Constructor>> Client(file : String)main(args[] : String) : void {static}log(host : String, time : Long) : void {synchronized}log(host : String, points : Long, time : Long) : void {synchronized}update(value : Double) : void {synchronized}terminate(ex : Exception) : void {synchronized}wait(thread[] : Thread) : voidlog(reference : Long) : voidisCompileable(path : String) : BooleangetBytes(path : String) : Byte
Gambar 4.2.1.1 Class Client
Double[][]String[]
Configfunction : String = ""compiled : Boolean = falsebounds : Double[][] = nullpoints : Long = 0servers : Integer = 0server : String[] = null
<<Constructor>> Config(file : String)getFunction() : StringisCompiled() : BooleangetBounds() : DoublegetPoints() : LonggetServer() : StringgetServers() : Integer
Gambar 4.2.1.2 Class Config
25Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Byte[]
Thread
Client ORB
Uploaderclient : Client = nullhost : String = ""name : String = ""data : Byte[] = null<<static>> orb : ORB = null
<<Constructor>> Uploader(client : Client, host : String, name : String, data : Byte[])run() : void
<<extend>>
Gambar 4.2.1.3 Class Uploader
Double[][]Client
Thread
ORB
Computable
Workerclient : Client = nullhost : String = ""f unction : Computable = nullbounds : Double[][] = nullpoints : Long = 0<<static>> orb : ORB = null
<<Constructor>> Worker(client : Client, host : String, f unction : Computable, bounds : Double[][], points : Long)run() : v oid
<<extend>>
Gambar 4.2.1.4 Class Worker
26Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
EnginePOA ORB
Server
main(args : String[]) : void {static}
EngineImpl<<static>> orb : ORB = null
setORB(orb_val : ORB) : voidstoreClass(v_store : objStore) : voidevaluate(v_eval : objEvaluate) : Double
Gambar 4.2.1.5 Class Server
Serializable<<Interface>>
Computable
compute(x[] : Double) : Double
<<Interface>>
<<extend>>
Gambar 4.2.1.6 Interface Computable
27Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
4.2.2 PERKALIAN MATRIX (MATRIX MULTIPLICATION)
Berikut ini definisi UML dari masing masing class dan interface:
ClientMatrixvalue : Double = 0.0time : Long = 0res : Integer = 0rem : Integer = 0result : Double[][] = null
<<Constructor>> ClientMatrix(file : String)main(args[] : String) : void {static}printMatrix(matrix[][] : Double) : voidprintTranspose(matrix[][] : Double) : voidlog(host : String, time : Long) : void {synchronized}update(index : Integer, row : Integer, submatrix[][] : Double) : void {synchronized}terminate(ex : Exception) : void {synchronized}wait(thread[] : Thread) : voidlog(reference : Long) : voidisCompileable(path : String) : BooleangetBytes(path : String) : Byte
Double[][]
Gambar 4.2.2.1 Class ClientMatrix
Double[][]
String[]
Double[]
ConfigMatrixfunction : String = ""compiled : Boolean = falsematrix1 : Double[][] = nullmatrix2 : Double[][] = nullmatrix : Double[] = nulldimension : Integer[][] = nullservers : Integer = 0server : String[] = null
<<Constructor>> ConfigMatrix(file : String)getFunction() : StringisCompiled() : BooleangetServer() : StringgetDimension() : IntegergetMatrix1() : DoublegetMatrix2() : DoublegetServers() : Integer
Gambar 4.2.2.2 Class ConfigMatrix
28Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Byte[]
Thread
ClientMatrix ORB
UploaderMatrixclient : ClientMatrix = nullhost : String = ""function : String = ""port : String = ""data : Byte[] = null<<static>> orb : ORB = null
<<Constructor>> UploaderMarix(client : ClientMatrix, host : String, function : String, data : Byte[], port : String)run() : void
<<extend>>
Gambar 4.2.2.3 Class UploaderMatrix
Integer[]ClientMatrix ORB Double[][]
Thread
ComputableMatrix
WorkerMatrixclient : ClientMatrix = nullhost : String = ""port : String = ""f unction : ComputableMatrix = nullmatrix1 : Double[][] = nullmatrix2 : Double[][] = nullpartisi : Integer[] = nulltime : Long = 0v alue : Double[][] = null<<static>> orb : ORB = null
<<Constructor>> WorkerMatrix(client : ClientMatrix, host : String, f unction : ComputableMatrix, matrix1 : Double[][], matrix2 : Double[][], partisi : Integer[], port : String)run() : v oid
<<extend>>
Gambar 4.2.2.4 Class WorkerMatrix
29Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
EngineMatrixPOA
ServerMatrix
main(args : String[]) : void {static}
EngineMatrixImpl<<static>> orb : ORB = null
setORB(orb_val : ORB) : voidstoreClass(sc : objStore) : voidevaluate(v_eval : objEvaluate) : matrix
<<extend>>
ORB
Gambar 4.2.2.5 Class ServerMatrix
Serializable
ComputableMatrix
compute()
<<extend>>
Gambar 4.2.2.6 Interface ComputableMatrix
30Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
BAB 5
IMPLEMENTASI JAVA Aplikasi Integrasi Monte Carlo Terdistribusi dan Matrix Multiplication
Terdistribusi merupakan aplikasi berbasis Java yang bersifat two tier. Pada
aplikasi ini ada dua jenis entitas yang berpartisipasi: klien dan server. Klien adalah
proses untuk meminta sumber daya komputasi (computing resources) sekaligus
untuk mengkoordinasi sumber daya tersebut. Server adalah proses yang
menyediakan sumber daya komputasi.
Server
Client
Gambar 5.1 Arsitektur Aplikasi Terdistribusi
Seperti telah dijelaskan pada Bab 2, proses RMI pada aplikasi tersebut
menggunakan stub dan skeleton. Stub adalah objek yang merupakan representasi
dari Engine_stub.class, dan berfungsi sebagai local proxy untuk remote object.
Sedangkan skeleton adalah objek yang merupakan representasi dari
Engine_skel.class, dan berfungsi sebagai proxy pada remote object.
31Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
5.1. Java RMI 5.1.1. Proses RMI pada Aplikasi IMCAD Local Object yang dalam hal ini diwakili oleh Worker dan Uploader meminta
metoda dari remote object, yaitu Service. Objek Worker dan Uploader meminta
metoda dari Service melalui Engine_Stub. Engine_Stub kemudian
mengkomunikasikan permintaan dari Worker dan Uploader kepada Service
melalui Engine_Skel. Engine_Skel menyampaikan invokasi metoda pada
Engine_Stub kepada Service dan kemudian menerima nilai yang dihasilkan dari
RMI ini untuk dikirim kepada Engine_Stub. Selanjutnya Engine_Stub mengirim
nilai tersebut kepada Worker dan Uploader.
5.1.1.1. Proses Klien 1. Client.class membuka berkas konfigurasi, menyimpan semua nilai properti ke
dalam objek config.
Config config = new Config(file); 2. Client.class membuka berkas implementasi fungsi yang akan diintegralkan,
menyimpan isi berkas biner tersebut dalam memori.
byte bytes[] = getBytes(function + ".class");
Bila ternyata berkas ini masih berupa kode sumber (source code), maka
Client.class akan melakukan proses kompilasi terlebih dahulu.
Process process = Runtime.getRuntime().exec( "javac -classpath .;Client.jar " + path ); BufferedReader reader = new BufferedReader( new InputStreamReader(process.getErrorStream()) ); String line = reader.readLine(); while (line!=null) { System.out.println(line); line = reader.readLine(); } reader.close();
32Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
try { process.waitFor(); } catch (InterruptedException iex) { } 3. Client.class mempersiapkan jalinan-jalinan (threads) Uploader.class, yaitu
objek-objek thread yang akan digunakan untuk mengirimkan berkas
terkompilasi pada proses 2 kepada Server.class.
Thread uploaders[] = new Thread[config.getServers()]; for (int i=0; i<uploaders.length; i++) { uploaders[i] = new Uploader(this, config.getServer()[i], function, bytes, config.getPort()[i]); } 4. Client.class mengaktifkan semua jalinan Uploader.class, dan selanjutnya
masing-masing jalinan inilah yang melakukan proses pengiriman berkas
terkompilasi pada proses 3 kepada Server.class.
for (int i=0; i<uploaders.length; i++) { uploaders[i].start(); } wait(uploaders); 5. Setelah semua jalinan Uploader.class selesai melaksanakan tugasnya,
Client.class membuka berkas implementasi fungsi yang akan diintegralkan,
lalu menyimpan definisi kelasnya.
Class resource = Class.forName(function);
6. Client.class mempersiapkan jalinan-jalinan Worker.class, yaitu objek-objek thread yang akan digunakan untuk mengevaluasi nilai integrasi.
long res = config.getPoints()/config.getServers(); long rem = config.getPoints()%config.getServers(); Thread workers[] = new Thread[config.getServers()]; for (int i=0; i<workers.length; i++) { workers[i] = new Worker( this, config.getServer()[i], (Computable) resource.newInstance(), config.getBounds(), res + (i<rem? 1:0), config.getPort()[i] ); } 7. Client.class mengaktifkan semua jalinan Worker.class, dan selanjutnya
masing-masing jalinan inilah yang melakukan proses pengiriman data yang
33Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
diperlukan dalam proses integrasi, dan sekaligus menunggu proses kalkulasi
yang dilakukan di tiap-tiap Server.class.
for (int i=0; i<uploaders.length; i++) { workers[i].start(); } wait(workers); 8. Setelah semua jalinan Worker.class selesai melaksanakan tugasnya,
Client.class menampilkan hasil integrasi beserta total waktu eksekusinya.
System.out.println("Final result = " + value/config.getPoints()); System.out.println("Total time = " + time + " ms"); 5.1.1.2. Proses Server 1. Server.class mempersiapkan layanan registri RMI (RMI registry service) pada
port yang telah ditentukan.
LocateRegistry.createRegistry(port); 2. Server.class melakukan proses instantiasi Service.class, yaitu antarmuka
(interface) yang digunakan untuk melakukan komunikasi antara aplikasi klien
dan server.
Service service = new Engine(); 3. Server.class melakukan proses binding terhadap Service.class pada proses 2,
dan selanjutnya Service.class ini akan berfungsi sebagai objek remote (remote
object) yang menunggu permintaan (request) dari Client.class untuk
menyimpan berkas implementasi fungsi yang akan diintegralkan, dan
mengevaluasi nilai integrasi sesuai dengan data yang dikirimkan oleh
Client.class.
Naming.rebind("//" + host + "/imcad", service);
34Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
5.1.2. Proses RMI pada Aplikasi Matrix Multiplication Local Object yang dalam hal ini diwakili oleh WorkerMatrix dan UploaderMatrix
meminta metoda dari remote object, yaitu Service. Objek WorkerMatrix dan
UploaderMatrix meminta metoda dari Service melalui Engine_Stub. Engine_Stub
kemudian mengkomunikasikan permintaan dari WorkerMatrix dan
UploaderMatrix kepada Service melalui Engine_Skel. Engine_Skel
menyampaikan invokasi metoda pada Engine_Stub kepada Service dan kemudian
menerima nilai yang dihasilkan dari RMI ini untuk dikirim kepada Engine_Stub.
Selanjutnya Engine_Stub mengirim nilai tersebut kepada WorkerMatrix dan
UploaderMatrix.
5.1.2.1. Proses Klien 1. ClientMatrix.class membuka berkas konfigurasi, menyimpan semua nilai
properti ke dalam objek config.
ConfigMatrix config = new ConfigMatrix(file); 2. ClientMatrix.class membuka berkas implementasi fungsi yang akan
diintegralkan, menyimpan isi berkas biner tersebut dalam memori.
byte bytes[] = getBytes(function + ".class");
Bila ternyata berkas ini masih berupa kode sumber (source code), maka
ClientMatrix.class akan melakukan proses kompilasi terlebih dahulu.
Process process = Runtime.getRuntime().exec( "javac -classpath .;Client.jar " + path ); BufferedReader reader = new BufferedReader( new InputStreamReader(process.getErrorStream()) ); String line = reader.readLine(); while (line!=null) { System.out.println(line); line = reader.readLine(); } reader.close();
35Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
try { process.waitFor(); } catch (InterruptedException iex) { } 3. ClientMatrix.class mempersiapkan jalinan-jalinan (threads)
UploaderMatrix.class, yaitu objek-objek thread yang akan digunakan untuk
mengirimkan berkas terkompilasi pada proses 2 kepada Server.class.
Thread uploaders[] = new Thread[config.getServers()]; for (int i=0; i<uploaders.length; i++) { uploaders[i] = new UploaderMatrix(this, config.getServer()[i], function, bytes, config.getPort()[i]); } 4. ClientMatrix.class mengaktifkan semua jalinan UploaderMatrix.class, dan
selanjutnya masing-masing jalinan inilah yang melakukan proses pengiriman
berkas terkompilasi pada proses 3 kepada Server.class.
for (int i=0; i<uploaders.length; i++) { uploaders[i].start(); } wait(uploaders); 5. Setelah semua jalinan UploaderMatrix.class selesai melaksanakan tugasnya,
ClientMatrix.class membuka berkas implementasi fungsi yang akan
diintegralkan, lalu menyimpan definisi kelasnya.
Class resource = Class.forName(function);
6. Client.class mempersiapkan jalinan-jalinan Worker.class, yaitu objek-objek thread yang akan digunakan untuk mengevaluasi nilai integrasi.
res = dimensi[0][0]/jml_server; rem = dimensi[0][0]%jml_server; Thread workers[] = new Thread[jml_server]; submatrix1 = new double[jml_server][][]; //separate matrix into several submatrix //-------------------------------------- int index1 = 0; int index2 = 0; for( index1=0; index1<rem; index1++ ) { submatrix1[index1] = new double[res+1][dimensi[0][1]]; for( int i=0; i<=res; i++ ) { submatrix1[index1][i] = matrix1[index2]; index2++; } }
36Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
while( index1<jml_server ) { submatrix1[index1] = new double[res][dimensi[0][1]]; for( int i=0; i<res; i++ ) { submatrix1[index1][i] = matrix1[index2]; index2++; } index1++; } submatrix2 = matrix2; result = new double[dimensi[0][0]][dimensi[1][1]]; for (int i=0; i<jml_server; i++) { partisi[i][0] = submatrix1[i].length; partisi[i][1] = dimensi[1][1]; partisi[i][2] = dimensi[0][1]; partisi[i][3] = i; workers[i] = new WorkerMatrix( this, config.getServer()[i], (ComputableMatrix)resource.newInstance(),
submatrix1[i] ,submatrix2,partisi[i] ); } 7. ClientMatrix.class mengaktifkan semua jalinan WorkerMatrix.class, dan
selanjutnya masing-masing jalinan inilah yang melakukan proses pengiriman
data yang diperlukan dalam proses integrasi, dan sekaligus menunggu proses
kalkulasi yang dilakukan di tiap-tiap Server.class.
for (int i=0; i<uploaders.length; i++) { workers[i].start(); } wait(workers); 8. Setelah semua jalinan WorkerMatrix.class selesai melaksanakan tugasnya,
ClientMatrix.class menampilkan hasil integrasi beserta total waktu
eksekusinya.
System.out.println("Final result = " + value/config.getPoints()); System.out.println("Total time = " + time + " ms"); 5.1.2.2. Proses Server 1. Server.class mempersiapkan layanan registri RMI (RMI registry service) pada
port yang telah ditentukan.
LocateRegistry.createRegistry(port);
37Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
2. Server.class melakukan proses instantiasi Service.class, yaitu antarmuka
(interface) yang digunakan untuk melakukan komunikasi antara aplikasi klien
dan server.
Service service = new Engine(); 3. Server.class melakukan proses binding terhadap Service.class pada proses 2,
dan selanjutnya Service.class ini akan berfungsi sebagai objek remote (remote
object) yang menunggu permintaan (request) dari ClientMatrix.class untuk
menyimpan berkas implementasi fungsi yang akan diintegralkan, dan
mengevaluasi nilai integrasi sesuai dengan data yang dikirimkan oleh
ClientMatrix.class.
Naming.rebind("//" + host + "/imcad", service);
5.2. Java CORBA
5.2.1. Proses CORBA pada Aplikasi IMCAD
Local Object yang dalam hal ini diwakili oleh Worker dan Uploader meminta
metoda dari remote object yang terdapat di server, yaitu EngineImpl. Objek
Worker dan Uploader meminta metoda dari EngineImpl melalui ORB. ORB
kemudian mengkomunikasikan permintaan dari Worker dan Uploader, kemudian
menerima nilai yang dihasilkan dari metoda ini untuk dikirim kepada ORB.
Selanjutnya ORB mengirim nilai tersebut kepada Worker dan Uploader.
38Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
5.2.1.1. Proses Klien 1. Client.class membuka berkas konfigurasi, menyimpan semua nilai properti ke
dalam objek config.
Config config = new Config(file); 2. Client.class membuka berkas implementasi fungsi yang akan diintegralkan,
menyimpan isi berkas biner tersebut dalam memori.
byte bytes[] = getBytes(function + ".class");
Bila ternyata berkas ini masih berupa kode sumber (source code), maka
Client.class akan melakukan proses kompilasi terlebih dahulu.
Process process = Runtime.getRuntime().exec( "javac -classpath .;Client.jar " + path ); BufferedReader reader = new BufferedReader( new InputStreamReader(process.getErrorStream()) ); String line = reader.readLine(); while (line!=null) { System.out.println(line); line = reader.readLine(); } reader.close(); try { process.waitFor(); } catch (InterruptedException iex) { } 3. Client.class mempersiapkan jalinan-jalinan (threads) Uploader.class, yaitu
objek-objek thread yang akan digunakan untuk mengirimkan berkas
terkompilasi pada proses 2 kepada Server.class.
Thread uploaders[] = new Thread[config.getServers()]; for (int i=0; i<uploaders.length; i++) { uploaders[i] = new Uploader(this, config.getServer()[i], function, bytes, config.getPort()[i]); } 4. Client.class mengaktifkan semua jalinan Uploader.class, dan selanjutnya
masing-masing jalinan inilah yang melakukan proses pengiriman berkas
terkompilasi pada proses 3 kepada Server.class.
for (int i=0; i<uploaders.length; i++) {
39Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
uploaders[i].start(); } wait(uploaders); 5. Setelah semua jalinan Uploader.class selesai melaksanakan tugasnya,
Client.class membuka berkas implementasi fungsi yang akan diintegralkan,
lalu menyimpan definisi kelasnya.
Class resource = Class.forName(function); 6. Client.class mempersiapkan jalinan-jalinan Worker.class, yaitu objek-objek
thread yang akan digunakan untuk mengevaluasi nilai integrasi. long res = config.getPoints()/config.getServers(); long rem = config.getPoints()%config.getServers(); Thread workers[] = new Thread[config.getServers()]; for (int i=0; i<workers.length; i++) { workers[i] = new Worker( this, config.getServer()[i], (Computable) resource.newInstance(), config.getBounds(), res + (i<rem? 1:0), config.getPort()[i] ); } 7. Client.class mengaktifkan semua jalinan Worker.class, dan selanjutnya
masing-masing jalinan inilah yang melakukan proses pengiriman data yang
diperlukan dalam proses integrasi, dan sekaligus menunggu proses kalkulasi
yang dilakukan di tiap-tiap Server.class.
for (int i=0; i<uploaders.length; i++) { workers[i].start(); } wait(workers); 8. Setelah semua jalinan Worker.class selesai melaksanakan tugasnya,
Client.class menampilkan hasil integrasi beserta total waktu eksekusinya.
System.out.println("Final result = " + value/config.getPoints()); System.out.println("Total time = " + time + " ms"); 5.2.1.2. Proses Server 1. Server.class mempersiapkan layanan CORBA pada port yang telah
ditentukan.
40Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
int pos = args[0].indexOf(":"); String host = args[0].substring(0, pos).trim(); String port = args[0].substring(pos+1, args[0].length()).trim(); Properties props = new Properties(); props.put("org.omg.CORBA.ORBInitialPort", this.port); props.put("org.omg.CORBA.ORBInitialHost", this.host );
2. Server.class membuat object ORB dan melakukan inisialisasi dengan host dan
port yang telah ditentukan.
ORB orb = ORB.init(args, props);
3. Server.class membuat reference ke rootpoa dan mengaktifkan POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootpoa.the_POAManager().activate();
4. Server.class membuat servant dan mendaftakannya ke ORB.
EngineImpl engineImpl = new EngineImpl(); engineImpl.setORB(orb);
5. Server.class membuat tie dan mendelegasikan servant yang telah dibuat
sebelumnya.
EnginePOATie tie = new EnginePOATie(engineImpl, rootpoa);
6. Server.class membuat object yang mereferensi ke object tie dan
mengaktifkannya.
Engine href = tie._this(orb);
7. Server.class mendapatkan root naming context
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
8. Server.class melakukan binding terhadap object yang direferensikan pada
naming context dan menjalankan ORB.
String name = "TA"; NameComponent path[] = ncRef.to_name( name ); ncRef.rebind(path, href); orb.run();
41Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
5.2.2. Proses CORBA pada Aplikasi Multiplication Local Object yang dalam hal ini diwakili oleh WorkerMatrix dan UploaderMatrix
meminta metoda dari remote object yang terdapat di server, yaitu EngineImpl.
Objek WorkerMatrix dan UploaderMatrix meminta metoda dari EngineImpl
melalui ORB. ORB kemudian mengkomunikasikan permintaan dari
WorkerMatrix dan UploaderMatrix kemudian menerima nilai yang dihasilkan dari
metoda ini untuk dikirim kepada ORB. Selanjutnya ORB mengirim nilai tersebut
kepada WorkerMatrix dan UploaderMatrix.
5.2.2.1. Proses Klien 1. ClientMatrix.class membuka berkas konfigurasi, menyimpan semua nilai
properti ke dalam objek config.
ConfigMatrix config = new Config(file); 2. ClientMatrix.class membuka berkas implementasi fungsi yang akan
diintegralkan, menyimpan isi berkas biner tersebut dalam memori.
byte bytes[] = getBytes(function + ".class");
Bila ternyata berkas ini masih berupa kode sumber (source code), maka
ClientMatrix.class akan melakukan proses kompilasi terlebih dahulu.
Process process = Runtime.getRuntime().exec( "javac -classpath .;imcad-client.jar " + path ); BufferedReader reader = new BufferedReader( new InputStreamReader(process.getErrorStream()) ); String line = reader.readLine(); while (line!=null) { System.out.println(line); line = reader.readLine(); } reader.close(); try { process.waitFor(); } catch (InterruptedException iex) { }
42Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
3. ClientMatrix.class mempersiapkan jalinan-jalinan (threads)
UploaderMatrix.class, yaitu objek-objek thread yang akan digunakan untuk
mengirimkan berkas terkompilasi pada proses 2 kepada ServerMatrix.class.
Thread uploaders[] = new Thread[config.getServers()]; String host[] = new String[jml_server]; for (int i=0; i<jml_server; i++) { uploaders[i] = new UploaderMatrix(this, config.getServer()[i], function, bytes, config.getPort()[i]); }
4. Client.class mengaktifkan semua jalinan UploaderMatrix.class, dan
selanjutnya masing-masing jalinan inilah yang melakukan proses pengiriman
berkas terkompilasi pada proses 3 kepada ServerMatrix.class.
for (int i=0; i<uploaders.length; i++) { uploaders[i].start(); } wait(uploaders); 5. Client.class mempersiapkan jalinan-jalinan Worker.class, yaitu objek-objek
thread yang akan digunakan untuk mengevaluasi nilai integrasi. res = dimensi[0][0]/jml_server; rem = dimensi[0][0]%jml_server; Thread workers[] = new Thread[jml_server]; submatrix1 = new matrix[jml_server]; submatrix2 = new matrix(); //separate matrix into several submatrix //-------------------------------------- int index1 = 0; int index2 = 0; for(index1=0; index1<rem; index1++ ) { submatrix1[index1] = new matrix(); submatrix1[index1].row = new vector[res+1]; for( int i=0; i<=res; i++ ) { submatrix1[index1].row[i] = new vector(); submatrix1[index1].row[i].column = new double[dimensi[0][1]]; submatrix1[index1].row[i].column = matrix1[index2]; index2++; } } while( index1<jml_server ) { submatrix1[index1] = new matrix(); submatrix1[index1].row = new vector[res]; for( int i=0; i<res; i++ ) { submatrix1[index1].row[i] = new vector(); submatrix1[index1].row[i].column = new double[dimensi[0][1]]; submatrix1[index1].row[i].column = matrix1[index2]; index2++; } index1++; }
43Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
submatrix2.row = new vector[dimensi[1][1]]; for( int i=0; i<dimensi[1][1]; i++ ) { submatrix2.row[i] = new vector(); submatrix2.row[i].column = new double[dimensi[1][1]]; submatrix2.row[i].column = matrix2[i];
} result = new double[dimensi[0][0]][dimensi[1][1]]; for (int i=0; i<jml_server; i++) { partisi[i][0] = submatrix1[i].row.length; partisi[i][1] = dimensi[1][1]; partisi[i][2] = dimensi[0][1]; partisi[i][3] = i; workers[i] = new WorkerMatrix( this, config.getServer()[i], function, submatrix1[i] ,submatrix2, partisi[i], config.getPort()[i] ); }
6. ClientMatrix.class mengaktifkan semua jalinan WorkerMatrix.class, dan
selanjutnya masing-masing jalinan inilah yang melakukan proses pengiriman
data yang diperlukan dalam proses integrasi, dan sekaligus menunggu proses
kalkulasi yang dilakukan di tiap-tiap ServerMatrix.class.
for (int i=0; i<uploaders.length; i++) { workers[i].start(); } wait(workers); 7. Setelah semua jalinan WorkerMatrix.class selesai melaksanakan tugasnya,
ClientMatrix.class menampilkan hasil integrasi beserta total waktu
eksekusinya.
System.out.println("Total Time = " + time + " ms"); System.out.println(""); System.out.println("Matrix Result"); printMatrix(result); 5.2.2.2. Proses Server 1. ServerMatrix.class mempersiapkan layanan CORBA pada port yang telah
ditentukan.
int pos = args[0].indexOf(":"); String host = args[0].substring(0, pos).trim(); String port = args[0].substring(pos+1, args[0].length()).trim(); Properties props = new Properties(); props.put("org.omg.CORBA.ORBInitialPort", this.port); props.put("org.omg.CORBA.ORBInitialHost", this.host );
44Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
2. ServerMatrix.class membuat object ORB dan melakukan inisialisasi dengan
host dan port yang telah ditentukan.
ORB orb = ORB.init(args, props);
3. ServerMatrix.class membuat reference ke rootpoa dan mengaktifkan
POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootpoa.the_POAManager().activate();
4. ServerMatrix.class membuat servant dan mendaftakannya ke ORB.
EngineImpl engineImpl = new EngineImpl(); engineImpl.setORB(orb);
5. ServerMatrix.class membuat tie dan mendelegasikan servant yang telah
dibuat sebelumnya.
EnginePOATie tie = new EnginePOATie(engineImpl, rootpoa);
6. ServerMatrix.class membuat object yang mereferensi ke object tie dan
mengaktifkannya.
Engine href = tie._this(orb);
7. ServerMatrix.class mendapatkan root naming context
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
8. ServerMatrix.class melakukan binding terhadap object yang direferensikan
pada naming context dan menjalankan ORB.
String name = "TA"; NameComponent path[] = ncRef.to_name( name ); ncRef.rebind(path, href); orb.run();
45Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
BAB 6
PENGGUNAAN APLIKASI Aplikasi IMCAD dan Matrix Multiplication merupakan aplikasi berbasis java
yang dibangun untuk melakukan komputasi integrasi Monte Carlo dan perkalian
matrix secara paralel. Untuk melakukan komputasi paralel dari suatu persamaan,
diperlukan Java Development Kit (JDK)/Java Runtime Environment (JRE) yang
diinstal pada komputer klien maupun server. Eksperimen ini menggunakan
J2SDK-1.4.0 versi window. JDK telah memuat package RMI dan package
CORBA secara built in. Selain JDK/JRE pada klien dan server masing masing
ditempatkan file jar dan security policy untuk rmi (java.policy). Yang perlu
didefinisikan untuk setiap persamaan yang akan dihitung adalah satu file java
untuk definisi dari persamaan (kemudian dikompilasi menjadi file class) dan satu
file konfigurasi (.conf).
Klien Server
1. JDK /JRE 2. Client.jar -Client.class -Computable.class -Config.class -Engine_Stub.class -Service.class -Uploader.class -Worker.class 3. java.policy 4. Pi.class 5. Pi.conf 6. Torus.class 7. Torus.conf 8. Gauss.class 9. Gauss.conf10. MatrixMultiplication.class11. MatrixMultiplication.conf
1.JDK /JRE2.Server.jar -Computable.class -Engine.class -Engine_Skel.class -Engine_Stub.class -Server.class -Service.class3.java.policy
Gambar 6.1 File Aplikasi RMI yang diperlukan pada klien dan server
46Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
IntegrationEngine_Skel.class dan Integration_Stub.class adalah dua class
pendukung dan didapatkan dari rmi compiler (rmic) Engine.class (penjelasan
mengenai rmi compiler lihat Seshadri [2000], Solmz and Steeb [1998]).
Klien Server1.JDK /JRE2.Client.jar -Client.class -Computable.class -Config.class -Uploader.class -Worker.class -Package EngineApp3.Pi.class4.Pi.conf5.Torus.class6.Torus.conf7.Gauss.class8.Gauss.conf9.MatrixMultiplication.class10.MatrixMultiplication.conf
1.JDK /JRE2.server.jar -Computable.class -Engine.class -Server.class -Package EngineApp
Gambar 6.2 File Aplikasi CORBA yang diperlukan pada klien dan server
Package EngineApp merupakan package yang dihasilkan secara otomatis pada
saat kompilasi script IDL dan digunakan sebagai alat bantu komunikasi antara
server dan client.
5.1. Integral Monte Carlo
Misalkan akan dilakukan penghitungan volume torus yang didefinisikan oleh
persamaan sebagai berikut :
dengan =
1 4 4
( )⎪⎩
⎪⎨⎧
⋅⋅
<+⎟⎠⎞⎜
⎝⎛ −+⋅⋅=
selainnyajika
xxxjikaxxxf,0
13,1),,(2
2
22
12
0210 ∫ ∫
− −
( xxV ∫1 3 1
210210 ),, dxdxdxxf
47Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Proses penghitungan akan dilakukan dengan teknik integrasi Monte Carlo, dengan
banyaknya titik bangkitan N=106, yang akan didistribusikan pada 3 PC server
dengan IP address 152.118.49.10, 152.118.49.15, dan 152.118.49.20. Port yang
akan digunakan pada tiap-tiap server adalah 666.
Urutan prosedur aplikasi RMI untuk menggunakan IMCAD adalah sebagai
berikut :
1. Bila aplikasi server belum aktif, maka aktifkan aplikasi server dalam jendela
console pada setiap PC server terlebih dahulu dengan perintah sebagai berikut:
java -classpath .;[jar_file_name] Server [Server IP Address]:[Port]
- pada server 1 : java -classpath .;Server.jar Server 152.118.49.10:666 - pada server 2 : java -classpath .;Server.jar Server 152.118.49.15:666 - pada server 3 : java -classpath .;Server.jar Server 152.118.49.20:666
2. Definisikan kelas Torus seperti di bawah ini, selanjutnya simpan sebagai
berkas Torus.java:
public class Torus implements Computable {
public double compute(double x[]) { double arg = Math.sqrt(x[0]*x[0]+x[1]*x[1])-3; return (x[2]*x[2]+arg*arg<1)?1.0:0.0; } }
Selanjutnya, aplikasi client akan melakukan kompilasi otomatis dari torus.java
menjadi torus.class
3. Definisikan konfigurasi IMCAD seperti di bawah ini, selanjutnya simpan
sebagai berkas torus.conf (jumlah titik bangkitan N=106 dan didistribusikan
kepada 4 server dengan masing masing 106/4 ):
# Computable implementation class function=Torus
# File type : true if file has been compiled, otherwise false compiled=false
# number of function arguments dimension=3
48Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
# boundaries of integration bounds[0]=1.0,4.0 bounds[1]=-3.0,4.0 bounds[2]=-1.0,1.0
# number of generated points points=1000000
# number of servers servers=3
# list of servers server[0]=152.118.49.10:666 server[1]=152.118.49.15:666 server[2]=152.118.49.20:666
4. Aktifkan aplikasi client dalam jendela console pada PC klien dengan perintah
sebagai berikut :
java -classpath .;[jar_file_name] Client [config_file_name]
java -classpath .;Client.jar Client torus.conf
Hasil dari proses integrasi dan waktu eksekusi akan muncul pada PC klien.
Urutan prosedur aplikasi CORBA untuk menggunakan IMCAD adalah sebagai
berikut :
1. Aktifkan ORB daemon yang berisi proses bootstrap service dalam jendela
console pada setiap PC server dengan perintah sebagai berikut :
orbd -ORBInitialHost [IP Server] –ORBInitialPort [Port]
orbd –ORBInitialHost 152.118.49.10 –ORBInitialPort 666
2. Bila aplikasi server belum aktif, maka aktifkan aplikasi server dalam jendela
console pada setiap PC server terlebih dahulu dengan perintah sebagai berikut:
java -classpath .;[jar_file_name] Server [IP Server]:[Port]
- pada server 1 : java -classpath .;Server.jar Server 152.118.49.10:666 - pada server 2 : java -classpath .;Server.jar Server 152.118.49.15:666 - pada server 3 : java -classpath .;Server.jar Server 152.118.49.20:666
3. Definisikan kelas Torus seperti di bawah ini, selanjutnya simpan sebagai
berkas Torus.java:
49Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
public class Torus implements Computable {
public double compute(double x[]) { double arg = Math.sqrt(x[0]*x[0]+x[1]*x[1])-3; return (x[2]*x[2]+arg*arg<1)?1.0:0.0; } }
Selanjutnya, aplikasi client akan melakukan kompilasi otomatis dari torus.java
menjadi torus.class
4. Definisikan konfigurasi IMCAD seperti di bawah ini, selanjutnya simpan
sebagai berkas torus.conf (jumlah titik bangkitan N=106 dan didistribusikan
kepada 4 server dengan masing masing 106/4 ):
# Computable implementation class function=Torus
# File type : true if file has been compiled, otherwise false compiled=false
# number of function arguments dimension=3
# boundaries of integration bounds[0]=1.0,4.0 bounds[1]=-3.0,4.0 bounds[2]=-1.0,1.0
# number of generated points points=1000000
# number of servers servers=3
# list of servers server[0]= 152.118.49.10:666 server[1]= 152.118.49.15:666 server[2]= 152.118.49.20:666
5. Aktifkan aplikasi client dalam jendela console pada PC klien dengan perintah
sebagai berikut :
java -classpath .;[jar_file_name] imcad.client.Client [config_file_name]
java -classpath .;Client.jar Client torus.conf
Hasil dari proses integrasi dan waktu eksekusi akan muncul pada PC klien.
50Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
6.2. Perkalian Matrik (Matrix Multiplication)
Misalkan akan dilakukan penghitungan volume torus yang didefinisikan oleh
persamaan sebagai berikut :
A B
X
Proses penghitungan akan dilakukan dengan teknik pembuatan sub matrik dari
matrix A, dengan banyaknya sub matrik (Jumlah row Matrik A / Jumlah Server),
yang akan didistribusikan pada 3 PC server dengan IP address 152.118.49.10,
152.118.49.15, dan 152.118.49.20. Port yang akan digunakan pada tiap-tiap
server adalah 666.
Urutan prosedur aplikasi RMI untuk menggunakan Matrix Multiplication adalah
sebagai berikut :
1. Bila aplikasi server belum aktif, maka aktifkan aplikasi server dalam jendela
console pada setiap PC server terlebih dahulu dengan perintah sebagai berikut:
java -classpath .;[jar_file_name] Server [IP Server]:[Port]
- pada server 1 : java -classpath .;Server.jar Server 152.118.49.10:666 - pada server 2 : java -classpath .;Server.jar Server 152.118.49.15:666 - pada server 3 : java -classpath .;Server.jar Server 152.118.49.20:666
2. Definisikan kelas MatrixMultiplication seperti di bawah ini, selanjutnya
simpan sebagai berkas MatrixMultiplication.java:
654321
2222
2
2
51Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
public class MatrixMultiplication implements ComputableMatrix { public double compute(double x[], double y[], int index) { double result = 0.0; for( int i=0; i < index ; i++ ) { result = result + (x[i]*y[i]); } return result; } }
Selanjutnya, aplikasi client akan melakukan kompilasi otomatis dari
MatrixMultiplication.java menjadi MatrixMultiplication.class
3. Definisikan konfigurasi Matrix seperti di bawah ini, selanjutnya simpan
sebagai berkas matrix.conf
# Computable implementation class function=MatrixMultiplication # File type : true if file has been compiled, otherwise false compiled=false # number of row and column dimension[0]=3,2 dimension[1]=2,3 # content of matrix matrix[0]=1,2;3,4;5,6; matrix[1]=2,2,2;2,2,2; # number of servers servers=3 # list of servers server[0]=152.118.49.10:666 server[0]=152.118.49.15:666 server[0]=152.118.49.20:666
4. Aktifkan aplikasi client dalam jendela console pada PC klien dengan perintah
sebagai berikut :
java -classpath .;[jar_file_name] Client [config_file_name]
java -classpath .;Client.jar Client Matrix.conf
Hasil dari proses perkalian matrix dan waktu eksekusi akan muncul pada PC
klien.
52Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Urutan prosedur aplikasi CORBA untuk menggunakan Matrix Multiplication
adalah sebagai berikut :
1. Bila aplikasi server belum aktif, maka aktifkan aplikasi server dalam jendela
console pada setiap PC server terlebih dahulu dengan perintah sebagai berikut:
java -classpath .;[jar_file_name] ServerMatrix [IP Server]:[Port]
- pada server 1 : java -classpath .;Server.jar ServerMatrix 152.118.49.10:666 - pada server 2 : java -classpath .;Server.jar ServerMatrix 152.118.49.15:666 - pada server 3 : java -classpath .;Server.jar ServerMatrix 152.118.49.20:666
2. Definisikan kelas MatrixMultiplication seperti di bawah ini, selanjutnya
simpan sebagai berkas MatrixMultiplication.java:
public class MatrixMultiplication implements ComputableMatrix { public double compute(double x[], double y[], int index) { double result = 0.0; for( int i=0; i < index ; i++ ) { result = result + (x[i]*y[i]); } return result; } }
Selanjutnya, aplikasi client akan melakukan kompilasi otomatis dari
MatrixMultiplication.java menjadi MatrixMultiplication.class
3. Definisikan konfigurasi Matrix seperti di bawah ini, selanjutnya simpan
sebagai berkas matrix.conf:
# Computable implementation class function=MatrixMultiplication # File type : true if file has been compiled, otherwise false compiled=false # number of row and column dimension[0]=3,2 dimension[1]=2,3 # content of matrix matrix[0]=1,2;3,4;5,6; matrix[1]=2,2,2;2,2,2; # number of servers servers=3
53Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
# list of servers server[0]=152.118.49.10:666 server[0]=152.118.49.15:666 server[0]=152.118.49.20:666
4. Aktifkan aplikasi client dalam jendela console pada PC klien dengan perintah
sebagai berikut :
java -classpath .;[jar_file_name] imcad.client.Client [config_file_name]
java -classpath .;Client.jar ClientMatrix matrix.conf
Hasil dari proses perkalian matrix dan waktu eksekusi akan muncul pada PC
klien.
54Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
BAB 7
HASIL KOMPUTASI
Eksperimen komputasi menggunakan persamaan yang telah dibahas pada Bab 3,
yang kemudian didistribusikan kepada masing-masing server menggunakan
jaringan komputer. Jaringan komputer yang digunakan menggunakan topologi
star dan komputer yang digunakan mempunyai spesifikasi sebagai berikut:
Server I II III
Processor AMD 1.4 GHz AMD 1.9 GHz PENTIUM IV 1.2 GHz
OS Windows Advance Server
2000
Windows 2000
Professional
Windows 98 SE
Tabel 7.1 Spesifikasi komputer yang digunakan
Pengukuran waktu yang dihasilkan dibagi menjadi beberapa golongan, yaitu :
1. Pengukuran waktu yang dihasilkan di komputer klien
2. Pengukuran waktu yang dihasilkan di masing-masing komputer server
3. Pengukuran waktu yang dihasilkan dari perhitungan antara waktu yang
dihasilkan di komputer klien dan waktu yang dihasilkan di komputer
server.
Semua waktu yang dihasilkan dalam bentuk (ms). Untuk melihat definisi ukuran
waktu dapat dilihat di Appendix.
Hasil eksperimen menunjukkan adanya perbedaan waktu yang tidak terlalu
signifikan dalam penggunaan CORBA dan RMI. Namun, secara umum CORBA
mempunyai kecepatan yang cenderung lebih cepat dibandingkan RMI bila
55Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
eksperimen yang dilakukan dalam skala yang besar dan sebaliknya. Hal ini dapat
dilihat dari contoh yang ada dibawah ini.
RMI CORBA No of PC's 1 2 3 1 2 3
Loading Configuration 121.00 132.67 116.00 3.33 22.67 3.33Loading bytecodes 16.67 0.00 16.67 0.00 2.67 0.00Preparing Uploaders 247.33 331.50 301.00 0.00 0.00 0.00Starting Uploaders 32.00 32.17 37.33 426.00 490.67 424.00Loading class definition 0.00 0.00 0.00 0.00 0.00 0.00Preparing Workers 3.33 13.33 11.67 0.00 0.00 3.33Execution Time 3,924.00 2,137.08 1,478.67 4,323.67 2,103.25 1,399.22Starting Workers 3,929.33 2,891.83 2,344.00 4,332.33 2,600.67 1,762.33Total Time 4,349.67 3,401.50 2,826.67 4,761.67 3,116.67 2,193.00
Tabel 7.2 Runtime dari aplikasi imcad untuk volume torus dengan menggunakan 5x106 titik bangkitan.
Contoh ini diambil dari hasil eksperimen yang memperlihatkan fenomena yang
sering terjadi pada saat eksperimen untuk membantu penjelasan, untuk data lebih
lengkapnya dapat dilihat pada halaman Appendix.
Dari contoh tersebut dapat terlihat bahwa bila kita membandingkan total time
yang dihasilkan oleh RMI dan CORBA, maka CORBA akan terlihat lebih cepat
secara umum, tetapi tidak dalam semua hal. CORBA membutuhkan waktu yang
cukup lama dalam melakukan pengiriman data. Ini dapat dilihat dari waktu yang
dihasilkan pada saat starting uploaders. Hal tersebut disebabkan karena CORBA
mempunyai mapping yang terbatas untuk tipe data yang ada di dalam
programming, sehingga membuat CORBA harus mapping ke dalam type data
baru (structure/class). Itu bisa menjadi salah satu kelemahan dari CORBA.
56Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Berikut ini merupakan hasil akselerasi (percepatan) yang di dapat dari eksperimen.
Angka 1, 2, dan 3 pada header tabel menunjukan jumlah komputer yang
digunakan.
7.1. Akselerasi Total Time dari Integrasi Numeric dan Besaran Dimensi
Matrik yang Digunakan.
Akselerasi ini didapat dengan membandingkan total time yang dihasilkan dari
masing-masing metode. Pada saat perhitungan akselerasi, total time dengan
jumlah komputer 1 buah akan menjadi ukuran pembagi (patokan) untuk total time
yang lain sehingga akselerasi dengan jumlah komputer 1 buah pasti akan
menghasilkan 1,00.
RMI CORBA No of PC's 1 2 3 1 2 3
estimasi pi (π) 1.00 1.17 1.57 1.00 1.52 1.89
volume torus 1.00 1.28 1.54 1.00 1.53 2.17
normal baku (Φ) 1.00 1.26 1.48 1.00 1.47 1.96 Tabel 7.1.1 Akselarasi Total Time dari integrasi numeric yang digunakan dengan
jumlah titik bangkingan 5x106
RMI CORBA
No of PC's 1 2 3 1 2 3 estimasi pi (π) 1.00 1.19 1.70 1.00 1.67 2.36
volume torus 1.00 1.25 1.75 1.00 1.65 2.13
normal baku (Φ) 1.00 1.25 1.61 1.00 1.66 2.41 Tabel 7.1.2 Akselarasi Total Time dari integrasi numeric yang digunakan dengan
jumlah titik bangkingan 5x107
RMI CORBA
No of PC's 1 2 3 1 2 3 estimasi pi (π) 1.00 1.56 1.87 1.00 1.60 1.97
volume torus 1.00 1.56 1.90 1.00 1.58 1.84
normal baku (Φ) 1.00 1.56 1.91 1.00 1.59 1.89 Tabel 7.1.3 Akselarasi Total Time dari integrasi numeric yang digunakan dengan
jumlah titik bangkingan 5x108
57Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
RMI CORBA No of PC's 1 2 3 1 2 3
Matrix 100 x 100 1.00 0.80 0.81 1.00 1.27 0.84Matrix 1000 x 1000 1.00 1.63 1.77 1.00 1.50 1.84
Tabel 7.1.4 Akselarasi Total Time perkalian Matrix masing-masing besaran matrik.
Dari tabel-tabel tersebut terlihat bahwa dalam sistem terdistribusi, bertambahnya
jumlah komputer yang digunakan akan berbanding lurus dengan kecepatan
penyelesaian suatu tugas. Hal ini disebabkan karena tugas tersebut dibagi menjadi
beberapa bagian kecil sejumlah dengan server yang digunakan dan di eksekusi
secara bersamaan sehingga meningkatkan performance penyelesaian suatu tugas.
7.2. Akselerasi Total Time RMI vs CORBA.
Akselerasi ini didapat dengan membandingkan total time yang dihasilkan dengan
menggunakan Java RMI dan total time yang dihasilkan dengan menggunakan
Java CORBA sesuai dengan jumlah komputer yang digunakan. Pada saat
perhitungan akselerasi, total time dengan menggunakan Java RMI akan menjadi
ukuran pembagi (patokan) untuk total time yang menggunakan Java CORBA.
CORBA/RMI
No of PC's 1 2 3 estimasi pi (π) 0.92 1.19 1.10
volume torus 0.91 1.09 1.29
normal baku (Φ) 0.99 1.15 1.30
Tabel 7.2.1 Akselarasi Total Time Corba/RMI dari integrasi numeric yang digunakan dengan jumlah titik bangkingan 5x106
58Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Tabel 7.2.2 Akselarasi Total Time Corba/RMI dari integrasi numeric yang digunakan dengan jumlah titik bangkingan 5x107
Tabel 7.2.3 Akselarasi Total Time Corba/RMI dari integrasi numeric yang digunakan dengan jumlah titik bangkingan 5x108
CORBA/RMI No of PC's 1 2 3
estimasi pi (π) 0.94 1.32 1.30
volume torus 0.93 1.22 1.13
normal baku (Φ) 0.94 1.25 1.42
CORBA/RMI No of PC's 1 2 3
estimasi pi (π) 1.14 1.17 1.20
volume torus 1.09 1.10 1.06
normal baku (Φ) 1.10 1.13 1.09
CORBA/RMI No of PC's 1 2 3
matrix 100 x 100 0.66 1.06 0.69 matrix 1000 x 1000 0.95 0.87 0.99
Tabel 7.2.4 Akselarasi Total Time Corba/RMI dari perkalian matrik masing-masing besaran matrik
Dari tabel-tabel tersebut terlihat bahwa Java CORBA mempunyai performance
yang lebih tinggi dibandingkan dengan menggunakan Java RMI dalam
menyelesaikan suatu tugas di dalam sistem terdistribusi.
7.3. Akselerasi CPU Time dari Integrasi Numerik dan Besaran Dimensi
Matrik yang Digunakan.
Total Time merupakan penjumlahan dari hasil beberapa pengukuran waktu yaitu
loading configuration, loading bytecodes, preparing uploaders, starting uploaders,
59Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
loading class definition, preparing workers, dan starting workers. Hasil
pengukuran waktu seperti pada starting uploaders dan starting workers memiliki
over head yang berupa communication time. Untuk itu kondisi ideal komputasi
parallel hanya melihat pemakaian CPU selama proses.
Akselerasi ini didapat dengan membandingkan CPU time yang dihasilkan dari
integrasi numeric yang digunakan. Pada saat perhitungan akselerasi, CPU time
dengan jumlah komputer 1 buah akan menjadi ukuran pembagi (patokan) untuk
CPU time yang lain sehingga akselerasi dengan jumlah komputer 1 buah pasti
akan menghasilkan 1,00.
RMI CORBA No of PC's 1 2 3 1 2 3
estimasi pi (π) 1.00 1.68 2.76 1.00 1.99 2.91
volume torus 1.00 1.84 2.81 1.00 2.09 3.19
normal baku (Φ) 1.00 1.77 2.67 1.00 1.99 3.01 Tabel 7.3.1 Akselarasi CPU Time integrasi numeric yang digunakan dengan
jumlah titik bangkingan 5x106
RMI CORBA
No of PC's 1 2 3 1 2 3 estimasi pi (π) 1.00 1.65 2.64 1.00 2.02 3.00
volume torus 1.00 1.71 2.68 1.00 2.01 2.88
normal baku (Φ) 1.00 1.72 2.58 1.00 1.99 3.00 Tabel 7.3.2 Akselarasi CPU Time integrasi numeric yang digunakan dengan
jumlah titik bangkingan 5x107
RMI CORBA
No of PC's 1 2 3 1 2 3 estimasi pi (π) 1.00 2.10 3.01 1.00 1.94 2.76
volume torus 1.00 2.09 3.01 1.00 1.94 2.69
normal baku (Φ) 1.00 2.08 3.01 1.00 1.92 2.67 Tabel 7.3.3 Akselarasi CPU Time integrasi numeric yang digunakan dengan
jumlah titik bangkingan 5x108
60Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
RMI CORBA No of PC's 1 2 3 1 2 3
matrix 100 x 100 1.00 1.25 2.33 1.00 2.39 1.17matrix 1000 x 1000 1.00 2.02 3.06 1.00 1.97 2.96
Tabel 7.3.4 Akselarasi CPU Time perkalian matrix masing-masing besaran matrik
Dari tabel-tabel tersebut terlihat bahwa dalam sistem terdistribusi, bertambahnya
jumlah komputer yang digunakan berbanding lurus dengan kecepatan
penyelesaian suatu tugas seperti yang telah diterangkan pada akselerasi Total
Time dari integrasi numeric yang digunakan.
7.4. Akselerasi CPU Time RMI vs CORBA.
Akselerasi ini didapat dengan membandingkan CPU time yang dihasilkan dengan
menggunakan Java RMI dan CPU time yang dihasilkan dengan menggunakan
Java CORBA sesuai dengan jumlah komputer yang digunakan. Pada saat
perhitungan akselerasi, CPU time dengan menggunakan Java RMI akan menjadi
ukuran pembagi (patokan) untuk CPU time yang menggunakan Java CORBA.
CORBA/RMI No of PC's 1 2 3
estimasi pi (π) 0.92 1.09 0.97
volume torus 0.92 1.04 1.04
normal baku (Φ) 0.94 1.06 1.06
Tabel 7.4.1 Akselarasi CPU Time Corba/RMI dari integrasi numeric yang digunakan dengan jumlah titik bangkingan 5x106
61Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004
Tabel 7.4.2 Akselarasi CPU time Corba/RMI dari integrasi numeric yang digunakan dengan jumlah titik bangkingan 5x107
Tabel 7.4.3 Akselarasi CPU Time Corba/RMI dari integrasi numeric yang digunakan dengan jumlah titik bangkingan 5x108
CORBA/RMI No of PC's 1 2 3
estimasi pi (π) 0.94 1.15 1.06
volume torus 0.93 1.09 0.99
normal baku (Φ) 0.94 1.09 1.10
CORBA/RMI No of PC's 1 2 3
estimasi pi (π) 1.14 1.06 1.05
volume torus 1.09 1.01 0.98
normal baku (Φ) 1.10 1.02 0.98
CORBA/RMI No of PC's 1 2 3
matrix 100 x 100 0.76 1.45 0.38 matrix 1000 x 1000 1.00 0.98 0.97
Tabel 7.4.4 Akselarasi CPU Time Corba/RMI perkalian matrix masing-masing besaran matrik
Dari tabel-tabel tersebut terlihat bahwa Java CORBA mempunyai performance
yang lebih tinggi dibandingkan dengan menggunakan Java RMI dalam
menyelesaikan suatu tugas di dalam sistem terdistribusi.
Tabel-tabel di atas memperlihatkan bahwa pemakaian titik bangkit 107 merupakan
pemakaian data yang optimum oleh CORBA karena bila titik bangkit yang
digunakan lebih banyak, percepatannya terlihat menurun dari sebelumnya.
62Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004