As a side note, and I have not attempted that and that would require further 
investigation, be we could incorporate the concept of sealed domains as 
presented by Marco Heisig in the library fast-generic-functions. We already 
have the concept of sealing classes, but FGF allows to partially seal a generic 
function. That could do wonders for inlining of effective methods specialized 
on system classes.

--
Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland
TurtleWare - Daniel Kochmański      | www.turtleware.eu

"Be the change that you wish to see in the world." - Mahatma Gandhi



------- Original Message -------
On Friday, July 14th, 2023 at 2:37 PM, Daniel Kochmański <dan...@turtleware.eu> 
wrote:


> Hello Dima,
> 
> some bottlenecks are known and I'm working on these. The worst offenders:
> 
> - the generic function dispatch is slow
> 
> I have implemented the computation part of the fast generic function dispatch 
> as proposed by Robert Strandh, but it needs to be integrated with the C 
> compiler
> 
> - there is no type inference (only the type propagation)
> 
> ECL can go really fast when it knows about its types. I have plans for that, 
> but some extra work needs to be done first
> 
> Both things hang on refactoring the compiler (that task is pending, you may 
> see cmpc-separation branch), so it will be easier to work with the 
> intermediate representation and experiment with backends. There are also 
> other motivations for this refactor.
> 
> There is also the fact that ECL /compilation/ time is very slow. Currently 
> there is not much we can do about this, because most of the time is spend in 
> GCC (so nothing to optimize for us).
> 
> Another problem is FASL loading - when ECL loads a fasl then it replays 
> necessary side-effects and that is time consuming (you may notice this for 
> example when you REQUIRE ASDF). This is not much of the problem in itself, 
> but said side-effects need to be replayed even when we build an executable, 
> so the startup suffers. Other implementations hide that startup time by 
> dumping images, where all side effects are already present.
> 
> Also, if you are not using the C compiler (i.e only the bytecode), then the 
> result is not optimized at all - the bytecodes compiler performs only the 
> minimal compilation.
> 
> All that said, when both fast gf and type inference are implemented, I will 
> try to identify further bottlenecks if things still doesn't look good.
> 
> None of these possible improvements will be part of the upcoming release. We 
> are currently in the testing phase (not thanks to me, I'm disappointingly not 
> very active on this front at the moment - sorry Marius!).
> 
> Here are a few hints that will help you to produce better optimized code:
> - avoid generic functions
> - declare types wherever feasible
> - lower safety to 1, raise speed to 3 (don't use safety 0, there are known 
> bugs)
> 
> There are also more mundane ways to improve the performance:
> - inline partial dispatch tables for arithmetic operators
> - work harder on IR to optimize it (using SSA and adding more passes is 
> pending™)
> 
> Best regards,
> Daniel
> 
> p.s we should also introduce more immediate types on 64bit platforms - we are 
> currently using only two available bits for tagging while we could use three, 
> but I'm not working on that at the moment - single-float could be unboxed in 
> that case
> 
> --
> Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland
> TurtleWare - Daniel Kochmański | www.turtleware.eu
> 
> "Be the change that you wish to see in the world." - Mahatma Gandhi
> 
> 
> 
> ------- Original Message -------
> On Friday, July 14th, 2023 at 2:19 PM, Dima Pasechnik dimpase+...@gmail.com 
> wrote:
> 
> 
> 
> > It's well-known that ECL-compiled CL projects are considerably slower
> > than ones where SBCL is used. Examples are e.g. Maxima, FriCAS - there
> > speed might be few times (sic!) slower.
> > 
> > Is there an effort to find out bottlenecks, or is it known where these
> > bottlenecks are?
> > 
> > Best,
> > Dima

Reply via email to