Comments (20)
Uploading so we don't lose this:
from firedrake.
Assuming this is still an issue, could you try a separate fresh install (please download the latest version of the install script!) now that we have pinned Cython. It's possible that the slow init is a result of some packages being installed with latest Cython and some with older Cython.
I have not been able to reproduce this issue locally.
from firedrake.
I have reinstalled using the updated firedrake-install script after I completely removed the previous venv. I have also uninstalled and reinstalled homebrew and then completed a further reinstallation. The same performance issue is present.
I have run helmholtz.py (with graph plotting removed) using both my M1 Max and a Linux Workstation (3 month+ old venv) for comparison. I have attached the profiles. They are usually of comparable performance.
Is there anything else I can reinstall to enable a fresh implementation?
from firedrake.
If you update (or do a fresh install) on the Linux workstation do you also see the performance regression? If you don't want to risk losing the old performant venv you can use firedrake-install --venv-name somthing_unique
. If the Linux workstation is fine I will add the Mac tag and get some of our Mac developers to investigate.
from firedrake.
I will say that the profiles do look very similar to a first run (doing code gen) vs second run (using cached code).
The Helmholtz example (in the demos directory) is also very small, only a 10x10 grid with CG1 elements. To get meaningful profiling data we need to increase the number of dofs. Maybe you could add some timings?
I have attached an example profiling test on my desktop along with its output for comparison:
test_script.sh:
#!/bin/bash
# Clean caches
firedrake-clean
# Create a minimal Helmholtz problem (without plotting)
cat <<EOF >minimal_helmholtz.py
from firedrake import *
mesh = UnitSquareMesh(10, 10)
V = FunctionSpace(mesh, "CG", 1)
u = TrialFunction(V)
v = TestFunction(V)
f = Function(V)
x, y = SpatialCoordinate(mesh)
f.interpolate((1+8*pi*pi)*cos(x*pi*2)*cos(y*pi*2))
a = (inner(grad(u), grad(v)) + inner(u, v)) * dx
L = inner(f, v) * dx
u = Function(V)
solve(a == L, u, solver_parameters={'ksp_type': 'cg', 'pc_type': 'none'})
File("helmholtz.pvd").write(u)
f.interpolate(cos(x*pi*2)*cos(y*pi*2))
print(sqrt(assemble(dot(u - f, u - f) * dx)))
EOF
# Time and profile minimal Helmholtz
echo "10x10 cold cache"
time python minimal_helmholtz.py -log_view :no_cache_profile.txt:ascii_flamegraph
flamegraph.pl no_cache_profile.txt > no_cache_profile.svg
# Time and profile minimal Helmholtz with hot cache
echo "10x10 hot cache"
time python minimal_helmholtz.py -log_view :hot_cache_profile.txt:ascii_flamegraph
flamegraph.pl hot_cache_profile.txt > hot_cache_profile.svg
# Increase problem size
sed -i "s/(10, 10)/(1000, 1000)/g" minimal_helmholtz.py
# Run bigger problem
echo "1000x1000 hot cache"
time python minimal_helmholtz.py -log_view :big_hot_cache_profile.txt:ascii_flamegraph
flamegraph.pl big_hot_cache_profile.txt > big_hot_cache_profile.svg
output:
$ ./test_script.sh
/home/jack/Documents/firedrake/firedrake/bin/firedrake-clean:4: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
__import__('pkg_resources').require('firedrake==0.13.0+5774.g3fb16ad47.dirty')
Removing cached TSFC kernels from /home/jack/Documents/firedrake/firedrake/.cache/tsfc
Removing cached PyOP2 code from /home/jack/Documents/firedrake/firedrake/.cache/pyop2
Removing cached pytools files from /home/jack/.cache/pytools
10x10 cold cache
0.06257073749110136
real 0m4.426s
user 0m4.085s
sys 0m0.333s
10x10 hot cache
0.06257073749110136
real 0m1.387s
user 0m1.218s
sys 0m0.155s
1000x1000 hot cache
7.078431517196732e-06
real 1m9.689s
user 0m41.024s
sys 0m28.647s
Cold cache:
Hot cache:
Big problem:
from firedrake.
@rdm4317 any update?
from firedrake.
@JDBetteridge I have run the requested profiles, here are the results:
Mac:
10x10 cold cache
real 0m22.615s
user 0m4.705s
sys 0m2.675s
10x10 hot cache
real 0m4.334s
user 0m1.390s
sys 0m0.868s
1000x1000 hot cache
real 0m38.126s
user 0m35.405s
sys 0m1.232s
---------------------------------------------------------------------------
|Package |Branch |Revision |Modified |
---------------------------------------------------------------------------
|FInAT |master |47f6c37 |False |
|PyOP2 |master |d230953b |False |
|fiat |master |8c66270 |False |
|firedrake |master |3fb16ad47 |False |
|h5py |firedrake |6cc4c912 |False |
|libspatialindex |master |4768bf3 |True |
|libsupermesh |master |b145b65 |False |
|loopy |main |8158afdb |False |
|petsc |firedrake |9364cb008b|False |
|pyadjoint |master |0378c81 |False |
|pytest-mpi |main |a478bc8 |False |
|slepc |firedrake |e438e4993 |False |
|tsfc |master |6f72c9c |False |
|ufl |master |3c62318c |False |
Linux WS:
10x10 cold cache
real 0m6.582s
user 0m5.707s
sys 0m0.884s
10x10 hot cache
real 0m2.300s
user 0m1.768s
sys 0m0.554s
1000x1000 hot cache
real 0m51.228s
user 0m49.202s
sys 0m1.973s
---------------------------------------------------------------------------
|Package |Branch |Revision |Modified |
---------------------------------------------------------------------------
|COFFEE |master |70c1e66 |False |
|FInAT |master |cd1d528 |False |
|PyOP2 |master |59e109eb |False |
|fiat |master |a305398 |False |
|firedrake |master |284a1104a |False |
|h5py |firedrake |6cc4c912 |False |
|libspatialindex |master |4768bf3 |True |
|libsupermesh |master |69012e5 |False |
|loopy |main |3988272b |False |
|petsc |firedrake |9364cb008b|False |
|pyadjoint |master |c691737 |False |
|pytest-mpi |main |a478bc8 |False |
|tsfc |master |e68bd28 |False |
|ufl |master |772485d7 |False |
---------------------------------------------------------------------------
from firedrake.
For a simple hyperelasticity example, I am getting different TSFC behaviours.
Mac:
0
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
1
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
2
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
3
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
4
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
5
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
6
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
7
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
8
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
9
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
Linux:
0
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
1
2
3
4
5
6
7
8
9
Here is the code:
from firedrake import *
spatialDimensions = 2
lx = 8
ly = 1
nx = 320
ny = 40
mesh = RectangleMesh(nx, ny, lx, ly, quadrilateral=True)
# function spaces
A = FunctionSpace(mesh, "CG", 1)
P = VectorFunctionSpace(mesh, "CG", 1)
# boundary conditions
bcs = [DirichletBC(P.sub(0), Constant(0), 1),
DirichletBC(P.sub(1), Constant(0), 1)]
# Define functions
du = TrialFunction(P) # Incremental displacement
v = TestFunction(P) # Test function
u = Function(P) # Displacement from previous iteration
B = Constant((0.0, -0.0)) # Body force per unit volume
T = Constant((0.1, 0.0)) # Traction force on the boundary
for i in range(10):
print(i)
# Kinematics
I = Identity(2) # Identity tensor
F = I + grad(u) # Deformation gradient
C = F.T*F # Right Cauchy-Green tensor
# Invariants of deformation tensors
Ic = tr(C)
J = det(F)
# Elasticity parameters
E, nu = 10.0, 0.3
mu, lmbda = Constant(E/(2*(1 + nu))), Constant(E*nu/((1 + nu)*(1 - 2*nu)))
# Stored strain energy density (compressible neo-Hookean model)
psi = (mu/2)*(Ic - 3) - mu*ln(J) + (lmbda/2)*(ln(J))**2
# Total potential energy
Pi = psi*dx - dot(B, u)*dx - dot(T, u)*ds(2)
# Compute first variation of Pi (directional derivative about u in the direction of v)
F = derivative(Pi, u, v)
# Compute Jacobian of F
J = derivative(F, u, du)
# Solve variational problem
problem = NonlinearVariationalProblem(F, u, bcs=bcs, J=J)
solver = NonlinearVariationalSolver(problem)
solver.solve()
from firedrake.
I reproduced this execution with test.sh at M2 Mac. See the results:
10x10 cold cache
real 0m7.179s
user 0m4.232s
sys 0m1.043s
10x10 hot cache
real 0m2.460s
user 0m1.421s
sys 0m0.542s
1000x1000 hot cache
real 0m38.433s
user 0m35.422s
sys 0m2.266s
I had tsfc:WARNING
only once.
from firedrake.
My intel Mac Monterey 12.4 (Fresh install):
10x10 cold cache
0.06257073749110047
real 0m21.021s
user 0m9.369s
sys 0m4.045s
10x10 hot cache
0.06257073749110047
real 0m9.233s
user 0m4.369s
sys 0m2.088s
1000x1000 hot cache
7.078429874707133e-06
real 1m36.637s
user 1m31.152s
sys 0m3.195s
10x10 no cache:
10x10 hot cache:
1000x1000 hot cache:
Hyperelasticity example:
tsfc warnings at every step
firedrake-status
:
---------------------------------------------------------------------------
|Package |Branch |Revision |Modified |
---------------------------------------------------------------------------
|FInAT |master |47f6c37 |False |
|PyOP2 |master |d230953b |False |
|fiat |master |8c66270 |False |
|firedrake |master |0ec02b2d8 |False |
|h5py |firedrake |6cc4c912 |False |
|libspatialindex |master |4768bf3 |True |
|libsupermesh |master |b145b65 |False |
|loopy |main |8158afdb |False |
|petsc |firedrake |9364cb008b|False |
|pyadjoint |master |0378c81 |False |
|pytest-mpi |main |a478bc8 |False |
|tsfc |master |6f72c9c |False |
|ufl |master |3c62318c |False |
---------------------------------------------------------------------------
from firedrake.
On my linux machine (Fresh install):
10x10 no cache:
10x10 hot cache:
1000x1000 hot cache:
Hyperelasticity example:
tsfc warnings at every step
firedrake-status
:
---------------------------------------------------------------------------
|Package |Branch |Revision |Modified |
---------------------------------------------------------------------------
|FInAT |master |47f6c37 |False |
|PyOP2 |master |d230953b |False |
|fiat |master |8c66270 |False |
|firedrake |master |0ec02b2d8 |False |
|h5py |firedrake |6cc4c912 |False |
|libspatialindex |master |4768bf3 |True |
|libsupermesh |master |b145b65 |False |
|loopy |main |8158afdb |False |
|petsc |firedrake |9364cb008b|False |
|pyadjoint |master |0378c81 |False |
|pytest-mpi |main |a478bc8 |False |
|tsfc |master |6f72c9c |False |
|ufl |master |3c62318c |False |
---------------------------------------------------------------------------
from firedrake.
I see tsfc warning at each step both on my mac and on my Linux machine. It looks more like an issue of the latest Firedrake than macos vs. Linux to me.
Can everyone please put the output of firedrake-status
below your test result?
from firedrake.
@ksagiyam I have updated my post with this output
from firedrake.
|Package |Branch |Revision |Modified |
---------------------------------------------------------------------------
|COFFEE |master |70c1e66 |False |
|FInAT |master |47f6c37 |False |
|PyOP2 |master |d230953b |False |
|fiat |master |8c66270 |False |
|firedrake |master |0ec02b2d8 |False |
|h5py |firedrake |6cc4c912 |False |
|libspatialindex |master |4768bf3 |True |
|libsupermesh |master |b145b65 |False |
|loopy |main |8158afdb |False |
|petsc |firedrake |9364cb008b|False |
|pyadjoint |master |0378c81 |False |
|pytest-mpi |main |a478bc8 |False |
|tsfc |master |6f72c9c |False |
|ufl |master |3c62318c |False |
---------------------------------------------------------------------------
from firedrake.
Testing on my Linux machine indicates that this PR on Constant #2927 somehow broke the caching. (Firedrake + PyOP2 + tsfc)
I used the above hyperelasticity problem as an example.
Right before #2927:
---------------------------------------------------------------------------
|Package |Branch |Revision |Modified |
---------------------------------------------------------------------------
|COFFEE |master |70c1e66 |False |
|FInAT |master |47f6c37 |False |
|PyOP2 |HEAD |edae2884 |False |
|fiat |master |8c66270 |False |
|firedrake |HEAD |be82caf4e |False |
|h5py |firedrake |6cc4c912 |False |
|libspatialindex |master |4768bf3 |True |
|libsupermesh |master |b145b65 |False |
|loopy |main |8158afdb |False |
|petsc |firedrake |9364cb008b|False |
|pyadjoint |master |0378c81 |False |
|pytest-mpi |main |a478bc8 |False |
|tsfc |HEAD |ef39f72 |False |
|ufl |master |3c62318c |False |
---------------------------------------------------------------------------
Cold cache:
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
WARNING:tsfc:Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
1
2
3
Hot cache:
0
1
2
3
Right after #2927:
---------------------------------------------------------------------------
|Package |Branch |Revision |Modified |
---------------------------------------------------------------------------
|COFFEE |master |70c1e66 |False |
|FInAT |master |47f6c37 |False |
|PyOP2 |HEAD |d230953b |False |
|fiat |master |8c66270 |False |
|firedrake |HEAD |34f930dd9 |False |
|h5py |firedrake |6cc4c912 |False |
|libspatialindex |master |4768bf3 |True |
|libsupermesh |master |b145b65 |False |
|loopy |main |8158afdb |False |
|petsc |firedrake |9364cb008b|False |
|pyadjoint |master |0378c81 |False |
|pytest-mpi |main |a478bc8 |False |
|tsfc |HEAD |83dd8aa |False |
|ufl |master |3c62318c |False |
---------------------------------------------------------------------------
Cold cache:
0
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
1
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
2
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
3
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
Hot cache:
0
1
2
3
from firedrake.
Hey @ksagiyam, did you work out how to fix this?
from firedrake.
Sorry I have been on holiday for the past two weeks so haven't seen this. I think that this is a known performance problem with the recent changes to how we use Constants
. Could you check whether using Firedrake branch connorjward/fix-constant-numbering
and UFL branch connorjward/counted-mixin
makes these go away? I already have associated PRs (Firedrake, UFL) for getting these fixes in.
from firedrake.
Yes, those branches at least fix the problem stated above.
Cold cache:
0
tsfc:WARNING Estimated quadrature degree 14 more than tenfold greater than any argument/coefficient degree (max 1)
1
2
3
Hot cache:
0
1
2
3
from firedrake.
Closing this issue as I believe it is fixed by #3011. Please reopen it if this is not the case.
from firedrake.
Thanks @connorjward, I have just updated my installation and the performance is much improved.
from firedrake.
Related Issues (20)
- superconvergence HOT 7
- tqdm HOT 1
- When calculating with Firedrake, the calculation is aborted. How do I resolve it? HOT 5
- Spatial Convergence Order of Unsteady Problems HOT 1
- BUG: VTKFile fails in parallel after creating a mesh with mpi.COMM_SELF in a single process HOT 5
- BUG: `-log_view` reports mismatch between objects created and destroyed when running with multiple procs HOT 7
- `utils._new_uid` should be collective over a communicator
- BUG: CheckpointFile mesh saving crash HOT 4
- Derivative returns cofunction instead of function when the functional is independent of a control
- INSTALL: Script fails at PETSc while downloading HWLOC HOT 6
- running error for Marmousi model HOT 2
- BUG: Solving the Stokes equations defined with TrialFunction returns an error HOT 1
- BUG: Greater error than expected in quadrilateral GLL elements HOT 3
- Compute norm of assembled derivative HOT 5
- "Too many indices for sum factorisation!" for calculating radius on extruded CubedSphereMesh. HOT 1
- INSTALL: ImportError when running firedrake-update on Linux HOT 2
- INSTALL: Linux (Ubuntu 22.04.4 LTS) HOT 3
- Tests for `to_petsc_local_numbering`
- BUG: firedrake-install is now failing with --petsc-int-type=int64
- Buckling problem
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from firedrake.