2009/11/15 ajuc <
aju...@gmail.com>:
>
>> That's very odd.
>>
>> Rich needs to take a look at this. Letting a constant shouldn't have a
>> performance hit, IMO.
>>
>> Could you test whether it's faster to use your complex data structure
>> directly in the function, anonymously at the point of use, or to yank it
>> from a global var?
>
> Code (can you run it on your computer to verify?):
>
http://clojure.pastebin.com/f508ad31b
Here are my results on Linux with the server VM, after fixing the typo
(glocal -> global) and changing pr to println:
http://clojure.pastebin.com/f49f16d71
"Elapsed time: 2110.721659 msecs"
point-to-hilbert-directly-from-global nil
"Elapsed time: 1197.547328 msecs"
point-to-hilbert-let-from-global nil
"Elapsed time: 1884.777766 msecs"
point-to-hilbert-literal-in-let nil
"Elapsed time: 4847.630084 msecs"
point-to-hilbert-literal-in-place nil
$ java -version
java version "1.6.0_0"
OpenJDK Runtime Environment (IcedTea6 1.4.1) (6b14-1.4.1-0ubuntu12)
OpenJDK Client VM (build 14.0-b08, mixed mode, sharing)
Although, running it again now, I get:
"Elapsed time: 3278.709938 msecs"
point-to-hilbert-directly-from-global nil
"Elapsed time: 1234.739782 msecs"
point-to-hilbert-let-from-global nil
"Elapsed time: 1945.980422 msecs"
point-to-hilbert-literal-in-let nil
"Elapsed time: 5737.756701 msecs"
point-to-hilbert-literal-in-place nil
And after rearranging them, I get:
"Elapsed time: 2506.30872 msecs"
point-to-hilbert-let-from-global nil
"Elapsed time: 2091.866122 msecs"
point-to-hilbert-literal-in-let nil
"Elapsed time: 1309.805767 msecs"
point-to-hilbert-directly-from-global nil
"Elapsed time: 5228.071194 msecs"
point-to-hilbert-literal-in-place nil
So it seems you need to allow Hotspot to optimise it:
"Elapsed time: 3084.796868 msecs"
point-to-hilbert-literal-in-let nil
"Elapsed time: 1354.13218 msecs"
point-to-hilbert-literal-in-let nil
"Elapsed time: 1340.907318 msecs"
point-to-hilbert-literal-in-let nil
"Elapsed time: 1338.655641 msecs"
point-to-hilbert-literal-in-let nil
and:
"Elapsed time: 2393.682633 msecs"
point-to-hilbert-let-from-global nil
"Elapsed time: 990.713252 msecs"
point-to-hilbert-let-from-global nil
"Elapsed time: 1008.451391 msecs"
point-to-hilbert-let-from-global nil
"Elapsed time: 985.379787 msecs"
point-to-hilbert-let-from-global nil
--
Michael Wood <
esio...@gmail.com>