Subject: Submission to CPE (sharfile with Latex sources) Resent-Date: Fri, 06 Aug 1999 22:21:17 -0400 Resent-From: Geoffrey Fox ?gcf@npac.syr.edu? Resent-To: p_gcf@npac.syr.edu Date: Thu, 5 Aug 99 9:10:59 MET DST From: Henri Bal ?bal@cs.vu.nl? To: gcf@npac.syr.edu : This is a shar archive. Extract with sh, not csh. : This archive ends with exit, so do not worry about trailing junk. : --------------------------- cut here -------------------------- PATH=/bin:/usr/bin:/usr/ucb echo Extracting 'apps.eps' sed 's/^X//' ? 'apps.eps' ?? '+ END-OF-FILE ''apps.eps' X%!PS-Adobe-2.0 EPSF-1.2 X%%Page: 1 1 X%%BoundingBox: 166 269 446 522 X%%EndComments X197.000000 293.500000 translate X1 setlinecap 1 setlinejoin X0.700 setlinewidth X0.00 setgray X X/Jrnd { exch cvi exch cvi dup 3 1 roll idiv mul } def X/JDEdict 8 dict def XJDEdict /mtrx matrix put X/JDE { X JDEdict begin X /yrad exch def X /xrad exch def X /savematrix mtrx currentmatrix def X xrad yrad scale X 0 0 1 0 360 arc X savematrix setmatrix X end X} def X/JSTR { X gsave 1 eq { gsave 1 setgray fill grestore } if X exch neg exch neg translate X clip X rotate X 4 dict begin X pathbbox /?top exch def X /?right exch def X /?bottom exch def X ?right sub /?width exch def X newpath X currentlinewidth mul round dup X ?bottom exch Jrnd exch ?top X 4 -1 roll currentlinewidth mul setlinewidth X { ?right exch moveto ?width 0 rlineto stroke } for X end X grestore X newpath X} bind def X gsave /Helvetica findfont 9.000000 scalefont setfont X0.000000 0.000000 translate X0.700000 setlinewidth gsave newpath 0.000000 0.000000 moveto 216.000000 0.000000 lineto stroke X grestore X0.700000 setlinewidth gsave newpath 0.000000 0.000000 moveto 0.000000 216.000000 lineto stroke Xnewpath 0.000000 0.000000 moveto -5.000000 0.000000 lineto stroke Xnewpath 0.000000 14.400001 moveto -2.000000 14.400001 lineto stroke Xnewpath 0.000000 28.800001 moveto -5.000000 28.800001 lineto stroke Xnewpath 0.000000 43.200001 moveto -2.000000 43.200001 lineto stroke Xnewpath 0.000000 57.600002 moveto -5.000000 57.600002 lineto stroke Xnewpath 0.000000 72.000000 moveto -2.000000 72.000000 lineto stroke Xnewpath 0.000000 86.400002 moveto -5.000000 86.400002 lineto stroke Xnewpath 0.000000 100.800003 moveto -2.000000 100.800003 lineto stroke Xnewpath 0.000000 115.200005 moveto -5.000000 115.200005 lineto stroke Xnewpath 0.000000 129.600006 moveto -2.000000 129.600006 lineto stroke Xnewpath 0.000000 144.000000 moveto -5.000000 144.000000 lineto stroke Xnewpath 0.000000 158.400009 moveto -2.000000 158.400009 lineto stroke Xnewpath 0.000000 172.800003 moveto -5.000000 172.800003 lineto stroke Xnewpath 0.000000 187.200012 moveto -2.000000 187.200012 lineto stroke Xnewpath 0.000000 201.600006 moveto -5.000000 201.600006 lineto stroke Xnewpath 0.000000 216.000015 moveto -2.000000 216.000015 lineto stroke Xgsave -8.000000 0.000000 translate 0.000000 rotate X0 -2.700000 translate (0) dup stringwidth pop neg 0 moveto Xshow Xgrestore Xgsave -8.000000 28.800001 translate 0.000000 rotate X0 -2.700000 translate (10) dup stringwidth pop neg 0 moveto Xshow Xgrestore Xgsave -8.000000 57.600002 translate 0.000000 rotate X0 -2.700000 translate (20) dup stringwidth pop neg 0 moveto Xshow Xgrestore Xgsave -8.000000 86.400002 translate 0.000000 rotate X0 -2.700000 translate (30) dup stringwidth pop neg 0 moveto Xshow Xgrestore Xgsave -8.000000 115.200005 translate 0.000000 rotate X0 -2.700000 translate (40) dup stringwidth pop neg 0 moveto Xshow Xgrestore Xgsave -8.000000 144.000000 translate 0.000000 rotate X0 -2.700000 translate (50) dup stringwidth pop neg 0 moveto Xshow Xgrestore Xgsave -8.000000 172.800003 translate 0.000000 rotate X0 -2.700000 translate (60) dup stringwidth pop neg 0 moveto Xshow Xgrestore Xgsave -8.000000 201.600006 translate 0.000000 rotate X0 -2.700000 translate (70) dup stringwidth pop neg 0 moveto Xshow Xgrestore X/Helvetica findfont 10.000000 scalefont setfont Xgsave -24.639999 108.000000 translate 90.000000 rotate X0 0.000000 translate (speedup) dup stringwidth pop 2 div neg 0 moveto Xshow Xgrestore X grestore X gsave X gsave 0.000000 setgray X gsave 14.850001 43.660801 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -43.660801 lineto X 3.847500 -43.660801 lineto Xclosepath gsave 0.900000 setgray fill grestore Xstroke X grestore gsave 68.849998 44.640003 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -44.640003 lineto X 3.847500 -44.640003 lineto Xclosepath gsave 0.900000 setgray fill grestore Xstroke X grestore gsave 122.849998 45.792000 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -45.792000 lineto X 3.847500 -45.792000 lineto Xclosepath gsave 0.900000 setgray fill grestore Xstroke X grestore gsave 176.850006 45.792000 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -45.792000 lineto X 3.847500 -45.792000 lineto Xclosepath gsave 0.900000 setgray fill grestore Xstroke X grestore grestore X gsave 0.000000 setgray X gsave 22.950001 109.785599 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -109.785599 lineto X 3.847500 -109.785599 lineto Xclosepath gsave 0.700000 setgray fill grestore Xstroke X grestore gsave 76.949997 6.912001 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -6.912001 lineto X 3.847500 -6.912001 lineto Xclosepath gsave 0.700000 setgray fill grestore Xstroke X grestore gsave 130.949997 156.384003 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -156.384003 lineto X 3.847500 -156.384003 lineto Xclosepath gsave 0.700000 setgray fill grestore Xstroke X grestore gsave 184.949997 145.152008 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -145.152008 lineto X 3.847500 -145.152008 lineto Xclosepath gsave 0.700000 setgray fill grestore Xstroke X grestore grestore X gsave 0.000000 setgray X gsave 31.050003 171.849594 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -171.849594 lineto X 3.847500 -171.849594 lineto Xclosepath gsave 0.400000 setgray fill grestore Xstroke X grestore gsave 85.050003 71.711998 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -71.711998 lineto X 3.847500 -71.711998 lineto Xclosepath gsave 0.400000 setgray fill grestore Xstroke X grestore gsave 139.050003 167.904007 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -167.904007 lineto X 3.847500 -167.904007 lineto Xclosepath gsave 0.400000 setgray fill grestore Xstroke X grestore gsave 193.050003 146.880005 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -146.880005 lineto X 3.847500 -146.880005 lineto Xclosepath gsave 0.400000 setgray fill grestore Xstroke X grestore grestore X gsave 0.000000 setgray X gsave 39.150002 176.083206 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -176.083206 lineto X 3.847500 -176.083206 lineto Xclosepath gsave 0.000000 setgray fill grestore Xstroke X grestore gsave 93.150002 170.784012 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -170.784012 lineto X 3.847500 -170.784012 lineto Xclosepath gsave 0.000000 setgray fill grestore Xstroke X grestore gsave 147.149994 171.936005 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -171.936005 lineto X 3.847500 -171.936005 lineto Xclosepath gsave 0.000000 setgray fill grestore Xstroke X grestore gsave 201.149994 154.080002 translate 0.000000 rotate X newpath 3.847500 0.000000 moveto -3.847500 0.000000 lineto X -3.847500 -154.080002 lineto X 3.847500 -154.080002 lineto Xclosepath gsave 0.000000 setgray fill grestore Xstroke X grestore grestore X grestore X/Helvetica findfont 9.000000 scalefont setfont Xgsave 27.000002 -5.760000 translate 0.000000 rotate X0 -5.400000 translate (SOR) dup stringwidth pop 2 div neg 0 moveto Xshow Xgrestore Xgsave 81.000000 -5.760000 translate 0.000000 rotate X0 -5.400000 translate (ASP) dup stringwidth pop 2 div neg 0 moveto Xshow Xgrestore Xgsave 135.000000 -5.760000 translate 0.000000 rotate X0 -5.400000 translate (TSP) dup stringwidth pop 2 div neg 0 moveto Xshow Xgrestore Xgsave 189.000000 -5.760000 translate 0.000000 rotate X0 -5.400000 translate (IDA*) dup stringwidth pop 2 div neg 0 moveto Xshow Xgrestore X-0.000000 -0.000000 translate X86.400002 144.000000 translate X0.700000 setlinewidth gsave grestore X0.700000 setlinewidth gsave grestore X gsave X gsave 0.000000 setgray X gsave 6.120000 34.560001 translate 0.000000 rotate X newpath 0.000000 1.900000 moveto 0.000000 -1.900000 lineto X -6.120000 -1.900000 lineto X -6.120000 1.900000 lineto Xclosepath gsave 0.000000 setgray fill grestore Xstroke X grestore grestore X gsave 0.000000 setgray X gsave 6.120000 46.080002 translate 0.000000 rotate X newpath 0.000000 1.900000 moveto 0.000000 -1.900000 lineto X -6.120000 -1.900000 lineto X -6.120000 1.900000 lineto Xclosepath gsave 0.400000 setgray fill grestore Xstroke X grestore grestore X gsave 0.000000 setgray X gsave 6.120000 57.600002 translate 0.000000 rotate X newpath 0.000000 1.900000 moveto 0.000000 -1.900000 lineto X -6.120000 -1.900000 lineto X -6.120000 1.900000 lineto Xclosepath gsave 0.700000 setgray fill grestore Xstroke X grestore grestore X gsave 0.000000 setgray X gsave 6.120000 69.120003 translate 0.000000 rotate X newpath 0.000000 1.900000 moveto 0.000000 -1.900000 lineto X -6.120000 -1.900000 lineto X -6.120000 1.900000 lineto Xclosepath gsave 0.900000 setgray fill grestore Xstroke X grestore grestore X grestore Xgsave 15.300000 69.120003 translate 0.000000 rotate X0 -2.700000 translate (16 nodes, 1 cluster) dup stringwidth pop pop 0 0 moveto Xshow Xgrestore Xgsave 15.300000 57.600002 translate 0.000000 rotate X0 -2.700000 translate (64 nodes, 4 clusters) dup stringwidth pop pop 0 0 moveto Xshow Xgrestore Xgsave 15.300000 46.080002 translate 0.000000 rotate X0 -2.700000 translate (64 nodes, 4 clusters \(optimized\)) dup stringwidth pop pop 0 0 moveto Xshow Xgrestore Xgsave 15.300000 34.560001 translate 0.000000 rotate X0 -2.700000 translate (64 nodes, 1 cluster) dup stringwidth pop pop 0 0 moveto Xshow Xgrestore X-86.400002 -144.000000 translate X grestore showpage + END-OF-FILE apps.eps chmod 'u=rw,g=r,o=r' 'apps.eps' set `wc -c 'apps.eps'` count=$1 case $count in 10108) :;; *) echo 'Bad character count in ''apps.eps' ??2 echo 'Count should be 10108' ??2 esac echo Extracting 'asp_opt' sed 's/^X//' ? 'asp_opt' ?? '+ END-OF-FILE ''asp_opt' X\begin{verbatim} Xclass Sender extends Thread { X // Same as in single-cluster implementation. X} X Xpublic remote class Asp extends RemoteThread { X private int[][] tab; // The distance table. X private Asp[] coordinators; // The remote cluster coordinators. X private Sender[] waSenders; // Threads that will do the wide-area send. X X public synchronized void transfer(int[] row, int k, int owner) { X // Same as in single-cluster implementation. X } X X public synchronized void broadcast(int k, int owner) { X if(this cpu is the owner) { X // Use a separate daemon thread to send to each cluster coordinator. X for(int i=0; i?nrClusters; i++) { X waSenders[i].put(coordinators[i], row, k, owner); X } X } else { X while (tab[k] == null) wait(); X } X } X X public void run() { // computation part X // Same as in single-cluster implementation. X } X} X\end{verbatim} + END-OF-FILE asp_opt chmod 'u=rw,g=r,o=r' 'asp_opt' set `wc -c 'asp_opt'` count=$1 case $count in 1001) :;; *) echo 'Bad character count in ''asp_opt' ??2 echo 'Count should be 1001' ??2 esac echo Extracting 'asp_unopt' sed 's/^X//' ? 'asp_unopt' ?? '+ END-OF-FILE ''asp_unopt' X\begin{verbatim} Xclass Sender extends Thread { X Asp dest; X int[] row; X int k, owner X boolean filled = false; X X synchronized void put(Asp dest, int[] row, int k, int owner) { X while(filled) wait(); X this.dest = dest; X this.row = row; X this.k = k; X this.owner = owner; X filled = true; X notifyAll(); X } X X synchronized void send() { X while(!filled) wait(); X dest.transfer(row, k, owner); // do RMI to a child X filled = false; X notifyAll(); X } X X public void run() { X while(true) send(); X } X} X Xpublic remote class Asp extends RemoteThread { X private int[][] tab; // The distance table. X private Asp left, right; // My left and right successors (children) in the broadcast tree. X private Sender leftSender, rightSender; // Threads that will do the RMI to my children. X X public synchronized void transfer(int[] row, int k, int owner) { X if(left != null) leftSender.put(left, row, k, owner); X if(right != null) rightSender.put(right, row, k, owner); X tab[k] = row; X notifyAll(); // wake up thread waiting for row to arrive X } X X public synchronized void broadcast(int k, int owner) { X if(this cpu is the owner) transfer(tab[k], k, owner); X else while (tab[k] == null) wait(); // wait until the row has arrived X } X X public void run() { // computation part X int i, j, k; X X for (k = 0; k ? n; k++) { X broadcast(k, owner(k)); X for (i = LB; i ? UB; i++) // recompute my rows X if (i != k) X for (j = 0; j ? n; j++) X tab[i][j] = minimum(tab[i][j], tab[i][k] + tab[k][j]); X } X } X} X\end{verbatim} + END-OF-FILE asp_unopt chmod 'u=rw,g=r,o=r' 'asp_unopt' set `wc -c 'asp_unopt'` count=$1 case $count in 1760) :;; *) echo 'Bad character count in ''asp_unopt' ??2 echo 'Count should be 1760' ??2 esac echo Extracting 'cpe99.bib' sed 's/^X//' ? 'cpe99.bib' ?? '+ END-OF-FILE ''cpe99.bib' X@article{sarmenta++:99:bayanihan, X author = {Luis F. G. Sarmenta and Satoshi Hirano}, X title = {{Bayanihan: Building and Studying Web-Based Volunteer Computing X Systems Using Java}}, X journal = {{Future Generation Computer Systems}}, X volume = 15, X number = {5/6}, X year = 1999 X} X X X@book{freeman++:99:javaspaces, X author = {Eric Freeman and Susanne Hupfer and Ken Arnold}, X title = {{JavaSpaces, Principles, Patterns, and Practice}}, X publisher = {Addison Wesley}, X year = 1999, X isbn = {0-201-30955-6} X} X X X@techreport{javagrande:98:mpi_for_java, X author = {Bryan Carpenter and Vladimir Getov and Glenn Judd and X Tony Skjellum and Geoffrey Fox}, X title = {{MPI for Java: Position Document and Draft API Specification}}, X month = {November}, X institution = {Java Grande Forum}, X year = 1998, X type = {Technical Report}, X number = {JGF-TR-03} X} X X X@phdthesis{lee:98:kan_thesis, X author = {Suk Yong Lee}, X title = {{Supporting Guarded and Nested Atomic Actions in Distributed X Objects}}, X school = {University of California at Santa Barbara}, X type = {Master's thesis}, X month = {July}, X year = 1998 X} X X@inproceedings{topol++:98:icdcs, X author = {Brad Topol and Mustaque Ahamad and John T. Stasko}, X title = {{Robust State Sharing for Wide Area Distributed Applications}}, X booktitle = {{18th International Conference on Distributed Computing X Systems (ICDCS'98)}}, X address = {Amsterdam, The Netherlands}, X month = {May}, X year = 1998, X pages = {554--561} X} X X @article{gelernter:85:generativeness, X author = {David Gelernter}, X title = {{Generative Communication in Linda}}, X journal = toplas, X volume = 7, X number = 1, X year = 1985, X pages = {80--112} X } X X X@inproceedings{berman++:96:apples, X author = {F. Berman and R. Wolski and S. Figueira and J. Schopf and G. Shao}, X title = {{Application-level Scheduling on Distributed X Heterogeneous Networks}}, X booktitle = {Supercomputing 96}, X address = {Pittsburgh, PA}, X year = 1996, X month = nov X} X X@inproceedings{Foster:1998a, X author = {I. Foster and N. Karonis}, X title = {{A Grid-Enabled MPI: Message Passing in Heterogeneous Distributed Computing Systems}}, X booktitle = {SC'98}, X month = nov, X address = {Orlando, FL}, X year = 1998 X} X X@inproceedings{Foster:1996, X author = {I. Foster and J. Geisler and S. Tuecke}, X title = {{MPI on the I-WAY: A wide-area, multimethod implementation of the Message Passing}}, X booktitle = {MPI Developer Conference}, X year = 1996 X} X X@article{foster++:98:wide-area-mpi, X author = {I. Foster and J. Geisler and W. Gropp and N. Karonis and E. Lusk and G. Thiruvathukal and S. Tuecke}, X title = {{Wide-Area Implementation of the Message Passing Interface}}, X journal = {Parallel Computing}, X volume = 24, X number = {12--13}, X pages = {1735--1749}, X year = 1998 X} X X X X@inproceedings{Lowekamp:1996, X author = {B. Lowekamp and A. Beguelin}, X title = {{ECO: Efficient Collective Operations for Communication on Heterogeneous Networks}}, X booktitle = {International Parallel Processing Symposium}, X address = {Honolulu, HI}, X year = 1996, X pages = {399--405} X} X X@inproceedings{Banikazemi:1998, X author = {M. Banikazemi and V. Moorthy and D. Panda}, X title = {{Efficient Collective Communication on Heterogeneous Networks of Workstations}}, X booktitle = {International Conference on Parallel Processing}, X address = {Minneapolis, MN}, X pages = {460--467}, X year = 1998 X} X X@Article{Foster:1997, X author = "I. Foster and C. Kesselman", X title = "{{Globus}: {A} Metacomputing Infrastructure Toolkit}", X journal = "Int. Journal of Supercomputer Applications", X volume = "11", X number = "2", X pages = "115--128", X month = "Summer", X year = "1997", X CODEN = "IJSCFG", X ISSN = "1078-3482", X bibdate = "Thu Jun 26 18:17:48 1997", X acknowledgement = ack-nhfb, X} X X X@inproceedings{Soundararajan:1998, X author = {V. Soundararajan and M. Heinrich and B. Verghese and K. Gharachorloo and A. Gupta and J. Hennessy}, X title = {{Flexible Use of Memory for Replication/Migration in Cache-Coherent DSM Multiprocessors}}, X pages = {342--355}, X booktitle = {ISCA-98, 25th International Symposium on Computer Architecture}, X year = 1998, X month = jun X} X X@inproceedings{Weissman:1996, X title = {{A Federated Model for Schedupling in Wide-Area Systems}}, X booktitle = {5th International Symposium on High Performance Distributed Computing ({HPDC-5})}, X month = aug, X year = 1996, X author = {Jon B. Weissman and Andrew S. Grimshaw} X} X X@book{Leighton:1992, X title = {Introduction to parallel algorithms and architectures}, X location = {San Mateo, CA}, X publisher = {Morgan Kaufmann}, X year = 1992, X author = {F. Thomson Leighton} X} X X@phdthesis{Mowry:1994, X title = {Tolerating Latency Through Software-Controlled Data Prefetching}, X author = {Todd C. Mowry}, X institution = {Stanford University}, X month = mar, X year = 1994 X} X X X@article{Fillo:1997, X author = {Marco Fillo and Richard B. Gillett}, X journal = {Digital Technical Journal}, X volume = {9}, X number = {1}, X year = 1997, X title = {Architecture and Implementation of MEMORY CHANNEL2}, X note = {online at http://www.digital.com/info/DTJP03/DTJP03HM.HTM} X} X X@article{Hammond:1997, X title = "{A Single-Chip Multiprocessor}", X journal = "IEEE Computer", X author = "L. Hammond and B.A. Nayfeh and K. Olukotun", X year = "1997", X note = "Special Issue on Billion-Transistor Processors", X month = sep X} X X@inproceedings{Lumetta:1997, X author = "S.S. Lumetta and A.M. Mainwaring and D.E. Culler", X title = "Multi-Protocol Active Messages on a Cluster of {SMP}'s", X year = "1997", X month = nov, X booktitle = "SC'97", X note = "Online at http://www.supercomp.org/sc97/proceedings/" X} X X X@inproceedings{Jiang:1997, X author = "D. Jiang and G Shan and J. Singh", X title = "{Application Restructuring and Performance Portability on Shared Virtual Memory and Hardware-Coherent Multiprocessors}", X booktitle = "PPoPP-97 Symposium on Principles and Practice of Parallel Programming", X month = "June", X year = "1997" X} X X@book{Culler:1998, X author = "D. E. Culler and J. P. Singh with A. Gupta", X title = "{Parallel Computer Architecture---A hardware/software approach}", X year = "1997", X note = "preprint available from http://http.cs.berkeley.edu/\~{}culler/book.alpha/index.html", X publisher = "Morgan Kaufman" X} X X@inproceedings{Bershad:1993, X title = {{The Midway Distributed Shared Memory System}}, X author = {B.N. Bershad and M.J. Zekauskas and W.A. Sawdon}, X booktitle = {Proc. COMPCON 1993}, X year = {1993}, X pages = {528-537} X} X X@inproceedings{Cox:1994, X title = "Software versus Hardware Shared-Memory Implementation: a Case Study", X author = "A. Cox and S. Dwarkadas and P. Keheler and H. Lu and R. Rajamony and W. Zwaenepoel", X booktitle = "Proc. 21st Intern. Symp. Comp. Arch.", X pages = "106--117", X location = "Chicago, IL", X month = apr, X year = "1994" X} X X@inproceedings{Erlichson:1996, X author = "A. Erlichson and N. Nuckolls and G. Chesson and J. Hennessy", X title = "{SoftFLASH}: Analyzing the Performance of Clustered Distributed Virtual Shared Memory", X booktitle = "Proc. 7th Intern. Conf. on Arch. Support for Prog. Lang. and Oper Systems", X pages = "210--220", X location = "Boston, MA", X month = oct, X year = "1996" X} X X@inproceedings{Scales:1998, X month = feb, X year = "1998", X author = "D. J. Scales and K. Gharachorloo and A. Aggarwal", X booktitle = "HPCA-4 High-Performance Computer Architecture", X title = "Fine-Grain Software Distributed Shared Memory on {SMP} clusters", X pages = {125--137} X} X X@inproceedings{wolski:97:nws, X title = {{Dynamically Forecasting Network Performance to Support Dynamic Scheduling Using the X Network Weather Service}}, X author = {R. Wolski}, X booktitle = {6th High-Performance Distributed Computing}, X month = aug, X year = 1997, X} X X@article{MPI:1994, X title = {{MPI: A Message Passing Interface Standard}}, X author = {{MPI Forum}}, X journal = {Int. J. Supercomputer Applications}, X volume = {8}, X number = {3/4}, X year = {1994}, X note = {Version 1.1 at http://www.mcs.anl.gov/mpi/mpi-report-1.1/mpi-report.html} X} X X@inproceedings{Langendoen:1998, X month = feb, X year = "1998", X author = "K. Langendoen and R. Hofman and H. Bal", X booktitle = "HPCA-4 High-Performance Computer Architecture", X title = "Challenging Applications on Fast Networks", X pages = {125--137} X} X X@article{Chatterjee:1997, X author = "S. Chatterjee", X title = "{Requirements for Success in Gigabit Networking}", X journal = "Communications of the ACM", X year = "1997", X month = jul, X volume = "40", X number = "7", X pages = "64--73" X} X X@Article{Korf:1985, X author = "R.E. Korf", X title = "{Iterative Deepening: An Optimal Admissible Tree Search}", X journal = "Artificial Intelligence", X volume = "27", X year = 1985, X pages = "97--109" X} X X@Article{boden++:95:myrinet, X author = "N.J.~Boden and D.~Cohen and R.E.~Felderman and X A.E.~Kulawik and C.L.~Seitz and J.N.~Seizovic and W.~Su", X title = "{Myrinet: A Gigabit-per-second Local Area Network}", X journal = "IEEE Micro", X volume = "15", X number = "1", X year = 1995, X pages = "29--36", X month = feb, X} X X@InProceedings{Pakin:1995, X author = "S.~Pakin and M.~Lauria and A.~Chien", X title = "{High Performance Messaging on Workstations: X Illinois Fast Messages (FM) for Myrinet}", X booktitle = "Supercomputing '95", X address = "San Diego, CA", X year = 1995, X month = dec, X pages = "" X} X X@article{Grimshaw:1997, X title = "{The Legion Vision of a Worldwide Virtual Computer}", X author = "A.S. Grimshaw and Wm. A. Wulf", X journal = "Comm. ACM", X volume = "40", X number = "1", X month = jan, X year = "1997", X pages = "39--45", X} X X@article{Bal:1992, X title = "{Orca: A Language for Parallel Programming of Distributed Systems}", X author = "H.E. Bal and M.F. Kaashoek and A.S. Tanenbaum", X journal = "IEEE Transactions on Software Engineering", X volume = "18", X number = "3", X month = mar, X year = "1992", X pages = "190-205", X} X X X@phdthesis{Kaashoek:1992, X title = "{Group Communication in Distributed Computer Systems}", X author = "M.F. Kaashoek", X school = "Vrije Universiteit", X address = "\mbox{Amsterdam}", X month = dec, X year = "1992", X number = "Ph.D. thesis", X} X X@phdthesis{Bal:1989, X title = "{The Shared Data-Object Model as a Paradigm for Programming Distributed Systems}", X author = "H.E. Bal", X school = "Vrije Universiteit", X address = "\mbox{Amsterdam}", X month = dec, X year = "1989" X} X X X@inproceedings{Blackston:1997, X title = {Highly Portable and Efficient Implementations of Parallel Adaptive N-Body Methods}, X author = {David Blackston and Torsten Suel}, X booktitle = {SC'97}, X month = nov, X year = {1997}, X location = {San Jose, CA}, X note = {online at http://www.supercomp.org /sc97/program/TECH/BLACKSTO/} X} X X@book{CLR, X title = {Introduction to Algorithms}, X author = {T. Cormen and C. Leiserson and R. Rivest}, X publisher = {MIT Press}, X year = {1989} X} X X@inproceedings{Lenoski:1992a, X author = {D. Lenoski and J. Laudon and T. Joe and D. Nakahira and L. Stevens and A. Gupta and J. Hennessy}, X title = {The DASH Prototype: Implementation and Performance}, X booktitle = {19th International Symposium on Computer Architecture}, X pages = {92-103}, X location = {Gold Coast, Australia}, X month = May, X year = 1992 X} X X X X@inproceedings{Anderson:1995, X title = {Data and Computation Transformations for Multiprocessors}, X author = {J. Anderson and S. Amarasinghe and M. Lam}, X booktitle = {5th Symposium on Principles and Practice of Parallel Processing}, X month = jul, X year = 1995 X} X X X@inproceedings{Bennett:1991, X title = {Implementation and Performance of Munin}, X author = {J. Bennett and J. Carter and W. Zwaenepoel}, X booktitle = {13th Symposium on Operating Systems Principles}, X pages = {152-164}, X month = oct, X year = 1991 X} X X@article{Carter:1995, X title = {{Techniques for Reducing Consistency-Related Communication in Distributed Shared Memory System}}, X author = {J. Carter and J. Bennett and W. Zwaenepoel}, X journal = {ACM Transactions on Computer Systems}, X volume = 13, X numer = 3, X pages = {205--244}, X month = aug, X year = 1995 X} X X@inproceedings{Johnson:1995, X author = {K. Johnson and F. Kaashoek and D. Wallach}, X title = {CRL: High-Performance All-Software Distributed Shared Memory}, X booktitle = {Symposium on Operating Systems Principles 15}, X pages = {213-228}, X month = dec, X year = {1995} X} X X@article{Singh:1995jpdc, X title = {Load Balancing and Data Locality in Adaptive Hierarchical N-body Methods: Barnes-Hut, Fast Multipole and Radiosity}, X author = {J. Singh and C. Holt and T. Totsuka and A. Gupta and J. Hennessy}, X journal = {Journal of Parallel and Distributed Computing}, X month = jun, X year = {1995} X} X X@techreport{Adve:1994, X title = {Replacing Locks by Higher-Level Primitives}, X author = {S. Adve and A. Cox and S. Dwarkadas and W. Zwaenepoel}, X institution = {Rice University}, X number = {TR94-237}, X note = {online at http://www.cs.rochester.edu /u/sandhya/publications.html}, X year = {1994} X} X X@inproceedings{Grama:1994, X title = {Scalable Parallel Formulations of the Barnes-Hut Algorithm for n-Body Simulations}, X author = {A. Grama and V. Kumar and A. Sameh}, X booktitle = {Supercomputing '94}, X month = nov, X year = {1994}, X location = {Washington, DC} X} X X@book{Kumar:1993, X title = {Introduction to Parallel Computing: Design and Analysis of Algorithms}, X author = {V. Kumar and A. Grama and A. Gupta and G. Karypis}, X publisher = {Benjamin Cummings}, X month = nov, X year = {1993} X} X X X X@inproceedings{Warren:1993, X title = {A parallel hashed oct-tree N-body algorithm}, X author = {M. Warren and J. Salmon}, X booktitle = {Supercomputing '93}, X month = nov, X year = {1993}, X location = {Portland, OR} X} X X X X@inproceedings{Romein:1995, X title = "Parallel N-Body Simulation on a Large-Scale Homogeneous Distributed System", X author = "John W. Romein and Henri E. Bal", X booktitle = "EURO-PAR'95 Parallel Processing, Lecture Notes in Computer Science, 966", X editor = "Seif Haridi and Khayri Ali and Peter Magnusson", X publisher = "Springer-Verlag", X pages = "473--484", X address = "Stockholm, Sweden", X month = "August", X year = "1995" X} X X@article{Bal:1997, X title = "{Performance of a High-Level Parallel Language on a High-Speed Network}", X author = "H.E. Bal and R. Bhoedjang and R. Hofman and C. Jacobs X and K. Langendoen and T. R{\"u}hl and K. Verstoep", X journal = "Journal of Parallel and Distributed Computing", X month = feb, X year = "1997", X volume = 40, X number = 1, X pages = {49-64}, X} X X@article{AndersonCuller:1995, X title = "{A Case for NOW (Networks of Workstations)}", X author = "T.E. Anderson and D.E. Culler and D.A. Patterson", X journal = "IEEE Micro", X volume = "15", X month = feb, X year = "1995", X pages = "54-64", X} X X@inproceedings{Konto:1997, X author = "L. Kontothanassis and G. Hunt and R. Stets and N. Hardavellas and M. Cierniak and S. Parthasarathy and W. Meira and S. Dwarkadas and M. Scott", X title = "{VM-Based Shared Memory on Low-Latency, Remote-Memory-Access Networks}", X booktitle = "ISCA-24, Proc. 24th Annual International Symposium on Computer Architecture", X pages = "157--169", X location = "Denver, CO", X year = "1997", X month = jun X} X X X@inproceedings{Yeung:1996, X author = "D. Yeung and J. Kubiatowicz and A. Agarwal", X title = "{MGS: A Multigrain Shared Memory System}", X booktitle = "{Proceedings of the 23rd Annual International Symposium on Computer Architecture}", X pages = "45--56", X month = may, X year = 1996 X} X X@inproceedings{Stets:1997, X author = "R. Stets and S Dwarkadas and N. Hardavellas and G. Hunt and L. Kontothanassis and S. Parthasarathy and M. Scott", X title = "{Cashmere-2L}: Software Coherent Shared Memory on a Clustered Remote-Write Network", X booktitle = "Proc. 16th ACM Symp. on Oper. Systems Princ.", X location = "St. Malo, France", X year = "1997", X month = oct X} X X X@inproceedings{Welsh:1997, X title = "{ATM and Fast Ethernet Network Interfaces for User-level Communication}", X author = "M. Welsh and A. Basu and T. von Eicken", X booktitle = "Proceedings of the Third International Symposium on High X Performance Computer Architecture", X address = "San Antonio, Texas", X month = feb, X year = "1997", X pages = "332--342" X} X X@article{Singh:1992, X title = "{SPLASH: Stanford Parallel Applications for Shared Memory}", X author = "J.P. Singh and W-D. Weber and A. Gupta", X journal = "ACM Computer Architecture News", X volume = "20", X number = "1", X month = mar, X year = "1992", X pages = "5-44", X} X X@inproceedings{Bal:1995, X title = "{Parallel Retrograde Analysis on a Distributed System}", X author = "H.E. Bal and L.V. Allis", X booktitle = "Supercomputing '95", X location = "San Diego, CA", X month = dec, X year = "1995", X note = "Online at http://www.supercomp.org/sc95/proceedings/" X} X X@inproceedings{Jeremiassen:1995, X title = "Reducing False Sharing on Shared Memory Multiprocessors Through Compile-Time Data Transformations", X author = "T.E. Jeremiassen and S.J. Eggers", X booktitle = "{Symposium on Principles and Practice of Parallel Programming}", X month = jul, X year = 1995 X} X X X@Article{Culler:1996, X author = "D.E.~Culler and L.T.~Liu and R.P~Martin and C.O.~Yoshikawa", X title = "{Assessing Fast Network Interfaces}", X journal = "IEEE Micro", X volume = "16", X number = "1", X year = 1996, X pages = "35-43", X month = feb, X} X X X@Article{Klenke:1992, X author = "R.H. Klenke and R.D. Williams and J.H. Aylor", X title = "{Parallel-Processing Techniques for Automatic Test Pattern Generation}", X journal = "IEEE Computer", X volume = "25", X number = "1", X year = 1992, X pages = "71-84", X month = jan, X} X X X@techreport{Grimshaw:1995, X title = "{Campus-Wide Computing: Results Using Legion at the University of Virginia}", X author = "A.S. Grimshaw and A. Nguyen-Tuong and W.A. Wulf", X institution = "University of Virginia", X month = mar, X year = "1995", X number = "CS-95-19" X} X X X@inproceedings{Reinefeld:1997, X author = {A. Reinefeld and R. Baraglia and T. Decker and J. Gehring and D. Laforenza and J. Simon and T. R\"umke and F. Ramme}, X title = "{The MOL Project: An Open Extensible Metacomputer}", X booktitle = "Heterogenous computing workshop HCW'97 at IPPS'97", X month = apr, X year = "1997", X location = "Geneva" X} X X@inproceedings{Arabe:1996, X title = "{Dome: Parallel programming in a heterogeneous multi-user environment}", X author = "J. Arabe and A. Beguelin and B. Lowekamp and E. Seligman and M. Starkey and P. Stephan", X booktitle = "10th International Parallel Processing Symposium", X month = apr, X address = "Honolulu, Hawaii", X year = "1996", X pages = "218--224" X} X X@article{Overeinder:1996, X author = "B. J. Overeinder and P. M. A. Sloot and R. N. Heederik and L. O. Hertzberger", X title = "{A Dynamic Load Balancing System for Parallel Cluster Computing}", X journal = "Future Generation Computer Systems", X volume = "12", X pages = "101--115", X month = may, X year = "1996" X} X X@inproceedings{Martin:1997, X title = "{Effects of Communication Latency, Overhead, and Bandwidth in a Cluster Architecture}", X author = "R.P. Martin and A.M. Vahdat and D.E. Culler and T.E. Anderson", X booktitle = "24th Ann. Int. Symp. on Computer Architecture", X year = "1997", X month = jun, X location = "Denver, CO", X pages = "85--97", X} X X@techreport{Bilas:1996, X title = "{Shared Virtual Memory across SMP Nodes using Automatic Update: Protocols and Performance}", X author = "A. Bilas and L. Iftode and J.P. Singh", X institution = "Princeton University", X number = "TR-96-517", X year = "1996" X} X X@inproceedings{Woo:1995, X author = "S.C. Woo and M. Ohara and E. Torrie and J.P. Singh and A. Gupta", X title = "{The SPLASH-2 Programs: Characterization and Methodological Considerations}", X booktitle = "Proceedings of the 22nd International Symposium on Computer Architecture", X pages = "24--36", X location = "Santa Margherita Ligure, Italy", X month = jun, X year = "1995" X} X X@article{Epema:1996, X author = "D.H.J. Epema and M. Livny and R. van Dantzig and X. Evers and J. Pruyne", X title = "{A Worldwide Flock of Condors: Load Sharing among Workstation Clusters}", X journal = "Future Generation Computer Systems", X volume = "12", X number = "1", X pages = "53--66", X month = may, X year = "1996" X} X X@article{Chazan:1969, X author = "D. Chazan AND W. Miranker", X title = "{Chaotic relaxation}", X journal = "Linear Algebra and its Applications", X volume = "2", X year = "1969", X pages = "199--222" X} X X@inproceedings{Homburg:1996, X author = "P. Homburg and M. van Steen and A.S. Tanenbaum", X title = "{Communication in GLOBE: An Object-Based Worldwide Operating System}", X booktitle = "Proc. Fifth International Workshop on Object Orientation in Operating Systems", X location = "Seattle, Washington", X month = oct, X year = "1996", X pages = "43--47" X} X X@ARTICLE{SuperWeb97b, X AUTHOR = {Alexandrov, A. D. and Ibel, M. and Schauser, K. E. and Scheiman, C. J.}, X TITLE = {{SuperWeb: Research Issues in Java-Based Global Computing}}, X JOURNAL = {Concurrency: Practice and Experience}, X YEAR = {1997}, X VOLUME = {9}, X NUMBER = {6}, X PAGES = {535--553}, X MONTH = jun X} X X X@techreport{Langendoen:1997, X title = "{Challenging Applications on Fast Networks}", X author = "K.G. Langendoen and R. Hofman and H.E. Bal", X institution = "Vrije Universiteit", X location = "Amsterdam, The Netherlands", X month = jul, X year = "1997", X} X X@article{Lenoski:1992, X title = "{The Stanford Dash Multiprocessor}", X author = "D. Lenoski and J. Laudon and K. Gharachorloo and W. Weber and X A. Gupta and J. Hennessy and M. Horowitz and M.S. Lam", X journal = "IEEE Computer", X volume = "25", X number = "3", X pages = "63-79", X month = "March", X year = "1992", X} X X X X@article{Chaiken:1990, X title = "{Directory-Based Cache Coherence in Large-Scale Multiprocessors}", X author = "D. Chaiken and C. Fields and K. Kurihara and A. Agarwal", X institution = "MIT", X journal = "IEEE Computer", X pages = "49-58", X month = "June", X year = "1990", X volume = "23", X number = "6" X} X X@inproceedings{Zhou:1997, X title = {{Relaxed Consistency and Coherence Granularity in DSM Systems: A Performance Evaluation}}, X author = {Y. Zhou and L. Iftode and J. Singh and K. Li and B. Toonen and I. Schoinas and M. Hill and D. Wood}, X booktitle = {{PPoPP-6 Symposium on Principles and Practice of Parallel Programming}}, X month = jun, X year = 1997 X} X X X X@inproceedings{Singh:1998isca, X title = {{A Methodology and an Evaluation of the SGI Origin2000}}, X author = {D. Jiang and J. Singh}, X booktitle = {ACM Sigmetrics / Performance'98}, X location = {Madison, Wisconsin}, X month = jun, X year = 1998 X} X X@inproceedings{Suel:1996, X title = {{Towards Efficiency and Portability: Programming with the BSP Model}}, X author = {T. Suel and M. Goudreau and K. Lang and S. B. Rao and T. Tsantilas}, X booktitle = {Proceedings of the 8th Annual ACM Symposium on Parallel Algorithms and Architectures SPAA 96}, X month = jun, X year = 1996, X pages = {1--12}, X note = {See also www.bsp-worldwide.org} X} X X@article{Schaeffer:1993, X author = {J. Schaeffer and D. Szafron and G. Lobe and I. Parsons}, X title = "The Enterprise Model for Developing Distributed Applications", X journal = {IEEE Parallel and Distributed Technology}, X volume = {1}, X number = {3}, X month = aug, X year = 1993, X pages = {85--96} X} X X@inproceedings{Chakrabarti:1993, X title = {{Implementing an Irregular Application on a Distributed Memory Multiprocessor}}, X author = {S. Chakrabarti and K. Yelick}, X booktitle = {ACM Symposium on Principles and Practice of Parallel Programming}, X location = {San Diego, California}, X month = jun, X year = 1993 X} X X@inproceedings{Chong:1998, X title = "{The Sensitivity of Communication Mechanisms to Bandwidth and Lantency}", X author = "F. Chong and R. Barua and F. Dahlgren and J. Kubiatowicz and A. Agarwal", X booktitle = "HPCA-4 High Performance Communication Architectures", X month = "February", X pages = {37--46}, X year = "1998" X} X@inproceedings{Monnerat:1998, X title = "{Efficiently Adapting to Sharing Patterns in Software DSMs}", X author = "L. Monnerat and R. Bianchini", X booktitle = "HPCA-4 High Performance Communication Architectures", X month = "February", X pages = {289--299}, X year = "1998" X} X@inproceedings{Mowry:1998, X title = "{Comparative Evaluation of Latency Tolerance Techniques for Software Distributed Shared Memory}", X author = "T. Mowry and C. Chan and A. Lo", X booktitle = "HPCA-4 High Performance Communication Architectures", X month = "February", X pages = "300--311", X year = "1998" X} X@inproceedings{Speight:1998, X title = "{Using Multicast and Multithreading to Reduce Communication in Software DSM Systems}", X author = "E. Speight and J. Bennett", X booktitle = "HPCA-4 High Performance Communication Architectures", X month = "February", X pages = "312--323", X year = "1998" X} X X X@inproceedings{Chandra:1994, X title = "{Where is Time Spent in Message-Passing and Shared-Memory Programs}", X author = "S. Chandra and J. Larus and A. Rogers", X booktitle = "ASPLOS-94 Architectural Support for Programming Languages and Operating Systems", X year = "1994" X} X X X@InProceedings{Topcuoglu:1997, X author = "H. Topcuoglu and S. Hariri", X title = "{A Global Computing Environment for Networked Resources}", X booktitle = "Proc. 1997 Int. Conf. on Parallel Processing", X address = "Bloomingdale, IL", X year = 1997, X month = aug, X pages = "493-496" X} X X X@inproceedings{Laudon:1997, X title = "{The SGI Origin: A ccNUMA Highly Scalable Server}", X author = "J. Laudon and D. Lenoski", X booktitle = "24th Ann. Int. Symp. on Computer Architecture", X year = "1997", X month = jun, X location = "Denver, CO", X pages = "241--251", X} X X@inproceedings{Blumofe:1996, X title = "An Analysis of Dag-Consistent Distributed Shared-Memory Algorithms", X author = "R.D. Blumofe and M. Frigo and C.F. Joerg and C.E. Leiserson and K.H. Randall", X booktitle = "Proc. 8th ACM Symp. Par. Alg. and Arch. (SPAA)", X month = jun, X year = "1996", X location = "Padua, Italy" X} X X@inproceedings{Blelloch:1996, X year = "1995", X month = jul, X author = "G.E. Blelloch and P.B. Gibbons and Y. Matias", X booktitle ="Proc. 7th ACM Symp. Par. Alg. and Arch. (SPAA)", X title = "Provably efficient Scheduling for languages with fine-grained parallelism", X pages = "1--12" X} X X X@INPROCEEDINGS{IbelSSW97b, X AUTHOR = {Ibel, M. and Schauser, K. E. and Scheiman, C. J. and X Weis, M.}, X TITLE = {{High-Performance Cluster Computing Using SCI}}, X BOOKTITLE = {Hot Interconnects V}, X YEAR = {1997}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = aug, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Palo Alto, CA} X} X X@ARTICLE{Javelin97, X AUTHOR = {B. Christiansen and P. Cappello and M. F. Ionescu and M. O. Neary and K. E. Schauser and D. Wu}, X TITLE = {{Javelin: Internet-Based Parallel Computing Using Java}}, X JOURNAL = {Concurrency: Practice and Experience}, X YEAR = {1997}, X VOLUME = {}, X NUMBER = {}, X PAGES = {}, X NOTEFILES = {}, X LOCATION = {} X} X X@article{bal++:98:tocs, X Author = {H. E. Bal and R. Bhoedjang and R. Hofman and C. Jacobs and K. Langendoen and T. R\"uhl and F. Kaashoek}, X Title = "{Performance Evaluation of the Orca Shared Object System}", X journal = "{ACM Transactions on Computer Systems}", X volume = {16}, X number = {1}, X month = feb, X pages = {1--40}, X year = {1998} X} X X@article{Valiant:1990, X author = {L. Valiant}, X title = "{A Bridging Model for Parallel Computation}", X journal = {Comm. ACM}, X volume = 33, X number = 8, X pages = "100--108", X month = aug, X year = {1990} X} X X X X@INPROCEEDINGS{IbelSSW97, X AUTHOR = {Ibel, M. and Schauser, K. E. and Scheiman, C. J. and X Weis, M.}, X TITLE = {{High-Performance Cluster Computing Using Scalable Coherent Interface}}, X BOOKTITLE = {Seventh International Workshop on X SCI-based Low-cost/High-performance Computing}, X YEAR = {1997}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = mar, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Santa Clara, CA} X} X X@INPROCEEDINGS{IonescuS97, X AUTHOR = {Ionescu, M. F. and Schauser, K. E.}, X TITLE = {{Optimizing Parallel Bitonic Sort}}, X BOOKTITLE = {11th International Parallel Processing Symposium}, X YEAR = {1997}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = apr, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Geneva} X} X X@INPROCEEDINGS{SuperWeb97, X AUTHOR = {Alexandrov, A. D. and Ibel, M. and Schauser, K. E. and Scheiman, C. J.}, X TITLE = {{SuperWeb: Towards a Global Web-Based Parallel Computing Infrastructure}}, X BOOKTITLE = {11th International Parallel Processing Symposium}, X YEAR = {1997}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = apr, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Geneva} X} X X@INPROCEEDINGS{AlexandrovISS97, X AUTHOR = {Alexandrov, A. D. and Ibel, M. and Schauser, K. E. and Scheiman, C. J.}, X TITLE = {{Extending the Operating System at the User Level: the Ufo Global File System}}, X BOOKTITLE = {1997 Annual Technical Conference on UNIX and X Advanced Computing Systems (USENIX'97)}, X YEAR = {1997}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = jan, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Anaheim, CA} X} X X X@INPROCEEDINGS{HaakeSS96, X AUTHOR = {Haake, B. and Schauser, K. E. and Scheiman, C. J.}, X TITLE = {{Profiling a Parallel Language Based on Fine-Grained Communication}}, X BOOKTITLE = {Supercomputing}, X YEAR = {1996}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = nov, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Pittsburgh, PA} X} X X@INPROCEEDINGS{IbelSSW96, X AUTHOR = {Ibel, M. and Schauser, K. E. and Scheiman, C. J. and X Weis, M.}, X TITLE = {{Implementing Active Messages and Split-C for SCI Clusters X and Some Architectural Implications}}, X BOOKTITLE = {Sixth International Workshop on X SCI-based Low-cost/High-performance Computing}, X YEAR = {1996}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = sep, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Santa Clara, CA} X} X X@INPROCEEDINGS{ASPLOS96, X AUTHOR = {Krishnamurthy, A. and Schauser, K. E. and Scheiman, X C. J. and Wang, R. Y. and Culler, D. E. and Yelick K.}, X TITLE = {{Evaluation of Architectural Support for Global X Address-Based Communication in Large-Scale Parallel Machines}}, X BOOKTITLE = {7th International Conference on Architectural X Support for Programming Languages and Operating Systems}, X YEAR = {1996}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = oct, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Cambridge, MA} X} X X@INPROCEEDINGS{SchauserS96, X AUTHOR = {Schauser, K. E. and Scheiman, C. J. and X Ferguson, J. M. and Kolano, P. Z.}, X TITLE = {{Exploiting the Capabilities of Communications Co-processors}}, X BOOKTITLE = {10th International Parallel Processing Symposium}, X YEAR = {1996}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = apr, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Honolulu, HI} X} X X@INPROCEEDINGS{AlexandrovISS95, X AUTHOR = {Alexandrov, A. and Ionescu, M. and Schauser, K. E. and Scheiman, C.}, X TITLE = {{LogGP: Incorporating Long Messages into the LogP model - X One step closer towards a realistic model for parallel computation}}, X BOOKTITLE = {7th Annual Symposium on Parallel Algorithms and Architectures}, X YEAR = {1995}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = jul, X NOTE = {}, X ANOTE = {Extended version appears as UCSB technical report TRCS95-09}, X NOTEFILES = {}, X LOCATION = {Santa Barbara, CA} X} X X@INPROCEEDINGS{SchauserG95, X AUTHOR = {Schauser, K. E. and Goldstein, S. C.}, X TITLE = {{How Much Non-strictness do Lenient Programs Require?}}, X BOOKTITLE = {8th Annual Conference on Functional Programming Languages Xand Computer Architecture}, X YEAR = {1995}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = jun, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {San Diego, CA} X} X X@INPROCEEDINGS{GoldsteinSC95, X AUTHOR = {Goldstein, S. C. and Schauser, K. E. and Culler, D. E.}, X TITLE = {{Enabling Primitives for Compiling Parallel Languages}}, X BOOKTITLE = {Third Workshop on Languages, Compilers, and Run-Time Systems for Scalable Computers}, X YEAR = {1995}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = may, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Troy, NY} X} X X@INPROCEEDINGS{SchauserS95, X AUTHOR = {Schauser, K. E. and Scheiman, C. J.}, X TITLE = {{Experience with Active Messages on the Meiko CS-2}}, X BOOKTITLE = {9th International Parallel Processing Symposium}, X YEAR = {1995}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = apr, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {Santa Barbara, CA} X} X X@TECHREPORT{SchauserS94, X AUTHOR = {Schauser, K. E. and Scheiman, C. J.}, X TITLE = {{Active Messages Implementations for the Meiko CS-2}}, X INSTITUTION = {University of California, Santa Barbara}, X YEAR = {1994}, X TYPE = {}, X NUMBER = {TRCS-94-25}, X ADDRESS = {Dep. of Computer Science}, X MONTH = dec, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {} X} X X@INPROCEEDINGS{SchauserCG95, X AUTHOR = {Schauser, K. E. and Culler, D. E. and Goldstein, S. C.}, X TITLE = {{Separation Constraint Partitioning --- A New Algorithm for X Partitioning Non-strict Programs into Sequential Threads}}, X BOOKTITLE = {Proc. Principles of Programming Languages}, X YEAR = {1995}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = jan, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {San Francisco, CA} X} X X@PHDTHESIS{Schauser94, X AUTHOR = {Schauser, K. E.}, X TITLE = {{Compiling Lenient Languages for Parallel Asynchronous Execution}}, X SCHOOL = {University of California, Berkeley}, X YEAR = {1994}, X ADDRESS = {Computer Science Div.}, X MONTH = may, X NOTE = {appears as UCB CSD-94-832}, X NOTEFILES = {}, X LOCATION = {} X} X X@INPROCEEDINGS{CullerDMS93, X AUTHOR = {Culler, D. E and Dusseau, A. and Martin, R. and Schauser, K. E.}, X TITLE = {{Fast Parallel Sorting under LogP: from theory to practice}}, X BOOKTITLE = {Portability and Performance for Parallel Processing}, X YEAR = {1994}, X EDITOR = {Hey, T. and Ferrante, J.}, X PAGES = {71-98}, X ORGANIZATION = {}, X PUBLISHER = {John Wiley ? Sons Ltd}, X ADDRESS = {}, X NOTE = {}, X ANOTE = {Invited paper from the Workshop on Portability and X Performance for Parallel Processing, X Southampton, England, July 1993}, X NOTEFILES = {}, X LOCATION = {} X} X X@ARTICLE{CullerGSvE93, X AUTHOR = {Culler, D. E. and Goldstein, S. C. and Schauser, K. E. and von~Eicken, T.}, X TITLE = {{TAM --- A Compiler Controlled Threaded Abstract Machine}}, X JOURNAL = {Journal of Parallel and Distributed Computing}, X YEAR = {1993}, X VOLUME = {18}, X NUMBER = {}, X PAGES = {347-370}, X MONTH = jul, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {} X} X X@INPROCEEDINGS{KarpSSS93, X AUTHOR = {Karp, R. and Sahay, A. and Santos, E. and Schauser, K. E.}, X TITLE = {{Optimal Broadcast and Summation in the LogP Model}}, X BOOKTITLE = {5th Symp. on Parallel Algorithms and Architectures}, X YEAR = {1993}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = jun, X NOTE = {}, X NOTEFILES = {}, X LOCATION = {} X} X X@INPROCEEDINGS{CullerKPSSSSvE93, X AUTHOR = {Culler, D. E. and Karp, R. M. and Patterson, D. A. and X Sahay, A. and Schauser, K. E. and Santos, E. and X Subramonian, R. and von Eicken, T.}, X TITLE = {{ LogP: Towards a Realistic Model of Parallel Computation}}, X BOOKTITLE = {Fourth ACM SIGPLAN Symposium on Principles and Practice X of Parallel Programming}, X YEAR = {1993}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {}, X ADDRESS = {}, X MONTH = may, X NOTE = {Also appears as UCB/CS/92 713 report.}, X NOTEFILES = {}, X LOCATION = {San Diego, CA.} X} X X X X@InProceedings{SpertusGSvECD93, X Author = {Spertus, E. and Goldstein, S. C. and Schauser, K. E. X and von Eicken, T. and Culler, D. E. and Dally, W. J.}, X Title = {{Evaluation of Mechanisms for Fine-Grained Parallel Programs in the X J-Machine and the CM-5}}, X BookTitle = {Proc. of the 20th Int'l Symposium on Computer Architecture}, X Address = {San Diego, CA}, X Month = may, X Year = 1993, X Note = "" X} X X@INPROCEEDINGS{CullerSvE93, X AUTHOR = {Culler, D. E. and Schauser, K. E. and von Eicken, T.}, X TITLE = {{Two Fundamental Limits on Dataflow Multiprocessing}}, X BOOKTITLE = {Proceedings of the IFIP WG 10.3 Working Conference X on Architectures and Compilation Techniques for Fine X and Medium Grain Parallelism, Orlando, FL. }, X YEAR = {1993}, X EDITOR = {}, X PAGES = {}, X ORGANIZATION = {}, X PUBLISHER = {North-Holland}, X ADDRESS = {}, X MONTH = jan, X Note = "(Also available as Technical Report UCB/CSD 92/716, X CS Div., University of California at Berkeley)", X NOTEFILES = {}, X LOCATION = {} X} X X X@INPROCEEDINGS{TraubCS92, X AUTHOR = {Traub, K. R. and Culler, D. E. and Schauser, K. E.}, X TITLE = "{Global Analysis for Partitioning Non-Strict Programs into Sequential Threads}", X BOOKTITLE = {Proc. of the ACM Conf. on LISP and Functional Programming}, X YEAR = {1992}, X PAGES = {324-334}, X ADDRESS = {San Francisco, CA}, X MONTH = jun X} X X@InProceedings{vonEickenCGS92, X Author = {von Eicken, T. and Culler, D. E. and Goldstein, X S. C. and Schauser, K. E.}, X Title = {{Active Messages: a Mechanism for Integrated Communication X and Computation}}, X BookTitle = {Proc. of the 19th Int'l Symposium on Computer Architecture}, X Address = {Gold Coast, Australia}, X Month = may, X Year = 1992, X Note = "(Also available as Technical Report UCB/CSD 92/675, X CS Div., University of California at Berkeley)" X} X X@InProceedings{CullerGSvE92, X Author = { Culler, D. E. and Goldstein, X S. C. and Schauser, K. E. and von Eicken, T. }, X Title = {{Empirical Study of Dataflow Languages on the CM-5}}, X BookTitle = {Proc. of the Dataflow Workshop, 19th Int'l Symposium on Computer Architecture}, X Address = {Gold Coast, Australia}, X Month = may, X Year = 1992 X} X X@inproceedings(stallcache92, X author = "K. Asanovi\'c and K. E. Schauser and D. A. Patterson and E. H. Frank", X title = "{Evaluation of a Stall Cache: An Efficient Restricted On-Chip Instruction Cache}", X booktitle = "Proceedings 25th Hawaii International Conference on System Sciences", X volume = "I", X pages = "405--415", X month = "January", X year = "1992", X note = "(Also available as Technical Report UCB/CSD 91/641, CS Div., University of California at Berkeley)." X) X X X@InProceedings{SchauserCvE91, X Author = {Schauser, K. E. and Culler, D. and von Eicken, T.}, X Title = {{Compiler-controlled Multithreading for X Lenient Parallel Languages}}, X BookTitle = {Proceedings of the 1991 Conference on X Functional Programming Languages and Computer Architecture}, X Address = {Cambridge, MA}, X Month = aug, X Year = 1991, X Note = "(Also available as Technical Report UCB/CSD 91/640, X CS Div., University of California at Berkeley)", X} X X@MASTERSTHESIS{Schauser91, X AUTHOR = {Schauser, K. E.}, X TITLE = {{Compiling Dataflow into Threads}}, X SCHOOL = {University of California, Berkeley}, X YEAR = {1991}, X ADDRESS = {Computer Science Div.}, X MONTH = jul, X NOTE = {Report No. UCB/CSD 91/644} X} X X@InProceedings{CullerSSEW91, X Author = {Culler, D. and Sah, A. and Schauser, K. and von~Eicken, T. X and Wawrzynek, J.}, X Title = {{Fine-grain Parallelism with Minimal Hardware Support: X A Compiler-Controlled Threaded Abstract Machine}}, X BookTitle = {Proc. of 4th Int. Conf. on Architectural Support for X Programming Languages and Operating Systems}, X Address = {Santa-Clara, CA}, X Month = apr, X Year = 1991, X Note = "(Also available as Technical Report UCB/CSD 91/594, X CS Div., University of California at Berkeley)" X} X X@Unpublished{EickenSC91, X Author = {von Eicken, T. and Schauser, K. E. and Culler, D. E.}, X Title = {{TL0: An Implementation of the TAM Threaded Abstract Machine, X Version 2.1}}, X Year = 1991, X Note = "Technical Report, Computer Science Div., X University of California at Berkeley" X} X X@book{foster++:98:grid, Xeditor = {I. Foster and C. Kesselman}, Xtitle = {{The GRID: Blueprint for a New Computing Infrastructure}}, Xpublisher = {Morgan Kaufmann}, Xyear = 1998, Xisbn = {1-55860-475-8} X} X X@inproceedings{macbeth++:98:hyperion, X author = {M. W. Macbeth and K. A. McGuigan and Philip J. Hatcher}, X title = {{Executing Java Threads in Parallel in a Distributed-Memory X Environment}}, X booktitle = {{Proc. CASCON'98}}, X address = {Missisauga, ON}, X year = 1998, X pages = {40--54}, X publisher = {Published by IBM Canada and the National Research Council X of Canada} X} X X@article{bhoedjang:1998, X author = {R. A. F. Bhoedjang and T. R\"uhl and H. E. Bal}, X title = {{User-Level Network Interface Protocols}}, X journal = {IEEE Computer}, X year = {1998}, X month = nov, X volume = 31, X number = 11, X pages = {53--60} X} X X@InProceedings{yelick:1998, X author = {K. Yelick and L. Semenzato and G. Pike and X C. Miyamoto and B. Liblit and A. Krishnamurthy and X P. Hilfinger and S. Graham and D. Gay and P. Colella X and A. Aiken}, X title = "{Titanium: a High-performance Java Dialect}", X booktitle = {{ACM 1998 workshop on Java for High-performance network computing}}, X year = {1998}, X month = feb X} X X@InProceedings{keleher:1994, X author = {P.~Keleher and A.L.~Cox and S.~Dwarkadas and X W.~Zwaenepoel}, X title = "{TreadMarks: Distributed Shared Memory on Standard X Workstations and Operating Systems}", X booktitle = "Proc. of the Winter 1994 Usenix Conference", X year = 1994, X address = {San Francisco, CA}, X month = jan, X pages = {115--131} X} X X@inproceedings{Breg:1998, X title = {{Java RMI Performance and Object Model Interoperability: Experiments with Java/HPC++ Distributed Components}}, X author = {F. Breg and S. Diwan and J. Villacis and J. Balasubramanian and E. Akman and D. Gannon}, X booktitle = {ACM 1998 Workshop on Java for High-Performance Network Computing}, X year = 1998, X address = {Santa Barbara, CA}, X month = feb X} X X@inproceedings{Krishnaswamy:1998, X author = {V. Krishnaswamy and D. Walther and S. Bhola and E. Bommaiah and G. Riley and B. Topol and M. Ahamad}, X title = {{Efficient Implementations of Java RMI}}, X booktitle = {4th USENIX Conference on Object-Oriented Technologies and Systems (COOTS'98)}, X address = {Santa Fe, NM}, X year = 1998 X} X X@article{philippsen:1997, X title = "{JavaParty---Transparent Remote Objects in Java}", X author = "M. Philippsen and M. Zenger", X journal = "Concurrency: Practice and Experience", X month = nov, X year = "1997", X pages = {1225--1242}, X} X X@article{yu:1997, X title = "{Java/DSM: A Platform for Heterogeneous Computing}", X author = "W. Yu and A. Cox", X journal = "Concurrency: Practice and Experience", X month = nov, X pages = {1213--1224}, X year = "1997" X} X X@InProceedings{launay:1998, X title = "{The Do! project: Distributed Programming Using Java}", X author = "P. Launay and J-L. Pazat", X booktitle = "First UK Workshop Java for High Performance Network Computing", X month = "Sept.", X year = "1998", X address = "Southampton", X} X X@article{smarr:1992, X title = "{Metacomputing}", X author = "L. Smarr and C.E. Catlett", X journal = "Communications of the ACM", X volume = "35", X number = "6", X month = "June", X year = "1992", X pages = "44-52", X} X X@article{Wollrath:1997, X title = "{Java-Centric Distributed Computing}", X author = "A. Wollrath and J. Waldo and R. Riggs", X journal = "IEEE Micro", X volume = "17", X number = "3", X month = "May/June", X year = "1997", X pages = "44-53", X} X X@article{waldo:1998, X author = {J. Waldo}, X title = {{Remote procedure calls and Java Remote Method Invocation}}, X journal = {IEEE Concurrency}, X month = {July--September}, X year = {1998}, X pages = {5--7} X} X X X@InProceedings{Haupt:1999, X author = {T. Haupt and E. Akarsu and G. Fox and A. Kalinichenko X and K-S. Kim and P. Sheethalnath and C-H. Youn}, X title = "{The Gateway System: Uniform Web Based Access to Remote Resources}", X booktitle = {{ACM 1999 Java Grande Conference}}, X address = {San Francisco, CA}, X year = {1999}, X month = jun, X pages = {1--7} X} X X@InProceedings{Izatt:1999, X author = {M. Izatt and P. Chan and T. Brecht}, X title = "{Ajents: Towards an Environment for Parallel, Distributed and Mobile Java Applications}", X booktitle = {{ACM 1999 Java Grande Conference}}, X address = {San Francisco, CA}, X year = {1999}, X month = jun, X pages = {15--24} X} X X X@InProceedings{Neary:1999, X author = {S.P. Brydon and P. Kmiec and M.O. Neary and S. Rollins and P. Cappello}, X title = "{Javelin++: Scalability Issues in Global Computing}", X booktitle = {{ACM 1999 Java Grande Conference}}, X address = {San Francisco, CA}, X year = {1999}, X month = jun, X pages = {171--180} X} X X X@InProceedings{Nester:1999, X author = {C. Nester and M. Philippsen and B. Haumacher}, X title = "{A More Efficient RMI for Java}", X booktitle = {{ACM 1999 Java Grande Conference}}, X address = {San Francisco, CA}, X year = {1999}, X month = jun, X pages = {153--159} X} X X X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% X% X% albatross.bib X% X% collection of BibTeX entries for the publications of the Albatross project X% X% see also: http://www.cs.vu.nl/albatross/ X% X% order: newest publications first X% X% Albatross members: please keep this file up to date! X% X% last change: 07/13/99 by Thilo Kielmann X% X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% X X X@inproceedings{bal++:99:albatross, X author = {Henri E. Bal and Aske Plaat and Thilo Kielmann and Jason Maassen X and Rob van Nieuwpoort and Ronald Veldema}, X title = {{Parallel Computing on Wide-Area Clusters: the Albatross Project}}, X booktitle = {{Extreme Linux Workshop}}, X address = {Monterey, CA}, X month = {June}, X year = 1999, X pages = {20--24} X} X X X@inproceedings{nieuwpoort++:99:javagrande, X author = {Rob van Nieuwpoort and Jason Maassen and Henri E. Bal X and Thilo Kielmann and Ronald Veldema}, X title = {{Wide-area parallel computing in Java}}, X booktitle = {{ACM 1999 Java Grande Conference}}, X address = {San Francisco, CA}, X month = {June}, X year = 1999, X pages = {8--14} X} X X X@inproceedings{nieuwpoort++:99:asci_java, X author = {Rob van Nieuwpoort and Jason Maassen and Henri E. Bal X and Thilo Kielmann and Ronald Veldema}, X title = {{Wide-area parallel computing in Java}}, X booktitle = {{ASCI'99, fifth annual conference of the Advanced School X for Computing and Imaging}}, X address = {Heijen, The Netherlands}, X month = {June}, X year = 1999, X pages = {338--347}, X annote = {Reprint of the Java Grande paper.} X } X X X@inproceedings{kielmann++:99:asci_magpie, X author = {Thilo Kielmann and Rutger F. H. Hofman and Henri E. Bal and X Aske Plaat and Raoul A. F. Bhoedjang}, X title = {{MPI's Reduction Operations in Clustered Wide Area Systems}}, X booktitle = {{ASCI'99, fifth annual conference of the Advanced School X for Computing and Imaging}}, X address = {Heijen, The Netherlands}, X month = {June}, X year = 1999, X pages = {329--337}, X annote = {Abridged version of the MPIDC'99 paper.} X} X X X@inproceedings{maassen++:99:ppopp_manta, X author = {Jason Maassen and Rob van Nieuwpoort and Ronald Veldema X and Henri E. Bal and Aske Plaat}, X title = {{An Efficient Implementation of Java's Remote Method Invocation}}, X booktitle = {{Seventh ACM SIGPLAN Symposium on Principles and Practice of X Parallel Programming (PPoPP'99)}}, X address = {Atlanta, GA}, X month = {May}, X year = 1999, X pages = {173--182} X} X X X@inproceedings{kielmann++:99:ppopp_magpie, X author = {Thilo Kielmann and Rutger F. H. Hofman and Henri E. Bal and X Aske Plaat and Raoul A. F. Bhoedjang}, X title = {{{\sc MagPIe}: MPI's Collective Communication Operations X for Clustered Wide Area Systems}}, X booktitle = {{Seventh ACM SIGPLAN Symposium on Principles and Practice of X Parallel Programming (PPoPP'99)}}, X address = {Atlanta, GA}, X month = {May}, X year = 1999, X pages = {131--140} X} X X X@inproceedings{kielmann++:99:mpidc, X author = {Thilo Kielmann and Rutger F. H. Hofman and Henri E. Bal and X Aske Plaat and Raoul A. F. Bhoedjang}, X title = {{MPI's Reduction Operations in Clustered Wide Area Systems}}, X booktitle = {{Message Passing Interface Developer's and User's Conference X (MPIDC'99)}}, X address = {Atlanta, GA}, X month = {March}, X year = 1999, X pages = {43--52} X} X X X@inproceedings{plaat++:99:hpca, X author = {Aske Plaat and Henri E. Bal and Rutger F. H. Hofman}, X title = {{Sensitivity of Parallel Applications to Large Differences X in Bandwidth and Latency in Two-Layer Interconnects}}, X booktitle = {High Performance Computer Architecture (HPCA-5)}, X address = {Orlando, FL}, X month = {January}, X year = 1999, X pages = {244--253} X} X X X@techreport{veldema++:98:manta_tr, X author = {Ronald Veldema and Rob van Nieuwpoort and Jason Maassen X and Henri E. Bal and Aske Plaat}, X title = {{Efficient Remote Method Invocation}}, X month = {September}, X year = 1998, X institution = {Vrije Universiteit}, X address = {Amsterdam, The Netherlands}, X type = {Technical Report}, X number = {IR-450} X} X X X@phdthesis{veldema:98:thesis, X author = {Ronald Veldema}, X title = {{Jcc, a native Java compiler}}, X school = {Vrije Universiteit}, X type = {Master's Thesis}, X address = {Amsterdam, The Netherlands}, X month = {August}, X year = 1998 X} X X X@phdthesis{maassen++:98:thesis, X author = {Jason Maassen and Rob von Nieuwpoort}, X title = {{Fast Parallel Java}}, X school = {Vrije Universiteit}, X type = {Master's Thesis}, X address = {Amsterdam, The Netherlands}, X month = {August}, X year = 1998 X} X X X@inproceedings{kielmann++:98:radicals, X author = {Thilo Kielmann and Aske Plaat and Henri E. Bal}, X title = {{Software Components Enable Wide-Area Supercomputing: X Takeoff of the Albatross}}, X booktitle = {{5th CaberNet Radicals Workshop}}, X address = {Valadares, Porto, Portugal}, X month = {July}, X year = 1998 X} X X X@inproceedings{bal++:98:ipps, X author = {Henri E. Bal and Aske Plaat and Mirjam G. Bakker and Peter Dozy X and Rutger F.H. Hofman}, X title = {{Optimizing Parallel Applications for Wide-Area Clusters}}, X booktitle = {{12th International Parallel Processing Symposium (IPPS'98)}}, X address = {Orlando, FL}, X month = {April}, X year = 1998, X pages = {784--790} X} X X X@phdthesis{bakker++:97:thesis, X author = {Mirjam G. Bakker and Peter Dozy}, X title = {{Performance study of parallel programs on a clustered X Wide-Area Network}}, X school = {Vrije Universiteit}, X type = {Master's Thesis}, X address = {Amsterdam, The Netherlands}, X month = {August}, X year = 1997 X} X + END-OF-FILE cpe99.bib chmod 'u=rw,g=r,o=r' 'cpe99.bib' set `wc -c 'cpe99.bib'` count=$1 case $count in 54807) :;; *) echo 'Bad character count in ''cpe99.bib' ??2 echo 'Count should be 54807' ??2 esac echo Extracting 'cpe99.tex' sed 's/^X//' ? 'cpe99.tex' ?? '+ END-OF-FILE ''cpe99.tex' X%\documentstyle[preprint,graphicx,mathptm,epsf,epsfig]{acmconf} X%\documentstyle[graphicx,mathptm,epsf,epsfig]{acmconf} X X\documentclass[12pt]{article} X\usepackage{mathptm} X\usepackage{fullpage} X\usepackage[dvips]{graphicx} X\usepackage{epsfig} X X% the following line should make it ``16 point spacing'' X% \renewcommand{\baselinestretch}{1.6} X X% \setlength{\textwidth}{6.55in} X% \setlength{\textheight}{9.05in} X% \setlength{\topmargin}{-0.45in} X% \setlength{\oddsidemargin}{-0.15in} X% \setlength{\evensidemargin}{-0.15in} X X\newcommand{\ol}{\par\vspace{1ex}\noindent$\otimes$ } X X\begin{document} X X\title{Wide-Area Parallel Programming using the \\ X Remote Method Invocation Model} X\author{ XRob van Nieuwpoort X\hspace{0.3cm} XJason Maassen X\hspace{0.3cm} XHenri E. Bal \\ X\vspace{0.1cm} XThilo Kielmann X\hspace{0.3cm} XRonald Veldema X\vspace{0.3cm} X\\ X{Department of Computer Science, XVrije Universiteit, Amsterdam, The Netherlands}\\ X{\small rob@cs.vu.nl \hspace{0.3cm} jason@cs.vu.nl \hspace{0.3cm} bal@cs.vu.nl \hspace{0.3cm} kielmann@cs.vu.nl \hspace{0.3cm} rveldema@cs.vu.nl} \\ X\vspace{-0.2cm} X{\small \texttt{http://www.cs.vu.nl/albatross/}} X} X\date{} X\maketitle X X\begin{abstract} XJava's support for parallel and distributed processing Xmakes the language attractive for metacomputing applications, such as parallel Xapplications that run on geographically distributed (wide-area) systems. XTo obtain actual experience with a Java-centric approach to metacomputing, Xwe have built and used a high-performance wide-area Java system, called Manta. XManta implements the Java Remote Method Invocation (RMI) Xmodel using different communication protocols X(active messages and TCP/IP) for different networks. XThe paper shows how wide-area parallel applications can be expressed Xand optimized using Java RMI. Also, it presents performance results Xof several applications on a wide-area system consisting Xof four Myrinet-based clusters connected by ATM WANs. XWe finally discuss alternative programming models, namely Xobject replication, Java\-Spaces, and MPI for Java. X% We compare their expressiveness as well as their X% performance impact. X\end{abstract} X X\section{Introduction} X XMetacomputing is an interesting research area that tries Xto integrate geographically distributed computing resources Xinto a single powerful system. XMany applications can benefit from such an Xintegration \cite{foster++:98:grid,smarr:1992}. XMetacomputing systems support such applications by addressing Xissues like resource allocation, fault tolerance, Xsecurity, and heterogeneity. XMost metacomputing systems are language-neutral and Xsupport a variety of programming languages. XRecently, interest has also arisen in metacomputing architectures that are Xcentered around a single language. XThis approach admittedly is restrictive for some applications, Xbut also has many advantages, such as a simpler design and the Xusage of a single type system. XIn \cite{Wollrath:1997}, the advantages Xof a Java-centric approach to metacomputing are described, including Xsupport for code mobility, distributed polymorphism, distributed garbage Xcollection, and security. X XIn this paper, we describe our early experiences in building and using Xa high-performance Java-based system for one important class of Xmetacomputing applications: parallel computing on geographically Xdistributed resources. XAlthough our system is not a complete metacomputing environment yet, Xit is interesting for several reasons. XThe system, called \emph{Manta}, Xfocuses on optimizations to achieve high performance with Java. XIt uses a native compiler and an efficient, light-weight RMI X(Remote Method Invocation) protocol that achieves a performance close Xto that of C-based RPC protocols~\cite{maassen++:99:ppopp_manta}. XWe have implemented Manta on a geographically distributed system, called X\emph{DAS}, consisting of four Pentium Pro/Myrinet Xcluster computers connected by wide-area ATM links. XThe resulting system is an interesting platform for studying Xparallel Java applications on geographically distributed systems. X XThe Java-centric approach achieves a high degree of transparency and hides Xmany details of the underlying system (e.g., different communication Xsubstrates) from the programmer. XFor several high-performance applications, however, the huge Xdifference in communication speeds between the local and wide-area networks Xis a problem. In our DAS system, for example, Xa Java RMI over the Myrinet LAN costs about 40 $\mu$sec, while an RMI over Xthe ATM WAN costs several milliseconds. XOur Java system therefore exposes the structure of the wide-area system Xto the application, so applications can be optimized Xto reduce communication over the wide-area links. X XThis paper is based on our earlier work as published in X\cite{nieuwpoort++:99:javagrande}. XWe show how wide-area parallel applications can be expressed Xand optimized using Java RMI and we discuss the performance of several Xparallel Java applications on DAS. XWe also discuss some shortcomings of the Java RMI model for Xwide-area parallel computing Xand how this may be overcome by adapting features from alternative Xprogramming models. XThe outline of the paper is as follows. XIn Section \ref{sec:implementation} we describe the implementation Xof Manta on our wide-area system. XIn Section \ref{sec:applications} we describe our experiences in Ximplementing four wide-area parallel applications in Java Xand we discuss their performance. XIn Section \ref{sec:alternative} we discuss which alternative programming Xmodels may contribute to an RMI-based programming model. XIn Section \ref{sec:related} we look at related work and Xin Section \ref{sec:conclusions} we give our conclusions. X X X X X\section{A wide-area parallel Java system} X\label{sec:implementation} X XIn this section, we will briefly describe the DAS system and the Xoriginal Manta system (as designed for a single parallel machine). XNext, we discuss how we implemented Manta on the wide-area DAS system. XFinally, we compare the performance of Manta and the Sun JDK Xon the DAS system. X X X\subsection{The wide-area DAS system} X\label{sec:das} X XWe believe that high-performance metacomputing applications will typically run Xon collections of parallel machines (clusters or MPPs), Xrather than on workstations at random geographic locations. XHence, metacomputing systems that are used for parallel processing Xwill be \emph{hierarchically} structured. XThe DAS experimentation system we have built reflects this basic assumption, Xas shown in Figure~\ref{fig:das}. XIt consists of four clusters, located at different universities in XThe Netherlands. XThe nodes within the same cluster are connected by $1.2$ Gbit/sec XMyrinet~\cite{boden++:95:myrinet}. XThe clusters are connected by dedicated 6 Mbit/s wide-area ATM networks. X XThe nodes in each cluster are 200 MHz/128 MByte Pentium Pros. XOne of the clusters has 128 processors, the other clusters have 24 nodes each. XThe machines run RedHat Linux version 2.0.36. XThe Myrinet network is a 2D torus Xand the wide area ATM network is fully connected. XThe system, called DAS, is more fully described in X\cite{plaat++:99:hpca} (and on {\em http://www.cs.vu.nl/das/\/}). X X X\begin{figure} X\begin{center} X\psfig{figure=das.eps,height=7cm} X\caption{The wide-area DAS system.} X\label{fig:das} X\end{center} X\end{figure} X X X\subsection{The Manta system} X XManta is a Java system designed for high-performance parallel computing. XLike JavaParty \cite{philippsen:1997}, Manta uses a separate {\sf remote} Xkeyword to indicate which classes allow their methods to be invoked Xremotely. This method is somewhat more flexible and easier to use than Xinheriting from {\sf java.rmi.server.UnicastRemoteObject} X(the standard RMI mechanism). XJavaParty requires a preprocessor for implementing this language extension; Xfor Manta, we have modified our compiler. XExcept for this difference, the programming model of Manta is the same Xas that of standard RMI. XManta uses a native compiler and an optimized RMI protocol. XThe most important advantage of a native compiler (compared to a JIT) Xis that it can do Xmore aggressive optimizations and therefore generate better code. XThe compiler also generates the serialization and deserialization routines, Xwhich greatly reduces the runtime overhead of RMIs. XManta nodes thus contain the executable code Xfor the application and (de)serialization routines. XThe nodes communicate with each other using Manta's own light-weight RMI Xprotocol. X XThe most difficult problem addressed by the Manta system is to Xallow interoperability with other JVMs. XOne problem is that Manta has its own, light-weight RMI protocol that Xis incompatible with Sun's JDK protocol. XWe solve this problem by letting a Manta node also communicate Xthrough a JDK-compliant protocol. Two Manta nodes thus communicate Xusing our fast protocol, while Manta-to-JVM RMIs use the standard RMI protocol. X XAnother problem concerning interoperability is that Manta uses a native Xcompiler instead of a byte code interpreter (or JIT). XSince Java RMIs are polymorphic~\cite{waldo:1998}, Manta nodes Xmust be able to send and receive byte codes to interoperate with JVMs. XFor example, if a remote method Xexpects a parameter of a certain class \emph{C}, the invoker may send it Xan object of a subclass of C. This subclass may not yet Xbe available at the receiving Manta node, so its byte code may have to be Xretrieved and integrated into the computation. With Manta, however, Xthe computation is an executable program, not a JVM. XIn the reverse situation, Xif Manta does a remote invocation to a node running a JVM, Xit must be able to send the byte codes for subclasses that the receiving XJVM does not yet have. XManta solves this problem as follows. If a remote JVM node sends byte code Xto a Manta node, the byte code is compiled dynamically to object code Xand this object code is linked into the running application using Xthe \texttt{dlopen()} dynamic linking interface. XAlso, Manta generates byte codes for the classes it compiles X(in addition to executable code). These byte codes are stored Xat an http daemon, where remote JVM nodes can retrieve them. XFor more details, we refer to~\cite{maassen++:99:ppopp_manta}. X XThe Manta RMI protocol is designed to minimize serialization and Xdispatch overhead, Xsuch as copying, buffer management, fragmentation, thread switching, Xand indirect method calls. XManta avoids the several stream layers used for serialization by the JDK. XInstead, RMI parameters are serialized directly into a communication buffer. XMoreover, the JDK stream layers are written in Java Xand their overhead thus depends on the quality of the interpreter or JIT. XIn Manta, all layers are either implemented as compiled C code or Xcompiler-generated native code. XHeterogeneity between little-endian and big-endian machines is Xachieved by sending data in the native byte order of the sender, and Xhaving the receiver do the conversion, if necessary.% X\footnote{Manta supports the serialization Xand deserialization protocols needed Xto support heterogeneous systems, but the underlying Panda library does Xnot yet support heterogeneity, as it does not do byte-conversions on Xits headers yet.} X XTo implement distributed garbage collection, Xthe Manta RMI protocol also keeps track of object references that Xcross machine boundaries. XManta uses a mark-and-sweep algorithm (executed by a separate thread) Xfor local garbage collection Xand a reference counting mechanism for remote objects. X X XThe serialization of method arguments Xis an important source of overhead of existing RMI implementations. XSerialization takes Java objects and converts (serializes) Xthem into an array of bytes. XThe JDK serialization protocol is written in Java and uses reflection Xto determine the type of each object during run time. XWith Manta, all serialization code is generated Xby the compiler, avoiding the overhead of dynamic type inspection. XThe compiler generates a specialized serialization and deserialization Xroutine for every class. Pointers to these routines are stored Xin the method table. X% As explained above, Manta sometimes needs to load and compile classes X% dynamically, to implement polymorphic RMIs. In this case, the (de)serialization X% routines are also generated during run time. XThe Manta serialization protocol optimizes simple cases. XFor example, an array whose elements are of a primitive type Xis serialized by doing a direct memory-copy into the message buffer, Xwhich saves traversing the array. XCompiler generation of serialization is one of the major Ximprovements of Manta over the JDK \cite{maassen++:99:ppopp_manta}. X X\begin{figure*}%[p] X\begin{center} X\psfig{figure=panda-atm.eps,width=14cm} X\caption{Wide area communication based on Panda} X\label{fig:manta-atm} X\end{center} X\end{figure*} X X X\subsection{Manta on the wide area DAS system} X X XTo implement Java on a wide-area system like DAS, the most important Xproblem is how to deal with the different communication networks Xthat exist within and between clusters. XAs described in Section~\ref{sec:das}, we assume that Xwide-area parallel systems are hierarchically structured and consist Xof multiple parallel machines (clusters) connected by wide area networks. XThe LANs (or MPP interconnects) used within a cluster typically are Xvery fast, so it is important that the communication protocols used Xfor intra-cluster communication are as efficient as possible. XInter-cluster communication (over the WAN) necessarily is slower. X XMost Java RMI implementations are built on top of TCP/IP. XUsing a standard communication protocol eases the implementation of RMI, Xbut also has a major performance penalty. XTCP/IP was not designed for parallel processing, and therefore has Xa very high overhead on fast LANs such as Myrinet. XFor the Manta system, we therefore use different protocols for Xintra-cluster and inter-cluster communication. X XTo obtain a modular and portable system, XManta is implemented on top of a separate communication library, Xcalled Panda~\cite{bal++:98:tocs}. XPanda provides communication and multithreading primitives that are designed Xto be used for implementing runtime systems of various parallel languages. XPanda's communication primitives include point-to-point message passing, XRPC, and broadcast. XThe primitives are independent of the operating system or network, which eases Xporting of languages implemented on top of Panda. XThe implementation of Panda, however, is structured in such a way that Xit can exploit any useful functionality provided by the underlying system X(e.g., reliable message passing or broadcast), which makes communication Xefficient~\cite{bal++:98:tocs}. X XPanda has been implemented on a variety of machines, operating systems, Xand networks. XThe implementation of Manta and Panda on the wide-area DAS system Xis shown in Figure~\ref{fig:manta-atm}. XFor intra-cluster communication over Myrinet, XPanda internally uses the LFC communication system \cite{bhoedjang:1998}. XLFC is a highly efficient, user-space communication substrate for Myrinet, Xsimilar to active messages. X XFor inter-cluster communication over the wide-area ATM network, XPanda uses one dedicated \emph{gateway} machine per cluster. XThe gateways also implement the Panda primitives, but support Xcommunication over both Myrinet and ATM. XA gateway can communicate with the machines in its local cluster, using XLFC over Myrinet. In addition, it can communicate Xwith gateways of other clusters, using TCP/IP over ATM. XThe gateway machines thus forward traffic Xto and from remote clusters. XIn this way, the existence of multiple clusters is transparent to the XManta runtime system. Manta's RMI protocol simply invokes Panda's Xcommunication primitives, which internally calls LFC and/or TCP/IP. X XThe resulting Java system thus is highly transparent, both for the Xprogrammer and the RMI implementor. XThe system hides several complicated issues from the programmer. XFor example, it uses a combination of active messages and TCP/IP, Xbut the application programmer Xsees only a single communication primitive (RMI). XLikewise, Java hides any differences in processor-types Xfrom the programmer. X XAs stated before, parallel applications often have to be aware of the structure Xof the wide-area system, so they can minimize communication over Xthe wide-area links. XManta programs therefore can find out how many clusters there are Xand to which cluster a given machine belongs. XIn Section~\ref{sec:applications}, we will give several examples Xof how this information can be used to optimize programs. X X X\subsection{Performance measurements on the DAS system} X XTable~\ref{tab:lat_bw} shows the latency and throughput Xobtained by Manta RMI and Sun JDK RMI over the Myrinet XLAN and the ATM WAN. XThe latencies are measured for null-RMIs, which take zero parameters Xand do not return a result. XThe maximum throughputs are measured for RMIs that take a large Xarray as parameter. XThe Manta measurements were run on the Linux operating system. XWith Sun JDK over ATM, we used JDK version 1.1.6 on Linux. XThe performance of the JDK on Myrinet was measured on BSD/OS X(using the JDK 1.1.4), because we do not have a Linux port of the JDK Xon Myrinet yet. X XFor intra-cluster communication over Myrinet, Manta is Xmuch faster than the JDK, which uses a slow Xserialization and RMI protocol, executed using a byte code interpreter. XManta uses fast serialization routines generated by the compiler, Xa light-weight RMI protocol, and an efficient communication protocol (Panda). XThe maximum throughput of Manta % still true ? (achieved with arrays of size 16 KByte) Xis 38.0 MByte/sec. XA performance breakdown of Manta RMI and JDK RMI is given in X\cite{maassen++:99:ppopp_manta}. X XFor inter-cluster communication over ATM, we used the wide area link Xbetween the DAS clusters at VU Amsterdam and TU Delft X(see Figure~\ref{fig:das}), Xwhich has the longest latency (and largest distance) Xof the DAS wide-area links. XThe difference in wide-area RMI latency between Manta and the JDK is 1.2 msec. XBoth Manta and the JDK achieve a maximum wide-area throughput Xof 0.55 MByte/sec, Xwhich is almost 75\% of the hardware bandwidth (6 Mbit/sec). X%The JDK RMI protocol is able to achieve less than 50\% of the X%wide-area bandwidth. XThe differences in wide-area latency %and throughput Xbetween Manta and the JDK Xare due to Manta's more efficient serialization and RMI protocols, since Xboth systems use the same communication layer (TCP/IP) over ATM. X X\begin{table}%[p] X{\footnotesize X\begin{center} X\begin{tabular}{l|rr|rr} X ? \multicolumn{2}{|c}{Myrinet} ? \multicolumn{2}{|c}{ATM} \\ X ? Latency ? Throughput ? Latency ? Throughput \\ X ? ($\mu s$) ? (MByte/s) ? ($\mu s$) ? (MByte/s) \\ X\hline XManta ? 42.3 ? 38.0 ? 4350 ? 0.55 \\ XSun JDK ? 1228 ? 4.66 ? 5570 ? 0.55 X\end{tabular} X\caption{Latency and maximum throughput of Manta and Sun JDK} X\label{tab:lat_bw} X\end{center} X} X\end{table} X X X X\section{Application experience} X\label{sec:applications} X XWe implemented four parallel Java applications that communicate via RMI. XInitially, the applications were designed for homogeneous (local area) Xnetworks. We adapted these single cluster versions to Xexploit the hierarchical structure of the wide-area system Xby minimizing the communication overhead over the wide area links, using Xoptimizations similar to those described in X\cite{bal++:98:ipps,plaat++:99:hpca}. XBelow, we briefly discuss the original (single cluster) applications Xas well as the wide-area optimized programs Xand we give performance measurements on the DAS system. X%\footnote{All X%applications except ASP are measured on the actual wide-area DAS system. X%ASP was measured on a local X%emulation system described in \cite{plaat++:99:hpca}, which accurately emulates X%the wide-area system on a single 128-node cluster.} X% %%% when used correctly :-( XWe only present results for Manta, Xas other competitive Java platforms (e.g., the JDK and Kaffe) Xare not yet available on the DAS system (using Myrinet and Linux). X% (Sun's JDK 1.1.4 uses only interpreted code, X% the Kaffe JIT does not yet support RMI, X% and we were unable to run Sun's JIT 1.1.6 on Linux.) X XFor each of the four programs, we will analyze its performance Xon the wide-area DAS system, using the following approach. XThe goal of wide-area parallel programming is to obtain higher speedups Xon multiple clusters than on a single cluster. XTherefore, we have measured the speedups of each program on a single DAS Xcluster and on four DAS clusters, the latter with and without wide-area Xoptimizations. XIn addition, we have measured the speedups on a single cluster with Xthe same total number of nodes, to determine Xhow much performance is lost by using multiple distributed clusters Xinstead of one big centralized cluster. X(All speedups are computed relative to the same program on a single machine.) X XThe results are shown in Figure \ref{fig:performance}. XThe figure contains four bars for each application, giving Xthe speedups on a single cluster of 16 nodes, four clusters of 16 nodes each X(with and without wide-area aware optimizations), Xand a single cluster of 64 nodes. XThe difference between the first two bars thus indicates Xthe performance gain by using multiple 16-node clusters X(at different locations) Xinstead of a single 16-node cluster, without any change to the application Xsource. XThe performance gain achieved by the wide-area optimizations can be seen Xfrom the difference between the second and the third bar of each application. XComparing the second and the third bars with the fourth bar shows how much Xperformance is lost (without and with wide-area optimizations) Xdue to the slow wide-area network. X(The 64-node cluster uses the fast Myrinet network between all nodes.) X X X X\subsection{Successive Overrelaxation} X XRed/black Successive Overrelaxation (SOR) is an iterative method for solving Xdiscretized Laplace equations on a grid. Here, it is used as an example of Xnearest neighbor parallelization methods. XSOR is an iterative algorithm that performs multiple passes over Xa rectangular grid, until the grid changes less than a certain value, Xor a fixed number of iterations has been reached. XThe new value of a grid point is computed using a stencil operation, Xwhich depends only on the previous value of the point Xitself and its four neighbors on the grid. X XThe skeleton code for the single-cluster parallel Java program for SOR Xis given in Figure~\ref{sor-code-single}. XThe parallel algorithm we use distributes the grid row-wise Xamong the available processors, so each machine is assigned Xseveral contiguous rows of the grid, denoted by the interval \emph{LB} Xto \emph{UB} (for lower bound and upper bound). XEach processor runs a Java thread of class \emph{SOR}, Xwhich performs the SOR iterations until the program converges X(see the \emph{run} method). XEach iteration has two phases, for the red and black grid points. XThe processes are logically organized in a linear array. XDue to the stencil operations and the row-wise distribution, every process Xneeds one row of the grid from its left neighbor (row $LB - 1$) and one row Xfrom its right neighbor (row $UB + 1$). X(Exceptions are made for the first and last process, but we have Xomitted this from our skeleton code.) X XAt the beginning of every iteration, each slave process Xexchanges rows with its left and right neighbors and Xthen updates its part of the grid using this boundary information Xfrom its neighbors. XThe row exchange is implemented using a remote object of class \emph{Bin} Xon each processor. This object is a buffer that can contain at most Xone row. It has synchronized methods to put and get data. X X\begin{figure}[!ht] X\scriptsize{ X\input{sor_unopt} X} X\caption{Code skeleton for SOR, implementation for single cluster.} X\label{sor-code-single} X\end{figure} X X XOn a local cluster with a fast switch-based interconnect X(like Myrinet), the exchange between neighbors adds little overhead, Xso parallel SOR obtains a high efficiency. XOn a wide-area system, however, the communication overhead between Xneighbors that are located in different clusters will be high, Xas such communication uses the WAN. XThe Java program allocates neighboring processes Xto the same cluster as much as possible, but the first and/or last process Xin each cluster will have a neighbor in a remote cluster. XTo hide the high latency for such inter-cluster communication, Xthe wide-area optimized Xprogram uses split-phase communication for exchanging rows Xbetween clusters, as shown in Figure~\ref{sor-code-wa}. XIt first initiates an asynchronous send for its boundary rows and Xthen computes on the inner rows of the matrix. When this work is finished, Xa blocking receive for the boundary data from the neighboring machines is done, Xafter which the boundary rows are computed. X XThe optimization is awkward to express in Java, since Java lacks asynchronous Xcommunication. It is implemented by using a Xseparate thread (of class \emph{SenderThread}) for sending the boundary data. XTo send a row to a process on a remote cluster, the row is first Xgiven to a newly created SenderThread; this thread Xwill then put the row into the Bin object of the destination process Xon a remote cluster, using an RMI. During the RMI, the Xoriginal SOR process can continue computing, so communication Xover the wide-area network is overlapped with computation. XFor communication within Xa cluster, the overhead of extra thread-switches slightly outweighs Xthe benefits, so only inter-cluster communication is handled Xin this way (see the method \emph{sendRows}). X X X\begin{figure}[!ht] X\scriptsize{ X\input{sor_opt} X} X\caption{Code skeleton for SOR, implementation for wide-area system.} X\label{sor-code-wa} X\end{figure} X X XThe performance of the SOR program is shown in Figure \ref{fig:performance}. XWe ran a problem with a grid size of $4096 \times 4096$ and a fixed number Xof $64$ iterations. XThe program obtains a high efficiency on a single cluster X(a speedup of 61.1 on 64 processors). XWithout the optimization, SOR on the wide-area system achieves only a speedup Xof $38.1$ on $4 \times 16$ processors. XWith the latency-hiding optimization, Xthe speedup increases to $59.7$, which is close to the Xspeedup on a single 64-node cluster. XLatency hiding thus is very effective for SOR. X X X\subsection{All-pairs Shortest Paths Problem} X XThe All-pairs Shortest Paths (ASP) program Xfinds the shortest path between any pair of nodes in a graph, Xusing a parallel version of Floyd's algorithm. XThe program uses a distance matrix that is divided row-wise among Xthe available processors. XAt the beginning of iteration $k$, all processors need the value Xof the $k$th row of the matrix. The most efficient method for Xexpressing this communication pattern would be to let Xthe processor containing this row (called the owner) broadcast it to all the Xothers. XUnfortunately, Java RMI does not support broadcasting, so this Xcannot be expressed directly in Java. XInstead, we simulate the broadcast with a spanning tree algorithm Ximplemented using RMIs and threads. X XThe skeleton of a single-cluster implementation is shown in XFigure \ref{asp-code-single}. XHere, all processes run a thread of class \emph{Asp}. For broadcasting, they Xcollectively call their \emph{broadcast} method. XInside \emph{broadcast}, all threads except the row owner wait until Xthey receive the row. The owner initiates the broadcast by invoking X\emph{transfer}, which arranges all processes in a binary tree topology. XSuch a tree broadcast is quite efficient inside clusters with fast local Xnetworks. X\emph{transfer} sends the row to its left and right children in the tree, Xusing daemon threads of class \emph{Sender}. XA \emph{Sender} calls \emph{transfer} on its destination node which Xrecursively continues the broadcast. XFor high efficiency, Xsending inside the binary tree has to be performed asynchronously (via daemon Xthreads) because otherwise all intermediate nodes would have to Xwait until the RMIs of the whole successive forwarding tree completed. XAs shown in Figure \ref{fig:performance}, ASP using the binary tree Xbroadcast achieves almost linear speedup when run on a single cluster. XWith a graph of 2000 nodes, it obtains a speedup of 59.3 on a 64-node cluster. X X\begin{figure}[!ht] X\scriptsize{ X\input{asp_unopt} X} X\caption{Code skeleton for ASP, implementation for single cluster.} X\label{asp-code-single} X\end{figure} X XA binary tree broadcast obtains poor performance on the wide-area system, Xcausing the original ASP program to run much slower on four clusters than on Xa single (16-node) cluster (see Figure \ref{fig:performance}). XThe reason is that the spanning tree algorithm does not take the topology Xof the wide-area system into account, and therefore sends the same row Xmultiple times over the same wide-area link. XTo overcome this problem, we implemented a wide-area optimized broadcast Xsimilar to the one used in our MagPIe collective communication library X\cite{kielmann++:99:ppopp_magpie}. XWith the optimized program, the broadcast data is forwarded to all other Xclusters in parallel, over different wide-area links. XWe implement this scheme by designating one of the \emph{Asp} processes Xin each cluster as a \emph{coordinator} for that cluster. XThe broadcast owner asynchronously sends the rows to each \emph{coordinator} Xin parallel. This is achieved by one dedicated thread of class X\emph{Sender} per cluster. Using this approach, each row is only sent once Xto each cluster. Due to the asynchronous send, all wide-area connections can Xbe utilized simultaneously. XInside each cluster, a binary tree topology is used, as in the single-cluster Xprogram. XThe code skeleton of this implementation is Xshown in Figure \ref{asp-code-wa}. XAs shown in Figure \ref{fig:performance}, this optimization significantly Ximproves ASP's application performance and makes the program run faster Xon four 16-node clusters than on a single 16-node cluster. XNevertheless, the speedup on four 16-node clusters lags far behind the Xspeedup on a single cluster of $64$ nodes. XThis is because each processor performs several broadcasts, for different Xiterations of the $k$-loop (see the \emph{run} method). XSubsequent broadcasts from different iterations wait for each other. XA further optimization therefore would be to pipeline the broadcasts Xby dynamically creating new \emph{Sender} Xthreads (one per cluster per broadcast), instead of using dedicated daemon Xthreads. XHowever, this would require a large number Xof dynamically created threads, even increasing with the problem size. X% Unfortunately, the current Manta runtime system can not handle the X% number of threads we would have needed to implement this additional X% optimization. XIf a truly asynchronous RMI would be available, the excessive Xuse of additional threads could be completely avoided and Xthe overhead related to thread creation and thread switching would Xalso disappear. X X\begin{figure}[!ht] X\scriptsize{ X\input{asp_opt} X} X\caption{Code skeleton for ASP, implementation for wide-area system.} X\label{asp-code-wa} X\end{figure} X X X X X\subsection{The Traveling Salesperson Problem} X XThe Traveling Salesperson Problem (TSP) computes Xthe shortest path for a salesperson to visit all cities in a given Xset exactly once, starting in one specific city. XWe use a branch-and-bound algorithm, which prunes a large part of the Xsearch space by ignoring partial routes that are already longer Xthan the current best solution. XThe program is parallelized by distributing the search space over Xthe different processors. XBecause the algorithm performs pruning, however, the amount of computation Xneeded for each sub-space is not known in advance and varies between Xdifferent parts of the search space. Therefore, load balancing Xbecomes an issue. XIn single-cluster systems, X load imbalance can easily be minimized using a centralized Xjob queue. XIn a wide-area system, Xthis would also generate much wide-area communication. XAs wide-area optimization we implemented a static work distribution Xover the different Xclusters. Within each cluster, dynamic load balancing is implemented by Xone job queue per cluster. XThe job queues are \emph{remote} objects, Xso they can be accessed over the network using RMI. XEach job contains an initial path of a fixed number of cities; Xa processor that executes the job computes the lengths of all possible Xcontinuations, pruning paths that are longer than the current Xbest solution. XEach processor runs one \emph{worker} thread that Xrepeatedly fetches jobs from the job queue of its cluster X(using RMI) Xand executes the job, until all work is finished. X XThe TSP program keeps track of the current best solution found so far, Xwhich is used to prune part of the search space. XEach worker contains a copy of this value. XIf a worker finds a better complete route, the program does an RMI to all other Xworkers to update their copies. (To allow these RMIs, the workers Xare declared as remote objects.) X XThe performance for the TSP program on the wide-area DAS system Xis shown in Figure~\ref{fig:performance}, using a 17-city problem. XAs can be seen, the speedup of TSP on the wide-area system is Xonly slightly inferior than on a single $64$-node cluster. Our wide-area Xoptimized version almost completely closes the gap and Xtakes only $2.5\%$ longer than the single, large cluster. X X\begin{figure}[t] X\begin{center} X\psfig{figure=apps.eps,height=7cm} X\caption{Speedups of four Java applications on a single cluster of 16 nodes, X4 WAN-connected clusters of 16 nodes (original and optimized program), Xand a single cluster of 64 nodes.} X\label{fig:performance} X\end{center} X\end{figure} X X\subsection{Iterative Deepening A*} X XIterative Deepening A* is another combinatorial Xsearch algorithm, based on repeated depth-first searches. XIDA* tries to find a solution to a given problem by doing Xa depth-first search up to a certain maximum depth. If the Xsearch fails, it is repeated with a higher search depth, Xuntil a solution is found. XThe search depth is initialized to a lower bound of the solution. XThe algorithm thus performs repeated depth-first searches. XLike branch-and-bound, IDA* uses pruning to avoid searching useless branches. X XWe have written a parallel IDA* program in Java for solving the 15-puzzle X(the sliding tile puzzle). XIDA* is parallelized by searching different parts of the search tree Xconcurrently. XThe program uses a more advanced load balancing mechanism than TSP, Xbased on work stealing. XEach machine maintains its own job queue, but machines can get work from Xother machines when they run out of jobs. XEach job represents a node in the search space. XWhen a machine has obtained a job, it first checks whether it can prune Xthe node. If not, it expands the node by computing the successor Xstates (children) and stores these in its local job queue. XTo obtain a job, each machine first looks in its own job queue; if it Xis empty it tries the job queues of some other machines. XWe implemented one wide-area optimization: Xto avoid wide-area communication for work stealing, Xeach machine first tries to steal jobs from machines in its own cluster. XOnly if that fails, the work queues of Xremote clusters are accessed. In each case, the same mechanism (RMI) is Xused to fetch work, so this heuristic is easy to express in Java. X XFigure \ref{fig:performance} shows the speedups for the IDA* program. XThe program takes about 5\% longer on the wide-area DAS system than Xon a single cluster with 64 nodes. The communication overhead is due to Xwork-stealing between clusters and to the distributed termination detection Xalgorithm used by the program. XThe gain of the wide-area optimization is small in this case. X X% This is due to the synchronous nature of X% work stealing that always needs to wait for RMI results before the computation X% can continue. X% Unfortunately, the reduced wide-area communication of the optimized X% IDA* is compensated by the disadvantage of slower work distribution between X% clusters. As a consequence, our wide-area optimization performs only as fast X% as the unoptimized version which selects nodes randomly from all clusters. X X X X\section{Alternative programming models} X\label{sec:alternative} X XWe have discussed the implementation and wide-area optimization of Xfour parallel applications using the RMI model. XRMI supports transparent invocation of methods on remote objects and thus Xis a natural extension of Java's object model to distributed memory systems. XIn this section, we discuss alternative programming models and we compare Xthem to RMI in terms of expressiveness (ease of programming) and Ximplementation efficiency. XWe will discuss replicated Xobjects \cite{bal++:98:tocs,lee:98:kan_thesis,macbeth++:98:hyperion,topol++:98:icdcs}, XJavaSpaces \cite{freeman++:99:javaspaces}, and XMPI for Java \cite{javagrande:98:mpi_for_java}. XThese alternative models have not been implemented in Xthe Manta system, so we do not provide application measurements. XOur experiences in wide-area parallel programming using replicated objects Xand MPI in combination with other languages (Orca and C) are described Xelsewhere\cite{bal++:98:ipps,kielmann++:99:ppopp_magpie,plaat++:99:hpca}. XWe first briefly describe the four programming models. X X\subsection{The programming models} X X\paragraph{RMI.} X XWith RMI, parallel applications strictly follow Java's object-oriented Xmodel in which client objects invoke methods on server objects in Xa location-transparent way. X% RMI simply makes remoteness of server objects transparent to the clients. XEach remote object is physically located at one machine. X% which may access this object like any other local object. XAlthough the RMI model hides object remoteness from the programmer, Xthe actual object location strongly impacts application performance. X X X\paragraph{Replication.} X XFrom the client's point of view, Xobject replication is conceptually equivalent to the RMI model. XThe difference is in the implementation: objects may be physically Xreplicated on multiple processes. The advantage is that Xread-only operations can be performed locally, Xwithout any communication. The disadvantage is that write operations Xbecome more complex and have to keep object replicas consistent. X X\paragraph{JavaSpaces.} X XJavaSpaces adapt the Linda model \cite{gelernter:85:generativeness} Xto the Java language. Communication occurs Xvia shared data {\em spaces\/} into which {\em entries\/} X(typed collections of Java objects) may be written. Inside a space, Xentries may not be modified, but they may be read or removed (taken) Xfrom a space. XA reader of an entry provides a {\em template\/} Xthat matches the desired entry type and also desired object values stored Xin the entry. XWildcards may be used for object values. XAdditionally, a space may notify an object whenever an entry Xmatching a certain template has been written. X{\em Space\/} objects may be seen as objects that are remote to all Xcommunicating processes; read and write operations are Ximplemented as RMIs to space objects. XJavaSpaces also supports a transaction model, Xallowing multiple operations on space objects to be combined in a Xtransaction that either succeeds or fails as a whole. This feature Xis especially useful for fault-tolerant programs. X% systems, an issue X% that may become important in wide-area parallel computing. X X X\paragraph{MPI.} X XWith the Message Passing Interface (MPI) language binding to Java, Xcommunication is expressed using message passing rather than Xremote method invocations. Processes send messages X(arrays of objects) to each other. Additionally, MPI defines Xcollective operations in which all members of a process Xgroup collectively participate; examples are broadcast and related Xdata redistributions, reduction computations (e.g.,\ computing global sums), Xand barrier synchronization. X X\subsection{Comparison of the models} X XTo compare the suitability of the models for wide-area parallel computing, Xwe study three important aspects. XTable~\ref{tab:models} summarizes this comparison. XIn general, we assume that the underlying programming system (like Manta) Xexposes the physical distribution of the clustered wide-area system. XThis information X% is independent of the programming models we discuss in this section. Xmay be used either by application programs (as with Manta) Xor by programming platforms designed for wide-area systems (e.g., Xthe MagPIe library \cite{kielmann++:99:ppopp_magpie}). X X X X\paragraph{Synchronous vs. asynchronous communication.} X XRemote method invocation is a typical example of synchronous communication. XHere, the client has to wait until the server object has returned the Xresult of the invoked method. This enforces rendezvous-style synchronization Xof the client with another, possibly remote process. XWith asynchronous communication, the client may immediately continue its Xoperation after the communication has been initiated. It may later check or Xwait for completion of the communication operation. XAsynchronous communication is especially important for wide-area computing, Xwhere it can be used to hide the high message latencies by Xoverlapping communication and computation. X XMPI provides asynchronous sending and receiving. X% (e.g.,\ Comm.isend and Comm.irecv). XThe other three models, however, rely on synchronous method invocation Xso applications have to simulate asynchronous communication Xusing multithreading. X% by spawning an additional thread for each asynchronous operation. XFor local-area communication, Xthe corresponding overhead for thread creation and context switching Xmay exceed the cost of a synchronous RMI. To cope with this problem, the Xoptimized code for SOR gets rather complicated, as has been shown in the Xprevious section. XThe broadcast implementation in ASP also requires asynchronous Xcommunication, both in the original (single cluster) and wide-area optimized Xversion. X(With synchronous RMI, a broadcast sender would have to wait for the whole Xspanning tree to complete.) XThe TSP code also needs to treat local and remote communication differently Xwhen updating the value of the currently best solution. XFortunately, TSP is less sensitive to this Xproblem because these updates occur infrequently. XIn IDA*, work stealing is always synchronous but fortunately infrequent. XSo, IDA* is hardly affected by synchronous RMI. X XIn conclusion, for wide-area parallel computing on hierarchical systems, Xdirectly supporting asynchronous communication X(as in MPI) is easier to use and more efficient than using synchronous Xcommunication and multithreading. X X X\paragraph{Explicit vs. implicit receipt.} X XA second issue is the way in which messages are received and method Xinvocations are served. With RMI and with replicated objects, method Xinvocations cause upcalls on the server side, which is a form Xof implicit message receipt. X% freeing application programmers from the burden of explicitly serving them. XMPI provides only explicit message receipt, making the implementations of XTSP and IDA* much harder. Here, incoming messages (for updating the global Xbound or for job requests) have to be polled for by the applications. XThis complicates the programs and makes them also less efficient, because Xfinding the right polling frequency X(and the best places in the applications Xto put polling statements at) is difficult \cite{bal++:98:tocs}. XWith clustered wide-area systems, polling has to simultaneously satisfy the Xneeds of LAN and WAN communication, making the problem of finding the right Xpolling frequency even harder. XWith programming models like RMI that support implicit receipt, Xapplication-level polling is not necessary. X XJavaSpaces provide explicit operations for reading and removing entries Xfrom a space, resulting in the same problems as with MPI. XAdditionally, a space object may notify a potential reader whenever an Xentry has been written that matches the reader's interests. XUnfortunately, this notification simply causes an upcall at the receiver Xside which in turn has to actually perform the read or take operation. XThis causes a synchronous RMI back to the space object. The additional Xoverhead can easily outweigh the benefit of implicit receipt, Xespecially when wide-area networks are used. X X X\paragraph{Point-to-point vs. collective communication.} X XWide-area parallel programming systems can ease the task of the programmer Xby offering higher-level primitives that are mapped easily onto the Xhierarchical structure of the wide-area system. In this respect, Xwe found MPI's collective operations (e.g., broadcast and reduction) to be of Xgreat value. The MagPIe library \cite{kielmann++:99:ppopp_magpie} optimizes XMPI's collective operations for clustered wide-area systems by exploiting Xknowledge about how groups of processes interact. XFor example, a broadcast operation defines Xdata transfers to all processes of a group. XMagPIe uses this information to implement a broadcast that optimally utilizes Xwide-area links; e.g., it takes care that data is sent only once to Xeach cluster. X% Object replication allows similar optimizations for write operations on X% replicated objects, coming close to a broadcast operation. XReplicated objects that are implemented with a write-update Xprotocol~\cite{bal++:98:tocs} can use broadcasting for write operations, Xand thus can also benefit from wide-area optimized broadcast. X XProgramming models without group communication (like RMI and JavaSpaces) Xcannot provide such wide-area optimizations inside a runtime system. XHere, the optimizations are left to the application itself, making Xit more complex. The broadcast implemented for ASP is an example Xof such an application-level optimization that could be avoided by having Xgroup communication in the programming model. XThe MagPIe implementation of ASP \cite{kielmann++:99:ppopp_magpie}, Xfor example, is much simpler than the (wide-area optimized) Java version. XSimilarly, TSP's global bound Xcould be updated using a pre-optimized group operation. X X X\begin{table}%[p] X{\footnotesize X\begin{center} X\begin{tabular}{lllll} X ? RMI ? replication ? JavaSpaces ? MPI \\ X\hline Xsend ? synchronous ? synchronous ? synchronous ? synchronous and asynchronous \\ Xreceive ? implicit ? implicit ? explicit and implicit ? explicit \\ Xcollective communication ? no ? broadcast ? no ? yes X\end{tabular} X\caption{Aspects of programming models} X\label{tab:models} X\end{center} X} X\end{table} X X\subsection{Summary} X XThe remote method invocation model provides a good starting point for Xwide-area parallel programming, because it integrates communication into Xthe object model. Another benefit is RMI's implicit receipt capability Xby which RMIs are served using upcalls. This contributes Xto expressiveness of the programming model as well as to program efficiency, Xespecially with wide-area systems. X XTo be fully suited for parallel systems, RMI needs two augmentations. XThe first one is asynchronous method invocation, especially important with Xwide-area systems. The second extension is the implementation of Xcollective communication operations that transfer the benefits of MPI's Xcollective operations into Java's object model. X XAlthough promising at first glance, JavaSpaces does not really make Xwide-area parallel programming easier, Xbecause operations on space objects are neither asynchronous nor collective. XAs fault-tolerance becomes more important in wide-area computing, Xthe JavaSpaces model along with its transaction feature may receive Xmore attention. X X X X\section{Related work} X\label{sec:related} X XWe have discussed a Java-centric approach to writing wide-area parallel X(metacomputing) applications. XMost other metacomputing systems X(e.g., Globus \cite{Foster:1997} and Legion~\cite{Grimshaw:1997}) Xsupport a variety of languages. XThe SuperWeb \cite{SuperWeb97b}, the Gateway system \cite{Haupt:1999}, XJavelin~\cite{Javelin97}, Javelin++ \cite{Neary:1999}, and XBayanihan~\cite{sarmenta++:99:bayanihan} Xare examples of global computing infrastructures that support Java. XA language-centric approach makes it easier to deal with heterogeneous Xsystems, since the data types that are transferred over the networks Xare limited to the ones supported in the language (thus obviating the need Xfor a separate interface definition language) \cite{Wollrath:1997}. X XMost work on metacomputing focuses on how to build the necessary Xinfrastructure \cite{Arabe:1996,Foster:1997,Grimshaw:1997,Reinefeld:1997}. XIn addition, research on parallel algorithms and applications Xis required, since the bandwidth and latency differences Xin a metacomputer can easily exceed three orders of magnitude X\cite{foster++:98:wide-area-mpi,Foster:1997,Grimshaw:1997,plaat++:99:hpca}. XCoping with such a large non-uniformity in the interconnect Xcomplicates application development. XThe ECO system addresses this problem by automatically generating Xoptimized communication patterns for collective operations Xon heterogeneous networks~\cite{Lowekamp:1996}. XThe AppLeS project favors the integration of workload scheduling into Xthe application level \cite{berman++:96:apples}. X XIn our earlier research, we experimented with optimizing Xparallel programs for a hierarchical interconnect, Xby changing the communication structure \cite{bal++:98:ipps}. XAlso, we studied the sensitivity of such optimized programs to large Xdifferences in latency and bandwidth between the LAN and WAN X\cite{plaat++:99:hpca}. XBased on this experience, we implemented collective communication operations Xas defined by the MPI standard, resulting in improved application Xperformance on wide area systems X\cite{kielmann++:99:ppopp_magpie}. XSome of the ideas of this earlier work have been applied in Xour wide-area Java programs. X% In this work, we investigate application performance on wide area systems X% when Java's RMI mechanism is used for communication. X XThere are many other research projects for parallel programming in Java. X% (see, for example, the JavaGrande Forum at {\em http://www.javagrande.org/}). XTitanium \cite{yelick:1998} is a Java-based Xlanguage for high-performance parallel scientific computing. X% It extends X% Java with features like immutable classes, fast multidimensional array X% access and X% an explicitly parallel SPMD model of communication. The Titanium X% compiler translates Titanium into C. Titanium is built on X% the Split-C/Active Messages back-end. XThe JavaParty system \cite{philippsen:1997} is designed to ease Xparallel cluster programming in Java. In particular, its goal is to run Xmulti-threaded programs with as little change as possible on a Xworkstation cluster. XHyperion~\cite{macbeth++:98:hyperion} also uses the standard Java thread model Xas a basis for parallel programming. XUnlike JavaParty, Hyperion caches remote objects to improve performance. X% Modifications on cached objects are propagated when a thread enters or X% leaves a monitor. X% JavaParty is implemented on top of Java RMI, and thus suffers from X% the same performance problem as RMI. XThe Do! project tries to ease parallel programming in Java using Xparallel and distributed frameworks \cite{launay:1998}. XAjents \cite{Izatt:1999} is a parallel programming environment that Xsupports object migration. XJava/DSM \cite{yu:1997} implements a JVM on top of a Xdistributed shared memory system. XBreg et al.~\cite{Breg:1998} study RMI performance and Xinteroperability. Krishnaswamy et al.~\cite{Krishnaswamy:1998} Ximprove RMI performance somewhat with caching and by using UDP instead of TCP. XNester et al.~\cite{Nester:1999} present new RMI and serialization packages X(drop-in replacements) designed to improve RMI performance. XThe above Java systems are designed for single-level (``flat'') Xparallel machines. XThe Manta system described in this paper, Xon the other hand, is designed for hierarchical systems and uses Xdifferent communication protocols for local and wide area networks. XIt uses a highly optimized RMI implementation, Xwhich is particularly effective for local communication. X X X\section{Conclusions} X\label{sec:conclusions} X XWe have described our experiences in building and using a Xhigh-performance Java system that runs on a geographically distributed X(wide-area) system. XThe goal of our work was to obtain actual experience with a Java-centric Xapproach to metacomputing. XJava's support for parallel processing and heterogeneity Xmake it an attractive candidate for metacomputing. XThe Java system we have built, for example, is highly transparent: Xit provides a single communication primitive (RMI) to the user, Xeven though the implementation uses several communication networks and Xprotocols. X XOur Manta programming system is designed for hierarchical wide-area systems, Xfor example clusters or MPPs connected by wide-area networks. XManta uses a very efficient (active message like) communication protocol Xfor the local interconnect (Myrinet) and TCP/IP for wide-area communication. XThe two communication protocols are provided by the Panda library. XManta's light-weight RMI protocol is implemented on top of Panda and Xis very efficient. X XWe have implemented several parallel applications on this system, using XJava RMI for communication. In general, the RMI model was easy to use. XTo obtain good performance, the programs take the hierarchical structure Xof the wide-area system into account and minimize the amount of communication X(RMIs) over the slow wide-area links. XWith such optimizations in place, the programs can effectively use Xmultiple clusters, even though they are connected by slow links. X XWe compared RMI with other programming models, namely object replication, XJavaSpaces, and MPI for Java. XWe identified several shortcomings of the RMI model. In particular, Xthe lack of asynchronous communication and broadcast complicates programming. XMPI offers both features (and further useful collective operations) Xbut lacks RMI's clean object-oriented model. XObject replication is closer to pure RMI but offers only broadcast-like Xobject updating. XA careful integration of these features into an RMI-based system is Xour next goal for a Java-centric programming platform Xfor wide-area parallel programming. X X X{\small X\section*{Acknowledgements} XThis work is supported in part by a SION grant from the Dutch research Xcouncil NWO, and by a USF grant from the Vrije Universiteit. XThe wide-area DAS system is an initiative of Xthe Advanced School for Computing and Imaging (ASCI). XWe thank Aske Plaat, Raoul Bhoedjang, Rutger Hofman, Ceriel Jacobs, Xand Cees Verstoep for their contributions to this research. XWe thank Cees Verstoep and John Romein for keeping the DAS in good shape, Xand Cees de Laat (University of Utrecht) for getting the wide area links Xof the DAS up and running. X} X X\small X X\bibliographystyle{abbrv} X\bibliography{cpe99} X X\end{document} + END-OF-FILE cpe99.tex chmod 'u=rw,g=r,o=r' 'cpe99.tex' set `wc -c 'cpe99.tex'` count=$1 case $count in 54667) :;; *) echo 'Bad character count in ''cpe99.tex' ??2 echo 'Count should be 54667' ??2 esac echo Extracting 'das.eps' sed 's/^X//' ? 'das.eps' ?? '+ END-OF-FILE ''das.eps' X%!PS-Adobe-2.0 EPSF-2.0 X%%Title: das.fig X%%Creator: fig2dev Version 3.1 Patchlevel 2 X%%CreationDate: Tue May 27 09:31:49 1997 X%%For: koen@efsix (Koen Langendoen) X%Magnification: 0.50 X%%Orientation: Portrait X%%BoundingBox: 0 0 294 275 X%%Pages: 0 X%%BeginSetup X%%IncludeFeature: *PageSize Letter X%%EndSetup X%%EndComments X/$F2psDict 200 dict def X$F2psDict begin X$F2psDict /mtrx matrix put X/col-1 {0 setgray} bind def X/col0 {0.000 0.000 0.000 srgb} bind def X/col1 {0.000 0.000 1.000 srgb} bind def X/col2 {0.000 1.000 0.000 srgb} bind def X/col3 {0.000 1.000 1.000 srgb} bind def X/col4 {1.000 0.000 0.000 srgb} bind def X/col5 {1.000 0.000 1.000 srgb} bind def X/col6 {1.000 1.000 0.000 srgb} bind def X/col7 {1.000 1.000 1.000 srgb} bind def X/col8 {0.000 0.000 0.560 srgb} bind def X/col9 {0.000 0.000 0.690 srgb} bind def X/col10 {0.000 0.000 0.820 srgb} bind def X/col11 {0.530 0.810 1.000 srgb} bind def X/col12 {0.000 0.560 0.000 srgb} bind def X/col13 {0.000 0.690 0.000 srgb} bind def X/col14 {0.000 0.820 0.000 srgb} bind def X/col15 {0.000 0.560 0.560 srgb} bind def X/col16 {0.000 0.690 0.690 srgb} bind def X/col17 {0.000 0.820 0.820 srgb} bind def X/col18 {0.560 0.000 0.000 srgb} bind def X/col19 {0.690 0.000 0.000 srgb} bind def X/col20 {0.820 0.000 0.000 srgb} bind def X/col21 {0.560 0.000 0.560 srgb} bind def X/col22 {0.690 0.000 0.690 srgb} bind def X/col23 {0.820 0.000 0.820 srgb} bind def X/col24 {0.500 0.190 0.000 srgb} bind def X/col25 {0.630 0.250 0.000 srgb} bind def X/col26 {0.750 0.380 0.000 srgb} bind def X/col27 {1.000 0.500 0.500 srgb} bind def X/col28 {1.000 0.630 0.630 srgb} bind def X/col29 {1.000 0.750 0.750 srgb} bind def X/col30 {1.000 0.880 0.880 srgb} bind def X/col31 {1.000 0.840 0.000 srgb} bind def X Xend Xsave X-6.0 299.0 translate X1 -1 scale X X/cp {closepath} bind def X/ef {eofill} bind def X/gr {grestore} bind def X/gs {gsave} bind def X/sa {save} bind def X/rs {restore} bind def X/l {lineto} bind def X/m {moveto} bind def X/rm {rmoveto} bind def X/n {newpath} bind def X/s {stroke} bind def X/sh {show} bind def X/slc {setlinecap} bind def X/slj {setlinejoin} bind def X/slw {setlinewidth} bind def X/srgb {setrgbcolor} bind def X/rot {rotate} bind def X/sc {scale} bind def X/sd {setdash} bind def X/ff {findfont} bind def X/sf {setfont} bind def X/scf {scalefont} bind def X/sw {stringwidth} bind def X/tr {translate} bind def X/tnt {dup dup currentrgbcolor X 4 -2 roll dup 1 exch sub 3 -1 roll mul add X 4 -2 roll dup 1 exch sub 3 -1 roll mul add X 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} X bind def X/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul X 4 -2 roll mul srgb} bind def X/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def X/$F2psEnd {$F2psEnteredState restore end} def X%%EndProlog X X$F2psBegin X10 setmiterlimit Xn 0 792 m 0 0 l 612 0 l 612 792 l cp clip X 0.03000 0.03000 sc X7.500 slw X% Polyline Xn 1500 6600 m 2400 6600 l 2400 9225 l 1500 9225 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 525 6600 m 1425 6600 l 1425 9225 l 525 9225 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 2475 6600 m 3375 6600 l 3375 9225 l 2475 9225 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 375 6750 m 1275 6750 l 1275 9375 l 375 9375 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 2325 6750 m 3225 6750 l 3225 9375 l 2325 9375 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 1350 6750 m 2250 6750 l 2250 9375 l 1350 9375 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 630 7200 m 525 7200 525 7320 105 arcto 4 {pop} repeat X 525 7425 1020 7425 105 arcto 4 {pop} repeat X 1125 7425 1125 7305 105 arcto 4 {pop} repeat X 1125 7200 630 7200 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 630 6900 m 525 6900 525 7020 105 arcto 4 {pop} repeat X 525 7125 1020 7125 105 arcto 4 {pop} repeat X 1125 7125 1125 7005 105 arcto 4 {pop} repeat X 1125 6900 630 6900 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 630 7500 m 525 7500 525 7620 105 arcto 4 {pop} repeat X 525 7725 1020 7725 105 arcto 4 {pop} repeat X 1125 7725 1125 7605 105 arcto 4 {pop} repeat X 1125 7500 630 7500 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 630 7800 m 525 7800 525 7920 105 arcto 4 {pop} repeat X 525 8025 1020 8025 105 arcto 4 {pop} repeat X 1125 8025 1125 7905 105 arcto 4 {pop} repeat X 1125 7800 630 7800 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 630 8100 m 525 8100 525 8220 105 arcto 4 {pop} repeat X 525 8325 1020 8325 105 arcto 4 {pop} repeat X 1125 8325 1125 8205 105 arcto 4 {pop} repeat X 1125 8100 630 8100 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 630 8400 m 525 8400 525 8520 105 arcto 4 {pop} repeat X 525 8625 1020 8625 105 arcto 4 {pop} repeat X 1125 8625 1125 8505 105 arcto 4 {pop} repeat X 1125 8400 630 8400 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 630 8700 m 525 8700 525 8820 105 arcto 4 {pop} repeat X 525 8925 1020 8925 105 arcto 4 {pop} repeat X 1125 8925 1125 8805 105 arcto 4 {pop} repeat X 1125 8700 630 8700 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 630 9000 m 525 9000 525 9120 105 arcto 4 {pop} repeat X 525 9225 1020 9225 105 arcto 4 {pop} repeat X 1125 9225 1125 9105 105 arcto 4 {pop} repeat X 1125 9000 630 9000 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 6900 m 2475 6900 2475 7020 105 arcto 4 {pop} repeat X 2475 7125 2970 7125 105 arcto 4 {pop} repeat X 3075 7125 3075 7005 105 arcto 4 {pop} repeat X 3075 6900 2580 6900 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 7200 m 2475 7200 2475 7320 105 arcto 4 {pop} repeat X 2475 7425 2970 7425 105 arcto 4 {pop} repeat X 3075 7425 3075 7305 105 arcto 4 {pop} repeat X 3075 7200 2580 7200 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 7500 m 2475 7500 2475 7620 105 arcto 4 {pop} repeat X 2475 7725 2970 7725 105 arcto 4 {pop} repeat X 3075 7725 3075 7605 105 arcto 4 {pop} repeat X 3075 7500 2580 7500 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 8400 m 2475 8400 2475 8520 105 arcto 4 {pop} repeat X 2475 8625 2970 8625 105 arcto 4 {pop} repeat X 3075 8625 3075 8505 105 arcto 4 {pop} repeat X 3075 8400 2580 8400 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 7800 m 2475 7800 2475 7920 105 arcto 4 {pop} repeat X 2475 8025 2970 8025 105 arcto 4 {pop} repeat X 3075 8025 3075 7905 105 arcto 4 {pop} repeat X 3075 7800 2580 7800 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 8100 m 2475 8100 2475 8220 105 arcto 4 {pop} repeat X 2475 8325 2970 8325 105 arcto 4 {pop} repeat X 3075 8325 3075 8205 105 arcto 4 {pop} repeat X 3075 8100 2580 8100 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 7500 m 1500 7500 1500 7620 105 arcto 4 {pop} repeat X 1500 7725 1995 7725 105 arcto 4 {pop} repeat X 2100 7725 2100 7605 105 arcto 4 {pop} repeat X 2100 7500 1605 7500 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 8700 m 2475 8700 2475 8820 105 arcto 4 {pop} repeat X 2475 8925 2970 8925 105 arcto 4 {pop} repeat X 3075 8925 3075 8805 105 arcto 4 {pop} repeat X 3075 8700 2580 8700 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2580 9000 m 2475 9000 2475 9120 105 arcto 4 {pop} repeat X 2475 9225 2970 9225 105 arcto 4 {pop} repeat X 3075 9225 3075 9105 105 arcto 4 {pop} repeat X 3075 9000 2580 9000 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 6900 m 1500 6900 1500 7020 105 arcto 4 {pop} repeat X 1500 7125 1995 7125 105 arcto 4 {pop} repeat X 2100 7125 2100 7005 105 arcto 4 {pop} repeat X 2100 6900 1605 6900 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 7200 m 1500 7200 1500 7320 105 arcto 4 {pop} repeat X 1500 7425 1995 7425 105 arcto 4 {pop} repeat X 2100 7425 2100 7305 105 arcto 4 {pop} repeat X 2100 7200 1605 7200 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 7800 m 1500 7800 1500 7920 105 arcto 4 {pop} repeat X 1500 8025 1995 8025 105 arcto 4 {pop} repeat X 2100 8025 2100 7905 105 arcto 4 {pop} repeat X 2100 7800 1605 7800 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 8100 m 1500 8100 1500 8220 105 arcto 4 {pop} repeat X 1500 8325 1995 8325 105 arcto 4 {pop} repeat X 2100 8325 2100 8205 105 arcto 4 {pop} repeat X 2100 8100 1605 8100 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 8400 m 1500 8400 1500 8520 105 arcto 4 {pop} repeat X 1500 8625 1995 8625 105 arcto 4 {pop} repeat X 2100 8625 2100 8505 105 arcto 4 {pop} repeat X 2100 8400 1605 8400 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 8700 m 1500 8700 1500 8820 105 arcto 4 {pop} repeat X 1500 8925 1995 8925 105 arcto 4 {pop} repeat X 2100 8925 2100 8805 105 arcto 4 {pop} repeat X 2100 8700 1605 8700 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1605 9000 m 1500 9000 1500 9120 105 arcto 4 {pop} repeat X 1500 9225 1995 9225 105 arcto 4 {pop} repeat X 2100 9225 2100 9105 105 arcto 4 {pop} repeat X 2100 9000 1605 9000 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 225 1200 m 1125 1200 l 1125 3825 l 225 3825 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 2175 1200 m 3075 1200 l 3075 3825 l 2175 3825 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 1200 1200 m 2100 1200 l 2100 3825 l 1200 3825 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 9075 6900 m 9975 6900 l 9975 9525 l 9075 9525 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 225 6900 m 1125 6900 l 1125 9525 l 225 9525 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 8100 1200 m 9000 1200 l 9000 3825 l 8100 3825 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 7125 6900 m 8025 6900 l 8025 9525 l 7125 9525 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 7125 1200 m 8025 1200 l 8025 3825 l 7125 3825 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 9075 1200 m 9975 1200 l 9975 3825 l 9075 3825 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 2175 6900 m 3075 6900 l 3075 9525 l 2175 9525 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 1200 6900 m 2100 6900 l 2100 9525 l 1200 9525 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 8100 6900 m 9000 6900 l 9000 9525 l 8100 9525 l cp gs col7 0.90 shd ef gr gs col-1 s gr X% Polyline Xn 7380 2250 m 7275 2250 7275 2370 105 arcto 4 {pop} repeat X 7275 2475 7770 2475 105 arcto 4 {pop} repeat X 7875 2475 7875 2355 105 arcto 4 {pop} repeat X 7875 2250 7380 2250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 2550 m 7275 2550 7275 2670 105 arcto 4 {pop} repeat X 7275 2775 7770 2775 105 arcto 4 {pop} repeat X 7875 2775 7875 2655 105 arcto 4 {pop} repeat X 7875 2550 7380 2550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 2850 m 7275 2850 7275 2970 105 arcto 4 {pop} repeat X 7275 3075 7770 3075 105 arcto 4 {pop} repeat X 7875 3075 7875 2955 105 arcto 4 {pop} repeat X 7875 2850 7380 2850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 3150 m 7275 3150 7275 3270 105 arcto 4 {pop} repeat X 7275 3375 7770 3375 105 arcto 4 {pop} repeat X 7875 3375 7875 3255 105 arcto 4 {pop} repeat X 7875 3150 7380 3150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 1350 m 7275 1350 7275 1470 105 arcto 4 {pop} repeat X 7275 1575 7770 1575 105 arcto 4 {pop} repeat X 7875 1575 7875 1455 105 arcto 4 {pop} repeat X 7875 1350 7380 1350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 1650 m 7275 1650 7275 1770 105 arcto 4 {pop} repeat X 7275 1875 7770 1875 105 arcto 4 {pop} repeat X 7875 1875 7875 1755 105 arcto 4 {pop} repeat X 7875 1650 7380 1650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 1950 m 7275 1950 7275 2070 105 arcto 4 {pop} repeat X 7275 2175 7770 2175 105 arcto 4 {pop} repeat X 7875 2175 7875 2055 105 arcto 4 {pop} repeat X 7875 1950 7380 1950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 1650 m 9225 1650 9225 1770 105 arcto 4 {pop} repeat X 9225 1875 9720 1875 105 arcto 4 {pop} repeat X 9825 1875 9825 1755 105 arcto 4 {pop} repeat X 9825 1650 9330 1650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 2250 m 9225 2250 9225 2370 105 arcto 4 {pop} repeat X 9225 2475 9720 2475 105 arcto 4 {pop} repeat X 9825 2475 9825 2355 105 arcto 4 {pop} repeat X 9825 2250 9330 2250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 2850 m 9225 2850 9225 2970 105 arcto 4 {pop} repeat X 9225 3075 9720 3075 105 arcto 4 {pop} repeat X 9825 3075 9825 2955 105 arcto 4 {pop} repeat X 9825 2850 9330 2850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 3450 m 7275 3450 7275 3570 105 arcto 4 {pop} repeat X 7275 3675 7770 3675 105 arcto 4 {pop} repeat X 7875 3675 7875 3555 105 arcto 4 {pop} repeat X 7875 3450 7380 3450 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 1350 m 9225 1350 9225 1470 105 arcto 4 {pop} repeat X 9225 1575 9720 1575 105 arcto 4 {pop} repeat X 9825 1575 9825 1455 105 arcto 4 {pop} repeat X 9825 1350 9330 1350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 7050 m 1350 7050 1350 7170 105 arcto 4 {pop} repeat X 1350 7275 1845 7275 105 arcto 4 {pop} repeat X 1950 7275 1950 7155 105 arcto 4 {pop} repeat X 1950 7050 1455 7050 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 7350 m 1350 7350 1350 7470 105 arcto 4 {pop} repeat X 1350 7575 1845 7575 105 arcto 4 {pop} repeat X 1950 7575 1950 7455 105 arcto 4 {pop} repeat X 1950 7350 1455 7350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 3450 m 8250 3450 8250 3570 105 arcto 4 {pop} repeat X 8250 3675 8745 3675 105 arcto 4 {pop} repeat X 8850 3675 8850 3555 105 arcto 4 {pop} repeat X 8850 3450 8355 3450 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 1950 m 9225 1950 9225 2070 105 arcto 4 {pop} repeat X 9225 2175 9720 2175 105 arcto 4 {pop} repeat X 9825 2175 9825 2055 105 arcto 4 {pop} repeat X 9825 1950 9330 1950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 8250 m 1350 8250 1350 8370 105 arcto 4 {pop} repeat X 1350 8475 1845 8475 105 arcto 4 {pop} repeat X 1950 8475 1950 8355 105 arcto 4 {pop} repeat X 1950 8250 1455 8250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 8550 m 1350 8550 1350 8670 105 arcto 4 {pop} repeat X 1350 8775 1845 8775 105 arcto 4 {pop} repeat X 1950 8775 1950 8655 105 arcto 4 {pop} repeat X 1950 8550 1455 8550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 8850 m 1350 8850 1350 8970 105 arcto 4 {pop} repeat X 1350 9075 1845 9075 105 arcto 4 {pop} repeat X 1950 9075 1950 8955 105 arcto 4 {pop} repeat X 1950 8850 1455 8850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 3450 m 9225 3450 9225 3570 105 arcto 4 {pop} repeat X 9225 3675 9720 3675 105 arcto 4 {pop} repeat X 9825 3675 9825 3555 105 arcto 4 {pop} repeat X 9825 3450 9330 3450 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 2550 m 9225 2550 9225 2670 105 arcto 4 {pop} repeat X 9225 2775 9720 2775 105 arcto 4 {pop} repeat X 9825 2775 9825 2655 105 arcto 4 {pop} repeat X 9825 2550 9330 2550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 7050 m 375 7050 375 7170 105 arcto 4 {pop} repeat X 375 7275 870 7275 105 arcto 4 {pop} repeat X 975 7275 975 7155 105 arcto 4 {pop} repeat X 975 7050 480 7050 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 7350 m 375 7350 375 7470 105 arcto 4 {pop} repeat X 375 7575 870 7575 105 arcto 4 {pop} repeat X 975 7575 975 7455 105 arcto 4 {pop} repeat X 975 7350 480 7350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 3150 m 9225 3150 9225 3270 105 arcto 4 {pop} repeat X 9225 3375 9720 3375 105 arcto 4 {pop} repeat X 9825 3375 9825 3255 105 arcto 4 {pop} repeat X 9825 3150 9330 3150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 7950 m 375 7950 375 8070 105 arcto 4 {pop} repeat X 375 8175 870 8175 105 arcto 4 {pop} repeat X 975 8175 975 8055 105 arcto 4 {pop} repeat X 975 7950 480 7950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 8250 m 375 8250 375 8370 105 arcto 4 {pop} repeat X 375 8475 870 8475 105 arcto 4 {pop} repeat X 975 8475 975 8355 105 arcto 4 {pop} repeat X 975 8250 480 8250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 3150 m 1350 3150 1350 3270 105 arcto 4 {pop} repeat X 1350 3375 1845 3375 105 arcto 4 {pop} repeat X 1950 3375 1950 3255 105 arcto 4 {pop} repeat X 1950 3150 1455 3150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 3450 m 1350 3450 1350 3570 105 arcto 4 {pop} repeat X 1350 3675 1845 3675 105 arcto 4 {pop} repeat X 1950 3675 1950 3555 105 arcto 4 {pop} repeat X 1950 3450 1455 3450 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 3150 m 8250 3150 8250 3270 105 arcto 4 {pop} repeat X 8250 3375 8745 3375 105 arcto 4 {pop} repeat X 8850 3375 8850 3255 105 arcto 4 {pop} repeat X 8850 3150 8355 3150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 7650 m 1350 7650 1350 7770 105 arcto 4 {pop} repeat X 1350 7875 1845 7875 105 arcto 4 {pop} repeat X 1950 7875 1950 7755 105 arcto 4 {pop} repeat X 1950 7650 1455 7650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 7050 m 2325 7050 2325 7170 105 arcto 4 {pop} repeat X 2325 7275 2820 7275 105 arcto 4 {pop} repeat X 2925 7275 2925 7155 105 arcto 4 {pop} repeat X 2925 7050 2430 7050 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 7350 m 2325 7350 2325 7470 105 arcto 4 {pop} repeat X 2325 7575 2820 7575 105 arcto 4 {pop} repeat X 2925 7575 2925 7455 105 arcto 4 {pop} repeat X 2925 7350 2430 7350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 7650 m 2325 7650 2325 7770 105 arcto 4 {pop} repeat X 2325 7875 2820 7875 105 arcto 4 {pop} repeat X 2925 7875 2925 7755 105 arcto 4 {pop} repeat X 2925 7650 2430 7650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 7950 m 2325 7950 2325 8070 105 arcto 4 {pop} repeat X 2325 8175 2820 8175 105 arcto 4 {pop} repeat X 2925 8175 2925 8055 105 arcto 4 {pop} repeat X 2925 7950 2430 7950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 1950 m 1350 1950 1350 2070 105 arcto 4 {pop} repeat X 1350 2175 1845 2175 105 arcto 4 {pop} repeat X 1950 2175 1950 2055 105 arcto 4 {pop} repeat X 1950 1950 1455 1950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 8550 m 2325 8550 2325 8670 105 arcto 4 {pop} repeat X 2325 8775 2820 8775 105 arcto 4 {pop} repeat X 2925 8775 2925 8655 105 arcto 4 {pop} repeat X 2925 8550 2430 8550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 8850 m 2325 8850 2325 8970 105 arcto 4 {pop} repeat X 2325 9075 2820 9075 105 arcto 4 {pop} repeat X 2925 9075 2925 8955 105 arcto 4 {pop} repeat X 2925 8850 2430 8850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 9150 m 2325 9150 2325 9270 105 arcto 4 {pop} repeat X 2325 9375 2820 9375 105 arcto 4 {pop} repeat X 2925 9375 2925 9255 105 arcto 4 {pop} repeat X 2925 9150 2430 9150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 7950 m 1350 7950 1350 8070 105 arcto 4 {pop} repeat X 1350 8175 1845 8175 105 arcto 4 {pop} repeat X 1950 8175 1950 8055 105 arcto 4 {pop} repeat X 1950 7950 1455 7950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 7050 m 8250 7050 8250 7170 105 arcto 4 {pop} repeat X 8250 7275 8745 7275 105 arcto 4 {pop} repeat X 8850 7275 8850 7155 105 arcto 4 {pop} repeat X 8850 7050 8355 7050 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 9150 m 1350 9150 1350 9270 105 arcto 4 {pop} repeat X 1350 9375 1845 9375 105 arcto 4 {pop} repeat X 1950 9375 1950 9255 105 arcto 4 {pop} repeat X 1950 9150 1455 9150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 7650 m 8250 7650 8250 7770 105 arcto 4 {pop} repeat X 8250 7875 8745 7875 105 arcto 4 {pop} repeat X 8850 7875 8850 7755 105 arcto 4 {pop} repeat X 8850 7650 8355 7650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 7950 m 8250 7950 8250 8070 105 arcto 4 {pop} repeat X 8250 8175 8745 8175 105 arcto 4 {pop} repeat X 8850 8175 8850 8055 105 arcto 4 {pop} repeat X 8850 7950 8355 7950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 8250 m 8250 8250 8250 8370 105 arcto 4 {pop} repeat X 8250 8475 8745 8475 105 arcto 4 {pop} repeat X 8850 8475 8850 8355 105 arcto 4 {pop} repeat X 8850 8250 8355 8250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 8550 m 8250 8550 8250 8670 105 arcto 4 {pop} repeat X 8250 8775 8745 8775 105 arcto 4 {pop} repeat X 8850 8775 8850 8655 105 arcto 4 {pop} repeat X 8850 8550 8355 8550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 8850 m 8250 8850 8250 8970 105 arcto 4 {pop} repeat X 8250 9075 8745 9075 105 arcto 4 {pop} repeat X 8850 9075 8850 8955 105 arcto 4 {pop} repeat X 8850 8850 8355 8850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 9150 m 8250 9150 8250 9270 105 arcto 4 {pop} repeat X 8250 9375 8745 9375 105 arcto 4 {pop} repeat X 8850 9375 8850 9255 105 arcto 4 {pop} repeat X 8850 9150 8355 9150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 7650 m 375 7650 375 7770 105 arcto 4 {pop} repeat X 375 7875 870 7875 105 arcto 4 {pop} repeat X 975 7875 975 7755 105 arcto 4 {pop} repeat X 975 7650 480 7650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 7050 m 7275 7050 7275 7170 105 arcto 4 {pop} repeat X 7275 7275 7770 7275 105 arcto 4 {pop} repeat X 7875 7275 7875 7155 105 arcto 4 {pop} repeat X 7875 7050 7380 7050 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 7350 m 7275 7350 7275 7470 105 arcto 4 {pop} repeat X 7275 7575 7770 7575 105 arcto 4 {pop} repeat X 7875 7575 7875 7455 105 arcto 4 {pop} repeat X 7875 7350 7380 7350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 7650 m 7275 7650 7275 7770 105 arcto 4 {pop} repeat X 7275 7875 7770 7875 105 arcto 4 {pop} repeat X 7875 7875 7875 7755 105 arcto 4 {pop} repeat X 7875 7650 7380 7650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 7950 m 7275 7950 7275 8070 105 arcto 4 {pop} repeat X 7275 8175 7770 8175 105 arcto 4 {pop} repeat X 7875 8175 7875 8055 105 arcto 4 {pop} repeat X 7875 7950 7380 7950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 8250 m 7275 8250 7275 8370 105 arcto 4 {pop} repeat X 7275 8475 7770 8475 105 arcto 4 {pop} repeat X 7875 8475 7875 8355 105 arcto 4 {pop} repeat X 7875 8250 7380 8250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 8550 m 7275 8550 7275 8670 105 arcto 4 {pop} repeat X 7275 8775 7770 8775 105 arcto 4 {pop} repeat X 7875 8775 7875 8655 105 arcto 4 {pop} repeat X 7875 8550 7380 8550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 8850 m 7275 8850 7275 8970 105 arcto 4 {pop} repeat X 7275 9075 7770 9075 105 arcto 4 {pop} repeat X 7875 9075 7875 8955 105 arcto 4 {pop} repeat X 7875 8850 7380 8850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 7380 9150 m 7275 9150 7275 9270 105 arcto 4 {pop} repeat X 7275 9375 7770 9375 105 arcto 4 {pop} repeat X 7875 9375 7875 9255 105 arcto 4 {pop} repeat X 7875 9150 7380 9150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 2850 m 8250 2850 8250 2970 105 arcto 4 {pop} repeat X 8250 3075 8745 3075 105 arcto 4 {pop} repeat X 8850 3075 8850 2955 105 arcto 4 {pop} repeat X 8850 2850 8355 2850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 7050 m 9225 7050 9225 7170 105 arcto 4 {pop} repeat X 9225 7275 9720 7275 105 arcto 4 {pop} repeat X 9825 7275 9825 7155 105 arcto 4 {pop} repeat X 9825 7050 9330 7050 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 7350 m 9225 7350 9225 7470 105 arcto 4 {pop} repeat X 9225 7575 9720 7575 105 arcto 4 {pop} repeat X 9825 7575 9825 7455 105 arcto 4 {pop} repeat X 9825 7350 9330 7350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 7650 m 9225 7650 9225 7770 105 arcto 4 {pop} repeat X 9225 7875 9720 7875 105 arcto 4 {pop} repeat X 9825 7875 9825 7755 105 arcto 4 {pop} repeat X 9825 7650 9330 7650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 7950 m 9225 7950 9225 8070 105 arcto 4 {pop} repeat X 9225 8175 9720 8175 105 arcto 4 {pop} repeat X 9825 8175 9825 8055 105 arcto 4 {pop} repeat X 9825 7950 9330 7950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 8250 m 9225 8250 9225 8370 105 arcto 4 {pop} repeat X 9225 8475 9720 8475 105 arcto 4 {pop} repeat X 9825 8475 9825 8355 105 arcto 4 {pop} repeat X 9825 8250 9330 8250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 8550 m 9225 8550 9225 8670 105 arcto 4 {pop} repeat X 9225 8775 9720 8775 105 arcto 4 {pop} repeat X 9825 8775 9825 8655 105 arcto 4 {pop} repeat X 9825 8550 9330 8550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 8850 m 9225 8850 9225 8970 105 arcto 4 {pop} repeat X 9225 9075 9720 9075 105 arcto 4 {pop} repeat X 9825 9075 9825 8955 105 arcto 4 {pop} repeat X 9825 8850 9330 8850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 9330 9150 m 9225 9150 9225 9270 105 arcto 4 {pop} repeat X 9225 9375 9720 9375 105 arcto 4 {pop} repeat X 9825 9375 9825 9255 105 arcto 4 {pop} repeat X 9825 9150 9330 9150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 7350 m 8250 7350 8250 7470 105 arcto 4 {pop} repeat X 8250 7575 8745 7575 105 arcto 4 {pop} repeat X 8850 7575 8850 7455 105 arcto 4 {pop} repeat X 8850 7350 8355 7350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 2550 m 8250 2550 8250 2670 105 arcto 4 {pop} repeat X 8250 2775 8745 2775 105 arcto 4 {pop} repeat X 8850 2775 8850 2655 105 arcto 4 {pop} repeat X 8850 2550 8355 2550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 2250 m 8250 2250 8250 2370 105 arcto 4 {pop} repeat X 8250 2475 8745 2475 105 arcto 4 {pop} repeat X 8850 2475 8850 2355 105 arcto 4 {pop} repeat X 8850 2250 8355 2250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 1950 m 8250 1950 8250 2070 105 arcto 4 {pop} repeat X 8250 2175 8745 2175 105 arcto 4 {pop} repeat X 8850 2175 8850 2055 105 arcto 4 {pop} repeat X 8850 1950 8355 1950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 1650 m 8250 1650 8250 1770 105 arcto 4 {pop} repeat X 8250 1875 8745 1875 105 arcto 4 {pop} repeat X 8850 1875 8850 1755 105 arcto 4 {pop} repeat X 8850 1650 8355 1650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 8355 1350 m 8250 1350 8250 1470 105 arcto 4 {pop} repeat X 8250 1575 8745 1575 105 arcto 4 {pop} repeat X 8850 1575 8850 1455 105 arcto 4 {pop} repeat X 8850 1350 8355 1350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 3450 m 2325 3450 2325 3570 105 arcto 4 {pop} repeat X 2325 3675 2820 3675 105 arcto 4 {pop} repeat X 2925 3675 2925 3555 105 arcto 4 {pop} repeat X 2925 3450 2430 3450 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 3150 m 2325 3150 2325 3270 105 arcto 4 {pop} repeat X 2325 3375 2820 3375 105 arcto 4 {pop} repeat X 2925 3375 2925 3255 105 arcto 4 {pop} repeat X 2925 3150 2430 3150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 2850 m 2325 2850 2325 2970 105 arcto 4 {pop} repeat X 2325 3075 2820 3075 105 arcto 4 {pop} repeat X 2925 3075 2925 2955 105 arcto 4 {pop} repeat X 2925 2850 2430 2850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 2850 m 1350 2850 1350 2970 105 arcto 4 {pop} repeat X 1350 3075 1845 3075 105 arcto 4 {pop} repeat X 1950 3075 1950 2955 105 arcto 4 {pop} repeat X 1950 2850 1455 2850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 2550 m 2325 2550 2325 2670 105 arcto 4 {pop} repeat X 2325 2775 2820 2775 105 arcto 4 {pop} repeat X 2925 2775 2925 2655 105 arcto 4 {pop} repeat X 2925 2550 2430 2550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 2250 m 2325 2250 2325 2370 105 arcto 4 {pop} repeat X 2325 2475 2820 2475 105 arcto 4 {pop} repeat X 2925 2475 2925 2355 105 arcto 4 {pop} repeat X 2925 2250 2430 2250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 1950 m 2325 1950 2325 2070 105 arcto 4 {pop} repeat X 2325 2175 2820 2175 105 arcto 4 {pop} repeat X 2925 2175 2925 2055 105 arcto 4 {pop} repeat X 2925 1950 2430 1950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 1650 m 2325 1650 2325 1770 105 arcto 4 {pop} repeat X 2325 1875 2820 1875 105 arcto 4 {pop} repeat X 2925 1875 2925 1755 105 arcto 4 {pop} repeat X 2925 1650 2430 1650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 1350 m 2325 1350 2325 1470 105 arcto 4 {pop} repeat X 2325 1575 2820 1575 105 arcto 4 {pop} repeat X 2925 1575 2925 1455 105 arcto 4 {pop} repeat X 2925 1350 2430 1350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 3450 m 375 3450 375 3570 105 arcto 4 {pop} repeat X 375 3675 870 3675 105 arcto 4 {pop} repeat X 975 3675 975 3555 105 arcto 4 {pop} repeat X 975 3450 480 3450 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 3150 m 375 3150 375 3270 105 arcto 4 {pop} repeat X 375 3375 870 3375 105 arcto 4 {pop} repeat X 975 3375 975 3255 105 arcto 4 {pop} repeat X 975 3150 480 3150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 2850 m 375 2850 375 2970 105 arcto 4 {pop} repeat X 375 3075 870 3075 105 arcto 4 {pop} repeat X 975 3075 975 2955 105 arcto 4 {pop} repeat X 975 2850 480 2850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 2250 m 1350 2250 1350 2370 105 arcto 4 {pop} repeat X 1350 2475 1845 2475 105 arcto 4 {pop} repeat X 1950 2475 1950 2355 105 arcto 4 {pop} repeat X 1950 2250 1455 2250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 2550 m 375 2550 375 2670 105 arcto 4 {pop} repeat X 375 2775 870 2775 105 arcto 4 {pop} repeat X 975 2775 975 2655 105 arcto 4 {pop} repeat X 975 2550 480 2550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 2250 m 375 2250 375 2370 105 arcto 4 {pop} repeat X 375 2475 870 2475 105 arcto 4 {pop} repeat X 975 2475 975 2355 105 arcto 4 {pop} repeat X 975 2250 480 2250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 1950 m 375 1950 375 2070 105 arcto 4 {pop} repeat X 375 2175 870 2175 105 arcto 4 {pop} repeat X 975 2175 975 2055 105 arcto 4 {pop} repeat X 975 1950 480 1950 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 1650 m 375 1650 375 1770 105 arcto 4 {pop} repeat X 375 1875 870 1875 105 arcto 4 {pop} repeat X 975 1875 975 1755 105 arcto 4 {pop} repeat X 975 1650 480 1650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 1350 m 375 1350 375 1470 105 arcto 4 {pop} repeat X 375 1575 870 1575 105 arcto 4 {pop} repeat X 975 1575 975 1455 105 arcto 4 {pop} repeat X 975 1350 480 1350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 9150 m 375 9150 375 9270 105 arcto 4 {pop} repeat X 375 9375 870 9375 105 arcto 4 {pop} repeat X 975 9375 975 9255 105 arcto 4 {pop} repeat X 975 9150 480 9150 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 2550 m 1350 2550 1350 2670 105 arcto 4 {pop} repeat X 1350 2775 1845 2775 105 arcto 4 {pop} repeat X 1950 2775 1950 2655 105 arcto 4 {pop} repeat X 1950 2550 1455 2550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 8850 m 375 8850 375 8970 105 arcto 4 {pop} repeat X 375 9075 870 9075 105 arcto 4 {pop} repeat X 975 9075 975 8955 105 arcto 4 {pop} repeat X 975 8850 480 8850 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 480 8550 m 375 8550 375 8670 105 arcto 4 {pop} repeat X 375 8775 870 8775 105 arcto 4 {pop} repeat X 975 8775 975 8655 105 arcto 4 {pop} repeat X 975 8550 480 8550 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 1650 m 1350 1650 1350 1770 105 arcto 4 {pop} repeat X 1350 1875 1845 1875 105 arcto 4 {pop} repeat X 1950 1875 1950 1755 105 arcto 4 {pop} repeat X 1950 1650 1455 1650 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 1455 1350 m 1350 1350 1350 1470 105 arcto 4 {pop} repeat X 1350 1575 1845 1575 105 arcto 4 {pop} repeat X 1950 1575 1950 1455 105 arcto 4 {pop} repeat X 1950 1350 1455 1350 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X% Polyline Xn 2430 8250 m 2325 8250 2325 8370 105 arcto 4 {pop} repeat X 2325 8475 2820 8475 105 arcto 4 {pop} repeat X 2925 8475 2925 8355 105 arcto 4 {pop} repeat X 2925 8250 2430 8250 105 arcto 4 {pop} repeat X cp gs col10 0.90 shd ef gr gs col10 s gr X30.000 slw X% Interp Spline Xgs n 3375 8400 m X 4312.0 8528.1 4687.0 8453.1 4875 8100 curveto X 5034.8 7799.9 4537.5 7434.0 4500 7200 curveto X 4471.8 7024.0 4490.5 6780.3 4575 6225 curveto X gs col17 s gr X gr X X% Interp Spline Xgs n 7125 8400 m X 6588.5 8395.1 6382.2 8320.1 6300 8100 curveto X 6203.6 7841.8 6681.0 7659.7 6675 7425 curveto X 6669.5 7209.9 6326.1 7019.1 6300 6825 curveto X 6278.4 6663.9 6334.6 6476.4 6525 6075 curveto X gs col17 s gr X gr X X% Interp Spline Xgs n 7125 2700 m X 6301.2 2714.5 5945.0 2789.5 5700 3000 curveto X 5556.2 3123.5 5465.8 3424.9 5475 3600 curveto X 5480.4 3703.1 5536.7 3815.6 5700 4050 curveto X gs col17 s gr X gr X X% Interp Spline Xgs n 3075 2700 m X 3752.7 2632.2 4033.9 2707.2 4200 3000 curveto X 4407.7 3366.1 3801.1 3720.7 3900 4050 curveto X 3947.0 4206.4 4078.2 4318.9 4425 4500 curveto X gs col17 s gr X gr X X% Interp Spline Xgs n 4725 4275 m X 4581.1 4313.2 4309.1 4481.6 4200 4575 curveto X 4113.3 4649.1 3910.5 4793.7 3900 4950 curveto X 3890.4 5092.4 4052.2 5248.7 4125 5325 curveto X 4170.0 5372.2 4329.4 5371.9 4350 5475 curveto X 4391.2 5681.2 4089.4 5794.9 4050 5925 curveto X 4028.1 5997.2 4011.6 6148.3 4050 6225 curveto X 4097.9 6320.9 4270.9 6410.1 4350 6450 curveto X 4515.2 6533.4 4843.5 6785.8 5100 6675 curveto X 5209.9 6627.5 5161.6 6429.7 5250 6375 curveto X 5408.2 6277.2 5705.6 6331.3 5850 6375 curveto X 5915.1 6394.7 5998.9 6514.8 6075 6525 curveto X 6208.4 6542.9 6428.0 6451.4 6525 6375 curveto X 6669.7 6261.1 6890.0 5985.7 6900 5775 curveto X 6907.1 5625.2 6744.1 5420.9 6675 5325 curveto X 6631.3 5264.4 6490.6 5165.6 6450 5100 curveto X 6389.5 5002.1 6282.1 4783.4 6300 4650 curveto X 6310.2 4573.9 6453.9 4515.2 6450 4425 curveto X 6443.1 4264.8 6262.4 4112.9 6150 4050 curveto X 6008.5 3970.8 5693.1 3966.4 5550 3975 curveto X 5403.6 3983.8 5084.2 4017.4 4950 4125 curveto X 4913.6 4154.2 4919.2 4247.7 4875 4275 curveto X 4835.4 4299.4 4760.7 4265.5 4725 4275 curveto X cp gs col17 0.50 shd ef gr gs col17 s gr X gr X X/Times-Roman ff 450.00 scf sf X500 6450 m Xgs 1 -1 sc (VU Amsterdam) col-1 sh gr X/Times-Roman ff 450.00 scf sf X7000 6675 m Xgs 1 -1 sc (UvA Amsterdam) col-1 sh gr X/Times-Roman ff 450.00 scf sf X7950 1050 m Xgs 1 -1 sc (Leiden) col-1 sh gr X/Times-Roman ff 450.00 scf sf X1200 1050 m Xgs 1 -1 sc (Delft) col-1 sh gr X/Times-Roman ff 360.00 scf sf X1500 4200 m Xgs 1 -1 sc (24) col-1 sh gr X/Times-Roman ff 360.00 scf sf X8400 4200 m Xgs 1 -1 sc (24) col-1 sh gr X/Times-Roman ff 360.00 scf sf X8400 9900 m Xgs 1 -1 sc (24) col-1 sh gr X/Times-Roman ff 360.00 scf sf X%1500 9900 m X1350 9900 m Xgs 1 -1 sc (128) col-1 sh gr X/Helvetica ff 450.00 scf sf X4650 5100 m Xgs 1 -1 sc (6 Mbit/s) col7 sh gr X/Helvetica ff 450.00 scf sf X4875 5625 m Xgs 1 -1 sc (ATM) col7 sh gr X$F2psEnd Xrs + END-OF-FILE das.eps chmod 'u=rw,g=r,o=r' 'das.eps' set `wc -c 'das.eps'` count=$1 case $count in 37645) :;; *) echo 'Bad character count in ''das.eps' ??2 echo 'Count should be 37645' ??2 esac echo Extracting 'make' sed 's/^X//' ? 'make' ?? '+ END-OF-FILE ''make' Xlatex cpe99.tex Xlatex cpe99.tex Xbibtex cpe99 Xlatex cpe99.tex Xlatex cpe99.tex Xdvips cpe99.dvi ? cpe99.ps X + END-OF-FILE make chmod 'u=rwx,g=rx,o=rx' 'make' set `wc -c 'make'` count=$1 case $count in 105) :;; *) echo 'Bad character count in ''make' ??2 echo 'Count should be 105' ??2 esac echo Extracting 'panda-atm.eps' sed 's/^X//' ? 'panda-atm.eps' ?? '+ END-OF-FILE ''panda-atm.eps' X%!PS-Adobe-2.0 EPSF-2.0 X%%Title: panda-atm.eps X%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 X%%CreationDate: Mon Dec 21 14:29:59 1998 X%%For: kielmann@kajak (Thilo Kielmann) X%%Orientation: Portrait X%%BoundingBox: 0 0 728 189 X%%Pages: 0 X%%BeginSetup X%%EndSetup X%%Magnification: 1.0000 X%%EndComments X/$F2psDict 200 dict def X$F2psDict begin X$F2psDict /mtrx matrix put X/col-1 {0 setgray} bind def X/col0 {0.000 0.000 0.000 srgb} bind def X/col1 {0.000 0.000 1.000 srgb} bind def X/col2 {0.000 1.000 0.000 srgb} bind def X/col3 {0.000 1.000 1.000 srgb} bind def X/col4 {1.000 0.000 0.000 srgb} bind def X/col5 {1.000 0.000 1.000 srgb} bind def X/col6 {1.000 1.000 0.000 srgb} bind def X/col7 {1.000 1.000 1.000 srgb} bind def X/col8 {0.000 0.000 0.560 srgb} bind def X/col9 {0.000 0.000 0.690 srgb} bind def X/col10 {0.000 0.000 0.820 srgb} bind def X/col11 {0.530 0.810 1.000 srgb} bind def X/col12 {0.000 0.560 0.000 srgb} bind def X/col13 {0.000 0.690 0.000 srgb} bind def X/col14 {0.000 0.820 0.000 srgb} bind def X/col15 {0.000 0.560 0.560 srgb} bind def X/col16 {0.000 0.690 0.690 srgb} bind def X/col17 {0.000 0.820 0.820 srgb} bind def X/col18 {0.560 0.000 0.000 srgb} bind def X/col19 {0.690 0.000 0.000 srgb} bind def X/col20 {0.820 0.000 0.000 srgb} bind def X/col21 {0.560 0.000 0.560 srgb} bind def X/col22 {0.690 0.000 0.690 srgb} bind def X/col23 {0.820 0.000 0.820 srgb} bind def X/col24 {0.500 0.190 0.000 srgb} bind def X/col25 {0.630 0.250 0.000 srgb} bind def X/col26 {0.750 0.380 0.000 srgb} bind def X/col27 {1.000 0.500 0.500 srgb} bind def X/col28 {1.000 0.630 0.630 srgb} bind def X/col29 {1.000 0.750 0.750 srgb} bind def X/col30 {1.000 0.880 0.880 srgb} bind def X/col31 {1.000 0.840 0.000 srgb} bind def X Xend Xsave X-97.0 399.0 translate X1 -1 scale X X/cp {closepath} bind def X/ef {eofill} bind def X/gr {grestore} bind def X/gs {gsave} bind def X/sa {save} bind def X/rs {restore} bind def X/l {lineto} bind def X/m {moveto} bind def X/rm {rmoveto} bind def X/n {newpath} bind def X/s {stroke} bind def X/sh {show} bind def X/slc {setlinecap} bind def X/slj {setlinejoin} bind def X/slw {setlinewidth} bind def X/srgb {setrgbcolor} bind def X/rot {rotate} bind def X/sc {scale} bind def X/sd {setdash} bind def X/ff {findfont} bind def X/sf {setfont} bind def X/scf {scalefont} bind def X/sw {stringwidth} bind def X/tr {translate} bind def X/tnt {dup dup currentrgbcolor X 4 -2 roll dup 1 exch sub 3 -1 roll mul add X 4 -2 roll dup 1 exch sub 3 -1 roll mul add X 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} X bind def X/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul X 4 -2 roll mul srgb} bind def X/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def X/$F2psEnd {$F2psEnteredState restore end} def X%%EndProlog X X$F2psBegin X10 setmiterlimit Xn -1000 7322 m -1000 -1000 l 14087 -1000 l 14087 7322 l cp clip X 0.06299 0.06299 sc X% Polyline X15.000 slw Xn 13065 3360 m 11940 3360 l 11940 3810 l 13065 3810 l cp gs col0 s gr X% Polyline Xn 11040 4260 m 9915 4260 l 9915 4710 l 11040 4710 l cp gs col0 s gr X% Polyline Xn 11040 3810 m 9915 3810 l 9915 4260 l 11040 4260 l cp gs col0 s gr X% Polyline Xn 11040 3360 m 9915 3360 l 9915 3810 l 11040 3810 l cp gs col0 s gr X% Polyline Xn 2700 4725 m 1575 4725 l 1575 5175 l 2700 5175 l cp gs col0 s gr X% Polyline Xn 2700 4275 m 1575 4275 l 1575 4725 l 2700 4725 l cp gs col0 s gr X% Polyline Xn 2700 3825 m 1575 3825 l 1575 4275 l 2700 4275 l cp gs col0 s gr X% Polyline Xn 2700 3375 m 1575 3375 l 1575 3825 l 2700 3825 l cp gs col0 s gr X% Polyline Xn 8325 4725 m 9450 4725 l 9450 5175 l 8325 5175 l cp gs col0 s gr X% Polyline Xn 11040 4710 m 9915 4710 l 9915 5160 l 11040 5160 l cp gs col0 s gr X% Polyline Xn 13065 3810 m 11940 3810 l 11940 4260 l 13065 4260 l cp gs col0 s gr X% Polyline Xn 13065 4260 m 11940 4260 l 11940 4710 l 13065 4710 l cp gs col0 s gr X% Polyline Xn 4740 4740 m 3615 4740 l 3615 5190 l 4740 5190 l cp gs col0 s gr X% Polyline Xn 4740 4290 m 3615 4290 l 3615 4740 l 4740 4740 l cp gs col0 s gr X% Polyline Xn 4740 3840 m 3615 3840 l 3615 4290 l 4740 4290 l cp gs col0 s gr X% Polyline Xn 4740 3390 m 3615 3390 l 3615 3840 l 4740 3840 l cp gs col0 s gr X% Polyline Xn 13065 4710 m 11940 4710 l 11940 5160 l 13065 5160 l cp gs col0 s gr X% Polyline Xn 8325 4275 m 9450 4275 l 9450 4725 l 8325 4725 l cp gs col0 s gr X% Polyline Xn 6300 4725 m 5175 4725 l 5175 5175 l 6300 5175 l cp gs col0 s gr X% Polyline Xn 6300 4275 m 5175 4275 l 5175 4725 l 6300 4725 l cp gs col0 s gr X/Helvetica-Bold ff 270.00 scf sf X4178 4598 m Xgs 1 -1 sc (Panda) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X4178 5062 m Xgs 1 -1 sc (LFC) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 180.00 scf sf X4178 3690 m Xgs 1 -1 sc (Application) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X4178 4155 m Xgs 1 -1 sc (Manta) dup sw pop 2 div neg 0 rm col0 sh gr X% Polyline Xn 3944 5744 m 4089 5744 l 4236 6181 l 4381 6181 l gs col0 s gr X/Helvetica-Bold ff 270.00 scf sf X10478 4125 m Xgs 1 -1 sc (Manta) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X10478 5032 m Xgs 1 -1 sc (LFC) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 180.00 scf sf X10478 3660 m Xgs 1 -1 sc (Application) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X2138 5047 m Xgs 1 -1 sc (LFC) dup sw pop 2 div neg 0 rm col0 sh gr X% Polyline Xn 10681 5744 m 10536 5744 l 10389 6181 l 10244 6181 l gs col0 s gr X/Helvetica-Bold ff 180.00 scf sf X2138 3675 m Xgs 1 -1 sc (Application) dup sw pop 2 div neg 0 rm col0 sh gr X% Polyline Xn 10244 5744 m 10389 5744 l 10536 6181 l 10681 6181 l gs col0 s gr X/Helvetica-Bold ff 270.00 scf sf X12503 4125 m Xgs 1 -1 sc (Manta) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X12503 4568 m Xgs 1 -1 sc (Panda) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X12503 5032 m Xgs 1 -1 sc (LFC) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 180.00 scf sf X12503 3660 m Xgs 1 -1 sc (Application) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X2138 4583 m Xgs 1 -1 sc (Panda) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X10478 4568 m Xgs 1 -1 sc (Panda) dup sw pop 2 div neg 0 rm col0 sh gr X% Polyline Xn 5743 4728 m 5743 5178 l gs col0 s gr X% Polyline Xn 4500 5625 m 3825 5625 l 3825 6300 l 4500 6300 l cp gs col0 s gr X% Polyline Xn 5490 5175 m 5490 5985 l 4500 5985 l gs col0 s gr X% Polyline Xgs clippath X6633 5790 m 6921 5850 l 6633 5910 l 7005 5910 l 7005 5790 l cp Xclip Xn 5985 5175 m 5985 5850 l 6975 5850 l gs col0 s gr gr X X% arrowhead Xn 6633 5790 m 6921 5850 l 6633 5910 l 6681 5850 l 6633 5790 l cp gs col7 1.00 shd ef gr col0 s X/Helvetica-Bold ff 270.00 scf sf X2138 4140 m Xgs 1 -1 sc (Manta) dup sw pop 2 div neg 0 rm col0 sh gr X% Polyline Xn 4381 5744 m 4236 5744 l 4089 6181 l 3944 6181 l gs col0 s gr X% Polyline Xn 8882 4728 m 8882 5178 l gs col0 s gr X% Polyline Xn 10125 5625 m 10800 5625 l 10800 6300 l 10125 6300 l cp gs col0 s gr X% Polyline Xn 9135 5175 m 9135 5985 l 10125 5985 l gs col0 s gr X% Polyline Xgs clippath X7992 5910 m 7704 5850 l 7992 5790 l 7620 5790 l 7620 5910 l cp Xclip Xn 8640 5175 m 8640 5850 l 7650 5850 l gs col0 s gr gr X X% arrowhead Xn 7992 5910 m 7704 5850 l 7992 5790 l 7944 5850 l 7992 5910 l cp gs col7 1.00 shd ef gr col0 s X% Polyline Xn 12495 5175 m 12495 5985 l 10800 5985 l gs col0 s gr X% Polyline Xn 10460 5175 m 10460 5625 l gs col0 s gr X% Polyline Xn 4165 5175 m 4165 5625 l gs col0 s gr X% Polyline Xn 2135 5175 m 2135 5985 l 3825 5985 l gs col0 s gr X/Helvetica-Bold ff 270.00 scf sf X7290 5715 m Xgs 1 -1 sc (ATM) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X5760 4590 m Xgs 1 -1 sc (Panda) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 180.00 scf sf X5490 5040 m Xgs 1 -1 sc (LFC) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 180.00 scf sf X6030 5040 m Xgs 1 -1 sc (TCP) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X8865 4590 m Xgs 1 -1 sc (Panda) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 180.00 scf sf X9135 5040 m Xgs 1 -1 sc (LFC) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 180.00 scf sf X8595 5040 m Xgs 1 -1 sc (TCP) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 225.00 scf sf X2250 5850 m Xgs 1 -1 sc (Myrinet) col0 sh gr X/Helvetica-Bold ff 225.00 scf sf X12375 5850 m Xgs 1 -1 sc (Myrinet) dup sw pop neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X3150 4320 m Xgs 1 -1 sc (. . .) dup sw pop 2 div neg 0 rm col0 sh gr X/Helvetica-Bold ff 270.00 scf sf X11475 4320 m Xgs 1 -1 sc (. . .) dup sw pop 2 div neg 0 rm col0 sh gr X$F2psEnd Xrs + END-OF-FILE panda-atm.eps chmod 'u=rw,g=r,o=r' 'panda-atm.eps' set `wc -c 'panda-atm.eps'` count=$1 case $count in 8604) :;; *) echo 'Bad character count in ''panda-atm.eps' ??2 echo 'Count should be 8604' ??2 esac echo Extracting 'sor_opt' sed 's/^X//' ? 'sor_opt' ?? '+ END-OF-FILE ''sor_opt' X\begin{verbatim} Xpublic class SenderThread implements Runnable { X private Bin dest; X private double[] row; X X public SenderThread(Bin dest, double[] row) { X this.dest = dest; X this.row = row; X } X X public void run() { X dest.put(row); X } X} X Xpublic remote class Bin { X // same as in single-cluster implementation X} X Xpublic remote class SOR extends RemoteThread { X private Bin leftBin, rightBin; // Remote bins of left and right neighbors. X private Bin myLeftBin, myRightBin; // My own bin objects. X X public void sendRows() { X if (leftBoundary) { // Am I at a cluster boundary? X new SenderThread(leftBin, matrix[LB]).start(); // Asynchronous send. X } else { X leftBin.put(matrix[LB]); // synchronous RMI. X } X X Same for row UB to right neighbor ... X } X X public void receiveRows() { X matrix[LB-1] = myLeftBin.get(); X matrix[UB+1] = myRightBin.get(); X } X X public void run() { X do { // do red/black SOR on the interval LB .. UB X sendRows(); // Send rows LB and UB to neighbors X Calculate red fields in local rows LB+1 ... UB-1 X receiveRows(); // Receive rows LB-1 and UB+1 X Calculate red fields in local rows LB and UB X X sendRows(); // Send rows LB and UB to neighbors X Calculate black fields in local rows LB+1 ... UB-1 X receiveRows(); // Receive rows LB-1 and UB+1 X Calculate black fields in local rows LB and UB X } while (....) X } X} X\end{verbatim} + END-OF-FILE sor_opt chmod 'u=rw,g=r,o=r' 'sor_opt' set `wc -c 'sor_opt'` count=$1 case $count in 1567) :;; *) echo 'Bad character count in ''sor_opt' ??2 echo 'Count should be 1567' ??2 esac echo Extracting 'sor_unopt' sed 's/^X//' ? 'sor_unopt' ?? '+ END-OF-FILE ''sor_unopt' X\begin{verbatim} Xpublic remote class Bin { X public synchronized void put(double [] row) { X Wait until the bin is empty and save the new row. X } X X public synchronized double [] get() { X Wait until the bin is full and return the row. X } X} X Xpublic remote class SOR extends RemoteThread { X private Bin leftBin, rightBin; // Remote bins of left and right neighbors. X private Bin myLeftBin, myRightBin; // My own bin objects. X private double[][] matrix; // The matrix we are calculating on. X X public void sendRows() { X leftBin.put(matrix[LB]); // synchronous RMI (first row of my partition) X rightBin.put(matrix[UB]); // synchronous RMI (last row of my partition) X } X X public void receiveRows() { X matrix[LB-1] = myLeftBin.get(); X matrix[UB+1] = myRightBin.get(); X } X X public void run() { X do { // do red/black SOR on the interval LB .. UB X sendRows(); // Send rows LB and UB to neighbors X receiveRows(); // Receive rows LB-1 and UB+1 X Calculate red fields in local rows LB ... UB X X sendRows(); // Send rows LB and UB to neighbors X receiveRows(); // Receive rows LB-1 and UB+1 X Calculate black fields in local rows LB ... UB X X } while (....) X } X} X\end{verbatim} + END-OF-FILE sor_unopt chmod 'u=rw,g=r,o=r' 'sor_unopt' set `wc -c 'sor_unopt'` count=$1 case $count in 1327) :;; *) echo 'Bad character count in ''sor_unopt' ??2 echo 'Count should be 1327' ??2 esac exit 0