From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id DB7C115D6585; Fri, 24 Oct 2025 13:55:45 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org DB7C115D6585 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1761303346; bh=B+AmClWpJOnZgEHOKXLTPyDSYp+D0TeoC40iD8NX6rs=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=T6F+ZipU+ldQcTS2vF01sJkM0SEuqrE8e28/xYw2Z5VxUsZFQtVVXenYu72cMaL1n YtNrRIvLcgXGfDCLlSq74pOk3p8XrZnRPO6hR4Q4gO64/5Vsy8qZYEEo8u41uZxNwz HPeX2316RLo3T2pJ6QmOzxO7z6FXJZFQGTcQBR+k= Received: from send173.i.mail.ru (send173.i.mail.ru [95.163.59.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 789C01519BD2 for ; Fri, 24 Oct 2025 13:50:57 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 789C01519BD2 Received: by exim-smtp-855f5997bb-88mr2 with esmtpa (envelope-from ) id 1vCFNo-000000006vv-0REA; Fri, 24 Oct 2025 13:50:56 +0300 To: Sergey Bronnikov Date: Fri, 24 Oct 2025 13:50:14 +0300 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9DAB542EDD08389FE7E65D57240B101EEF4B0F87E4747657E182A05F53808504052C1DD68A39C5CC13DE06ABAFEAF67050450476D8DB57FE752E7C6720268728E70001EC1C84847AC X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE77633BACAB33B9508C2099A533E45F2D0395957E7521B51C2CFCAF695D4D8E9FCEA1F7E6F0F101C6759CC434672EE6371C2A783ECEC0211ADC4224003CC836476D5A39DEEDB180909611E41BBFE2FEB2BFC536AB7B6F580DBEC349FFF602E6B823C130902DFF436DBCC13CCA20026F33F9FA2833FD35BB23D9E625A9149C048EE33AC447995A7AD18BDFBBEFFF4125B51D2E47CDBA5A96583BD4B6F7A4D31EC0BC014FD901B82EE079FA2833FD35BB23D27C277FBC8AE2E8BF80095D1E57F4578A471835C12D1D977C4224003CC8364762BB6847A3DEAEFB0F43C7A68FF6260569E8FC8737B5C2249EC8D19AE6D49635B68655334FD4449CB9ECD01F8117BC8BEAAAE862A0553A39223F8577A6DFFEA7CB601CEFCD1BC935243847C11F186F3C59DAA53EE0834AAEE X-C1DE0DAB: 0D63561A33F958A52571E7901CEA89705002B1117B3ED6960D8911FF28C8EF47B48B7A7F94616420823CB91A9FED034534781492E4B8EEADC8D8B8CB12567299C79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF9D733155F993C9E4F26396CED96DB7B6B0367CB23B3FF7B5B37383FCA42857CB45AE5861559675ED6EB503EC62A3E87FEDE15065E8AD21A0E2422C6CC32E61FECABB2AE7FA929F905F4332CA8FE04980913E6812662D5F2A5EAB5682573093F7837F15F2B5E4A70B33F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVRN2q9QiacRu9fej5FiWVhQ= X-DA7885C5: FD1EEAEBEBA1E7C2F255D290C0D534F9C26EE30743CDB2B68FDD66AED7861D76DAC76BCB1ADF4B795B1A4C17EAA7BC4BEF2421ABFA55128DAF83EF9164C44C7E X-Mailru-Sender: 689FA8AB762F7393DDD5FD59B456EAD291765E48211F653511988E4495A63B6E96721B4CA84E198DE49D44BB4BD9522A059A1ED8796F048DB274557F927329BE89D5A3BC2B10C37545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: [Tarantool-patches] [PATCH v1 luajit 10/41] perf: adjust fasta in LuaJIT-benches X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Kaplun via Tarantool-patches Reply-To: Sergey Kaplun Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" This patch adjusts the aforementioned test to use the benchmark framework introduced before. The default arguments are adjusted according to the file. The arguments to the script still can be provided in the command line run. Since the result output (with the different input parameter value) produced by this benchmark is used in other benchmarks ( and ), the original script is used as a library (inside the subdirectory) with the updated default input value and returns the number of items processed. The output for the benchmark itself is suppressed and not checked since it is irrational to store in the repository such huge files for testing. --- perf/LuaJIT-benches/fasta.lua | 120 +++++++---------------------- perf/LuaJIT-benches/libs/fasta.lua | 98 +++++++++++++++++++++++ 2 files changed, 125 insertions(+), 93 deletions(-) create mode 100644 perf/LuaJIT-benches/libs/fasta.lua diff --git a/perf/LuaJIT-benches/fasta.lua b/perf/LuaJIT-benches/fasta.lua index 7ce60804..d0dc005d 100644 --- a/perf/LuaJIT-benches/fasta.lua +++ b/perf/LuaJIT-benches/fasta.lua @@ -1,95 +1,29 @@ - -local Last = 42 -local function random(max) - local y = (Last * 3877 + 29573) % 139968 - Last = y - return (max * y) / 139968 -end - -local function make_repeat_fasta(id, desc, s, n) - local write, sub = io.write, string.sub - write(">", id, " ", desc, "\n") - local p, sn, s2 = 1, #s, s..s - for i=60,n,60 do - write(sub(s2, p, p + 59), "\n") - p = p + 60; if p > sn then p = p - sn end - end - local tail = n % 60 - if tail > 0 then write(sub(s2, p, p + tail-1), "\n") end -end - -local function make_random_fasta(id, desc, bs, n) - io.write(">", id, " ", desc, "\n") - loadstring([=[ - local write, char, unpack, n, random = io.write, string.char, unpack, ... - local buf, p = {}, 1 - for i=60,n,60 do - for j=p,p+59 do ]=]..bs..[=[ end - buf[p+60] = 10; p = p + 61 - if p >= 2048 then write(char(unpack(buf, 1, p-1))); p = 1 end - end - local tail = n % 60 - if tail > 0 then - for j=p,p+tail-1 do ]=]..bs..[=[ end - p = p + tail; buf[p] = 10; p = p + 1 - end - write(char(unpack(buf, 1, p-1))) - ]=], desc)(n, random) -end - -local function bisect(c, p, lo, hi) - local n = hi - lo - if n == 0 then return "buf[j] = "..c[hi].."\n" end - local mid = math.floor(n / 2) - return "if r < "..p[lo+mid].." then\n"..bisect(c, p, lo, lo+mid).. - "else\n"..bisect(c, p, lo+mid+1, hi).."end\n" -end - -local function make_bisect(tab) - local c, p, sum = {}, {}, 0 - for i,row in ipairs(tab) do - c[i] = string.byte(row[1]) - sum = sum + row[2] - p[i] = sum - end - return "local r = random(1)\n"..bisect(c, p, 1, #tab) -end - -local alu = - "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG".. - "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA".. - "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT".. - "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA".. - "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG".. - "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC".. - "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA" - -local iub = make_bisect{ - { "a", 0.27 }, - { "c", 0.12 }, - { "g", 0.12 }, - { "t", 0.27 }, - { "B", 0.02 }, - { "D", 0.02 }, - { "H", 0.02 }, - { "K", 0.02 }, - { "M", 0.02 }, - { "N", 0.02 }, - { "R", 0.02 }, - { "S", 0.02 }, - { "V", 0.02 }, - { "W", 0.02 }, - { "Y", 0.02 }, -} - -local homosapiens = make_bisect{ - { "a", 0.3029549426680 }, - { "c", 0.1979883004921 }, - { "g", 0.1975473066391 }, - { "t", 0.3015094502008 }, +local bench = require("bench").new(arg) + +local stdout = io.output() + +local benchmark +benchmark = { + name = "fasta", + -- XXX: The result file may take up to 278 Mb for the default + -- settings. To check the correctness of the script, run it as + -- is from the console. + skip_check = true, + setup = function() + io.output("/dev/null") + end, + payload = function() + -- Run the benchmark as is from the file. + local items = require("fasta") + -- Remove it from the cache to be sure the benchmark will run + -- at the next iteration. + package.loaded["fasta"] = nil + benchmark.items = items + end, + teardown = function() + io.output(stdout) + end, } -local N = tonumber(arg and arg[1]) or 1000 -make_repeat_fasta('ONE', 'Homo sapiens alu', alu, N*2) -make_random_fasta('TWO', 'IUB ambiguity codes', iub, N*3) -make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, N*5) +bench:add(benchmark) +bench:run_and_report() diff --git a/perf/LuaJIT-benches/libs/fasta.lua b/perf/LuaJIT-benches/libs/fasta.lua new file mode 100644 index 00000000..9c72c244 --- /dev/null +++ b/perf/LuaJIT-benches/libs/fasta.lua @@ -0,0 +1,98 @@ + +local Last = 42 +local function random(max) + local y = (Last * 3877 + 29573) % 139968 + Last = y + return (max * y) / 139968 +end + +local function make_repeat_fasta(id, desc, s, n) + local write, sub = io.write, string.sub + write(">", id, " ", desc, "\n") + local p, sn, s2 = 1, #s, s..s + for i=60,n,60 do + write(sub(s2, p, p + 59), "\n") + p = p + 60; if p > sn then p = p - sn end + end + local tail = n % 60 + if tail > 0 then write(sub(s2, p, p + tail-1), "\n") end +end + +local function make_random_fasta(id, desc, bs, n) + io.write(">", id, " ", desc, "\n") + loadstring([=[ + local write, char, unpack, n, random = io.write, string.char, unpack, ... + local buf, p = {}, 1 + for i=60,n,60 do + for j=p,p+59 do ]=]..bs..[=[ end + buf[p+60] = 10; p = p + 61 + if p >= 2048 then write(char(unpack(buf, 1, p-1))); p = 1 end + end + local tail = n % 60 + if tail > 0 then + for j=p,p+tail-1 do ]=]..bs..[=[ end + p = p + tail; buf[p] = 10; p = p + 1 + end + write(char(unpack(buf, 1, p-1))) + ]=], desc)(n, random) +end + +local function bisect(c, p, lo, hi) + local n = hi - lo + if n == 0 then return "buf[j] = "..c[hi].."\n" end + local mid = math.floor(n / 2) + return "if r < "..p[lo+mid].." then\n"..bisect(c, p, lo, lo+mid).. + "else\n"..bisect(c, p, lo+mid+1, hi).."end\n" +end + +local function make_bisect(tab) + local c, p, sum = {}, {}, 0 + for i,row in ipairs(tab) do + c[i] = string.byte(row[1]) + sum = sum + row[2] + p[i] = sum + end + return "local r = random(1)\n"..bisect(c, p, 1, #tab) +end + +local alu = + "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG".. + "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA".. + "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT".. + "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA".. + "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG".. + "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC".. + "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA" + +local iub = make_bisect{ + { "a", 0.27 }, + { "c", 0.12 }, + { "g", 0.12 }, + { "t", 0.27 }, + { "B", 0.02 }, + { "D", 0.02 }, + { "H", 0.02 }, + { "K", 0.02 }, + { "M", 0.02 }, + { "N", 0.02 }, + { "R", 0.02 }, + { "S", 0.02 }, + { "V", 0.02 }, + { "W", 0.02 }, + { "Y", 0.02 }, +} + +local homosapiens = make_bisect{ + { "a", 0.3029549426680 }, + { "c", 0.1979883004921 }, + { "g", 0.1975473066391 }, + { "t", 0.3015094502008 }, +} + +local N = tonumber(arg and arg[1]) or 25e6 + +make_repeat_fasta('ONE', 'Homo sapiens alu', alu, N*2) +make_random_fasta('TWO', 'IUB ambiguity codes', iub, N*3) +make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, N*5) + +return N*2 + N*3 + N*5 -- 2.51.0