def __init__(self, args): if sys.version_info < (3, 0, 0): # not supported in Python 2.7 exit() assert charm.numPes() >= 4 self.done = -1 workers = Group(Worker) controllers = Array(Controller, charm.numPes()) receivers = Array(CallbackReceiver, charm.numPes(), args=[self.thisProxy]) workers.work(receivers[1].getResult) self.wait('self.done == 1') self.done = -1 controllers[1].start(workers, receivers[2].getResult) self.wait('self.done == 2') self.done = -1 controllers[2].start(workers, receivers.getResultBroadcast) self.wait('self.done == ' + str(charm.numPes())) self.done = -1 f = Future() controllers[3].start(workers, f) assert f.get() == (charm.numPes() * (charm.numPes() - 1)) // 2 exit()
def main(args): assert charm.numPes() % 2 == 0 g = Group(Test) gsec = g[::2] # make a section with even numbered elements f = Future(2) g.work(f, charm.numPes()) gsec.work(f, charm.numPes() // 2, gsec) f.get() g.verify(awaitable=True).get() exit()
def main(args): a = Array(Test, charm.numPes()) sleepTimes = [random.uniform(0.5, 1.5) for i in range(charm.numPes())] # for some reason, work() runs on PE 0 before sending the broadcast msgs out # to the other PEs, so I set wait time to 0 on PE 0 sleepTimes[0] = 0.0 t0 = time.time() a.work(sleepTimes, awaitable=True).get() # wait for broadcast to complete wait_time = time.time() - t0 assert (wait_time >= max(sleepTimes)) print(wait_time, max(sleepTimes)) g = Group(Test) sleepTimes = [random.uniform(0.5, 1.5) for i in range(charm.numPes())] sleepTimes[0] = 0.0 t0 = time.time() g.work(sleepTimes, awaitable=True).get() # wait for broadcast to complete wait_time = time.time() - t0 assert (wait_time >= max(sleepTimes)) print(wait_time, max(sleepTimes)) exit()
def main(args): # create Group of MyChare objects (there will be one object on each core) my_group = Group(MyChare) # invoke 'work' method of every element, passing number 3 as message my_group.work(3)
def hello(args): my_group = Group(MyChare) my_group.work(3)