• 1 Vote(s) - 5 Average
• 1
• 2
• 3
• 4
• 5
 Compiler Speed Trials britlion Posting Freak Posts: 805 Threads: 135 Joined: Apr 2009 Reputation: 5 05-28-2010, 04:58 AM Boriel, I owe you an apology - there is an issue with your hisoft basic test. I absolutely should have made it clearer - and I would have if I thought you were going to replicate the tests! If you recall, I noted that Hisoft ran far more slowly than I expected. The code listed above that you used does indeed take 4.8 seconds. But it's using floating point math to calculate k/2 on line 120. As specified in the Hisoft Basic Manual, and as I noted, I had to tweak it to read: Code:`120 LET V=INT(k/2)*3+4-5` in order to use Integer math, there. I should have made that MUCH clearer. It's also a little misleading to say "using the same code" ZX Basic doesn't run that program in two seconds unless you use DIM to specify Integers. That's fair of course, since the REM does the same thing for Hisoft Basic. But it is worth noting the code does have to be very slightly different. An END IF if nothing else! Try comparing this version (arranged so Hisoft Basic uses Integer math): Code:```7 REM :INT +a,k,v,i,m() 8 REM : OPEN# 9 CLS 10 POKE 23672,0: POKE 23673,0 90 POKE 23672,0 100 LET a=0: LET k=5: LET v=0 110 LET a=a+1 120 LET v=INT (k/2) *3+4-5 130 GO SUB 1000 140 DIM m(5) 150 FOR i=1 TO 5 : REM change to 0 to 4 for ZX BASIC 160 LET m(i)=a 170 NEXT i 200 IF a<1000 THEN GO TO 110 : REM NEEDS AN END IF FOR ZX BASIC 210 PRINT (PEEK 23672+256*PEEK 23673)/50 220 PRINT m(1),k,i,var 999 STOP 1000 RETURN``` And you'll find the Hisoft basic version does indeed return a 0.5 second time. What version did you use to get it to work on ZX BASIC precisely? I would guess something like (arranged so ZX BASIC uses Integer math): Code:```7 REM :INT +a,k,v,i,m() 8 REM : OPEN# DIM a,k,v,i as uInteger 9 CLS 10 POKE 23672,0: POKE 23673,0 90 POKE 23672,0 100 LET a=0: LET k=5: LET v=0 110 LET a=a+1 120 LET v=INT (k/2)*3+4-5 130 GO SUB 1000 140 DIM m(5) as uInteger 150 FOR i=0 TO 4 160 LET m(i)=a 170 NEXT i 200 IF a<1000 THEN GO TO 110 : END IF 210 PRINT (PEEK 23672+256*PEEK 23673)/CAST (FIXED, 50) 220 PRINT m(1),k,i,var 999 STOP 1000 RETURN``` Under -O3, I get this to return in 2.06 seconds. These two are as near as I can get to source code designed to do the same thing, making the same optimizations in each compiler - that is using integer values where possible. I think it's fair to compare them both in fully integer mode. I'm sorry to say that the numbers used in the table at the start of this thread are ones I can stand by, certainly for Hisoft and ZX BASIC, because I tested them personally; and have edited the post to show the best times I achieved in all cases. Here's a snapshot to make it easy to look at: http://sites.google.com/site/britlion/Bm7Hisoft.z80 All set to do *x to clear, *c to compile and *r to run. « Next Oldest | Next Newest »