• Aucun résultat trouvé

The Hyperion system: Compiling multithreaded Java bytecode for distributed execution

N/A
N/A
Protected

Academic year: 2021

Partager "The Hyperion system: Compiling multithreaded Java bytecode for distributed execution"

Copied!
23
0
0

Texte intégral

(1)

HAL Id: inria-00563581

https://hal.inria.fr/inria-00563581

Submitted on 6 Feb 2011

HAL is a multi-disciplinary open access

archive for the deposit and dissemination of

sci-entific research documents, whether they are

pub-lished or not. The documents may come from

teaching and research institutions in France or

L’archive ouverte pluridisciplinaire HAL, est

destinée au dépôt et à la diffusion de documents

scientifiques de niveau recherche, publiés ou non,

émanant des établissements d’enseignement et de

recherche français ou étrangers, des laboratoires

The Hyperion system: Compiling multithreaded Java

bytecode for distributed execution

Gabriel Antoniu, Luc Bougé, Philip Hatcher, Mark Macbeth, Keith Mcguigan,

Raymond Namyst

To cite this version:

Gabriel Antoniu, Luc Bougé, Philip Hatcher, Mark Macbeth, Keith Mcguigan, et al.. The

Hyper-ion system: Compiling multithreaded Java bytecode for distributed executHyper-ion. Parallel Computing,

Elsevier, 2001, 27, pp.1279-1297. �10.1016/S0167-8191(01)00093-X�. �inria-00563581�

(2)

Compiling multithreaded Java byte ode for distributed exe ution

? Gabriel Antoniu a;1 , Lu Bougé a , Philip Hat her b , Mark Ma Beth b , Keith M Guigan b

and Raymond Namyst a a

LIP,ENS Lyon,46 Allée d'Italie, 69364 Lyon Cedex 07,Fran e. b

Dept. Computer S ien e, Univ.New Hampshire, Durham, NH 03824, USA.

Abstra t

Our work ombines Java ompilation to native ode with a run-time library that exe utesJavathreadsinadistributed-memoryenvironment.ThisallowsaJava pro-grammerto view a lusterof pro essorsasexe utinga single Javavirtual ma hine. The separate pro essors aresimply resour es for exe uting Java threads with true parallelism, and the run-time system provides the illusion of a shared memory on top oftheprivatememoriesofthepro essors.The environment we presentis avail-ableon top of several UNIXsystemsand an usea large varietyof ommuni ation interfa esthankstothehighportabilityofits run-timesystem.Toevaluateour ap-proa h, we ompare serial C, serial Java, and multithreaded Java implementations ofabran h-and-boundsolutiontotheminimal- ostmap- oloringproblem.All mea-surementshavebeen arriedoutontwoplatformsusingtwodierent ommuni ation interfa es: SISCI/SCI andMPI-BIP/Myrinet.

Key words: Java, ompiling, distributedsharedmemory, Java onsisten y, multithreading, Hyperion, PM2

1 Introdu tion

The Javaprogramminglanguage isanattra tivevehi le for onstru ting par-allelprograms toexe ute on lustersof omputers. The Java languagedesign ?

A preliminary version of this work has been presented at the Euro-Par 2000 Conferen e, Muni h,Germany,August 2000.

1

(3)

ofbothathreadprogrammingmodelandtheuseofadistributed-shared mem-ory(DSM).Whilemanyresear hershaveendeavoredtobuildJava-basedtools for parallelprogramming,we think most people have failedtoappre iate the possibilitiesinherent inJava'suse of threadsand arelaxed memory model.

There are a large number of parallel Java eorts that onne t multiple Java virtual ma hines by utilizingJava's Remote-Method-Invo ation fa ility (e.g., [15℄)orbygraftinganexistingmessage-passinglibrary(e.g.,[6,7℄)ontoJava. Inour workwe viewa lusterasexe utingasingleJava virtual ma hine.The separate nodes of the luster are hidden from the programmer and are sim-ply resour es for exe uting Java threads with true parallelism.The separate memories of the nodes are also hidden from the programmer and our imple-mentation must support the illusion of a shared memory within the ontext of the Java memory model, whi h is relaxed in that it does not require se-quential onsisten y.(See[8℄fora omparisonofour workwithanRMI-based approa h.)

Ourapproa his most losely relatedtoeorts toimplementJavainterpreters on top of a distributed shared memory [911℄. However, we are interested in omputationally intensive programs that an exploit parallel hardware. We expe t that the ost of ompilingtonative ode willbere overedmany times overinthe ourseof runningsu hprograms.Therefore wefo us on ombining Java ompilation with support for exe uting Java threads in a distributed-memory environment.

Our work is done in the ontext of the Hyperion environment for the high-performan e exe ution of Java programs. Hyperion was developed at the University of New Hampshire and omprises aJava-byte ode-to-Ctranslator and a run-time library for the distributed exe ution of Java threads. Hype-rion has been built using the PM2 distributed, multithreaded run-time sys-tem from the É ole Normale Supérieure de Lyon [12℄. As well as providing lightweight threads and e ient inter-node ommuni ation, PM2 provides a generi distributed-shared-memory layer, DSM-PM2 [13℄. Another important advantage ofPM2 is itshigh portabilityonseveral UNIXplatforms and ona largevarietyof ommuni ationinterfa esand proto ols(BIP,SCI, VIA,MPI, TCP). Thanks to this feature, Java programs ompiled by Hyperion an be exe uted with true parallelismin allthese environments.

Inthis paperwedes ribethe overalldesignof theHyperionsystem,the strat-egy followed for the implementation of Hyperion using PM2, and a prelim-inary evaluation of Hyperion/PM2 by omparing serial C, serial Java, and multithreaded Java implementations of a bran h-and-bound solution to the minimal- ost map- oloringproblem. The evaluation is performedon two dif-ferent platforms using two dierent ommuni ation interfa es: the SISCI

(4)

in-javac

Sun’s

compiler

java2c

compiler

Prog.java

gcc

Prog.class

Prog

libs

(bytecode)

Prog.[ch]

Fig.1.Compiling Javaprograms withHyperion

terfa e on top of a SCI network [14℄ and the MPI-BIP interfa e on top of a Myrinet network [15℄.

2 The Hyperion system

Our vision is that programmers will develop Java programs using the work-stations ontheir desks and then submit the programs for produ tion runs to ahigh-performan e Java exe utionserver that appears asa resour e onthe network. Instead of the onventional Java paradigmof pulling byte ode ba k to their workstation for exe ution, programmers will push byte ode to the high-performan e server forremote exe ution. Upon arrivalat the server, the byte ode istranslatedfornativeexe utiononthe pro essorsoftheserver. We utilize our own Java-byte ode-to-C ompiler (java2 ) for this task and then leverage the native C ompilerfor the translation toma hine ode.

As an aside, note that the se urity issues surrounding pushing or pulling byte odes an be handled dierently. When pulling byte odes, users want to bring appli ations from potentially untrusted lo ations on the network. The Java features for byte ode validation an be very useful in this ontext. In ontrast, when pushing byte odes to a high-performan e Java server, on-ventional se urity methods might be employed, su h as only a epting pro-grams from trusted users. However, the Java se urity features ould still be useful if one wanted to support an open Java server, a epting programs fromuntrusted users.

Code generation in java2 is straightforward (see Figure1). Ea h virtual ma- hine instru tionis translateddire tly intoaseparate Cstatement,similarto the approa hestaken inthe Harissa [16℄orToba [17℄ ompilers. Asaresultof this method, we rely on the C ompiler to remove all the extraneous tempo-rary variables reated along the way. Currently, java2 supports allnon-wide format instru tions aswell asex eption handling.

Thejava2 ompileralsoin ludesanoptimizerforimprovingtheperforman e ofobje treferen es withrespe t tothe distributed-sharedmemory.For exam-ple, if an obje t is referen ed on ea h iteration of a loop, the optimizer will lift out of the loopthe ode for obtainingalo ally a hed opyof the obje t.

(5)

head via a simple pointer. This optimizationneeds to be supported by both ompileranalysis andrun-timesupport toensurethatthelo al a he willnot be ushed for the duration of the loop.

Tobuildauserprogram,user lasslesare ompiled(rstbyHyperion'sjava2 andthenthegeneratedC odeby aC ompiler)andlinked withtheHyperion run-timelibraryand withthe ne essary externallibraries.TheHyperion run-time system is stru tured as a olle tion of modules that intera t with one another(see Figure 2).Wenow present the main ones.

JavaAPIsupport Hyperion urrentlyusestheSunMi rosystemsJDK1.1 as the basis for its Java API support. Classes in the Java API that do not in lude native methods an simply be ompiled by java2 . However, lasses with native methods need to have those native methods written by hand to t the Hyperion design. Unfortunately, the Sun JDK 1.1 has a large number of native methods s attered throughout the API lasses. To date, we have only implemented a smallnumber of these native methods and therefore our supportforthefullAPIislimited.WehopethatotherreleasesofJava2(e.g., Sun JDK 1.2) willbe more amenable tobeing ompiledby java2 .

Thread subsystem The thread module provides support for lightweight threads, on top of whi h Java threads an be implemented. This support in ludes thread reation/destru tion and thread syn hronization using mu-texes. For portability reasons, we model the interfa e to this subsystem on the ore fun tionsprovided by POSIX threads. Additionally,the thread sub-system provides anAPI for threadmigration,whi h weplan touse infuture investigations of dynami and transparent appli ationload balan ing.

Communi ation subsystem The ommuni ation subsystem supports message transmission between the nodes of a luster. The interfa e is based upon message handlers being asyn hronously invoked on the re eiving end. This interfa e is mandatory sin e most ommuni ations, either one-way or round-trip, must o ur withoutany expli it ontributionof the remotenode: in oming requests are handled by a spe ial daemon thread whi h runs on- urrently with the appli ation threads. For example, in our implementation of the Javamemory model, one node of a luster an asyn hronouslyrequest data fromanother node.

(6)

invalidateCa he Invalidate allentriesinthe a he

updateMainMemory Updatemainmemory withmodi ationsmade to obje ts inthe a he

get Retrieve a eld from an obje t previously loaded into the a he

put Modifya eld inan obje t previously loaded into the a he

Table 1

Interfa e between the Hyperionmemory subsystem and theimplementation layer.

Memorysubsystem TheMemorysubsystemisresponsiblefor implement-ingthe Javamemory model. Its interfa eis based uponthe operational spe -i ation of the Java memory model [18℄. The model utilizes both a main memory and thread a hes. Table 1 lists the key primitives of the Hyper-ionmemory subsystem. These primitives on eptually manipulate the alling thread's a he and/or the main memory. (The Hyperion implementation of the Javamemory modelis dis ussed in detail inSe tion4.)

Hyperion's memory subsystem also in ludes me hanisms for obje t allo a-tion, garbage olle tion and distributed syn hronization. Java monitors and the asso iated wait/notifymethods are supported by atta hing mutexes and ondition variables from the Hyperion threads module to the Java obje ts managed by the Hyperion memory layer.

Notethat the wholedesign ofthe memory subsystem (and the orresponding API)isbasedonobje ts.However, theDSMsupportmaybepage-based.The memory subsystem interfa e hides su h details from the rest of the system. More informationabout this point isgiven in Se tion3.

Load balan er The load balan er isresponsible for hoosing the most ap-propriatenodeonwhi htopla eanewly reated thread.The urrentstrategy is rather simple: threads are assigned to nodes in a round-robin fashion. We use a distributed algorithm, with ea h node using round-robin pla ement of its lo ally reated threads, independently of the other nodes. More omplex load balan ing strategies based on dynami thread migrationand on the in-tera tion between thread migrationand the memory onsisten y me hanisms are urrently under investigation.

(7)

Communication

subsystem

balancer

subsystem

Memory

Load

Thread

subsystem

PM2 API: pm2_rpc, pm2_thread_create, etc.

DSM subsystem

PM2

Hyperion runtime

Native

Java API

Thread subsystem

Comm. subsystem

Fig. 2.Overviewof theHyperion software ar hite ture 3 Implementing Hyperion on top of PM2

Asspe iedinthepreviousse tion,ea hhigh-level omponentoftheHyperion runtime(namelythethread, ommuni ationandmemorysubsystems)requires that a number of fun tionalities be supported by the (lower) implementation layer. The urrent implementationofthe Hyperion runtime isbaseduponthe PM2 distributed multithreaded environment (Figure 2), whi h provides the features needed by all subsystems. Nevertheless, other implementations are possible(analternativeimplementationofthememorysubsystem is urrently under study). In this paper, we fo us onthe PM2 implementation.

PM2's programming interfa e allows user-level threads to be reated lo ally or remotely and to ommuni ate through Remote Pro edure Calls (RPCs). Besides, PM2 provides a thread migration me hanism that allows threads to be transparently and preemptively moved from one node to another during theirexe ution. Su hafun tionalityistypi allyuseful toimplementdynami load-balan ingpoli ies. Finally,the a essto a ommonglobal address spa e isavailableviaadistributedshared memory fa ility:the DSM-PM2 [13℄layer.

MostHyperion run-timeprimitivesinthe thread, ommuni ation and shared memorysubsystems are implementedthrough dire t mappingontothe orre-sponding PM2routines.

Threadsubsystem Thethread omponentofHyperionisaverythinlayer that interfa es to PM2's thread library, alled Mar el. Mar el is an e ient, user-level,POSIX-likethreadpa kagefeaturingthreadmigration.Mostofthe fun tions inMar el's API provide the same syntax and semanti s asthe or-responding POSIX Threads fun tions. However, it is important to note that theHyperionthread omponentuses the PM2thread omponentthroughthe

(8)

typi al when using a lassi al Pthreads- ompliant pa kage. PM2 implements a areful integration of multithreading and ommuni ation that a tually re-quiredseveral modi ationstothethreadmanagementfun tions(e.g.,thread reation).

Communi ationsubsystem The ommuni ation omponentof Hyperion is implemented using PM2 remote pro edure alls, whi h allowPM2 threads toinvoketheremoteexe utionofuser-dened servi es(i.e.,fun tions).Onthe remote node, PM2 RPC invo ations an either be handled by a pre-existing threadorthey aninvolvethe reationofanewthread.Thislatter fun tional-ity allows ustoeasilyimplementHyperion's ommuni ation subsystem. PM2 utilizes ageneri ommuni ation pa kage alled Madeleine [19℄ that provides an e ient interfa e to a wide range of high-performan e ommuni ation li-braries, in ludinglow-levelones. The following ommuni ation interfa es are urrently supported: BIPontopof aMyrinet network,SISCIontop of aSCI network, VIA, the Virtual Interfa e Ar hite ture, MPI and TCP.

Memory subsystem The memory management primitives des ribed in Table 1 are implemented on top of PM2's distributed-shared-memory layer, DSM-PM2 [13℄. DSM-PM2 provides a portable, ongurable implementation platform for multithreaded DSM onsisten y proto ols. It has been designed tobegeneri enoughtosupportmultiple onsisten ymodels.Besides, alterna-tiveproto olsareavailableforagiven onsisten ymodel,therebyenablingthe programmertopossibly tunethe DSMsystem a ording tothespe i appli- ation needs. Currently, two built-in alternative proto ols provide Sequential onsisten y,and twoother provideRelease onsisten y. Also,new onsisten y models and proto ols an be easily implemented using the existing generi DSM-PM2 library routines.

DSM-PM2 is stru tured in layers. At the high level, a DSM proto ol poli y layer is responsible for implementing onsisten y models out of a subset of the available library routines. The library routines (used to bring a opy of a page to a thread, to invalidate all opies of a page, et .) are grouped in the lower-level DSM proto ol library layer. Finally, these library routines are built on top of two base omponents: the DSM page manager and the DSM ommuni ation module. The DSM page manager is essentially dedi ated to thelow-levelmanagementofmemorypages.Itimplementsadistributedtable ontaining page ownership informationand maintains the appropriate a ess rightson ea hnode. The DSM ommuni ation module is responsible for pro-vidingelementary ommuni ationme hanisms,su hasdelivering requestsfor page opies,sending pages, and invalidating pages.

(9)

Main memory

x

Thread T

x

Cache

use(x)

store(x)

write(x)

load(x)

assign(x)

read(x)

Fig.3.Intera tions between the thread a he and themainmemory asspe iedby theJavaMemoryModel

The DSM-PM2 user has three alternativesthat may be utilized a ording to the user's spe i needs: (1) use a built-inproto ol, (2) build a new proto ol outof asubset oflibraryroutines, or(3)writenewproto olsusingthe APIof theDSM page manager andDSM ommuni ation module (formoreelaborate features not implemented by the library routines). The memory subsystem primitives of Hyperion (loadIntoCa he, updateMainMemory , invalidateCa he, get and put) have been implemented using this latter approa h, a ording tothe spe i ation of the Java Memory Model, asdetailed inSe tion 4.

4 Implementing the Java memory model on a distributed luster

4.1 The Java memorymodel

A entral aspe t of Hyperion's design is on erned with the implementation oftheabstra t memorymodelofJavawithinaphysi allydistributed environ-ment.TheHyperionsystemmustprovidetheillusionofauniformlya essible, shared obje t memory, whi h is independent of the physi al obje t lo ations a ross the luster.

The Java Memory Model (JMM) allows Java threads to use their private memory to a he values retrieved from main memory. Ca hing greatly im-proves performan e if the appli ation exhibits temporallo ality,by a essing a a hed obje t multipletimes before the a he is invalidated. The

(10)

spe i a-thread may utilize its a he. It spe ies that ea h Java thread is on eptu-ally equipped with a lo al a he, intera ting with a ommon main memory (Figure3).A threadmay perform use and assign a tionsto a ess values for variables that have been a hed lo ally. The use a tion retrieves a variable's value fromthe a he foruse by the thread's exe utionengine. The assign a -tion overwrites a variable's value in the a he with a new value provided by theexe utionengine.Thetransferofavariable'svaluefromthemainmemory to the a he of a thread is ompleted by the unique pairing of a read a tion performed by mainmemory with aload a tionperformedby the thread.The read a tion retrieves the variable's value frommain memory and transmitsit tothe thread.The load a tion a epts the value frommainmemory andputs itin the thread's a he lo ationfor the variable.The reverse transfer,from a thread's a he ba k tomain memory,is ompletedby the unique pairingof a store a tion performed by the threadwith awrite a tion performed by main memory.The store a tiontransmits tomain memory the value for a variable residinginthe thread's a he. The write a tiona epts the value transmitted by the thread and deposits it inthe main memory lo ation for the variable.

The JMM also denes syn hronization a tions. Java monitors are des ribed interms of lo ks and ea hJavaobje tis asso iatedwith alo k, whi h isalso stored in the main memory. A lo k may only be held by a single thread at a time. (A thread requesting a lo k held by another thread willblo k untilthe lo kbe omesavailableandtherequestingthreadisabletoobtainit.)Threads may request lo k and unlo k a tions and the main memory is responsible for ompleting these a tions. When a thread a quires a lo k, it must ush all variablesfromits a he. Beforeathreadreleasesa lo k,it must rsttransmit ba ktomainmemoryallvaluesitassignedsin eita quiredthelo k.Thesetwo rules ensure that the onventional use of lo ks to prote t a shared variable, will work orre tly. After a thread grabs the lo k, the rst referen e to the variable will ause the variable value to be read from the main memory and loaded into the thread's a he. The variable an then be updated and, when the threadperformsthe unlo k, the updated value willbe storedand written ba k tomain memory,so as tobe visibleto otherthreads.

4.2 A distributed implementation in Hyperion

In Hyperion, the main memory region for an obje t is on its home node, the nodeonwhi htheobje twas reated.Thehomenodeisin hargeofmanaging the master opy of the obje t. Initially, the obje ts are stored ontheir home nodes and an then be repli ated if a essed on other nodes. On using an obje t, forinstan e asthe right-hand side of anassignment,the lo al opy of the obje t in the node's a he is a essed; if no opy is present, then one is

(11)

an obje t, for instan e through the left-hand side of anassignment, the lo al opy of the obje t in the node's a he isassigned; if no opy is present, then afresh opy is loaded.

Fora thread exe utinga lo k a tion, Hyperionrst performs the ode ne es-sary for the thread to a quire the lo k, then updates main memory with all assignedvaluesinthe a he (viatheupdateMainMemoryprimitive),andnally invalidates the a he (viathe invalidateCa he primitive).For athread exe ut-ingthe unlo k a tion,the implementationrst updatesmainmemorywithall assignedvalues inthe a he (againvia the updateMainMemory primitive)and then performs the ode ne essary forthe threadto releasethe lo k.

Notethatthe JMMonlyrequires thatthe a he beinvalidatedwhenalo k is a quired,but that Hyperion alsoupdates main memory. The update of main memoryisnot expli itinthe JMM rulesinthis situation,but itisimpliedby the separate rule that requires a store a tion be subsequently performed for avariableprior to aload a tionfor the variable, if anassign a tion has been previouslyperformedforthe variable.Iftheupdate ofmainmemory werenot done prior to the a he invalidation, then any assigned values in the a he would be lostwhen the a he wasinvalidated,inviolation of this rule.

Hyperion uses spe i a essprimitivestoshareddata: the getand put prim-itives. This allows us to dete t and re ord all modi ations to lo ally a hed obje ts using a bitmap. The put primitive uses it to re ord all writes to the obje t, using obje t-eld granularity. All lo al modi ations are sent to the home node of the page by the updateMainMemory primitive.When updating main memory, Hyperion identies all updatedvariablesin the a he. Then it further identies the home for all su h variables and generates RPCs to all the homestotransmitthe updated values. The allingthreadmust blo k un-tilall su hRPCs are expli itlya knowledged with ananswering RPC, whi h indi atesthatthe updatedvalueswere re eived and storedatthe homenode. A knowledgments are ne essary in order toprevent a threadfrom ontinuing on and releasing the lo k early. Su h an early release would lead to an er-ror, if another thread a quired the lo k and a hed variables that had been updated by the other thread, but for whi h the new values had not yet been writteninto main memory.

Java obje ts are implemented on top of DSM-PM2 pages. If an obje t spans several pages,allthe pagesare a hed lo allywhenthe obje t isloaded. Con-sequently, loading an obje t into the lo al a he may generate prefet hing, sin eallobje tsonthe orrespondingpage(s)are a tuallybroughttothe ur-rent node. This pre-fet hing is Java ompliant be ause early read and load a tionsare expli itlyallowed, aslongasthey are performedafterthelastlo k a tion performed by the thread. Sin e ea h lo k a tion is implemented with

(12)

are dis arded atthe time of the lo k. Therefore, any values that are hits in the a he areguaranteedtobevaluesfet hed sin ethelastlo k wasexe uted. Note that a hing atthe page level, rather than at the obje t level, doesnot ae t the updating of main memory. Sin e in the JMM a lo k or a unlo k a tion auses all a hed values that have been modied to be sent to main memory,treating a hed memory in units of pages isJava ompliant.

Intheoriginaldes riptionoftheJavamemorymodel,ea hthreadisequipped withitsprivate,thread-level a he.ThedesignofHyperionre ognizesthatfor many appli ations performan e may be improved by running many threads in parallel, many more than the number of available nodes in the luster. To support this view, Hyperion enables all the threads running on a single node to share a ommon, node-level a he. Sharing a ommon a he among allthe threads runningata single node enhan es prefet hing of obje ts, thus providinga better lo ality of a ess. Also,the size of the a hes is a fun tion of the number of nodes, instead of the number of threads as in the original des ription. This is a major deviation from the original des ription of the JMM, whi h deserves a detailed dis ussion. We postpone this aspe t to the next se tion for the sake of larity.

Node-level on urren y providesthe potentialfor on urrent exe utionof im-plementation a tions su h as page fet hing, a he invalidation or the update of main memory. To limitthis potential, Hyperion employs mutexes, as well asmore omplex lo kingme hanisms.

 First, ea h a hed page is prote ted by a mutex to serialize the updat-ing of the page's modi ation bitmap. This mutex is also lo ked prior to transmitting the modi ations ba k to the home node. The mutex is not lo kedby thegetprimitive,sin ethereisno oni tbetweenreadingaeld and eitherupdating the en ompassing page'sbitmap orsending the page's modi ationsba k to the home node.

 Se ond, asingle,node-level mutex isemployed toprevent on urrent a he invalidationsandmain-memoryupdates.Thismutex isne essary toprote t the internal data stru tures used by the a he.

 Finally, amore sophisti ated lo kingme hanism isemployed that prevents anythreadfromdoinga a heinvalidationuntilallthreadsareinaposition to safely allow the invalidation to pro eed. This me hanism is similar to solutionstothereaders-and-writers problem inthat multiplethreads(the readers)maya ess a hedvaluesbutonlyonethread(thewriter)atatime aninvalidatethe a he. Inaddition,there an benothreadsa essing the a he when it is invalidated. Threads release their reader lo k whenever they rea h a point in the program where an obje t might move. This in ludeslo k andunlo k a tionswhenthe a heisinvalidated,aswellasthe newoperator,whenthegarbage olle tormightbeinvoked.Thisme hanism

(13)

0 x 1 loadIntoCa he(x) loadIntoCa he(x) request x request x send x (value 7) toN 0 send x (7) toN 1 T 0 : use x (7) T 3 :use x (7) T 1 : assign x=17 T 4 :assign x=19 T 2 : use x (17) T 5 :use x (19) updateMainMemory(x) updateMainMemory(x) transmitx (17) transmit x(19) re eive x (17) fromN 0 re eive x (19) fromN 1

Fig.4.A typi al situation for threads intera ting ona variable x.

Main Memory read x(value 7)for T

0 read x(7) forT 3 write x (17) for T 1 read x(17) for T 2 write x (19) for T 4 read x(19) for T 5

Fig.5.The serialordering forvariablex.

prevents a a he invalidatewhen a page fet h is underway and thusavoids the need to possibly dis ard arriving pages and re-issue page requests. In addition, on urrent page requests an be safely and simplysatised by a singlepage fet hfrom the home node.

4.3 Node-level on urren y and node-level a hes

Doesthe node-level a he approa h of Hyperion omply with the thread-level a he spe i ationofJMM?Anddoesspe ial areneedtobetakentosupport on urrent a ess tothe lo al a he?

(14)

thread boundaries, in ontrast with the operational des ription of the JMM. A tually, one thread an ause an obje t to be a hed. The a hed obje t maybesubsequently a essed by anotherthread exe utingonthe samenode. The justi ation for this pre-fet hing is the same as dis ussed in the pre ed-ing subse tion. The key fa t is that, if any thread invalidates the a he, the whole a he is invalidated for all threads. This ensures that any hit in the a he provides a valid value no matter whi h thread is exe uting the a ess. The values in the a he haveall been loaded after the last a he invalidation performed by any thread.

A se ond aspe t of a he sharing is that an assign performed by one thread on a given node will be seen earlier by other threads on the same node than by threads exe uting elsewhere in the luster, again in ontrast with the operational des ription of the JMM. Sin e the JMM utilizes a separate a he for ea h thread,it requires that, for a thread touse the value assigned by another thread, the value must be stored to main memory by the thread that performed the assign and then loaded frommain memoryby the thread that is performing the use. In Hyperion, however, the home lo ation is not a tually tou hed until there is a lo k or a unlo k exe uted onthe node. This means that the JMM on ept of main memory is not dire tly implemented in Hyperion by a set of physi al home lo ations, one xed lo ation for ea h variable. In some ir umstan es, the value orresponding to the on eptual JMM main-memory opy of a given variable, may be read or written in the node-level a he, insteadof itsregular home lo ation.

In fa t, in Hyperion a variable may be a hed on multiple nodes with mul-tiple threads on ea h node on urrently a essing the lo al opy. The JMM requiresthat the main-memorya tionsperformed onthis variablebe serializ-able.However,inHyperionthea tionsarepotentiallyperformed on urrently by pro essors on dierent nodes. The key element to the argument that the Hyperion approa h is JMM ompliant is that the required serial ordering of JMM main-memory a tions for a given variable an always be onstru ted fromthe node-level tra esof the Hyperion implementation'smanipulationof that variable atrun time.

In general the serial ordering of the main-memory a tions is onstru ted by spli ing together the Hyperion tra es for ea h node. The spli ing is driven by the tra e from the home node, using the alls to the loadIntoCa he and updateMainMemoryroutinesofHyperion'sruntimeto ontrolthemergingfrom the other tra es.

 A all toloadIntoCa he fora variable x issues aread request from the lo al node tothe home node for x;eventually, this homenode servesthe request bya tuallyreadingthevalueofxinfrommemory(read a tionofthe JMM)

(15)

and loaded into the a he (load a tion), where an subsequently be used (use a tion).

 A alltotheupdateMainMemoryroutines ansallthe variablesxwhi hhave been modied (assign a tion) at the lo al node sin e the last update; for ea h of them, it transmits the lo al value to the spe i home node (store a tion);the home node eventually re eives this value and a tually updates itsmemory with it(write a tion).

To illustrateatypi alsituation, onsider the sequen e of a tionsdisplayed in Figure4.Variablexis a hedontwosingle-pro essornodes,N

0

andN 1

.There are three threadsexe utingon ea hnode: T

0 ,T 1 and T 2 onN 0 ;T 3 ,T 4 and T 5 on N 1

. The home node for x is Home x

. Despite the on urrent assignments and the subsequent use of the assigned values by other threads, the required serial orderingof the main memorya tions an stillbe onstru ted, asshown inFigure 5.

Afulldes riptionofanalgorithmfor onstru tingaserialorderingoftheJMM main-memory a tions, given a set of Hyperion node-level tra es, is provided in[20℄. We are urrently working on aformaldes ription of this algorithm.

5 Performan e evaluation: minimal- ost map- oloring

5.1 Experimental onditions and ben hmark programs

We have implemented bran h-and-bound solutions tothe minimal- ost map- oloring problem, using serial C, serial Java, and multithreaded Java. These programshaverstbeenrunonaeight-node lusterof200MHz PentiumPro pro essors,runningLinux2.2,inter onne tedbyaMyrinet networkand using MPI implemented on top of the BIP ommuni ation interfa e [21℄. We have alsoexe uted the programswithout any modi ation onafour-node lusterof 450 MHz Pentium II pro essors running Linux 2.2, inter onne ted by a SCI network using the SISCI ommuni ation interfa e. The serial C program is ompiled using the GNU C ompiler, version 2.7.2.3 with -O6 optimization, and runs natively as a normal Linux exe utable. The Java programs are translated to C by Hyperion's java2 ompiler, the generated C ode is also ompiledby GNU C with-O6 optimization,and the resultingobje tles are linked with the Hyperion/PM2 run-timesystem.

The two serial programs use identi al algorithms, based upon storing the sear h states in a priority queue. The queue rst gives priority to states in the bottom half of the sear h tree and then se ondly sorts by bound value.

(16)

the sear h to nd solutions more qui kly, whi h in turn allows the sear h spa e to be more e iently pruned.) The parallel program does an initial, single-threaded, breadth-rst expansion of the sear h tree to generate sixty-four sear h states. Sixty-four threads are then started and ea h one is given a single state toexpand. Ea h thread keeps its own priority queue, using the samesear hstrategyasemployedbytheserialprograms.Thebest urrent so-lution isstored in asingle lo ation,prote ted by a Java monitor.All threads pollthis lo ationatregularintervalsinorder toee tivelyprune theirsear h spa e.Allprogramsuseapre-allo atedpoolofsear h-statedataobje ts. This avoids makingalarge numberof alls toeitherthe Cstorageallo ation prim-itives (mallo /free) or utilizing the Java garbage olle tor. (Our distributed Java garbage olle tor is still under development.) If the pool is exhausted, the sear h me hanism swit hes to a depth-rst strategy until the pool is re-plenished. Maintaining a onstant number of threads a ross exe utions on dierent size lusters helps to keep fairly onstant the aggregate amount of workperformeda rossthe ben hmarkingruns. However, the patternof inter-a tion of the threads (via the dete tion of solutions)does vary and thus the work performed alsovaries slightly a ross dierent runs.

For ben hmarking, we have solved the problem of oloring the twenty-nine eastern-moststates in the USA using four olors with dierent osts. Assign-ing sixty-four threads to this problem in the manner des ribed above, and using Hyperion's round-robin assignment of threads to nodes, is reasonably ee tiveatevenlyspreadingthenumberofstateexpansionsperformedaround a luster, if the number of nodes divides evenly into the number of threads. (Inthe future we planto investigate dynami and transparent loadbalan ing approa hes using the thread migrationfeatures of PM2.)

5.2 Overhead of Hyperion/PM2 vs. hand-written C ode

First,we omparetheperforman eoftheserialprogramsonasingle 450MHz PentiumIIpro essorrunningLinux2.2.Boththehand-writtenCprogramand theC odegeneratedbyjava2 were ompiledtonativePentiumIIinstru tions using g 2.7.2.3 with option-O6.Exe ution times are given inse onds.

Hand-writtenC 63

Java via Hyperion/PM2 324 Java via Hyperion/PM2, in-lineDSM he ks disabled 168 Java via Hyperion/PM2, arraybound he ks alsodisabled 98

(17)

written, optimized C ode and be ausethe amount of straight-line omputa-tion isminimal.This appli ationfeatures alarge amountof obje t manipula-tion(insertingtoandretrievingfromthepriorityqueue; allo atingnew states from the pool and returning dead-end states to the pool) with a relatively small amount of omputation involved in expanding and evaluating a single state. In fa t, the top two lines in the table demonstrate that the original Hyperion/PM2 exe ution is roughly ve times slower than the exe ution of the hand-writtenC program.

The bottom two lines in the table help explain the urrent overheads in the Hyperion/PM2 implementation of the Java ode and represent umulative improvementstotheperforman eoftheprogram.Inthethirdlineofthetable, the Java ode is exe uted on a single node with the in-line he ks disabled: in-line he ks areusedby Hyperiontotestforthepresen e ortheabsen e ofa given Javaobje tatthelo alnodeinthedistributedimplementation;asthere isonlyone node atwork inthe aseatstake,they are always satised. Inthe fourthlineofthe table,the arraybound he ks areadditionallydisabled.This lastversion an be onsidered asthe losest tothe hand-writtenC ode. It is only55%slower. A omparisonwith hand-writtenC++ ode would probably be more fairto Hyperion, and would probablyresult in aneven lower gap.

We andrawtwo on lusionsfromthese gures.First,the in-line he ks used toimplementthe Hyperion DSM primitives(e.g., loadIntoCa he, get and put) are very expensive for this appli ation. By disabling these he ks in the C ode generated by java2 , we save nearly 50% of the exe ution time. (This emphasizes the map- oloring appli ation's heavy use of obje t manipulation and light use of integer or oating-point al ulations.) For this appli ation it may be better to utilize a DSM-implementation te hnique that relies on page-fault dete tion rather than in-line tests for lo ality. Even if the extra ost of a page fault is paid for every a ess to a non- a hed remote obje t, this alternative te hnique avoids the high ost of the in-line he ks. Su h a omparison an be onvenientlymade using DSM-PM2's generi support. An extensivestudy ofthe relativee ien y of in-linevs. page-fault he ks, based onve otherappli ations, an befound in[22℄. There, the page-fault version usually performs signi antly better than the in-line he k version.

Se ond, the ostof the array-bounds he k inthe Javaarray-indexoperation, at least in the Hyperion implementation, is also quite signi ant. We imple-ment the bounds he k by an expli it test in the generated C ode. In the map- oloring appli ation, arrays are used to implement the priority queues and inthe representation of sear hstates. In both ases the a tual index al- ulations are straightforward and would be amenable to optimization by a ompilerthat supported the guaranteed safe removalof su h he ks. Su h an optimization ouldbeimplementedinjava2 . Alternatively,this optimization

(18)

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

Parallelizability

Number of nodes

200 MHz, MPI-BIP/Myrinet

450 MHz, SISCI/SCI

Ideal parallelizability

Fig. 6. Parallelizability results for the multithreaded version of our Java program solving the problem of oloring the twenty-nine eastern-most states in the USA usingfour olorswithdierent osts.Testshavebeendone ontwo lusterplatforms: 200 MHz Pentium Pro using MPI-BIP/Myrinet and 450 MHz Pentium II using SISCI/SCI.The program isrun inall aseswith 64threads.

might be done by analysis of the byte ode prior to the exe ution of java2 . Or, the optimization ould be performed on the generated C ode. We plan tofurther investigate these alternativesin the future.

5.3 Performan e of the multithreaded version

Next, we provide the performan e of the multithreaded version of the Java programon the two lusters des ribed in Se tion 5.1. Parallelizability results arepresented inFigure6:themulti-nodeexe utiontimesare omparedtothe single-node exe utiontime of the samemultithreaded Java programrun with 64threads.

On the 200MHz Pentium Pro lusterusing MPI-BIP/Myrinet,the exe ution time de reases from 638 s for a single-node exe ution to 178 s for an 4-node exe ution (90% e ien y), and further to 89 s for an 8-node exe ution (still 90% e ien y). On the 450 MHz Pentium II luster using SISCI/SCI, the e ien y is slightly lower (78% on 4 nodes), but the exe ution time is sig-ni antly better: the program runs in 273 s on 1 node, and 89 s on 4 nodes. Observe that the multithreaded program on one 450 MHz Pentium II node follows a more e ient sear h path for the parti ular problem being solved than its serial, single-threaded version reported inSe tion 5.2. The e ien y

(19)

to an in reasing number of ommuni ations that are performed to the single node holdingthe urrent best answer. Witha smallernumberof nodes, there aremorethreadspernodeandagreater han ethat,onagivennode,requests by multiplethreadstofet h the pageholdingthe best answer an besatised by a single message ex hange on the network. (That is, roughly on urrent page requests atone node may be satisedby one messageex hange.)

We believe these results indi ate the strong promise of our approa h. How-ever,furtherstudyiswarranted.Weplantoinvestigatetheperforman eunder Hyperion/PM2ofadditionalJavamultithreadedprograms,in luding appli a-tions onverted from the SPLASH-2 ben hmark suite.

6 Related work

The use of Java for distributed parallel programming has been the obje t of a large number of resear h eorts during the past several years. Most of the re ently published results highlight the importan e of transparen y with re-spe t to the possibly distributedunderlying ar hite ture: multithreadedJava appli ations written using the shared-memory paradigmshould run unmodi-ed in distributed environments. Though this goal is put forward by almost alldistributed Javaproje ts, many of them fail tofully a hieve it.

TheJavaParty[4℄platformprovidesasharedaddressspa eandhidesthe inter-node ommuni ation and network ex eptions internally. Obje t and thread lo ation is transparent and no expli it ommuni ation proto ol needs to be designed nor implemented by the user. JavaParty extends Java with a pre-pro essor and a run-time system handling distributed parallel programming. The sour e ode is transformed into regular Java ode plus RMI hooks and the latter are fed intoSun's RMI ompiler.Multithreaded Javaprograms are turnedintodistributedJavaPartyprograms byidentifyingthe lassesand ob-je tsthatneedtobespreada rossthedistributedenvironment.Unfortunately, this operation is not transparent for the programmer, who has to expli itly use the keyword remote as a lass modier. A very similar approa h is taken by the Do! proje t [3℄, whi hobtains distributionby hangingthe framework lasses used by the programand by transforming lasses totransparently use the Java RMI, while keeping an un hanged API. Again, potentially remote obje ts are expli itlyindi ated using the remote annotation.

Another approa h onsists in implementingJava interpreters ontop of a dis-tributed shared memory [10,11℄ system. Java/DSM [11℄ is su h an example, relying on the Treadmarks distributed-shared-memory system. Nevertheless, using ano-the-shelf DSM maynot lead tothe best performan e, for a

(20)

num-supportfor the Java memorymodel. Se ond, using ageneral-purpose release- onsistent DSM sets up a limit to the potential spe i optimizations that ould be implemented to guarantee Java onsisten y. Lo ality and a hing are handled by the DSM support, whi h is not exible enough to allow the higher-levellayer of the system to ongure itsbehavior.

JVM [9℄ is another interpreter-based JVM providing a single image of a traditional JVM while running on a luster. Ea h luster node has a JVM pro ess thatimplementsthe Javainterpreter loopwhile exe utingpart ofthe appli ation's Java threads and ontaining part of the appli ation obje ts. In ontrast to Hyperion's obje t a hing approa h, JVM exe utes methods on thenode holdingthe master opy oftheobje t,but in ludesoptimizationsfor data a hing and repli ation insome ases.

Our interest in omputationally intensive programs that an exploit parallel hardware justies threemain originaldesignde isionsforHyperion.First, we rely on a Java-to-C ompiler to transform byte ode to native ode and we expe t the ompilation ostwillbere overedmanytimesoverinthe ourseof runningsu hprograms.Webelievethisapproa hwillleadtomu hbetter exe- utiontimes ompared tothe interpreter-basedapproa hes mentioned above. Se ond, Hyperion uses the generi , multi-proto ol DSM-PM2 run-time sys-tem, whi h is ongured to spe i ally support Java onsisten y. Finally, we are able totake advantage of fast luster networks,su has SCIand Myrinet, thanks to our portable and e ient ommuni ation library provided by the PM2 run-timesystem.

7 Con lusion

The goal of the Hyperion proje t is to provide the software infrastru ture to use Java to program low- ost, high-performan e lusters of ommodity pro- essors.Hyperionsupportsviewinga lusterasexe utingasingle Javavirtual ma hine. We believethat transparently enabling the use of su h lusterswill make Javaan attra tive languagefor high-performan e omputing to a large lass of programmers.

InJava,the notionof on urren y has been in ludedfromthe verybeginning inthe language spe i ation, both atthe user level and within the byte ode. Con urren y is exposed to the user through threads, whi h share a ommon address spa e. The standard library provides a number of fa ilitiesto start a thread, suspend or kill it, swit h ontrol between threads, et ., and the Java memorymodel spe ieshow threadsmayintera twith the ommonmemory. It is thus possible to leverage this feature to dire tly map a multithreaded

(21)

original Java threads onto the native threads available in the luster. These threads are spread a ross the pro essing nodes to provide a tual on urrent exe ution and load balan ing. The Java memory modelis implemented by a distributedsharedmemory(DSM)substrate,sothattheoriginalsemanti sof the languageis kept un hanged.

Portability has been a major obje tive in the design of Hyperion. We did not ommittoany spe i avorof Unix,nor any pro essor ar hite ture, nor any spe i type of inter onne tion network and proto ol. To a hieve this hallenge,the Hyperion platformhas been builton top of aportable runtime environment alled DSM-PM2, whi h is portable a ross a wide spe trum of high-performan e networks,su hasSCI, Myrinet,and Gigabit-Ethernet,and an beused withmost ommon ommuni ation interfa es,su hasTCP,MPI andVIA.Whilethesystem urrentlyrunson lustersofLinuxPCs,weexpe t to be able to use Hyperion on nearly any UNIX-based luster or parallel omputing environment withoutany signi ant modi ation.

Our ben hmarking results demonstrate this portability as we ran an unmod-ied program on two lusters utilizing dierent pro essors, dierent network te hnologiesand dierent ommuni ation proto ols. Our results also identify two key needs to enable high-performan e serial exe ution of Java ode: the eliminationof in-line he ks forobje tlo ality and the optimizationof array-bound he king. Finally, we presented parallelizability results that demon-strate good parallele ien y for our ben hmark appli ation onthe available lusters.

Hyperion therefore demonstrates that unmodied, standard Java programs an run ee tively and transparently on lusters. Java threads an be im-plemented with high-performan e, low-level threads that an be mapped to dierent pro essors for true parallelism and the Java memory model an be e iently implemented ina distributed-memory environment. This ombina-tion of performan e, transparen y and portability makes Java an attra tive alternative for programming lustersof omputers.

A knowledgments

We thank the anonymous referees fortheir remarks,whi h helped usimprove the quality of this paper.

TheHyperion-PM2 ollaborationwassupportedbyfundingfromtheNSFand INRIA viathe USA-Fran eCooperative Resear h program.

(22)

[1℄ F. Breg, S. Diwan, J. Villa is, J. Balasubramanian, E. Akman, D. Gannon, Java RMI performan e and obje t model interoperability: experiments with Java/HPC++, Con urren y: Pra ti e and Experien e 10 (11-13) (1998) 941 955.

[2℄ D. Caromel, W. Klauser, J. Vayssière, Towards seamless omputing and meta omputinginJava,Con urren y:Pra ti eandExperien e10(11-13)(1998) 10431062.

[3℄ P.Launay,J.-L.Pazat,AframeworkforparallelprogramminginJava,in: High-Performan e Computingand Networking(HPCN '98), Vol. 1401 ofLe t.Notes inComp.S ien e, Springer-Verlag, 1998,pp.628637.

[4℄ M. Philippsen, M. Zenger, JavaParty  transparent remote obje ts in Java, Con urren y: Pra ti eand Experien e9 (11)(1997) 11251242.

[5℄ J.Maassen,T.Kielmann,H.Bal,E ientrepli atedmethodinvo ationinJava, in:Pro . ofthe ACM2000 Java Grande Conferen e, San Fran is o, California, 2000,pp.8896.

[6℄ A.Ferrari, JPVM:Network parallel omputing inJava,Con urren y: Pra ti e andExperien e 10(11-13) (1998)985992.

[7℄ V.Getov, S.F.Hummel, S.Mint hev, High-performan eparallel programming in Java: exploiting native libraries, Con urren y: Pra ti e and Experien e 10(11-13) (1998)863872.

[8℄ T.Kielmann,P.Hat her,L.Bougé,H.Bal,EnablingJavaforhigh-performan e omputing: Exploiting Distributed Shared Memory and Remote Method Invo ation,Communi ationsoftheACM(2001).Spe ialIssueonJava forHigh Performan e Computing,to appear.

[9℄ Y. Aridor, M. Fa tor, A. Teperman, JVM: A single system image of a JVM on a luster, in: Pro . of the International Conferen e on Parallel Pro essing, Fukushima,Japan, 1999,pp.411.

[10℄X. Chen, V. Allan, MultiJav: A distributed shared memory system based on multipleJavavirtual ma hines,in:Pro .oftheInt'lConferen e onParalleland DistributedPro essing Te hniques andAppli ations, LasVegas, Nevada, 1998, pp.9198.

[11℄W. Yu, A. Cox, Java/DSM: A platform for heterogeneous omputing, Con urren y: Pra ti eand Experien e9 (11)(1997) 12131224.

[12℄R.Namyst, J.-F. Méhaut, PM2:Parallel multithreaded ma hine, a omputing environment for distributed ar hite tures, in: Parallel Computing (ParCo '95), ElsevierS ien e Publishers, 1995,pp.279285.

(23)

multithreadedDSM onsisten yproto ols,in:Pro .6thInternationalWorkshop on High-Level Parallel Programming Models and Supportive Environments (HIPS '01),SanFran is o, 2001,to appear.

[14℄H. Hellwagner, A. Reinefeld (Eds.), SCI: S alable Coherent Interfa e. Ar hite ture and Software for High-Performan e Compute Clusters, Vol. 1734 ofLe t. Notes inComp.S ien e, Springer-Verlag, 1999.

[15℄L.Prylli,B.Touran heau,R.Westrelin,Thedesignforahighperforman eMPI implementation on the Myrinet network, in: Pro . 6th European PVM/MPI Users'Group(EuroPVM/MPI '99),Vol. 1697of Le t.Notes inComp.S ien e, Springer Verlag,Bar elona,Spain, 1999,pp.223230.

[16℄G.Muller,U.PaghS hultz,Harissa:Ahybridapproa htoJavaexe ution,IEEE Software16 (2)(1999) 4451.

[17℄T. Proebsting, G. Townsend, P. Bridges, J. Hartman, T. Newsham, S.Watterson,Toba:Javaforappli ationsawayaheadoftime(WAT) ompiler, in:Pro .oftheThirdConferen eonObje t-OrientedTe hnologiesandSystems, USENIXAsso iation, Portland,Oregon, 1997,pp.4153.

[18℄J. Gosling, W. Joy, G. Steele Jr., The Java Language Spe i ation, Addison-Wesley,Reading, Massa husetts, 1996.

[19℄L.Bougé, J.-F.Méhaut,R.Namyst,E ient ommuni ationsinmultithreaded runtime systems, in: Pro . 3rd Workshop on Runtime Systems for Parallel Programming(RTSPP'99),Vol.1586ofLe t.NotesinComp.S ien e, Springer-Verlag,San Juan,Puerto Ri o,1999, pp.468482.

[20℄P. Hat her, On the orre tness of a luster implementation of Java, Te hni al ReportTR00-05, Universityof NewHampshire (Jul.2000).

[21℄L.Prylli, B.Touran heau, BIP:A new proto oldesigned for highperforman e networking on Myrinet, in: Pro . of First Workshop on Personal Computer Based Networks Of Workstations (PC-NOW '98), Vol. 1388 of Le t. Notes in Comp.S ien e, Springer-Verlag, 1998,pp.472485.

[22℄G. Antoniu, P. Hat her, Remote obje t dete tion in luster-based Java, in: Pro . 3rd Int. Workshop on Java for Parallel and Distributed Computing (JavaPDC '01),SanFran is o, 2001,to appear.

Figure

Fig. 2. Overview of the Hyperion software arhiteture
Fig. 3. Interations between the thread ahe and the main memory as speied by
Fig. 4. A typial situation for threads interating on a v ariable x.
Fig. 6. Parallelizability results for the multithreaded version of our Java program

Références

Documents relatifs

To prove these results with a denotational analysis, our magic-sets transformation builds new magic blocks of code whose functional behaviours are the internal behaviours just after

If we apply this simplification to the CLP program derived from the Java pro- gram in Figure 1, the number of clauses decreases from 297 to 12 and the time needed to prove all

Unit´e de recherche INRIA Rennes, Irisa, Campus universitaire de Beaulieu, 35042 RENNES Cedex Unit´e de recherche INRIA Rhˆone-Alpes, 655, avenue de l’Europe, 38330 MONTBONNOT ST

Cet article est structur´e de la mani`ere suivante : la section 2 donne les notations, le type de programmes trait´es, et d´ecrit les ´etapes de l’ex´ecution d’un pro- gramme

The correlation between Aerosol Optical Depth and Liquid Cloud Droplet Effective Radius is variable both in the model and the observations.. However, the model reports the expected

This test case applies the refactoring create super-class on an example with two child class and a super class for these subclasses..

Analyse de la réponse ovarienne en fonction du taux d’AMH réalisé avant la démarche thérapeutique (PMA) ... Bilan de la stimulation ovarienne et résultats de la PMA ... La durée

Ont été inclus dans l’étude, tous les patients hospitalisés au CHU de Rabat dont les prélèvements de liquide d’ascite ont été reçus au laboratoire de