Hi, Sergey!
Thanks for the patch! LGTM
Sergey
This patch adjusts the aforementioned test to use the benchmark
framework introduced before. The default arguments are adjusted
according to the <PARAM_x86.txt> file. The arguments to the script still
can be provided in the command line run.
---
perf/LuaJIT-benches/nsieve.lua | 42 ++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 5 deletions(-)
diff --git a/perf/LuaJIT-benches/nsieve.lua b/perf/LuaJIT-benches/nsieve.lua
index 6de0524f..dd59c71c 100644
--- a/perf/LuaJIT-benches/nsieve.lua
+++ b/perf/LuaJIT-benches/nsieve.lua
@@ -1,3 +1,11 @@
+-- Benchmark to check the performance of access to the array
+-- structure in the tiny inner loops. This benchmark finds all the
+-- prime numbers in a given segment. This is the most
+-- straightforward implementation.
+-- For the details see:
+-- https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
+
+local bench = require("bench").new(arg)
local function nsieve(p, m)
for i=2,m do p[i] = true end
@@ -11,11 +19,35 @@ local function nsieve(p, m)
return count
end
-local N = tonumber(arg and arg[1]) or 1
+local DEFAULT_N = 12
+local N = tonumber(arg and arg[1]) or DEFAULT_N
if N < 2 then N = 2 end
local primes = {}
-for i=0,2 do
- local m = (2^(N-i))*10000
- io.write(string.format("Primes up to %8d %8d\n", m, nsieve(primes, m)))
-end
+local benchmark
+benchmark = {
+ name = "nsieve",
+ payload = function()
+ local res = {}
+ local items = 0
+ for i = 0, 2 do
+ local m = (2 ^ (N - i)) * 10000
+ items = items + m
+ res[i] = nsieve(primes, m)
+ end
+ benchmark.items = items
+
+ return res
+ end,
+ checker = function(res)
+ if N == DEFAULT_N then
+ assert(res[0] == 2488465)
+ assert(res[1] == 1299069)
+ assert(res[2] == 679461)
+ end
+ return true
+ end,
+}
+
+bench:add(benchmark)
+bench:run_and_report()