Hi Clément,
On Wed, Apr 27, 2016 at 10:28 AM, Eliot Miranda eliot.miranda@gmail.com wrote:
Hi Clément,
On Wed, Apr 27, 2016 at 7:03 AM, Clément Bera bera.clement@gmail.com wrote:
Hi,
So after *really* struggling I profiled Holger's code.
I put results in attachment with version 3427 and version 3684 of the VM.
Holger said the code is not open-source, so if you want more information about the code ask him (or I guess I can answer if it's for a specific method).
The code execution is well spread around the methods. It's difficult to conclude.
It seems (I say, it seems) that the execution spend more time in recent versions in PICs. It could be that the machine code produced there is different because of:
- the abstraction with 32/64 bits
- the abstraction over literals for ARM
- the design changes, if I understood correctly now PIC are created from
a prototype. Now it could be something else.
I have no time to investigate further right now. Maybe we should try to generate PICs in 3427 and 3684 and check if the machine code is different. Which VMMaker version is 3427 ?
What do you guys think ?
It could be the longer jump in the new PICs, but I really doubt it. But there's something wrong with the VM profiler on linux. It is not showing any code in the interpreter run-time, and that might be hiding the real reason. I'll look at this as soon as I have time, but am committed to other things today and tomorrow.
_,,,^..^,,,_ best, Eliot
and now that I'bve checked the PCI code again I'm really curious whether a different entry code (for PICs and methods) would be any faster overall. I would test changing xorl %ecx, %ecx call cePICAbort0Args nop Li: andl $0x00000001, %eax jmp Lc nop Le: *movl %edx, %eax* * andl $0x00000003, %eax* jnz Li movl %ds:(%edx), %eax andl $0x003fffff, %eax Lc: cmpl %ecx, %eax jnz Lnextcase movl $0x0, %ebx jmp theMethod.noCheckEntry to xorl %ecx, %ecx call cePICAbort0Args nop Li: *movl %edx, %eax* andl $0x00000001, %eax jmp Lc nop Le: *tstl $0x00000003, %edx* jnz Li movl %ds:(%edx), %eax andl $0x003fffff, %eax Lc: cmpl %ecx, %eax jnz Lnextcase movl $0x0, %ebx jmp theMethod.noCheckEntry
It saves an instruction in the non-iummediate case and has just as many instructions in the immediate case.
_,,,^..^,,,_ best, Eliot