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 D97DD16AFFDD; Fri, 26 Dec 2025 12:23:21 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org D97DD16AFFDD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1766741002; bh=XYbuRbFVQeuzb0qgMnyiuCzYWP7Z3dTBpOCMGPgPEGk=; 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=rghhBS4Prf2Q2LLVAw6pCWu9/qttJBYaQdVheRlrjlnoQHFqgF86Iqfwi+c2Av5t/ PBdT4Diss3aiwvDkhRWbL4LKbd1sEOcImINr0Q+rli9M11BUjkJMFrMllQCqaTeLw1 yuXNgPHOPq75dcJcjLQ6/POyU8VHwxKRfdn5NUD8= Received: from send82.i.mail.ru (send82.i.mail.ru [89.221.237.177]) (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 E8F6D16C6584 for ; Fri, 26 Dec 2025 12:18:31 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org E8F6D16C6584 Received: by exim-smtp-7b4fb89df9-lft7n with esmtpa (envelope-from ) id 1vZ3xv-000000008Cp-0VFR; Fri, 26 Dec 2025 12:18:31 +0300 To: Sergey Bronnikov Date: Fri, 26 Dec 2025 12:17:41 +0300 Message-ID: <9e98c600fdd28246ef80da1988866e5948a6ba62.1766738771.git.skaplun@tarantool.org> X-Mailer: git-send-email 2.52.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: 4F1203BC0FB41BD979975AF0D777FEBD826642AD4A534357A371A8F1BADBE128182A05F538085040A0751BE392B92D313DE06ABAFEAF6705CAF91A2438225F25B4FA2C6BBBE99EF9D42CF41164E76205 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7D77100FFB2844417EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB55337566657B88B02DF8C869991A807E7F9CA6B38EDCD39A7D089D1AE52AFC7D5C01F5DE389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C0B27420F9988F54058941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B6F459A8243F1D1D44CC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB86D1867E19FE14079C09775C1D3CA48CF3D321E7403792E342EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE79E9721B410A3B6ED731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A5AF2068D6A621E3485002B1117B3ED696B81BC8AA5E687ED2BFF4097FFC9E796F823CB91A9FED034534781492E4B8EEAD577AE849BCD98940C79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34CAB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D659D09D6550E216A426109D66CD45AA2E841C5EB461FAF7F18E1277ED26C8108821146CDB3E4152C519B8341EE9D5BE9A0A80E9E29E0433036005D8439B09F6DFF05ED333255032B0166536EB022892E5344C41F94D744909CECFA6C6B0C050A61A8CAF69B82BA93681CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVdtTL5f5BIXbSNH4iKu9noI= X-Mailru-Sender: 689FA8AB762F7393DDD5FD59B456EAD2991BD2CE92EB78A98700636FE984EBB8A7661877F61D31FBE49D44BB4BD9522A059A1ED8796F048DB274557F927329BE89D5A3BC2B10C37545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: [Tarantool-patches] [PATCH v2 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 | 126 ++++++++--------------------- perf/LuaJIT-benches/libs/fasta.lua | 105 ++++++++++++++++++++++++ 2 files changed, 138 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..457623b2 100644 --- a/perf/LuaJIT-benches/fasta.lua +++ b/perf/LuaJIT-benches/fasta.lua @@ -1,95 +1,35 @@ - -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 }, +-- Benchmark to check the performance of working with strings and +-- output to the file. It generates DNA sequences by copying or +-- weighted random selection. +-- For details see: +-- https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/fasta.html + +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..58f59dd5 --- /dev/null +++ b/perf/LuaJIT-benches/libs/fasta.lua @@ -0,0 +1,105 @@ +-- Benchmark to check the performance of working with strings and +-- output to the file. It generates DNA sequences by copying or +-- weighted random selection. +-- For details see: +-- https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/fasta.html +-- Also, this file is used as a script to generate inputs for +-- other benchmarks like and . + +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.52.0