Creating Profiling Tools to Analyze and Optimize FiPy Presentation

37
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

Transcript of Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Page 1: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Creating Profiling Tools to Analyze and

Optimize FiPy

Danya D. MuraliAdvisors: Jonathan E. Guyer and Daniel Wheeler

Materials Measurement Laboratory

Material Science and Engineering Division

Center for Theoretical and Computational Material Science

Page 2: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Outline

● FiPy Introduction

● How it works

● Examples

● Problems with FiPy

● Profiling Tools

● What are the they?

● How our tools work

● Results

● Conclusion

Page 3: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 4: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

What is a PDE?

Page 5: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Finite Volume Method

● Solve a general PDE on a given domain for a field

Page 6: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Finite Volume Method

● Solve a general PDE on a given domain for a field

● Integrate PDE over general control volumes

Page 7: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 8: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 9: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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()

Page 10: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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()

Page 11: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Examples of FiPy: Polycrystal and Phase Field

courtesy S. A. David, ORNL

Page 12: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

courtesy S. A. David, ORNL

Examples of FiPy: Polycrystal and Phase Field

Page 13: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 14: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

courtesy S. A. David, ORNL

Examples of FiPy: Polycrystal and Phase Field

Page 15: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Examples Of FiPy: Extreme Fill

Page 16: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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)

Page 17: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Examples Of FiPy: Extreme Fill

Page 18: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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!

Page 19: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Profiling Tools

● What is profiling?

● Tool used to identify and quantify what resources

are being used by certain parts of a program

Page 20: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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:

Page 21: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 22: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 23: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 24: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Speed Profilingclass 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"):

...

Page 25: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Memory Profilingclass 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(...)

Page 26: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Results: Profiling Polycrystal - Memory

Page 27: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Results: Profiling Polycrystal - Speed

Page 28: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Results: Profiling Extreme Fill - Memory

Page 29: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Results: Profiling Extreme Fill - Speed

Page 30: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Results: Profiling Different Solvers

Page 31: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 32: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 33: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 34: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 35: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

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

Page 36: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Acknowledgements

● Mentors: Dr. Jon Guyer and Dr. Daniel Wheeler

● SHIP Student: Mira Holford

● SURF Program Staff and Peers

Page 37: Creating Profiling Tools to Analyze and Optimize FiPy Presentation

Questions?