def main(args): if (len(args) != 3) and (len(args) != 7): print(args[0] + " [array_size] [block_size]") print( "OR " + args[0] + " [array_size_X] [array_size_Y] [array_size_Z] [block_size_X] [block_size_Y] [block_size_Z]" ) charm.abort("Incorrect program arguments") if len(args) == 3: ro.arrayDimX = ro.arrayDimY = ro.arrayDimZ = int(args[1]) ro.blockDimX = ro.blockDimY = ro.blockDimZ = int(args[2]) elif len(args) == 7: ro.arrayDimX, ro.arrayDimY, ro.arrayDimZ = [ int(arg) for arg in args[1:4] ] ro.blockDimX, ro.blockDimY, ro.blockDimZ = [ int(arg) for arg in args[4:7] ] if (ro.arrayDimX < ro.blockDimX) or (ro.arrayDimX % ro.blockDimX != 0): charm.abort("array_size_X % block_size_X != 0!") if (ro.arrayDimY < ro.blockDimY) or (ro.arrayDimY % ro.blockDimY != 0): charm.abort("array_size_Y % block_size_Y != 0!") if (ro.arrayDimZ < ro.blockDimZ) or (ro.arrayDimZ % ro.blockDimZ != 0): charm.abort("array_size_Z % block_size_Z != 0!") ro.num_chare_x = ro.arrayDimX // ro.blockDimX ro.num_chare_y = ro.arrayDimY // ro.blockDimY ro.num_chare_z = ro.arrayDimZ // ro.blockDimZ print("\nSTENCIL COMPUTATION WITH BARRIERS\n") print("Running Stencil on " + str(charm.numPes()) + " processors with " + str((ro.num_chare_x, ro.num_chare_y, ro.num_chare_z)) + " chares") print("Array Dimensions: " + str((ro.arrayDimX, ro.arrayDimY, ro.arrayDimZ))) print("Block Dimensions: " + str((ro.blockDimX, ro.blockDimY, ro.blockDimZ))) nb_precomps = Group(NumbaPrecompiler) charm.awaitCreation(nb_precomps) # wait until Numba functions are compiled sim_done = charm.createFuture() array = Array(Stencil, (ro.num_chare_x, ro.num_chare_y, ro.num_chare_z), args=[sim_done]) charm.awaitCreation(array) print("Starting simulation") initTime = time.time() array.start() sim_done.get() # wait until simulation completes totalTime = time.time() - initTime print(MAX_ITER, "iterations completed, total time=", round(totalTime, 3), "secs, time per iteration (ms) =", round(totalTime / MAX_ITER * 1000, 3)) charm.printStats() charm.exit()
def iterationComplete(self): self.iterations += 1 print("Iteration", self.iterations, "complete") if self.iterations == MAX_ITER: print("Program done. Total time =", time.time() - self.startTime) charm.printStats() charm.exit() else: ro.testProxy.doIteration()
def taskDone(self): self.tasks_completed += 1 if self.tasks_completed == ro.num_workers * TASKS_PER_WORKER: self.tasks_completed = 0 self.iteration += 1 if self.iteration == NUM_ITERS: charm.printStats() charm.exit() else: self.sendWork()
def __init__(self, args): ro.main = self.thisProxy num_chares = min(charm.numPes() * CHARES_PER_PE, MAX_CHARES) assert num_chares % 2 == 0 workers = Array(Worker, num_chares) self.num_responses1 = self.num_responses2 = 0 self.result = 0 for i in range(NUM_ITER): workers.sendVal() self.wait("self.num_responses1 == " + str(num_chares//2)) self.wait("self.num_responses2 == " + str(num_chares//2)) assert(self.result == num_chares * 237) assert(self.num_responses1 == num_chares//2) assert(self.num_responses2 == num_chares//2) self.num_responses1 = self.num_responses2 = 0 self.result = 0 charm.printStats() charm.exit()
def iterationCompleted(self, im, pos, imSize): self.count += 1 #charm.liveViz.deposit([(pos,imSize,im)]) if self.count == chareArrayWidth * chareArrayHeight: if self.iteration == self.total_iterations: print("Program Done!, Total time= " + str(time.time() - self.programStartTime)) charm.printStats() charm.exit() else: # Start the next iteration self.count = 0 self.iteration += 1 if self.iteration % 100 == 0: print("Completed " + str(self.iteration) + " iterations " + str(time.time() - self.periodStartTime)) self.periodStartTime = time.time() #charm.liveViz.snapshot("examples/wave2d/wave2d-" + str(self.iteration) + ".png", "PNG") restart = (self.iteration % 1000 == 0) # loop simulation every 1000 iterations ro.arrayProxy.begin_iteration(restart)
def report(self): charm.printStats() charm.exit()
def done(self): charm.printStats() charm.exit()
def done(self): print("Program done in", time.time() - self.startTime) charm.printStats() CkExit()