When doing a
For I = 0 to 100000000 xojo needs around four seconds for it, J.v. Not even a second. Even
#Pragma BackgroundTasks False
#Pragma NilObjectChecking False
Var start As Double
start = datetime.now.SecondsFrom1970
For i As Integer = 1 To 100000000
Next
Var dauer As Double
dauer = datetime.now.SecondsFrom1970 - start
label1.Text=Str(dauer)
It costs three seconds , with p…l it costs less than a second and also XX++ does it under a second.
This is the same case under windows, Linux and MAC osX.
So far so good why I can not get even half of the speed as other languages? Did also a try with Linux g…s what done it in 1.04 seconds, a language which is hit compiled.
Is the any other chance to optimize it?
William_Yu
(William Yu)
October 19, 2020, 6:42pm
2
Are you running this in a debug session or as a built app? We do inject some additional debugging information for debug builds FWIW.
2 Likes
The compiled version needs 0.151711 seconds
On Linux it’s much slower trust me. And no, builder. The Mac I am using is old so it is not counting but
DerkJ
(DerkJ)
October 19, 2020, 7:00pm
5
Try a build, compile agrressive and it will strip the empty loop as far as my counting goes…
And you can use even more pragmas to speedup
Java does essentially the same, i think it strips the entire loop…
But it is interesting that it is in the other languages also not optimized! So it is to slow without pragmas
Other languages will eliminate the loop completely.
1 Like
Yes they will but why not xojo?
Are you timing a loop or asking about how much optimisation the compiler does?
First: I am asking why the loop was so slow. Second: it’s important to have the security that the compiler is delivering fast code for a simple loop
Xojo with default compilation:
0x10012d711 <+273>: movq $0x0, -0x28(%rbp)
0x10012d719 <+281>: movb $0x0, -0x29(%rbp)
0x10012d71d <+285>: movq $0x0, -0x38(%rbp)
0x10012d725 <+293>: movq $0x1, -0x28(%rbp)
0x10012d72d <+301>: movl $0x5f5e100, %eax ; imm = 0x5F5E100
0x10012d732 <+306>: movl %eax, %ecx
0x10012d734 <+308>: cmpq -0x28(%rbp), %rcx
0x10012d738 <+312>: setl %dl
0x10012d73b <+315>: andb $0x1, %dl
0x10012d73e <+318>: movb %dl, -0x29(%rbp)
0x10012d741 <+321>: cmpb $0x0, %dl
0x10012d744 <+324>: je 0x10012d768 ; <+360>
...
0x10012d766 <+358>: jmp 0x10012d77c ; <+380>
0x10012d768 <+360>: jmp 0x10012d76a ; <+362>
0x10012d76a <+362>: movq -0x28(%rbp), %rax
0x10012d76e <+366>: addq $0x1, %rax
0x10012d772 <+370>: movq %rax, -0x38(%rbp)
0x10012d776 <+374>: movq %rax, -0x28(%rbp)
0x10012d77a <+378>: jmp 0x10012d72d ; <+301>
Xojo will do the loop and use addq to add 1 to the integer and actually run the loop 0x5f5e100 Times.
1 Like
With aggressive compilation, the loop is gone in assembly. Time is now 0.000139 for me here, which mostly may be time needed to query time.
2 Likes
Geht also nur mit aggressiver Optimierung, gut zu wissen, vielen Dank does only work with aggressive optimizatio , good to know.
I didn’t try the medium level, but you can try it.