Roland Orre <roland.o...@gmail.com> skribis: > I did a few performance tests, and so far 2.0.9 performs much worse than > 1.8.8. > I do not know why, but one simple first test I did was > (define foo (fac 10000)) > which for guile-1.8.8 has as average around 60 ms but for guile-2.0.9 has as > average around 212 ms (almost no time in gc in average). I also checked > by removing libgmp that libgmp was really used. Then I tried to run the > benchmark-suite which was also quite tedious, as they are not directly > compatible between 1.8.8 2.0.9, but those tests I succeded to run indicated > much worse performance, around 10 times slower for 2.0.9. I also checked > the results 35660 digits, and they were identical.
What that this test really measures the performance of the GC, since bignums are heap-allocated. Furthermore, since it’s too short (~100ms on my machine, of which 2.0’s startup takes ~20ms, and slightly more for 1.8), the measurements are too noisy. > The fac I used above was defined as: > (define (fac n) > (define (iter n res) > (if (> n 1) > (iter (1- n) (* n res)) > res)) > (iter n 1)) I did these two tests anyway: 1. Run with ‘guile -q -c '(begin (define (fac n) ...) (fac 10000))’. With 1.8.8, it takes ~110ms on average. With 2.0.9, it takes ~130ms on average. 2. Put the definition and call in a file, and run ‘guile -q t.scm’. With 1.8.8, it takes ~110ms on average. With 2.0.9, it takes ~90ms on average. For (1), Guile 2.0 uses its evaluator, which is not very efficient. However, for (2), it first auto-compiles the program to bytecode, and further runs are clearly faster than with 1.8 (again, a better benchmark would help, but you get the idea.) Thanks, Ludo’.