Skip to content

Performance regression due to absence of lto #2008

Closed

Description

@wds15

Description

The freshly merged static matrix refactor things do slow down stan programs significantly whenever lto is not turned on.

So as of now in the static matrix world we absolutely need the lto optimisation for good performance. Thus, our makefiles should ideally switch on lto whenever the compiler is capable enough of handling it. The user should not be required to add -flto to the make/local to get good performance

Example

See #2007 (comment)

where it is demonstrated that turning on lto gives back the old performance numbers.

Expected Output

Results should be produced as fast as in the pre static matrices.

Current Version:

v3.3.0

Activity

  1. SteveBronder commented on Aug 12, 2020

    @SteveBronder
    Collaborator

    So yes I'm working on this right now. I decided to toss the idea of using flto for clang-6 or 7 (it's very hard to tell which version you are on). So as long as the user is using gcc >= 5.0 and clang > 7 we should have everything plus a few extra wizzes and woos we can turn on

    It's taking me a minute because a few compiler settings + flto can actually lead to a slow-down(!) / wrong values on the performance tests. My guess is that too many optimizations + flto is causing too much inlining and some other algebra optims can cause slightly different numerics

  2. SteveBronder commented on Aug 18, 2020

    @SteveBronder
    Collaborator

    @wds15 can you throw the model and data up into a gist? If not feel free to email it to me

  3. rok-cesnovar commented on Aug 24, 2020

    @rok-cesnovar
    Member

    This will be fixed with an upstream PR, so reopening this until that happens.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions