← Back to team overview

ffc team mailing list archive

Re: [Branch ~ffc-core/ffc/main] Rev 1684: Change code generation for evaluate_basis and

 

On 12 September 2011 18:49, Marie E. Rognes <meg@xxxxxxxxx> wrote:
> On 09/12/11 19:40, Garth N. Wells wrote:
>>
>> Which compiler options did you use when evaluating the speed up?
>>
>
> Tested Extrapolation.h with vanilla dolfin (which is dominated by
> evaluate_basis calls). No additional compiler options set.
>
> What are the default compiler options?
>

'-g' for plain JIT, which is dead slow.  You should test with at least:

    parameters["form_compiler"]["cpp_optimize"] = True

in the Python code. This will use '-O2'.

We shouldn't unroll loops until it's proven to be faster with compiler
options activated. Unrolling loops can be slower and for large loops
increases the compile time (in extreme cases making the compiler
fail). We've discussed on the list going the other way, i.e. having
FFC unroll less code.

Garth

> --
> Marie
>
>
>> Garth
>>
>>
>>
>> On 12 September 2011 18:38,<noreply@xxxxxxxxxxxxx>  wrote:
>>>
>>> Merge authors:
>>>  Marie Rognes (meg-simula)
>>> ------------------------------------------------------------
>>> revno: 1684 [merge]
>>> committer: Marie E. Rognes<meg@xxxxxxxxx>
>>> branch nick: trunk
>>> timestamp: Mon 2011-09-12 19:23:01 +0200
>>> message:
>>>  Change code generation for evaluate_basis and
>>>  evaluate_basis_derivatives by unrolling loops at FFC compile
>>>  time.
>>>
>>>  Speeds-up generated code, especially for higher than 1st order.
>>>
>>>  Very grateful for all those unit tests for evaluate_basis*!
>>> modified:
>>>  ffc/evaluatebasis.py
>>>  test/regression/references/r_auto/AdaptivePoisson.h
>>>  test/regression/references/r_auto/AdaptivePoisson.out
>>>  test/regression/references/r_auto/AlgebraOperators.h
>>>  test/regression/references/r_auto/Biharmonic.h
>>>  test/regression/references/r_auto/Biharmonic.out
>>>  test/regression/references/r_auto/CoefficientOperators.h
>>>  test/regression/references/r_auto/Components.h
>>>  test/regression/references/r_auto/Conditional.h
>>>  test/regression/references/r_auto/Conditional.out
>>>  test/regression/references/r_auto/Constant.h
>>>  test/regression/references/r_auto/Elasticity.h
>>>  test/regression/references/r_auto/EnergyNorm.h
>>>  test/regression/references/r_auto/Equation.h
>>>  test/regression/references/r_auto/FacetIntegrals.h
>>>  test/regression/references/r_auto/FacetRestrictionAD.h
>>>  test/regression/references/r_auto/Heat.h
>>>  test/regression/references/r_auto/HyperElasticity.h
>>>  test/regression/references/r_auto/Mass.h
>>>  test/regression/references/r_auto/Mass.out
>>>  test/regression/references/r_auto/MathFunctions.h
>>>  test/regression/references/r_auto/MetaData.h
>>>  test/regression/references/r_auto/Mini.h
>>>  test/regression/references/r_auto/Mini.out
>>>  test/regression/references/r_auto/MixedMixedElement.h
>>>  test/regression/references/r_auto/MixedMixedElement.out
>>>  test/regression/references/r_auto/MixedPoisson.h
>>>  test/regression/references/r_auto/NavierStokes.h
>>>  test/regression/references/r_auto/NeumannProblem.h
>>>  test/regression/references/r_auto/Normals.h
>>>  test/regression/references/r_auto/Optimization.h
>>>  test/regression/references/r_auto/Optimization.out
>>>  test/regression/references/r_auto/P5tet.h
>>>  test/regression/references/r_auto/P5tet.out
>>>  test/regression/references/r_auto/P5tri.h
>>>  test/regression/references/r_auto/P5tri.out
>>>  test/regression/references/r_auto/Poisson.h
>>>  test/regression/references/r_auto/PoissonDG.h
>>>  test/regression/references/r_auto/QuadratureElement.h
>>>  test/regression/references/r_auto/QuadratureElement.out
>>>  test/regression/references/r_auto/ReactionDiffusion.h
>>>  test/regression/references/r_auto/RestrictedElement.h
>>>  test/regression/references/r_auto/RestrictedElement.out
>>>  test/regression/references/r_auto/SpatialCoordinates.h
>>>  test/regression/references/r_auto/SpatialCoordinates.out
>>>  test/regression/references/r_auto/StabilisedStokes.h
>>>  test/regression/references/r_auto/Stokes.h
>>>  test/regression/references/r_auto/Stokes.out
>>>  test/regression/references/r_auto/SubDomain.h
>>>  test/regression/references/r_auto/SubDomains.h
>>>  test/regression/references/r_auto/TensorWeightedPoisson.h
>>>  test/regression/references/r_auto/VectorLaplaceGradCurl.h
>>>  test/regression/references/r_auto/VectorLaplaceGradCurl.out
>>>  test/regression/references/r_auto/VectorPoisson.h
>>>  test/regression/references/r_auto/X_Element0.h
>>>  test/regression/references/r_auto/X_Element0.out
>>>  test/regression/references/r_auto/X_Element1.h
>>>  test/regression/references/r_auto/X_Element1.out
>>>  test/regression/references/r_quadrature/AdaptivePoisson.h
>>>  test/regression/references/r_quadrature/AdaptivePoisson.out
>>>  test/regression/references/r_quadrature/AlgebraOperators.h
>>>  test/regression/references/r_quadrature/Biharmonic.h
>>>  test/regression/references/r_quadrature/Biharmonic.out
>>>  test/regression/references/r_quadrature/CoefficientOperators.h
>>>  test/regression/references/r_quadrature/Components.h
>>>  test/regression/references/r_quadrature/Conditional.h
>>>  test/regression/references/r_quadrature/Conditional.out
>>>  test/regression/references/r_quadrature/Constant.h
>>>  test/regression/references/r_quadrature/Elasticity.h
>>>  test/regression/references/r_quadrature/EnergyNorm.h
>>>  test/regression/references/r_quadrature/Equation.h
>>>  test/regression/references/r_quadrature/FacetIntegrals.h
>>>  test/regression/references/r_quadrature/FacetRestrictionAD.h
>>>  test/regression/references/r_quadrature/Heat.h
>>>  test/regression/references/r_quadrature/HyperElasticity.h
>>>  test/regression/references/r_quadrature/Mass.h
>>>  test/regression/references/r_quadrature/Mass.out
>>>  test/regression/references/r_quadrature/MathFunctions.h
>>>  test/regression/references/r_quadrature/MetaData.h
>>>  test/regression/references/r_quadrature/Mini.h
>>>  test/regression/references/r_quadrature/Mini.out
>>>  test/regression/references/r_quadrature/MixedMixedElement.h
>>>  test/regression/references/r_quadrature/MixedMixedElement.out
>>>  test/regression/references/r_quadrature/MixedPoisson.h
>>>  test/regression/references/r_quadrature/NavierStokes.h
>>>  test/regression/references/r_quadrature/NeumannProblem.h
>>>  test/regression/references/r_quadrature/Normals.h
>>>  test/regression/references/r_quadrature/Optimization.h
>>>  test/regression/references/r_quadrature/Optimization.out
>>>  test/regression/references/r_quadrature/P5tet.h
>>>  test/regression/references/r_quadrature/P5tet.out
>>>  test/regression/references/r_quadrature/P5tri.h
>>>  test/regression/references/r_quadrature/P5tri.out
>>>  test/regression/references/r_quadrature/Poisson.h
>>>  test/regression/references/r_quadrature/PoissonDG.h
>>>  test/regression/references/r_quadrature/QuadratureElement.h
>>>  test/regression/references/r_quadrature/QuadratureElement.out
>>>  test/regression/references/r_quadrature/ReactionDiffusion.h
>>>  test/regression/references/r_quadrature/RestrictedElement.h
>>>  test/regression/references/r_quadrature/RestrictedElement.out
>>>  test/regression/references/r_quadrature/SpatialCoordinates.h
>>>  test/regression/references/r_quadrature/SpatialCoordinates.out
>>>  test/regression/references/r_quadrature/StabilisedStokes.h
>>>  test/regression/references/r_quadrature/Stokes.h
>>>  test/regression/references/r_quadrature/Stokes.out
>>>  test/regression/references/r_quadrature/SubDomain.h
>>>  test/regression/references/r_quadrature/SubDomains.h
>>>  test/regression/references/r_quadrature/TensorWeightedPoisson.h
>>>  test/regression/references/r_quadrature/VectorLaplaceGradCurl.h
>>>  test/regression/references/r_quadrature/VectorLaplaceGradCurl.out
>>>  test/regression/references/r_quadrature/VectorPoisson.h
>>>  test/regression/references/r_quadrature/X_Element0.h
>>>  test/regression/references/r_quadrature/X_Element0.out
>>>  test/regression/references/r_quadrature/X_Element1.h
>>>  test/regression/references/r_quadrature/X_Element1.out
>>> The size of the diff (178020 lines) is larger than your specified limit
>>> of 1000 lines
>>>
>>> --
>>> lp:ffc
>>> https://code.launchpad.net/~ffc-core/ffc/main
>>>
>>> Your team FFC Core Team is subscribed to branch lp:ffc.
>>> To unsubscribe from this branch go to
>>> https://code.launchpad.net/~ffc-core/ffc/main/+edit-subscription
>>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~ffc
>> Post to     : ffc@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~ffc
>> More help   : https://help.launchpad.net/ListHelp
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~ffc
> Post to     : ffc@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~ffc
> More help   : https://help.launchpad.net/ListHelp
>


Follow ups

References