[Ecls-list] ECL shootout

Marko Kocić marko.kocic at gmail.com
Tue Jun 23 15:00:19 UTC 2009


2009/6/23 Juan Jose Garcia-Ripoll <juanjose.garciaripoll at googlemail.com>:
> 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.

The whole point of latest benchmark game is to run on quad core and see
which lang/implementation has the best mutithreaded capabilities, so
threads are a must here. See for example thread-ring (which I havent
ported yet),
or sbcl mandelbrot benchmarks.

I'll try with __thread enabled to see the results.

Btw, what are the recommended c flags? "-O3 -march=i686" Does it matter
which flags I used to build ecl itself?


> 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.

I'll try that to see how it competes.

Also, there are some benchmarks that don't compile, Take a look at for
example fannkuch.lisp. It doesn't create executable although it doesn't
report any error in output.

> Juanjo




More information about the ecl-devel mailing list