示例#1
0
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()
示例#2
0
 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()
示例#3
0
 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()
示例#4
0
 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()
示例#5
0
 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)
示例#6
0
 def report(self):
     charm.printStats()
     charm.exit()
示例#7
0
 def done(self):
     charm.printStats()
     charm.exit()
示例#8
0
 def done(self):
     print("Program done in", time.time() - self.startTime)
     charm.printStats()
     CkExit()