Skip to content

TrustJIT

wuke32767 edited this page Mar 20, 2025 · 7 revisions

This is it, Madeline.

Just trust jit.

Why are you so nervous?

sometimes the first benchmark may be faster or slower, i added two empty benchmark.

All methods have 7 parameters and is static.

the methods without Simulate prefix is hooked. all the hooks do nothing.

Simulate* is not hooked, but is indirectly called to simulate the hook.

Instanced is hooked by instanced hook.

Static is hooked by static hook.

Aggressive is hooked by a instanced and AggressiveInlining hook.

No is hooked by a instanced and NoInlining hook.


BenchmarkDotNet v0.14.0, Ubuntu 24.04.2 LTS (Noble Numbat)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 9.0.202
  [Host]     : .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2
  DefaultJob : .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2


Method Mean Error StdDev Median
Padding 0.3052 ns 0.0378 ns 0.0335 ns 0.3077 ns
Padding2 0.0017 ns 0.0029 ns 0.0027 ns 0.0000 ns
Instanced 37.4733 ns 0.0644 ns 0.0602 ns 37.4650 ns
Static 36.9501 ns 0.0478 ns 0.0424 ns 36.9401 ns
Aggressive 37.4846 ns 0.0294 ns 0.0229 ns 37.4875 ns
Simulate 1.5572 ns 0.0054 ns 0.0048 ns 1.5546 ns
SimulateAggressive 1.5558 ns 0.0036 ns 0.0030 ns 1.5540 ns
SimulateStatic 1.5551 ns 0.0047 ns 0.0041 ns 1.5532 ns
SimulateNo 3.1097 ns 0.0058 ns 0.0051 ns 3.1080 ns

// * Detailed results *

TrustJIT.Padding: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 0.305 ns, StdErr = 0.009 ns (2.93%), N = 14, StdDev = 0.033 ns

Min = 0.232 ns, Q1 = 0.288 ns, Median = 0.308 ns, Q3 = 0.320 ns, Max = 0.372 ns

IQR = 0.032 ns, LowerFence = 0.240 ns, UpperFence = 0.367 ns

ConfidenceInterval = [0.267 ns; 0.343 ns] (CI 99.9%), Margin = 0.038 ns (12.38% of Mean)

Skewness = -0.13, Kurtosis = 3.03, MValue = 2.86

-------------------- Histogram --------------------

[0.213 ns ; 0.250 ns) | @

[0.250 ns ; 0.274 ns) |

[0.274 ns ; 0.310 ns) | @@@@@@@@@

[0.310 ns ; 0.351 ns) | @@@

[0.351 ns ; 0.391 ns) | @


TrustJIT.Padding2: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 0.002 ns, StdErr = 0.001 ns (40.46%), N = 15, StdDev = 0.003 ns

Min = 0.000 ns, Q1 = 0.000 ns, Median = 0.000 ns, Q3 = 0.003 ns, Max = 0.007 ns

IQR = 0.003 ns, LowerFence = -0.005 ns, UpperFence = 0.008 ns

ConfidenceInterval = [-0.001 ns; 0.005 ns] (CI 99.9%), Margin = 0.003 ns (167.54% of Mean)

Skewness = 0.98, Kurtosis = 2.02, MValue = 2.73

-------------------- Histogram --------------------

[-0.001 ns ; 0.002 ns) | @@@@@@@@@@@

[ 0.002 ns ; 0.005 ns) |

[ 0.005 ns ; 0.008 ns) | @@@@


TrustJIT.Instanced: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 37.473 ns, StdErr = 0.016 ns (0.04%), N = 15, StdDev = 0.060 ns

Min = 37.387 ns, Q1 = 37.423 ns, Median = 37.465 ns, Q3 = 37.502 ns, Max = 37.601 ns

IQR = 0.078 ns, LowerFence = 37.306 ns, UpperFence = 37.619 ns

ConfidenceInterval = [37.409 ns; 37.538 ns] (CI 99.9%), Margin = 0.064 ns (0.17% of Mean)

Skewness = 0.49, Kurtosis = 2.25, MValue = 2

-------------------- Histogram --------------------

[37.354 ns ; 37.633 ns) | @@@@@@@@@@@@@@@


TrustJIT.Static: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 36.950 ns, StdErr = 0.011 ns (0.03%), N = 14, StdDev = 0.042 ns

Min = 36.900 ns, Q1 = 36.928 ns, Median = 36.940 ns, Q3 = 36.960 ns, Max = 37.036 ns

IQR = 0.032 ns, LowerFence = 36.881 ns, UpperFence = 37.007 ns

ConfidenceInterval = [36.902 ns; 36.998 ns] (CI 99.9%), Margin = 0.048 ns (0.13% of Mean)

Skewness = 0.79, Kurtosis = 2.39, MValue = 2

-------------------- Histogram --------------------

[36.876 ns ; 37.059 ns) | @@@@@@@@@@@@@@


TrustJIT.Aggressive: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 37.485 ns, StdErr = 0.007 ns (0.02%), N = 12, StdDev = 0.023 ns

Min = 37.435 ns, Q1 = 37.471 ns, Median = 37.488 ns, Q3 = 37.499 ns, Max = 37.518 ns

IQR = 0.028 ns, LowerFence = 37.428 ns, UpperFence = 37.542 ns

ConfidenceInterval = [37.455 ns; 37.514 ns] (CI 99.9%), Margin = 0.029 ns (0.08% of Mean)

Skewness = -0.52, Kurtosis = 2.38, MValue = 2

-------------------- Histogram --------------------

[37.422 ns ; 37.531 ns) | @@@@@@@@@@@@


