Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.

Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.

Successfully reported this slideshow.

642 views

Published on

No Downloads

Total views

642

On SlideShare

0

From Embeds

0

Number of Embeds

2

Shares

0

Downloads

9

Comments

0

Likes

1

No embeds

No notes for slide

- 1. Creating Profiling Tools to Analyze and Optimize FiPy Danya D. Murali Advisors: Jonathan E. Guyer and Daniel Wheeler Materials Measurement Laboratory Material Science and Engineering Division Center for Theoretical and Computational Material Science
- 2. Outline ● FiPy Introduction ● How it works ● Examples ● Problems with FiPy ● Profiling Tools ● What are the they? ● How our tools work ● Results ● Conclusion
- 3. What is FiPy? ● An open source Python-based program that uses the Finite Volume method to numerically solve Partial Differential Equations (PDEs) ● Python has many powerful numerical libraries ● Designed for material scientists by material scientists
- 4. What is a PDE?
- 5. Finite Volume Method ● Solve a general PDE on a given domain for a field
- 6. Finite Volume Method ● Solve a general PDE on a given domain for a field ● Integrate PDE over general control volumes
- 7. Finite Volume Method ● Solve a general PDE on a given domain for a field ● Integrate PDE over general control volumes ● Integrate PDE over polyhedral control volumes
- 8. Finite Volume Method ● Solve a general PDE on a given domain for a field ● Integrate PDE over general control volumes ● Integrate PDE over polyhedral control volumes ● Obtain a set of linear equations
- 9. How FiPy Works import fipy as fp L = 1. N = 100 m = fp.Grid2D(Lx=L, Ly=L, nx=N, ny=N) v = fp.CellVariable(mesh=m) x, y = m.cellCenters v[x > L / 2] = 1. v.constrain(0., where=m.facesLeft | m.facesRight) v.constrain(1., where=m.facesTop | m.facesBottom) e = fp.TransientTerm() == fp.DiffusionTerm() for i in range(10): e.solve(v, dt=0.001) fp.Viewer(v).plot()
- 10. How FiPy Works import fipy as fp L = 1. N = 100 m = fp.Grid2D(Lx=L, Ly=L, nx=N, ny=N) v = fp.CellVariable(mesh=m) x, y = m.cellCenters v[x > L / 2] = 1. v.constrain(0., where=m.facesLeft | m.facesRight) v.constrain(1., where=m.facesTop | m.facesBottom) e = fp.TransientTerm() == fp.DiffusionTerm() for i in range(10): e.solve(v, dt=0.001) fp.Viewer(v).plot()
- 11. Examples of FiPy: Polycrystal and Phase Field courtesy S. A. David, ORNL
- 12. courtesy S. A. David, ORNL Examples of FiPy: Polycrystal and Phase Field
- 13. courtesy S. A. David, ORNL Examples of FiPy: Polycrystal and Phase Field heatEq = (TransientTerm(var=dT) == DiffusionTerm(coeff=Dt, var=dT) + TransientTerm(var=phase)) psi = theta + arctan2(phase.faceGrad[1], phase.faceGrad[0]) Phi = tan(N * psi / 2) PhiSq = Phi**2 beta = (1. - PhiSq) / (1. + PhiSq) DbetaDpsi = -N * 2 * Phi / (1 + PhiSq) Ddia = (1.+ c * beta) Doff = c * DbetaDpsi D = alpha**2 * (1.+ c * beta) * (Ddia * (( 1, 0), ( 0, 1)) + Doff * (( 0,-1), ( 1, 0))) phaseEq = (TransientTerm(coeff=tau, var=phase) == DiffusionTerm(coeff=D, var=phase) + ImplicitSourceTerm(coeff=(phase - 0.5 - kappa1 / pi * arctan(kappa2 * dT)) * (1 - phase)), var=phase) eq = heatEq & phaseEq
- 14. courtesy S. A. David, ORNL Examples of FiPy: Polycrystal and Phase Field
- 15. Examples Of FiPy: Extreme Fill
- 16. Examples Of FiPy: Extreme Fill adsorptionCoeff = dt * suppressor * kPlus thetaEq = fp.TransientTerm() == fp.ExplicitUpwindConvectionTerm(fp.SurfactantConvectionVariable(di stance)) + adsorptionCoeff * surface - fp.ImplicitSourceTerm(adsorptionCoeff * distance._cellInterfaceFlag) - fp.ImplicitSourceTerm(kMinus * depositionRate * dt)
- 17. Examples Of FiPy: Extreme Fill
- 18. Problems with FiPy ● Potentially time inefficient and excessive in memory usage ● But how do we measure that? ● Why do we even care? ● How do we find the bottlenecks? ● Need profiling tools!
- 19. Profiling Tools ● What is profiling? ● Tool used to identify and quantify what resources are being used by certain parts of a program
- 20. Profiling Tools ● What is profiling? ● Tool used to identify and quantify what resources are being used by certain parts of a program ● Our profiler needs to:
- 21. Profiling Tools ● What is profiling? ● Tool used to identify and quantify what resources are being used by certain parts of a program ● Our profiler needs to: ● Profile multiple functions at once
- 22. Profiling Tools ● What is profiling? ● Tool used to identify and quantify what resources are being used by certain parts of a program ● Our profiler needs to: ● Profile multiple functions at once ● Cache profiling data for many simulations
- 23. Profiling Tools ● What is profiling? ● Tool used to identify and quantify what resources are being used by certain parts of a program ● Our profiler needs to: ● Profile multiple functions at once ● Cache profiling data for many simulations ● Produce graphs of performance scaling against system size
- 24. Speed Profiling class FiPyProfileTime(FiPyProfile): def __init__(self, profileFunc, ncells, regenerate=False): ... def profile(self, ncell): ... def get_time_for_function(self, function_key): return stats[function_key] def get_key_from_function_pointer(function_pointer): return inspect.getfile(function_pointer) def plot(self, keys, field="cumulative"): ...
- 25. Memory Profiling class MemoryProfiler(object): def __init__(self, profileMethod, runfunc): ... def decorate(self, func): def wrapper(*args, **kwargs): ... return self.codeMap def getLineMemory(self, line): ... class MemoryViewer(object): def generateData(self): def worker(ncell, resultQ, profileMethod, runfunc, lines): process = multiprocessing.Process(...)
- 26. Results: Profiling Polycrystal - Memory
- 27. Results: Profiling Polycrystal - Speed
- 28. Results: Profiling Extreme Fill - Memory
- 29. Results: Profiling Extreme Fill - Speed
- 30. Results: Profiling Different Solvers
- 31. So What? ● Identified that FiPy has memory issues that need to be addressed ● Limits the size of simulations that we can run ● Located the classic memory for speed trade off with Gmsh ● Determined that using inline was faster ● Identified that Trilinos is much slower than Pysparse but has the option to run in parallel ● Next Step: Analyze algorithms to figure out how to address these issues
- 32. So What? ● Identified that FiPy has memory issues that need to be addressed ● Limits the size of simulations that we can run ● Located the classic memory for speed trade off with Gmsh ● Determined that using inline was faster ● Identified that Trilinos is much slower than Pysparse but has the option to run in parallel ● Next Step: Analyze algorithms to figure out how to address these issues
- 33. So What? ● Identified that FiPy has memory issues that need to be addressed ● Limits the size of simulations that we can run ● Located the classic memory for speed trade off with Gmsh ● Determined that using inline was faster ● Identified that Trilinos is much slower than Pysparse but has the option to run in parallel ● Next Step: Analyze algorithms to figure out how to address these issues
- 34. So What? ● Identified that FiPy has memory issues that need to be addressed ● Limits the size of simulations that we can run ● Located the classic memory for speed trade off with Gmsh ● Determined that using inline was faster ● Identified that Trilinos is much slower than Pysparse but has the option to run in parallel ● Next Step: Analyze algorithms to figure out how to address these issues
- 35. So What? ● Identified that FiPy has memory issues that need to be addressed ● Limits the size of simulations that we can run ● Located the classic memory for speed trade off with Gmsh ● Determined that using inline was faster ● Identified that Trilinos is much slower than Pysparse but has the option to run in parallel ● Next Step: Analyze algorithms to figure out how to address these issues
- 36. Acknowledgements ● Mentors: Dr. Jon Guyer and Dr. Daniel Wheeler ● SHIP Student: Mira Holford ● SURF Program Staff and Peers
- 37. Questions?

No public clipboards found for this slide

×
### Save the most important slides with Clipping

Clipping is a handy way to collect and organize the most important slides from a presentation. You can keep your great finds in clipboards organized around topics.

Be the first to comment