From c5c1202aa1f4bfcdb9fa78caf7b78aa72cfc0a84 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 24 Sep 2026 18:33:35 -0400 Subject: [PATCH 1/3] give benchmarks a warmup too --- .../org/jlab/utils/benchmark/BenchmarkTimer.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java index edf4fec42b..78d74c7e8f 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java @@ -11,6 +11,8 @@ */ public class BenchmarkTimer { + private static final int WARMUP_CALLS = 100; + public static class BenchmarkMultiTimer extends BenchmarkTimer { ConcurrentHashMap timeAtResume = new ConcurrentHashMap<>(); ConcurrentHashMap isPaused = new ConcurrentHashMap<>(); @@ -23,8 +25,8 @@ public void resume(int thread) { } public void pause(int thread) { if (!isPaused.get(thread)) { - numberOfCalls.incrementAndGet(); - totalTime.addAndGet(System.nanoTime() - timeAtResume.get(thread)); + if (numberOfCalls.incrementAndGet() > WARMUP_CALLS) + totalTime.addAndGet(System.nanoTime() - timeAtResume.get(thread)); isPaused.put(thread, true); } } @@ -62,8 +64,8 @@ public void resume(){ public void pause(){ if(isPaused==false){ - totalTime.addAndGet(System.nanoTime() - timeAtResume); - numberOfCalls.incrementAndGet(); + if (numberOfCalls.incrementAndGet() > WARMUP_CALLS) + totalTime.addAndGet(System.nanoTime() - timeAtResume); isPaused = true; } } @@ -84,7 +86,7 @@ public double getSeconds(){ } public double getMillisecondsPerCall() { - return numberOfCalls.get() > 0 ? getMilliseconds() / numberOfCalls.get() : 0; + return numberOfCalls.get() > 0 ? getMilliseconds() / (numberOfCalls.get() - WARMUP_CALLS) : 0; } @Override From 25fe25b723a3dd175b6e468c9366a2327b44e286 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 24 Sep 2026 18:36:30 -0400 Subject: [PATCH 2/3] fix div-by-zero protection --- .../src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java index 78d74c7e8f..0fe468f1ce 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java @@ -86,7 +86,7 @@ public double getSeconds(){ } public double getMillisecondsPerCall() { - return numberOfCalls.get() > 0 ? getMilliseconds() / (numberOfCalls.get() - WARMUP_CALLS) : 0; + return numberOfCalls.get()-WARMUP_CALLS > 0 ? getMilliseconds() / (numberOfCalls.get() - WARMUP_CALLS) : 0; } @Override From 0dce884b682e0958115878c025221230f988e997 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Thu, 24 Sep 2026 19:07:33 -0400 Subject: [PATCH 3/3] warmup-correct #calls in printout --- .../main/java/org/jlab/utils/benchmark/BenchmarkTimer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java index 0fe468f1ce..aa07bb2841 100644 --- a/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java +++ b/common-tools/clas-utils/src/main/java/org/jlab/utils/benchmark/BenchmarkTimer.java @@ -86,13 +86,13 @@ public double getSeconds(){ } public double getMillisecondsPerCall() { - return numberOfCalls.get()-WARMUP_CALLS > 0 ? getMilliseconds() / (numberOfCalls.get() - WARMUP_CALLS) : 0; + return numberOfCalls.get() > WARMUP_CALLS ? getMilliseconds() / (numberOfCalls.get() - WARMUP_CALLS) : 0; } @Override public String toString() { return String.format("%-15s : #Calls %12d, Total = %12.2f sec, Unit = %12.3f msec", - getName(), numberOfCalls.get(), getSeconds(), getMillisecondsPerCall()); + getName(), numberOfCalls.get()-WARMUP_CALLS, getSeconds(), getMillisecondsPerCall()); } }