lua-users home
lua-l archive

Re: Whetstone and Dhrystone on Lua

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Dhrystone source code:
LOOPS = 500000

Enumeration = {Ident1=0, Ident2=1, Ident3=2, Ident4=3, Ident5=4} --astrazione del tipo enum

--creo la struttura (come una coda)

Record = {}

function Record.new()

return {PtrComp = 0, Discr = 0, EnumComp, IntComp, StringComp}

end
Coda = {}

function Proc0()

Coda[1] = Record.new();
Coda[2] = Record.new();
Coda[1].PtrComp = 2
Coda[1].Discr = Enumeration.Ident1
Coda[1].EnumComp = Enumeration.Ident3
Coda[1].IntComp = 40
Coda[1].StringComp = "DHRYSTONE PROGRAM, SOME STRING"
Coda[2].StringComp = "DHRYSTONE PROGRAM, SOME STRING"
String1Loc = "DHRYSTONE PROGRAM, 1'ST STRING"

--creo la matrice 51x51
Array1Glob = {}
Array2Glob = {}

for i=1, 51 do
Array2Glob[i] = {}
for j=1, 51 do
Array2Glob[i][j] = 0;
end
end

Array2Glob[8][7] = 10

for i=1, LOOPS do

Char1Glob, BoolGlob = Proc5()
BoolLoc, Char2Glob = Proc4()
IntLoc1 = 2
IntLoc2 = 3
String2Loc = "DHRYSTONE PROGRAM, 2'ND STRING"
EnumLoc = Enumeration.Ident2

BoolGlob = not(Func2(String1Loc, String2Loc))
while IntLoc1 < IntLoc2 do
IntLoc3 = 5 * IntLoc1 - IntLoc2
IntLoc3 = Proc7(IntLoc1, IntLoc2, IntLoc3)
IntLoc1 = IntLoc1 + 1
end
Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3)
Proc1(Coda)
for indice = 1, 2 do
if(indice == 1) then CharIndex = 'A'
else CharIndex = 'B' end
if EnumLoc == Func1(CharIndex, 'C') then
EnumLoc = Proc6(Enumeration.Ident1, EnumLoc)

end
end
IntLoc2 = IntLoc2 * IntLoc1
IntLoc1 = IntLoc2 / IntLoc3
IntLoc2 = 7 * (IntLoc2 - IntLoc3) - IntLoc1;
IntLoc1 = Proc2(IntLoc1)
end
end

function Proc1(codaIn)
codaIn[1].IntComp = 5
codaIn[2].IntComp = codaIn[1].IntComp
codaIn[2].PtrComp = codaIn[1].PtrComp
codaIn[2].PtrComp = Proc3(codaIn[2].PtrComp)

if codaIn[2].Discr == Enumeration.Ident1 then
codaIn[2].IntComp = 6
codaIn[2].EnumComp = Proc6(codaIn[1].EnumComp, codaIn[2].EnumComp)
codaIn[2].PtrComp = Coda[1].PtrComp
codaIn[2].IntComp = Proc7(codaIn[2].IntComp, 10, codaIn[2].IntComp)
else
codaIn[1] = codaIn[2]
end
end

function Proc2(IntParIO)
IntLoc = IntParIO + 10
local EnumLocale
while(true) do
if(Char1Glob == "A") then
IntLoc = IntLoc - 1
IntParIO = IntLoc - IntGlob
EnumLocale = Enumeration.Ident1
end

if EnumLocale == Enumeration.Ident1 then break; end
end
return IntParIO
end

function Proc3(PtrParOut)

if Coda ~= nil then
PtrParOut = Coda[1].ptrComp
else
IntGlob = 100
end
Coda[1].IntComp = Proc7(10, IntGlob, Coda[1].IntComp)
return PtrParOut

end

function Proc4()

if Char1Glob == "A" then
BoolLoc = true
else
BoolLoc = false
end
BoolLoc = BoolLoc or BoolGlob
Char2Glob = "B"
return BoolLoc, Char2Glob
end

function Proc5()
return "A", false
end

function Proc6(EnumParIn, EnumParOut)
EnumParOut = EnumParIn

if not(Func3(EnumParIn)) then
EnumParOut = Enumeration.Ident4
end

if EnumParIn == Enumeration.Ident1 then
EnumParOut = Enumeration.Ident1
elseif EnumParIn == Enumeration.Ident2 then
if IntGlob > 100 then
EnumParOut = Enumeration.Ident1
else
EnumParOut = Enumeration.Ident4
end
elseif EnumParIn == Enumeration.Ident3 then
EnumParOut = Enumeration.Ident2
elseif EnumParIn == Enumeration.Ident5 then
EnumParOut = Enumeration.Ident3
end
return EnumParOut
end

function Proc7(IntParI1, IntParI2, IntParOut)
IntLoc = IntParI1 + 2
IntParOut = IntParI2 + IntLoc
return IntParOut
end

function Proc8(Array1Par, Array2Par, IntParI1, IntParI2)

IntLoc = IntParI1 + 5
Array1Par[IntLoc] = IntParI2
Array1Par[IntLoc + 1] = Array1Par[IntLoc]
Array1Par[IntLoc + 30] = IntLoc

for IntIndex = IntLoc, IntLoc+2 do
Array2Par[IntLoc][IntIndex] = IntLoc
end

Array2Par[IntLoc][IntLoc - 1] = Array2Par[IntLoc][IntLoc - 1] +1
Array2Par[IntLoc + 20][IntLoc] = Array1Par[IntLoc]
IntGlob = 5
end

function Func1(CharPar1, CharPar2)

CharLoc1 = CharPar1
CharLoc2 = CharLoc1
if CharLoc2 ~= CharPar2 then
return Enumeration.Ident1
else
return Enumeration.Ident2
end
end

function Func2(StrParI1, StrParI2)
CharLoc = ''
IntLoc =2
while IntLoc<=2 do
if Func1(StrParI1[IntLoc], StrParI2[IntLoc +1]) == Enumeration.Ident1 then
CharLoc = "A"
IntLoc = IntLoc +1
end
if CharLoc >= "W" and CharLoc <= "Z" then
IntLoc = 7
end
if CharLoc == "X" then
return true;

else
if StrParI1 > StrParI2 then
IntLoc = IntLoc + 7
return true
else
return false
end
end
end
end

function Func3(EnumParIn)
local EnumLocale = EnumParIn
if EnumLocale == Enumeration.Ident3 then
return true;
end
return false
end

Proc0()

I've deleted the verification prints but I can ensure you that everything is correct.
Any kind of suggestion would be appreciated.
Thanks a lot
Armando



Bruno Silvestre <brunoos@inf.puc-rio.br> ha scritto:
On Mon, Mar 10, 2008 at 11:47 AM, Rob Kendrick wrote:
>
> Remember that these benchmarks are pretty meaningless in and of
> themselves. Also remember that Java is most likely being JITed, and has
> an integer type, where neither of those is the case with stock Lua.

You can try "java -Xint" to run the Java's benchmarks with JIT
disabled (interpreted-only mode).

--
bruno


Inviato da Yahoo! Mail.
La web mail più usata al mondo.

AltStyle によって変換されたページ (->オリジナル) /