[Info-vax] Python for x86?
Chris Townley
news at cct-net.co.uk
Tue May 9 18:38:12 EDT 2023
On 09/05/2023 23:32, Dave Froble wrote:
> On 5/9/2023 3:38 PM, Chris Townley wrote:
>> On 08/05/2023 16:34, Arne Vajhøj wrote:
>>> On 5/8/2023 7:23 AM, Chris Townley wrote:
>>>> On 08/05/2023 04:30, terry-... at glaver.org wrote:
>>>
>>
>>
>>>>> Basic:
>>>>> 24.6609 million integer operations per second
>>>>> 28.4091 million floating point operations per second
>>>
>>>> Interesting that BASIC show integer as slower than FP
>>>
>>> Yes. I was puzzled by that as well. But I got the same result
>>> on my systems.
>>>
>>> /NOCHECK does not change it so it is not the overflow
>>> check.
>>>
>>> Maybe there is some subtle error in the Basic integer
>>> test code. But I cannot see it.
>>>
>>> Or maybe it is just an example of how random results
>>> can be with a very limited benchmark - the integer
>>> result practically depends on a single line of code.
>>>
>>> Arne
>>>
>>
>> Finally got round to testing my thoughts.
>>
>> On my FreeAXP (no JIT) setup I get the following with your code:
>>
>> Basic:
>> 12.3182 million integer operations per second
>> 14.1572 million floating point operations per second
>> 0.0080 million string operations per second
>>
>>
>> I then changed the integer bits to append the % to all integer
>> constants, and
>> now get:
>>
>> Basic:
>> 31.6586 million integer operations per second
>>
>> It shows how BASIC can be slowed down not doing that!
>>
>
> I haven't been following this closely, but, First guess is that the
> variables were defaulted to floating point, and then perhaps an integer
> conversion happened?
>
> Can you post the code?
>
> Once past the compiler, the "%" and "$" signs don't matter, since the
> compiler would assign the variables, if not declared, and it would just
> be data and addresses/pointers afterwards.
>
Arne posted a link to the code before, but the relevant bits are:
Arne's version:
sub testfp(integer xscale)
declare integer constant NFP = 1000
declare integer constant N = 1000000
declare integer i, j, nfpscale
declare double sum
declare quad t1, t2
external sub printres(quad, quad, integer, integer, string)
nfpscale = NFP / xscale
call sys$gettim(t1)
for i = 1 to nfpscale
sum = i - 1
for j = 1 to N
sum = ((sum + 1) * 2 + 1) / 2
next j
if abs(sum - (i - 1 + 1.5 * N)) > 1 then
print "Floating point test error"
stop
end if
next i
call sys$gettim(t2)
call printres(t1, t2, nfpscale, N, "floating point operations")
end sub
My changes:
sub testint(integer xscale)
declare integer constant NINT = 10000%
declare integer constant N = 1000000%
declare integer i, j, nintscale, sum
declare quad t1, t2
external sub printres(quad, quad, integer, integer, string)
external long function sys$gettim(quad)
nintscale = NINT / xscale
call sys$gettim(t1)
for i = 1% to nintscale
sum = i - 1%
for j = 1 to N
sum = ((sum + 1%) * 2% + 1%) / 2%
next j
if sum <> (i - 1% + N) then
print "Integer test error"
stop
end if
next i
call sys$gettim(t2)
call printres(t1, t2, nintscale, N, "integer operations")
end sub
--
Chris
More information about the Info-vax
mailing list