[Ecls-list] ECL shootout

Juan Jose Garcia-Ripoll juanjose.garciaripoll at googlemail.com
Tue Jun 23 14:42:12 UTC 2009


On Tue, Jun 23, 2009 at 4:33 PM, Matthew Mondor<mm_lists at pulsar-zone.net> wrote:
> You might want to make sure your CFLAGS environment variable uses
> -march=i686 -O2 at least, possibly -O3 to allow inlining.  Although I
> still noticed with objdump -dS on compiled files the high frequency of
> function calls (perhaps some of them can be auto-inlined with -O3
> though, but this is unlikely for calls to the ecl shared library, it
> might be worth trying static binaries as well).

Well, C flags are definitely going to help, but there are deeper
issues. For instance, if you build a multithreaded ECL there's going
to be a non-negligible overhead due to locating thread-local data. On
all platforms I know of (even using __thread), this involves a large
amount of function calls and it is unavoidable.

Another thing is that those benchmarks have been reversed optimized
for SBCL. Let me explain this. Long time ago, Lisp benchmarks included
a lot of declarations. It was for instance assumed that AREF required
declaring the type of the argument, surrounding it with THE, etc.
There were many other things. Nowadays, due to SBCL's good type
inference engine, everybody gives that for granted and declarations
have disappeared.

Unfortunately the current architecture does not help in doing type
propagations beyond the very same expression. Or reverse type
inference: given the arguments of a function infer the type of a
variable and backpropagate this. Since this is not possible, ECL does
worse. But if you added THE and DECLARE statements, I bet it would
compare much better.

Juanjo

-- 
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
http://juanjose.garciaripoll.googlepages.com




More information about the ecl-devel mailing list