diff --git a/parmepy/examples/mainJM.py b/parmepy/examples/mainJM.py index 1411430dafb482dd41a43b774498cb58763c54d1..fa97d6dc940b8cf2e08d74c37b7c1fabba37d41d 100644 --- a/parmepy/examples/mainJM.py +++ b/parmepy/examples/mainJM.py @@ -27,10 +27,12 @@ def scalaire(x): def run(): # Parameters + t0 = time.time() dim = 3 + nb = 16 boxLength = [1., 1., 1.] boxMin = [0., 0., 0.] - nbElem = [16, 16, 16] + nbElem = [nb, nb, nb] timeStep = 0.02 FinalTime = 1. outputFilePrefix = './res/RK2_' @@ -47,6 +49,9 @@ def run(): formula=scalaire, scalar=True) advec = Advection(velo, scal) cTspPb = ContinuousTransportProblem(advection=advec) + + t1 = time.time() + cTspPb.discretize(dSpec=[nbElem]) InterpolationMethod = Linear(grid=box.discreteDomain, gvalues=velo.discreteVariable) @@ -58,14 +63,17 @@ def run(): solver = GPUParticularSolver(ODESolver, InterpolationMethod, RemeshingMethod) cTspPb.setSolver(solver) #cTspPb.setPrinter(Printer(frequency=outputModulo, outputPrefix=outputFilePrefix, problem=cTspPb)) - c0 = time.clock() + + t2 = time.time() cTspPb.solve(T=FinalTime, dt=timeStep) - #tspPb.solve(T=FinalTime, output=outputModulo, outputPrefix=outputFilePrefix) - c0 = time.clock() - c0 - print "Solving CPU time : ", c0, "sec (CPU)" + tf = time.time() + print "Total time : ", tf - t0, "sec (CPU)" + print "Init Problem : ", t1 - t0, "sec (CPU)" + print "Init Solver : ", t2 - t1, "sec (CPU)" + print "Solving time : ", tf - t2, "sec (CPU)" if __name__ == "__main__": diff --git a/parmepy/new_ParMePy/Domain/CartesianGrid.py b/parmepy/new_ParMePy/Domain/CartesianGrid.py index bbee06764d795c8e457848ba4d331442b3bffd00..90ac402c07f75e9d5cb79de9e49f92c417e4fa54 100644 --- a/parmepy/new_ParMePy/Domain/CartesianGrid.py +++ b/parmepy/new_ParMePy/Domain/CartesianGrid.py @@ -24,7 +24,6 @@ class CartesianGrid(DiscreteDomain): @param box Box.Box : ContinuousDomain.ContinuousDomain discretized. @param spec : element number for each directions. """ - print "Je construit une CartesianGrid" DiscreteDomain.__init__(self, box.dimension) self.elementNumber = spec self.elementSize = box.length / self.elementNumber diff --git a/parmepy/new_ParMePy/Operator/AdvectionDOp.py b/parmepy/new_ParMePy/Operator/AdvectionDOp.py index 1fc719806d35196d5808afcd2925d9216278460f..0ccf24c54c4a06bdeb724f4346aa2aeea59d61c7 100644 --- a/parmepy/new_ParMePy/Operator/AdvectionDOp.py +++ b/parmepy/new_ParMePy/Operator/AdvectionDOp.py @@ -76,22 +76,14 @@ class AdvectionDOp(DiscreteOperator): np.concatenate((self.velocity.domain.min, [1.])).astype(np.float32), np.concatenate((self.velocity.domain.max, [1.])).astype(np.float32)) self.gpu_queue.finish() - self.queued_time += (evt.profile.submit - evt.profile.queued) - self.submit_time += (evt.profile.start - evt.profile.submit) + self.queued_time += (evt.profile.submit - evt.profile.queued) + self.submit_time += (evt.profile.start - evt.profile.submit) self.compute_time += (evt.profile.end - evt.profile.start) - print self.compute_time*10e-10 + #print "Advection:", self.compute_time * 1e-9 def __str__(self): """ToString method""" - s = "AdvectionDOp (DiscreteOperator) : {0} \n".format(id(self)) - s += " velocity={0}, scalar={1}\n".format(id(self.velocity), id(self.scalar)) - s += " Variables : \n" - for v in self.variables: - s += str(id(v)) + "\n" - s += " Domains : \n" - for d in self.domains: - s += str(id(d)) + "\n" - return s + "\n" + return "AdvectionDOp (DiscreteOperator)" if __name__ == "__main__": print __doc__ diff --git a/parmepy/new_ParMePy/Operator/RemeshingDOp.py b/parmepy/new_ParMePy/Operator/RemeshingDOp.py index 3faaf2252c584bc8f18186b46327e69d2db013b4..a71985263175cd66217d7e29c67d2d224a0c98c9 100644 --- a/parmepy/new_ParMePy/Operator/RemeshingDOp.py +++ b/parmepy/new_ParMePy/Operator/RemeshingDOp.py @@ -101,8 +101,9 @@ class RemeshingDOp(DiscreteOperator): np.concatenate((self.resultScalar.domain.max, [1.])).astype(np.float32)) self.gpu_queue.finish() self.queued_time += (evt.profile.submit - evt.profile.queued) - self.submit_time += (evt.profile.start - evt.profile.submit) - self.compute_time += (evt.profile.end - evt.profile.start) + self.submit_time += (evt.profile.start - evt.profile.submit) + self.compute_time += (evt.profile.end - evt.profile.start) + #print "Remeshing M'6:", self.compute_time * 1e-9 evt = self.gpu_kernel[1](self.gpu_queue, self.gpu_shape, None, self.resultScalar.gpu_mem_object, self.gpu_buffer, np.float32(t), np.float32(dt), np.int32(splittingDirection), @@ -110,20 +111,14 @@ class RemeshingDOp(DiscreteOperator): np.concatenate((self.resultScalar.domain.max, [1.])).astype(np.float32)) self.gpu_queue.finish() self.queued_time += (evt.profile.submit - evt.profile.queued) - self.submit_time += (evt.profile.start - evt.profile.submit) - self.compute_time += (evt.profile.end - evt.profile.start) + self.submit_time += (evt.profile.start - evt.profile.submit) + self.compute_time += (evt.profile.end - evt.profile.start) + #print "Remeshing reduce:", self.compute_time * 1e-9 def __str__(self): """ToString method""" - s = "RemeshingDOp (DiscreteOperator) : {0} \n".format(id(self)) - s += " particles positions = {0}, particles scalar = {1}\n".format(id(self.ppos), id(self.pscal)) - s += " Variables : \n" - for v in self.variables: - s += str(id(v)) + "\n" - s += " Domains : \n" - for d in self.domains: - s += str(id(d)) + "\n" - return s + "\n" + return "RemeshingDOp (DiscreteOperator)" + if __name__ == "__main__": print __doc__ diff --git a/parmepy/new_ParMePy/Problem/DiscreteTransportProblem.py b/parmepy/new_ParMePy/Problem/DiscreteTransportProblem.py index 922dc1a3418ff3e9e616985f89d57e6847127df3..287c49ca8791ea35b481b1011031714f971901a1 100644 --- a/parmepy/new_ParMePy/Problem/DiscreteTransportProblem.py +++ b/parmepy/new_ParMePy/Problem/DiscreteTransportProblem.py @@ -59,17 +59,18 @@ class DiscreteTransportProblem(DiscreteProblem): [[op.applyOperator(self.t, dt * i[1], i[0]) for op in self.operators] for i in self.splittingStep] self.t += dt ite += 1 - print "Iteration ", ite, "\t t =", self.t, "\t(No output mode)" + #print "Iteration ", ite, "\t t =", self.t, "\t(No output mode)" c_time = 0. q_time = 0. s_time = 0. for op in self.operators: c_time += op.compute_time + print op, c_time * 1e-9, "s" q_time += op.queued_time s_time += op.submit_time - print "OpenCL queued time : ", q_time * 10e-9, "s" - print "OpenCL submit time : ", s_time * 10e-9, "s" - print "OpenCL computing time : ", c_time * 10e-9, "s" + print "OpenCL queued time : ", q_time * 1e-9, "s" + print "OpenCL submit time : ", s_time * 1e-9, "s" + print "OpenCL computing time : ", c_time * 1e-9, "s" def __str__(self): """ToString method"""