From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 5194E4E677 for ; Wed, 11 Jun 2025 12:49:09 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 1FA3868C1FE; Wed, 11 Jun 2025 15:48:24 +0300 (EEST) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id B0EC868C1C3 for ; Wed, 11 Jun 2025 15:48:12 +0300 (EEST) Received: from haasn.dev (unknown [10.30.1.1]) by haasn.dev (Postfix) with UTF8SMTP id 7549242507; Wed, 11 Jun 2025 14:48:12 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 11 Jun 2025 14:47:10 +0200 Message-ID: <20250611124805.73196-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250611124805.73196-1-ffmpeg@haasn.xyz> References: <20250611124805.73196-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v6 04/18] tests/checkasm: increase number of runs in between measurements X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Niklas Haas Sometimes, when measuring very small functions, rdtsc is not accurate enough to get a reliable measurement. This increases the number of runs inside the inner loop from 4 to 32, which should help a lot. Less important when using the more precise linux-perf API, but still useful. There should be no user-visible change since the number of runs is adjusted to keep the total time spent measuring the same. --- tests/checkasm/checkasm.c | 2 +- tests/checkasm/checkasm.h | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 0734cd26bf..71d1e5766c 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -628,7 +628,7 @@ static inline double avg_cycles_per_call(const CheckasmPerf *const p) if (p->iterations) { const double cycles = (double)(10 * p->cycles) / p->iterations - state.nop_time; if (cycles > 0.0) - return cycles / 4.0; /* 4 calls per iteration */ + return cycles / 32.0; /* 32 calls per iteration */ } return 0.0; } diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 146bfdec35..ad7ed10613 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -342,6 +342,22 @@ typedef struct CheckasmPerf { #define PERF_STOP(t) t = AV_READ_TIME() - t #endif +#define CALL4(...)\ + do {\ + tfunc(__VA_ARGS__); \ + tfunc(__VA_ARGS__); \ + tfunc(__VA_ARGS__); \ + tfunc(__VA_ARGS__); \ + } while (0) + +#define CALL16(...)\ + do {\ + CALL4(__VA_ARGS__); \ + CALL4(__VA_ARGS__); \ + CALL4(__VA_ARGS__); \ + CALL4(__VA_ARGS__); \ + } while (0) + /* Benchmark the function */ #define bench_new(...)\ do {\ @@ -352,14 +368,12 @@ typedef struct CheckasmPerf { uint64_t tsum = 0;\ uint64_t ti, tcount = 0;\ uint64_t t = 0; \ - const uint64_t truns = bench_runs;\ + const uint64_t truns = FFMAX(bench_runs >> 3, 1);\ checkasm_set_signal_handler_state(1);\ for (ti = 0; ti < truns; ti++) {\ PERF_START(t);\ - tfunc(__VA_ARGS__);\ - tfunc(__VA_ARGS__);\ - tfunc(__VA_ARGS__);\ - tfunc(__VA_ARGS__);\ + CALL16(__VA_ARGS__);\ + CALL16(__VA_ARGS__);\ PERF_STOP(t);\ if (t*tcount <= tsum*4 && ti > 0) {\ tsum += t;\ -- 2.49.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".