no of pc's loading configuration loading bytecodes preparing uploaders starting uploaders...

57
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 remote object Remote registry access to remote object Registring remote object 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 6 Studi banding implementasi..., Iis Haryono, FASILKOM UI, 2004

Upload: budiluhur

Post on 21-Jan-2023

0 views

Category:

Documents


0 download

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