Sergey Gromov:
> Remove -inline from your compiler options, and #2 compiles and runs
> faster in both D1 and D2 than #1.
> lazy seems to do something funny when -inline is in effect.
You are right, I have tested it on D1.
I think the codepad doesn't use -inline, that's why #2 works there.
#2 also uses less RAM on D1, for example N=24 requires about 707 MB instead of
788 MB, and about 2.8 s instead of about 3 s.
Sergey Gromov:
> Remove -inline from your compiler options, and #2 compiles and runs
> faster in both D1 and D2 than #1.
> lazy seems to do something funny when -inline is in effect.
You are right, I have tested it on D1.
I think the codepad doesn't use -inline, that's why #2 works there.
#2 also uses less RAM on D1, for example N=24 requires about 710 MB instead of
788 MB, and about 2.8 s instead of about 3 s.
This is the Asm of the #2 compiled with D1 with -O -release, it's shorter still
(but note there are some other parts that I don't show here):
_D11man_or_boy21aFiLiLiLiLiLiZi comdat
assume CS:_D11man_or_boy21aFiLiLiLiLiLiZi
L0: push EAX
push EBX
cmp dword ptr 034h[ESP],0
jg L33
mov EAX,014h[ESP]
mov EDX,018h[ESP]
mov EBX,014h[ESP]
call EDX
push EAX
sub ESP,4
mov EAX,014h[ESP]
mov EDX,018h[ESP]
mov EBX,014h[ESP]
call EDX
mov ECX,EAX
add ESP,4
pop EAX
add EAX,ECX
jmp short L3C
L33: lea EAX,4[ESP]
call near ptr _D11man_or_boy21aFiLiLiLiLiLiZi1bMFZi
L3C: pop EBX
pop ECX
ret 02Ch
_D11man_or_boy21aFiLiLiLiLiLiZi ends
--------------------------
I have then tested #1 and #2 without -inline on D2, and the results are very
different from each other: #1 is very slow and uses lot of memory, while #2
(that contains no scope) acts as D1, using "only" 707 MB with N=24 and working
with n=25 too. The asm code is similar the one I have just shown here.
So compiling #2 witout -inline in D2 fulfulls my original desire of computing
up to N=25 with D2 :-)
I presume the -inline uncovers a small bug of DMD, that will be fixed. But what
interests me more now is to understand how to write such fast code in general
in D2.
Bye,
bearophile