@@ -29,8 +29,9 @@ public final class RunMetrics {
2929 private boolean hasPrefillPhase ;
3030
3131 // ── TornadoVM-specific metrics (nanoseconds) ──────────────────────────────
32- private long tornadoCompileDurationNs ;
33- private long tornadoWarmupDurationNs ;
32+ private long tornadoPlanCreationNs ;
33+ private long tornadoJitNs ;
34+ private long readOnlyWeightsCopyInNs ;
3435
3536 // ── Singleton ─────────────────────────────────────────────────────────────
3637 private static final RunMetrics INSTANCE = new RunMetrics ();
@@ -47,12 +48,14 @@ public static void setLoadDuration(long ns) {
4748 /**
4849 * Records TornadoVM-specific initialisation durations.
4950 *
50- * @param compileNs plan-graph construction + JIT compilation ({@code withPreCompilation()})
51- * @param warmupNs first-execution weight upload ({@code forceCopyInReadOnlyData()})
51+ * @param planCreationNs task-graph construction ({@code createExecutionPlan()})
52+ * @param jitNs JIT compilation ({@code withPreCompilation()})
53+ * @param weightCopyNs first-execution weight upload ({@code forceCopyInReadOnlyData()})
5254 */
53- public static void setTornadoMetrics (long compileNs , long warmupNs ) {
54- INSTANCE .tornadoCompileDurationNs = compileNs ;
55- INSTANCE .tornadoWarmupDurationNs = warmupNs ;
55+ public static void setTornadoMetrics (long planCreationNs , long jitNs , long weightCopyNs ) {
56+ INSTANCE .tornadoPlanCreationNs = planCreationNs ;
57+ INSTANCE .tornadoJitNs = jitNs ;
58+ INSTANCE .readOnlyWeightsCopyInNs = weightCopyNs ;
5659 }
5760
5861 /**
@@ -85,13 +88,13 @@ public static void setHasPrefillPhase(boolean value) {
8588
8689 // ── Output ────────────────────────────────────────────────────────────────
8790
88- /** Prints throughput metrics to {@code stderr}. */
91+ /** Prints throughput metrics to {@code stderr}, and TornadoVM init metrics when enabled . */
8992 public static void printMetrics () {
9093 RunMetrics m = INSTANCE ;
9194
92- int totalTokens = m .promptEvalCount + m .evalCount ;
93- double totalSecs = m .totalDurationNs / 1e9 ;
94- double totalRate = totalSecs > 0 ? totalTokens / totalSecs : 0 ;
95+ int totalTokens = m .promptEvalCount + m .evalCount ;
96+ double totalSecs = m .totalDurationNs / 1e9 ;
97+ double totalRate = totalSecs > 0 ? totalTokens / totalSecs : 0 ;
9598
9699 System .err .println ();
97100 System .err .println ("==== Performance Metrics ====" );
@@ -113,6 +116,17 @@ public static void printMetrics() {
113116 System .err .printf ("achieved tok/s: %.2f. Tokens: %d, seconds: %.2f%n" ,
114117 totalRate , totalTokens , totalSecs );
115118 }
119+
120+ if (Boolean .parseBoolean (System .getProperty ("llama.EnableTimingForTornadoVMInit" , "false" ))
121+ && m .tornadoPlanCreationNs > 0 ) {
122+ System .err .printf (
123+ "Compilation & CodeGen: %.2f ms%n" +
124+ "Warmup: %.2f ms%n" +
125+ "Read-only weights Copy-in: %.2f ms%n" ,
126+ m .tornadoPlanCreationNs / 1_000_000.0 ,
127+ m .tornadoJitNs / 1_000_000.0 ,
128+ m .readOnlyWeightsCopyInNs / 1_000_000.0 );
129+ }
116130 System .err .println ();
117131 }
118132}
0 commit comments