Created
November 23, 2015 13:59
-
-
Save dermotbalson/12c96a113fee2d26546f to your computer and use it in GitHub Desktop.
Speed test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--# Main | |
-- Speed | |
local abs,cos,sin,tan,acos,asin,atan,deg,rad,floor,fmod,modf,max,min,pow,sqrt=math.abs,math.cos, | |
math.sin,math.tan,math.acos,math.asin,math.atan,math.deg,math.rad,math.floor,math.fmod, | |
math.modf,math.max,math.min,math.pow,math.sqrt | |
local fmod,modf,pack=math.fmod,math.modf,table.pack | |
function setup() | |
txt="" | |
n=100000000 | |
local a,b,c,d=23,-45.54,86,4 | |
local v1,v2=vec3(120,3,-34),vec3(412,4,23) | |
local tbl={1,2,3,4} | |
local tbl2={} | |
tbl2[1]={1,2} | |
tbl2[2]={3,4} | |
tbl2[3]={5,6} | |
txt=n.." iterations on iPad Air 2\n" | |
--[ | |
t=os.time() | |
for i=1,n do | |
local e=abs(b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."abs = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=cos(b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."cos = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=sin(b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."sin = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=tan(b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."tan = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=acos(b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."acos = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=asin(b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."asin = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=atan(b,d) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."atan = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=deg(a) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."deg = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=rad(a) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."rad = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=floor(c) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."floor = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=max(b,c) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."max = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=min(b,c) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."min = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=pow(a,d) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."pow = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=sqrt(b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."sqrt = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=b^0.5 | |
end | |
u=os.time()-t | |
txt=txt.."\n".."^ const= "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=b^d | |
end | |
u=os.time()-t | |
txt=txt.."\n".."^a= "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=b//a | |
end | |
u=os.time()-t | |
txt=txt.."\n".."// = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=fmod(a,b) --gives remainder | |
end | |
u=os.time()-t | |
txt=txt.."\n".."fmod = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e,f=modf(b) --gives integer and fraction | |
end | |
u=os.time()-t | |
txt=txt.."\n".."modf = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=v1:dist(v2) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."dist = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=v1:normalize() | |
end | |
u=os.time()-t | |
txt=txt.."\n".."normalize = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e,f,g=v1:unpack() | |
end | |
u=os.time()-t | |
txt=txt.."\n".."unpack = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e,f,g=v1.x,v1.y,v1.z | |
end | |
u=os.time()-t | |
txt=txt.."\n".."faux unpack = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=pack(a,b,c) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."pack = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=vec3(a,b,c) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."vector pack = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=v1+v2 | |
end | |
u=os.time()-t | |
txt=txt.."\n".."vector add vector = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=v1*a | |
end | |
u=os.time()-t | |
txt=txt.."\n".."vector multiply scalar = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=v1/a | |
end | |
u=os.time()-t | |
txt=txt.."\n".."vector divide scalar = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e=v1*(1/a) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."vector mult inverse scalar = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e,f,g = a*d,b*d,c*d | |
end | |
u=os.time()-t | |
txt=txt.."\n".."3 scalar multiply = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e,f,g = a/d,b/d,c/d | |
end | |
u=os.time()-t | |
txt=txt.."\n".."3 scalar divide = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e,f,g = a+d,b+d,c+d | |
end | |
u=os.time()-t | |
txt=txt.."\n".."3 scalar add = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e = v1:len() | |
end | |
u=os.time()-t | |
txt=txt.."\n".."len = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e = (a*a+b*b+c*c)^0.5 | |
end | |
u=os.time()-t | |
txt=txt.."\n".."len decomp = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e = vec2(a,b) | |
end | |
u=os.time()-t | |
txt=txt.."\n".."make vec2 = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e = {a,b} | |
end | |
u=os.time()-t | |
txt=txt.."\n".."len decomp = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
t=os.time() | |
for i=1,n do | |
local e = b%d | |
end | |
u=os.time()-t | |
txt=txt.."\n".."% = "..u.." secs ("..math.floor(n/60/u).." per frame)" | |
print(txt) | |
end | |
function draw() | |
end | |
local floor=math.floor | |
function format(amount) | |
local formatted = floor(amount) | |
while true do | |
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') | |
if (k==0) then | |
break | |
end | |
end | |
return formatted | |
end | |
--# Results | |
--[[ | |
100000000 iterations on iPad Air 2 | |
All built in functions have been localised first | |
^0.5 555,000 a^0.5 | |
abc* 416,000 d,e,f=a*x,b*x,c*x (decomposed vec3) | |
abc+ 416,000 d,e,f=a+x,b+x,c+x (decomposed vec3) | |
// 416,000 integer division | |
abc/ 278,000 d,e,f=a/x,b/x,c/x (decomposed vec3) | |
%. 278,000 mod % | |
modf 238,000 | |
^b 238,000 a^b | |
acos 238,000 | |
asin 238,000 | |
deg 238,000 | |
rad 238,000 | |
floor 238,000 | |
abs 208,000 | |
max 208,000 | |
sqrt 208,000 | |
min 185,000 | |
fmod 167,000 | |
cos 139,000 | |
sin 139,000 | |
tan 128,000 | |
atan 128,000 | |
pow 104,000 | |
len 79,000 vec3 (92,000 if done with individual components) | |
dist 64,000 | |
unpack 55,000 a=vec3:unpack() | |
x,y,z 42,000 x,y,z=v.x,v.y,v.z | |
vec3 28,000 d=vec3(a,b,c) | |
vec3+ 28,000 vec3 + vec3 | |
vec3* 28,000 vec3 * a | |
vec3/ 28,000 vec3 / a | |
norm 22,000 normalize | |
pack 15,000 table.pack | |
--]] | |
--# Vector | |
Vec2 = {} --decomposed vector library. all inputs and outputs are floats. | |
local acos = math.acos | |
function Vec2.add(x1, y1, x2, y2) | |
return x1 + x2, y1 + y2 | |
end | |
function Vec2.sub(x1, y1, x2, y2) | |
return x1 - x2, y1 - y2 | |
end | |
function Vec2.mult(x, y, d) | |
return x * d, y * d | |
end | |
function Vec2.div(x, y, d) | |
return x / d, y / d | |
end | |
function Vec2.len(x, y) | |
return (x * x + y * y) ^ 0.5 | |
end | |
function Vec2.lenSqr(x, y) | |
return x * x + y * y | |
end | |
function Vec2.dist(x1, y1, x2, y2) | |
return Vec2.len(x1 - x2, y1 - y2) | |
end | |
function Vec2.distSqr(x1, y1, x2, y2) | |
return Vec2.lenSqr(x1 - x2, y1 - y2) | |
end | |
function Vec2.normalize(x, y) | |
local d = 1/Vec2.len(x,y) | |
return x * d, y * d | |
end | |
function Vec2.dot(x1, y1, x2, y2) | |
return x1 * x2 + y1 * y2 | |
end | |
function Vec2.cross(x1, y1, x2, y2) | |
return x1*y2-x2*y1 | |
end | |
function Vec2.rotate90(x, y) --antiClockwise | |
return -y, x | |
end | |
function Vec2.angleBetween(x1, y1, x2, y2) | |
local dot = Vec2.dot(x1, y1, x2, y2) | |
return acos( dot / (Vec2.len(x1, y1) * Vec2.len(x2, y2))) | |
end | |
--# VectorTest | |
local V=Vec2 | |
function setup() | |
txt="" | |
n=50000000 --iterations | |
--test data | |
local a,b,c,d=23,-45.54,86,4 | |
local v1,v2=vec3(120,3,-34),vec3(412,4,23) | |
v3,v4=vec2(5,-2),vec2(3.623,789.43) | |
vx3,vy3,vx4,vy4=v3.x,v3.y,v4.x,v4.y | |
local tbl={1,2,3,4} | |
local tbl2={} | |
tbl2[1]={1,2} | |
tbl2[2]={3,4} | |
tbl2[3]={5,6} | |
txt="" --n.." iterations on iPad Air 2\n" | |
--[[ | |
txt=txt.."Add\n" | |
t=os.time() | |
for i=1,n do | |
local e = v3+v4 | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = vectors\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = Vec2.add(vx3,vy3,vx4,vy4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = V.add(vx3,vy3,vx4,vy4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = localised Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = vx3+vy3,vx4+vy4 | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = no function\n" | |
--]] | |
--[[ | |
txt=txt.."Multiply\n" | |
t=os.time() | |
for i=1,n do | |
local e = v3*a | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = vectors\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = Vec2.mult(vx3,vy3,a) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = V.mult(vx3,vy3,a) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = localised Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = vx3*a,vy3*a | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = no function\n" | |
--]] | |
--[[ | |
txt=txt.."Divide\n" | |
t=os.time() | |
for i=1,n do | |
local e = v3/a | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = vectors\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = Vec2.div(vx3,vy3,a) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = V.div(vx3,vy3,a) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = localised Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e,f = vx3/a,vy3/a | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = no function\n" | |
--]] | |
--[[ | |
txt=txt.."Length\n" | |
t=os.time() | |
for i=1,n do | |
local e = v3:len() | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = vectors\n" | |
t=os.time() | |
for i=1,n do | |
local e = Vec2.len(vx3,vy3) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = V.len(vx3,vy3) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = localised Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = (vx3*vx3+vy3*vy3)^0.5 | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = no function\n" | |
--]] | |
--[[ | |
txt=txt.."Normalize\n" | |
t=os.time() | |
for i=1,n do | |
local e = v3:normalize() | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = vectors\n" | |
t=os.time() | |
for i=1,n do | |
local e = Vec2.normalize(vx3,vy3) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = V.normalize(vx3,vy3) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = localised Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = 1/(vx3*vx3+vy3*vy3)^0.5 | |
local f,g=vx3*e,vy3*e | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = no function\n" | |
--]] | |
--[[ | |
txt=txt.."Dot\n" | |
t=os.time() | |
for i=1,n do | |
local e = v3:dot(v4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = vectors\n" | |
t=os.time() | |
for i=1,n do | |
local e = Vec2.dot(vx3,vy3,vx4,vy4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = V.dot(vx3,vy3,vx4,vy4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = localised Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = vx3*vx4+vy3*vy4 | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = no function\n" | |
--]] | |
--[[ | |
txt=txt.."Cross\n" | |
t=os.time() | |
for i=1,n do | |
local e = v3:cross(v4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = vectors\n" | |
t=os.time() | |
for i=1,n do | |
local e = Vec2.cross(vx3,vy3,vx4,vy4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = V.cross(vx3,vy3,vx4,vy4) | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = localised Vec2\n" | |
t=os.time() | |
for i=1,n do | |
local e = vx3*vy4-vy3*vx4 | |
end | |
u=os.time()-t | |
txt=txt..format(n/60/u).." = no function\n" | |
--]] | |
print(txt) | |
sound(SOUND_JUMP, 29119) | |
end | |
-------------------------- | |
--[[ | |
Add | |
23,809 = vectors | |
75,757 = Vec2 | |
92,592 = localised Vec2 | |
166,666 = no function | |
Multiply | |
25,252 = vectors | |
92,592 = Vec2 | |
104,166 = localised Vec2 | |
208,333 = no function | |
Divide | |
25,252 = vectors | |
92,592 = Vec2 | |
119,047 = localised Vec2 | |
208,333 = no function | |
Length | |
75,757 = vectors | |
59,523 = Vec2 | |
69,444 = localised Vec2 | |
75,757 = no function | |
Normalize | |
22,522 = vectors | |
37,878 = Vec2 | |
39,682 = localised Vec2 | |
59,523 = no function | |
Dot | |
43,859 = vectors | |
75,757 = Vec2 | |
92,592 = localised Vec2 | |
138,888 = no function | |
Cross | |
46,296 = vectors | |
75,757 = Vec2 | |
92,592 = localised Vec2 | |
138,888 = no function | |
--]] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment