Skip to content

Very high TTFX #203

@LilithHafner

Description

@LilithHafner

I'd like to use Cassette as a backend for a developer-facing tool to log various events during program execution. However, I'm experiencing a 1–2 minute TTFX with Cassette. The tool I'm making should work for arbitrary user code so I don't have access to it at precompile time. Is there any way to use Cassette as a backend without exposing users to this TTFX for every additional code that they wold like to track?

julia> @time @eval using Cassette
  0.069706 seconds (53.16 k allocations: 3.109 MiB, 11.51% compilation time)

julia> @time @eval Cassette.@context Ctx;
  0.152624 seconds (7.33 k allocations: 429.716 KiB, 82.47% compilation time)

julia> @time @eval Cassette.overdub(Ctx(), sort!, [3,1,2]);
134.977680 seconds (55.06 M allocations: 4.079 GiB, 1.52% gc time, 100.00% compilation time)

julia> @time @eval Cassette.overdub(Ctx(), sort!, [3,1,2]);
  0.001106 seconds (64 allocations: 3.266 KiB)

julia> @time @eval Cassette.overdub(Ctx(), sort!, [3.0,1.0,2.0]);
 72.103045 seconds (51.22 M allocations: 4.053 GiB, 2.25% gc time, 99.99% compilation time)

julia> @time @eval Cassette.overdub(Ctx(), sort!, [3.0,1.0,2.0]);
  0.000747 seconds (64 allocations: 3.266 KiB)

For reference, my existing hack is to redefine the methods I want to track (getindex, setindex!, etc.) which causes about 10 seconds worth of invalidations.

This is the FFTX analogue to #91

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