From fac893449d3c79c5dc2c45453eafab329c59167f Mon Sep 17 00:00:00 2001 From: HoonDongKang Date: Fri, 9 Oct 2026 14:15:29 +0900 Subject: [PATCH] benchmark: compare number,bigint and converted FFI arguments Add bigint, number, and converted modes to the i64/u64 addition and buffer-sum benchmarks. Compare precomputed bigint arguments, number arguments passed directly to FFI, and numbers converted to BigInt before each call. Signed-off-by: HoonDongKang Assisted-by: Codex:Sol-6.1 --- benchmark/ffi/add-i64.js | 18 ++++++++++++++---- benchmark/ffi/add-u64.js | 18 ++++++++++++++---- benchmark/ffi/buffer-sum-direct.js | 18 +++++++++++++----- benchmark/ffi/buffer-sum.js | 18 +++++++++++++----- 4 files changed, 54 insertions(+), 18 deletions(-) diff --git a/benchmark/ffi/add-i64.js b/benchmark/ffi/add-i64.js index b72e399d4135..70cf8094dfbf 100644 --- a/benchmark/ffi/add-i64.js +++ b/benchmark/ffi/add-i64.js @@ -6,6 +6,7 @@ const { libraryPath, ensureFixtureLibrary } = require('./common.js'); const bench = common.createBenchmark(main, { n: [1e7], + type: ['bigint', 'number', 'converted'], }); ensureFixtureLibrary(); @@ -16,10 +17,19 @@ const { lib, functions } = ffi.dlopen(libraryPath, { const add = functions.add_i64; -function main({ n }) { - bench.start(); - for (let i = 0; i < n; ++i) - add(20n, 22n); +function main({ n, type }) { + const a = type === 'bigint' ? 20n : 20; + const b = type === 'bigint' ? 22n : 22; + + if (type === 'converted') { + bench.start(); + for (let i = 0; i < n; ++i) + add(BigInt(a), BigInt(b)); + } else { + bench.start(); + for (let i = 0; i < n; ++i) + add(a, b); + } bench.end(n); lib.close(); diff --git a/benchmark/ffi/add-u64.js b/benchmark/ffi/add-u64.js index 6a021ad5c854..fa5b88819700 100644 --- a/benchmark/ffi/add-u64.js +++ b/benchmark/ffi/add-u64.js @@ -6,6 +6,7 @@ const { libraryPath, ensureFixtureLibrary } = require('./common.js'); const bench = common.createBenchmark(main, { n: [1e7], + type: ['bigint', 'number', 'converted'], }); ensureFixtureLibrary(); @@ -16,10 +17,19 @@ const { lib, functions } = ffi.dlopen(libraryPath, { const add = functions.add_u64; -function main({ n }) { - bench.start(); - for (let i = 0; i < n; ++i) - add(20n, 22n); +function main({ n, type }) { + const a = type === 'bigint' ? 20n : 20; + const b = type === 'bigint' ? 22n : 22; + + if (type === 'converted') { + bench.start(); + for (let i = 0; i < n; ++i) + add(BigInt(a), BigInt(b)); + } else { + bench.start(); + for (let i = 0; i < n; ++i) + add(a, b); + } bench.end(n); lib.close(); diff --git a/benchmark/ffi/buffer-sum-direct.js b/benchmark/ffi/buffer-sum-direct.js index 425832330047..bd0d4f952308 100644 --- a/benchmark/ffi/buffer-sum-direct.js +++ b/benchmark/ffi/buffer-sum-direct.js @@ -6,6 +6,7 @@ const { libraryPath, ensureFixtureLibrary } = require('./common.js'); const bench = common.createBenchmark(main, { n: [1e7], + type: ['bigint', 'number', 'converted'], }); ensureFixtureLibrary(); @@ -17,12 +18,19 @@ const { lib, functions } = ffi.dlopen(libraryPath, { const fn = functions.sum_buffer; const bytes = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); const pointer = ffi.getRawPointer(bytes); -const length = BigInt(bytes.length); -function main({ n }) { - bench.start(); - for (let i = 0; i < n; ++i) - fn(pointer, length); +function main({ n, type }) { + const length = type === 'bigint' ? BigInt(bytes.length) : bytes.length; + + if (type === 'converted') { + bench.start(); + for (let i = 0; i < n; ++i) + fn(pointer, BigInt(length)); + } else { + bench.start(); + for (let i = 0; i < n; ++i) + fn(pointer, length); + } bench.end(n); lib.close(); diff --git a/benchmark/ffi/buffer-sum.js b/benchmark/ffi/buffer-sum.js index fd5ba47363d0..5ec659d03e11 100644 --- a/benchmark/ffi/buffer-sum.js +++ b/benchmark/ffi/buffer-sum.js @@ -6,6 +6,7 @@ const { libraryPath, ensureFixtureLibrary } = require('./common.js'); const bench = common.createBenchmark(main, { n: [1e7], + type: ['bigint', 'number', 'converted'], }); ensureFixtureLibrary(); @@ -16,12 +17,19 @@ const { lib, functions } = ffi.dlopen(libraryPath, { const fn = functions.sum_buffer; const bytes = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); -const length = BigInt(bytes.length); -function main({ n }) { - bench.start(); - for (let i = 0; i < n; ++i) - fn(bytes, length); +function main({ n, type }) { + const length = type === 'bigint' ? BigInt(bytes.length) : bytes.length; + + if (type === 'converted') { + bench.start(); + for (let i = 0; i < n; ++i) + fn(bytes, BigInt(length)); + } else { + bench.start(); + for (let i = 0; i < n; ++i) + fn(bytes, length); + } bench.end(n); lib.close();