Created
August 25, 2018 10:42
-
-
Save pfirsich/9b870faa6956fc7fefdb2a4c09f74fcf to your computer and use it in GitHub Desktop.
Power of Two function benchmark for luajit (löve used for timing)
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
local potLut = {} | |
potLut[0] = 1 | |
for i = 1, 32 do | |
potLut[i] = potLut[i-1] * 2 | |
end | |
-- compare this with lshift(2, n) | |
local function potA(n) -- power of two | |
return potLut[n] | |
end | |
local bit = require("bit") | |
local lshift = bit.lshift | |
local function potB(n) | |
return math.abs(lshift(1, n)) -- because lshift(1, 31) = -2147483648 | |
end | |
local function potBf(n) | |
return lshift(1, n) | |
end | |
local function potC(n) | |
return 2^n | |
end | |
------------------------------------- | |
local values = {} | |
for i = 1, 40000000 do | |
local n = love.math.random(0, 31) | |
assert(potA(n) == potB(n) and potA(n) == potC(n)) -- potBf is wrong anyways | |
values[#values + 1] = n | |
end | |
local start = love.timer.getTime() | |
for i = 1, #values do | |
local res = potA(values[i]) | |
end | |
print("LUT func: " .. (love.timer.getTime() - start)) | |
local start = love.timer.getTime() | |
for i = 1, #values do | |
local res = potLut[values[i]] | |
end | |
print("LUT lookup: " .. (love.timer.getTime() - start)) | |
local start = love.timer.getTime() | |
for i = 1, #values do | |
local res = potB(values[i]) | |
end | |
print("bit.lshift: " .. (love.timer.getTime() - start)) | |
local start = love.timer.getTime() | |
for i = 1, #values do | |
local res = potBf(values[i]) | |
end | |
print("bit.lshift without abs: " .. (love.timer.getTime() - start)) | |
local start = love.timer.getTime() | |
for i = 1, #values do | |
local res = potC(values[i]) | |
end | |
print("pow: " .. (love.timer.getTime() - start)) |
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
LUT func: 0.066940495627932 | |
LUT lookup: 0.067318620625883 | |
bit.lshift: 0.027310643810779 | |
bit.lshift without abs: 0.029313809820451 (I don't know why it's slower, but this behaviour persists between runs) | |
pow: 0.059891540324315 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment