June 1998 CHAIMS1 execution of a remote method invoke a method i e extract results setup / set attributes s s e i time decomposed (no benefit for one module) asynchronous s,i e time available for other methods synchronous time e s,i Scheduler - Decomposed Execution
January 1999 CHAIMS2 Scheduling - Exploit Parallelism data dependencies execution of a method a d e b c i1 e1 e2 e3 e4 e5 i2 i3 i4 i5 time non-optimized, or handprogrammed a d (<a+b) e b c (>a+b) i1 e1 e4 e3 e2 i3 i4 i5 i2 e5 time exploring parallelism based on dataflow dependencies, according to estimates or run-time scheduling invoke a method ie extract results
June 1998 CHAIMS3 Scheduling - Possible Actions (1) SETUP: make SETUPs take place in parallel to method executions »call SETUPs well in advance before methods of that megamodule are invoked INVOKE: call INVOKEs as soon as possible »move INVOKEs as far up as possible, considering data dependencies ==> what if INVOKE is in an if-block? »moving it outside of an if-block: depending on cost- function concerning fees and execution times (using ESTIMATE for the method concerned and for all eventual following methods up to if-block).
June 1998 CHAIMS4 Scheduling - Possible Actions (2) EXTRACT: call EXAMINEs and EXTRACTs when results could be ready and are needed »use ESTIMATE to estimate earliest availability of result, only start using EXAMINE then »move EXAMINE/EXTRACT as far down as possible ==> in contradiction to moving up INVOKEs »for overall optimization run-time scheduling is necessary: polling of all active invocations and issuing of next possible invocation as soon as data is ready
June 1998 CHAIMS5 Scheduling - Possible Actions (3) Pre-scheduling: create optimized invocation plan at compile-time »use ESTIMATE to determine most reasonable order of INVOKEs and EXTRACTs »refine at run-time by run-time scheduling TERMINATE: terminate invocations that are no longer needed (save resources) »not every method invocation has an extract (e.g. print-like functions)
June 1998 CHAIMS6 Scheduling - Simple Example 1 cost_ground_ih = cost_mmh.INVOKE ("Cost_for_Ground", 1 List_of_City_Pairs = city_pairs,Goods = info_goods) 2 WHILE (cost_ground_ih.EXAMINE() != DONE) {} 3 (cost_list_ground = cost_ground) = cost_ground_ih.EXTRACT() 3 cost_air_ih = cost_mmh.INVOKE ("Cost_for_Air", 2 List_of_City_Pairs = city_pairs,Goods = info_good) 4 WHILE (cost_air_ih.EXAMINE() != DONE) {} 4 cost_list_air = cost_air_ih.EXTRACT() 5 cost_air_ih = opt_mmh.INVOKE (”Optimum", 5 cost1 = cost_list_ground, cost2 = cost_list_air) order in unscheduled megaprogram order in automatically scheduled megaprogram