public Task createAtomicTask( final Runtime rt, final DataGroup group, final String prefix, final int level) { final int delay = 20 * (level + 1); return rt.createAtomicTask( new Body() { @Override public void execute(Runtime rt, Task current) { if (0 < level) { // let's create some sub tasks Task t1 = createAtomicTask(rt, group, prefix + ".1", level - 1); rt.schedule(t1, current, Runtime.NO_DEPS); Task t2 = createAtomicTask(rt, group, prefix + ".2", level - 1); rt.schedule(t2, current, Runtime.NO_DEPS); } getLogger().info(prefix + " waiting for " + delay + " ms"); try { Thread.sleep(delay); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public String toString() { return "" + delay; } }, group, Runtime.NO_HINTS); }
@Test public void runAtomicTaskWaitingTest() { Runtime rt = getRuntime(); rt.init(); if (Configuration.getProperty(ImplicitWorkStealingRuntime.class, "nestedAtomicTasks", false)) { System.out.println("nested"); DataGroup dg = rt.createDataGroup(); Task t1 = createAtomicTask(rt, dg, "TASK-1", 3); rt.schedule(t1, Runtime.NO_PARENT, Runtime.NO_DEPS); Task t2 = createAtomicTask(rt, dg, "TASK-2", 5); rt.schedule(t2, Runtime.NO_PARENT, Runtime.NO_DEPS); Task t3 = createAtomicTask(rt, dg, "TASK-3", 2); rt.schedule(t3, Runtime.NO_PARENT, Runtime.NO_DEPS); Task t4 = createAtomicTask(rt, dg, "TASK-4", 4); rt.schedule(t4, Runtime.NO_PARENT, Runtime.NO_DEPS); Task t5 = createAtomicTask(rt, dg, "TASK-5", 2); rt.schedule(t5, Runtime.NO_PARENT, Runtime.NO_DEPS); } rt.shutdown(); }