Abstract
Parallell programmering blir mer og mer viktig ettersom vi får flere prosesseringsenheter i en datamaskin. Derimot kan slik programmering være vanskelig, fordi det kreves ekstra administrativ kode for å sette i gang parallellitet. Programflyten er også vanskeligere å se for seg, når forskjellige oppgaver i programmet kjører selvstendig i parallell. Derfor er Java PRP(Parallell recursive procedures) laget for å være et program mellom brukerens sekvensielle program, og kompilatoren. Java PRP lager et parallelt program, basert på det sekvensielle programmet, uten at det har noe påvirkning på resultatet. Dette gjør at man kan muligens oppnå bedre kjøretider, uten at man må ta for seg den administrative koden selv. Denne versjonen av Java PRP har sett nærmere på påvirkningen av delte variabler i parallelle programmer, og hvordan dette kan håndteres. Løsningen er at Java PRP tar for seg faseoppdelte programmer, der hver fase har en parallell del og en sekvensiell del, der vi kan håndtere delte variabler i den sekvensielle delen, og dermed få full parallellitet i den parallelle delen. Denne masteroppgaven tar for seg tre eksempler, hvor vi sammenligner en sekvensiell versjon og Java PRP sin parallelle versjon. De to første, nemlig finn største tall i en mengde og Quicksort, er ikke kjørt i flere faser, men baserer seg på én metode. Det siste og største eksempelet er Delaunay triangulering, og er et større program i tre faser. I alle tre eksemplene får vi en speedup. Selve Java PRP programmet kan man finne på http://folk.uio.no/peterlei. Her finner man filen under navnet JavaPRP.java.
Parallel programming becomes more important as we get more processing units in a computer. Such programming can be difficult, because it requires extra administrative code to initiate the parallell execution. The flow of the program can also be difficult to visualize, when several tasks in the program runs independantly in parallell. That is why Java PRP(Parallel recursive procedures) is created as a program between the users sequential program and the compiler. Java PRP creates a parallel program, based upon the sequential program, without affecting the results. This makes it possible to perhaps achieve faster execution times, without handling the administrative code that follows parallel programming. This version of Java PRP looks more into the influence of shared variables in parallel programs, and how to handle these. The solution is that Java PRP can handle phasedivided programs, where each phase contains a parallel part and a sequential part, where we can handle shared variables in the sequential part, and get a full parallell execution in the parallel part. This thesis shows three examples, where we compare a sequential version and a parallell version created by Java PRP. The first two, which is finding the largest number among several numbers and Quicksort, is not divided into phases, but is based upon one method. The last and largest example is Delaunay triangulation, and is a larger program in three phases. We got a speedup in all three examples. The Java PRP program can be found at http://folk.uio.no/peterlei. Here the file is under the name JavaPRP.java.