Hello Julia users,
I have been using the profiler in an attempt to identify where my code
spends most of its time. When I run the profiler, I get a large
number of calls into inference.jl. Here are the first (approximately)
10 lines of my profile report:
julia> Profile.print(format=:flat)
Count File
Function Line
24 ./base.jl
finalizer 72
55 ./base.jl
finalizer 75
1 ./inference.jl
abstract_apply 811
1 ./inference.jl
abstract_call 848
72 ./inference.jl
abstract_call 879
2 ./inference.jl
abstract_call 896
3 ./inference.jl
abstract_call_gf 676
69 ./inference.jl
abstract_call_gf 737
83 ./inference.jl
abstract_eval 961
11 ./inference.jl
abstract_eval_call 906
72 ./inference.jl
abstract_eval_call 934
The profile report goes on from there. The report shows I have many
more inference calls, as well as calls to other functions in my
program.
My questions:
* Based on the above report, I guess that the compiler is doing a lot
of guessing about types I am using in my program. Is that correct?
Or does a well-typed program also have lots of calls into
inference.jl?
* If I need to nail down my variable types better (to eliminate type
instability and get better performance), what is the recommended
way to identify variables or locations in the code where types
should be better defined? A pointer to blog posts or documentation
is a fine way to answer this question. But I'm wondering if there
are "lint"-type tools which identify uncertain types in Julia code?
Thanks for your thoughts,
Stuart