TrustJIT.Simulate: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 1.557 ns, StdErr = 0.001 ns (0.08%), N = 14, StdDev = 0.005 ns

Min = 1.553 ns, Q1 = 1.554 ns, Median = 1.555 ns, Q3 = 1.560 ns, Max = 1.567 ns

IQR = 0.007 ns, LowerFence = 1.543 ns, UpperFence = 1.571 ns

ConfidenceInterval = [1.552 ns; 1.563 ns] (CI 99.9%), Margin = 0.005 ns (0.35% of Mean)

Skewness = 0.83, Kurtosis = 2.16, MValue = 2

-------------------- Histogram --------------------

[1.550 ns ; 1.570 ns) | @@@@@@@@@@@@@@


TrustJIT.SimulateAggressive: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 1.556 ns, StdErr = 0.001 ns (0.05%), N = 13, StdDev = 0.003 ns

Min = 1.553 ns, Q1 = 1.553 ns, Median = 1.554 ns, Q3 = 1.558 ns, Max = 1.561 ns

IQR = 0.005 ns, LowerFence = 1.546 ns, UpperFence = 1.566 ns

ConfidenceInterval = [1.552 ns; 1.559 ns] (CI 99.9%), Margin = 0.004 ns (0.23% of Mean)

Skewness = 0.63, Kurtosis = 1.52, MValue = 2

-------------------- Histogram --------------------

[1.551 ns ; 1.563 ns) | @@@@@@@@@@@@@


TrustJIT.SimulateStatic: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 1.555 ns, StdErr = 0.001 ns (0.07%), N = 14, StdDev = 0.004 ns

Min = 1.552 ns, Q1 = 1.553 ns, Median = 1.553 ns, Q3 = 1.557 ns, Max = 1.566 ns

IQR = 0.005 ns, LowerFence = 1.546 ns, UpperFence = 1.564 ns

ConfidenceInterval = [1.550 ns; 1.560 ns] (CI 99.9%), Margin = 0.005 ns (0.30% of Mean)

Skewness = 1.46, Kurtosis = 4.32, MValue = 2

-------------------- Histogram --------------------

[1.549 ns ; 1.569 ns) | @@@@@@@@@@@@@@


TrustJIT.SimulateNo: DefaultJob

Runtime = .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2; GC = Concurrent Workstation

Mean = 3.110 ns, StdErr = 0.001 ns (0.04%), N = 14, StdDev = 0.005 ns

Min = 3.104 ns, Q1 = 3.106 ns, Median = 3.108 ns, Q3 = 3.111 ns, Max = 3.121 ns

IQR = 0.005 ns, LowerFence = 3.099 ns, UpperFence = 3.118 ns

ConfidenceInterval = [3.104 ns; 3.115 ns] (CI 99.9%), Margin = 0.006 ns (0.19% of Mean)

Skewness = 1.11, Kurtosis = 2.95, MValue = 2

-------------------- Histogram --------------------

[3.101 ns ; 3.124 ns) | @@@@@@@@@@@@@@


// * Summary *

BenchmarkDotNet v0.14.0, Ubuntu 24.04.2 LTS (Noble Numbat)

AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores

.NET SDK 9.0.202

[Host] : .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2

DefaultJob : .NET 9.0.3 (9.0.325.11113), X64 RyuJIT AVX2

| Method | Mean | Error | StdDev | Median |

|------------------- |-----------:|----------:|----------:|-----------:|

| Padding | 0.3052 ns | 0.0378 ns | 0.0335 ns | 0.3077 ns |

| Padding2 | 0.0017 ns | 0.0029 ns | 0.0027 ns | 0.0000 ns |

| Instanced | 37.4733 ns | 0.0644 ns | 0.0602 ns | 37.4650 ns |

| Static | 36.9501 ns | 0.0478 ns | 0.0424 ns | 36.9401 ns |

| Aggressive | 37.4846 ns | 0.0294 ns | 0.0229 ns | 37.4875 ns |

| Simulate | 1.5572 ns | 0.0054 ns | 0.0048 ns | 1.5546 ns |

| SimulateAggressive | 1.5558 ns | 0.0036 ns | 0.0030 ns | 1.5540 ns |

| SimulateStatic | 1.5551 ns | 0.0047 ns | 0.0041 ns | 1.5532 ns |

| SimulateNo | 3.1097 ns | 0.0058 ns | 0.0051 ns | 3.1080 ns |

// * Warnings *

ZeroMeasurement

TrustJIT.Padding: Default -> The method duration is indistinguishable from the empty method duration

TrustJIT.Padding2: Default -> The method duration is indistinguishable from the empty method duration

// * Hints *

Outliers

TrustJIT.Padding: Default -> 1 outlier was removed (2.08 ns)

TrustJIT.Static: Default -> 1 outlier was removed (39.12 ns)

TrustJIT.Aggressive: Default -> 3 outliers were removed (39.58 ns..39.71 ns)

TrustJIT.Simulate: Default -> 1 outlier was removed (3.25 ns)

TrustJIT.SimulateAggressive: Default -> 2 outliers were removed (3.24 ns, 3.28 ns)

TrustJIT.SimulateStatic: Default -> 1 outlier was removed (3.24 ns)

TrustJIT.SimulateNo: Default -> 1 outlier was removed (4.79 ns)

// * Legends *

Mean : Arithmetic mean of all measurements

Error : Half of 99.9% confidence interval

StdDev : Standard deviation of all measurements

Median : Value separating the higher half of all measurements (50th percentile)

1 ns : 1 Nanosecond (0.000000001 sec)

Clone this wiki locally