after merge

This commit is contained in:
Nitload
2026-05-10 06:39:52 +08:00
52 changed files with 5655 additions and 449 deletions
+2 -2
View File
@@ -33,8 +33,8 @@
<Item Id="{f7752b2b-7ba5-43ec-b0f7-7f45c21c1c23}" />
<Item Id="{9dab2827-57cc-40e9-a330-a0626261453e}" />
<Item Id="{6bf7cfc1-1332-4bec-982e-c2d0968237cd}">
<Enabled>True</Enabled>
<ApplyOnSave>True</ApplyOnSave>
<Enabled>False</Enabled>
<ApplyOnSave>False</ApplyOnSave>
</Item>
<Item Id="{7e640eab-b585-47a5-afdc-0f110357cebb}" />
<Item Id="{44ac74a7-dba7-45aa-b2ca-8094b85cb9c9}" />
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<Root Type="DevExpress.CodeAnalysis.CodeStyle.Options.CodeStyleOptions">
<Options Language="C#">
<Operators>
<Item Id="{7bcc85d6-841d-4c35-a2d6-e57ee0acd81c}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{825d9373-a4fe-4228-aa70-066f6cb7044e}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{0b24ccdc-2f90-4ff9-9979-4020861643dd}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{c25e1a9f-2075-4b56-b810-4f75be4b2d9b}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{6f23ad45-e804-41a6-b315-40443ae98e34}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{42d9ddc8-cadd-4ba6-93eb-b9ced6cd8ff3}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{d99e0556-ddf9-40c5-bcab-1bc3c4b29db1}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{df5cad0a-8149-4c78-af16-ec65278e4bb8}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{1f76f091-eea5-4a24-9345-e9c7778872f8}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{ee66d060-b423-4112-988f-938640a8a75e}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{d41f3c57-29b7-4513-937d-116e0a22b9ca}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption" />
<Item Id="{714112be-3458-4edd-987c-b2c050b07bda}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption">
<Enabled>True</Enabled>
</Item>
<Item Id="{e21fd07a-0615-4e6b-b329-6dfaf44cd478}" Type="DevExpress.CodeAnalysis.CSharp.CodeStyle.CSharpOperatorOption">
<Enabled>True</Enabled>
</Item>
</Operators>
</Options>
</Root>
@@ -0,0 +1,619 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 1 op, 146700.00 ns, 146.7000 us/op
WorkloadJitting 1: 1 op, 4370500.00 ns, 4.3705 ms/op
OverheadWarmup 1: 1 op, 1700.00 ns, 1.7000 us/op
OverheadWarmup 2: 1 op, 400.00 ns, 400.0000 ns/op
OverheadWarmup 3: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 4: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 5: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 6: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 7: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 1: 1 op, 1000.00 ns, 1.0000 us/op
OverheadActual 2: 1 op, 700.00 ns, 700.0000 ns/op
OverheadActual 3: 1 op, 600.00 ns, 600.0000 ns/op
OverheadActual 4: 1 op, 500.00 ns, 500.0000 ns/op
OverheadActual 5: 1 op, 700.00 ns, 700.0000 ns/op
OverheadActual 6: 1 op, 300.00 ns, 300.0000 ns/op
OverheadActual 7: 1 op, 300.00 ns, 300.0000 ns/op
OverheadActual 8: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 9: 1 op, 300.00 ns, 300.0000 ns/op
OverheadActual 10: 1 op, 600.00 ns, 600.0000 ns/op
OverheadActual 11: 1 op, 400.00 ns, 400.0000 ns/op
OverheadActual 12: 1 op, 1000.00 ns, 1.0000 us/op
OverheadActual 13: 1 op, 400.00 ns, 400.0000 ns/op
OverheadActual 14: 1 op, 400.00 ns, 400.0000 ns/op
OverheadActual 15: 1 op, 100.00 ns, 100.0000 ns/op
OverheadActual 16: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 17: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 18: 1 op, 300.00 ns, 300.0000 ns/op
OverheadActual 19: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 20: 1 op, 300.00 ns, 300.0000 ns/op
WorkloadWarmup 1: 1 op, 1448000.00 ns, 1.4480 ms/op
WorkloadWarmup 2: 1 op, 2492300.00 ns, 2.4923 ms/op
WorkloadWarmup 3: 1 op, 1562900.00 ns, 1.5629 ms/op
WorkloadWarmup 4: 1 op, 3228700.00 ns, 3.2287 ms/op
WorkloadWarmup 5: 1 op, 1172800.00 ns, 1.1728 ms/op
WorkloadWarmup 6: 1 op, 1389000.00 ns, 1.3890 ms/op
WorkloadActual 1: 1 op, 1158000.00 ns, 1.1580 ms/op
WorkloadActual 2: 1 op, 1258200.00 ns, 1.2582 ms/op
WorkloadActual 3: 1 op, 1196800.00 ns, 1.1968 ms/op
WorkloadActual 4: 1 op, 1082700.00 ns, 1.0827 ms/op
WorkloadActual 5: 1 op, 1265800.00 ns, 1.2658 ms/op
WorkloadActual 6: 1 op, 1078700.00 ns, 1.0787 ms/op
WorkloadActual 7: 1 op, 1111300.00 ns, 1.1113 ms/op
WorkloadActual 8: 1 op, 1115800.00 ns, 1.1158 ms/op
WorkloadActual 9: 1 op, 1312200.00 ns, 1.3122 ms/op
WorkloadActual 10: 1 op, 1253800.00 ns, 1.2538 ms/op
WorkloadActual 11: 1 op, 1068100.00 ns, 1.0681 ms/op
WorkloadActual 12: 1 op, 1045600.00 ns, 1.0456 ms/op
WorkloadActual 13: 1 op, 1063000.00 ns, 1.0630 ms/op
WorkloadActual 14: 1 op, 1122500.00 ns, 1.1225 ms/op
WorkloadActual 15: 1 op, 1105200.00 ns, 1.1052 ms/op
WorkloadActual 16: 1 op, 1348000.00 ns, 1.3480 ms/op
WorkloadActual 17: 1 op, 1316300.00 ns, 1.3163 ms/op
WorkloadActual 18: 1 op, 1261800.00 ns, 1.2618 ms/op
WorkloadActual 19: 1 op, 1036000.00 ns, 1.0360 ms/op
WorkloadActual 20: 1 op, 1035300.00 ns, 1.0353 ms/op
WorkloadActual 21: 1 op, 1107800.00 ns, 1.1078 ms/op
WorkloadActual 22: 1 op, 1037600.00 ns, 1.0376 ms/op
WorkloadActual 23: 1 op, 1031600.00 ns, 1.0316 ms/op
WorkloadActual 24: 1 op, 1091700.00 ns, 1.0917 ms/op
WorkloadActual 25: 1 op, 1069700.00 ns, 1.0697 ms/op
WorkloadActual 26: 1 op, 1057800.00 ns, 1.0578 ms/op
WorkloadActual 27: 1 op, 1297600.00 ns, 1.2976 ms/op
WorkloadActual 28: 1 op, 1082500.00 ns, 1.0825 ms/op
WorkloadActual 29: 1 op, 1053400.00 ns, 1.0534 ms/op
WorkloadActual 30: 1 op, 1033500.00 ns, 1.0335 ms/op
WorkloadActual 31: 1 op, 1034100.00 ns, 1.0341 ms/op
WorkloadActual 32: 1 op, 1047200.00 ns, 1.0472 ms/op
WorkloadActual 33: 1 op, 1040200.00 ns, 1.0402 ms/op
WorkloadActual 34: 1 op, 1042800.00 ns, 1.0428 ms/op
WorkloadActual 35: 1 op, 1123400.00 ns, 1.1234 ms/op
WorkloadActual 36: 1 op, 1077300.00 ns, 1.0773 ms/op
WorkloadActual 37: 1 op, 1240900.00 ns, 1.2409 ms/op
WorkloadActual 38: 1 op, 1049500.00 ns, 1.0495 ms/op
WorkloadActual 39: 1 op, 1073100.00 ns, 1.0731 ms/op
WorkloadActual 40: 1 op, 1065400.00 ns, 1.0654 ms/op
WorkloadActual 41: 1 op, 1030200.00 ns, 1.0302 ms/op
WorkloadActual 42: 1 op, 1310500.00 ns, 1.3105 ms/op
WorkloadActual 43: 1 op, 1005700.00 ns, 1.0057 ms/op
WorkloadActual 44: 1 op, 998200.00 ns, 998.2000 us/op
WorkloadActual 45: 1 op, 1422400.00 ns, 1.4224 ms/op
WorkloadActual 46: 1 op, 1019800.00 ns, 1.0198 ms/op
WorkloadActual 47: 1 op, 1001500.00 ns, 1.0015 ms/op
WorkloadActual 48: 1 op, 1305100.00 ns, 1.3051 ms/op
WorkloadActual 49: 1 op, 1006200.00 ns, 1.0062 ms/op
WorkloadActual 50: 1 op, 1065500.00 ns, 1.0655 ms/op
WorkloadActual 51: 1 op, 1397500.00 ns, 1.3975 ms/op
WorkloadActual 52: 1 op, 1036200.00 ns, 1.0362 ms/op
WorkloadActual 53: 1 op, 1062000.00 ns, 1.0620 ms/op
WorkloadActual 54: 1 op, 1052900.00 ns, 1.0529 ms/op
WorkloadActual 55: 1 op, 1055100.00 ns, 1.0551 ms/op
WorkloadActual 56: 1 op, 1099000.00 ns, 1.0990 ms/op
WorkloadActual 57: 1 op, 1120100.00 ns, 1.1201 ms/op
WorkloadActual 58: 1 op, 1351500.00 ns, 1.3515 ms/op
WorkloadActual 59: 1 op, 1149600.00 ns, 1.1496 ms/op
WorkloadActual 60: 1 op, 1371500.00 ns, 1.3715 ms/op
WorkloadActual 61: 1 op, 1200600.00 ns, 1.2006 ms/op
WorkloadActual 62: 1 op, 1192200.00 ns, 1.1922 ms/op
WorkloadActual 63: 1 op, 1336200.00 ns, 1.3362 ms/op
WorkloadActual 64: 1 op, 1213200.00 ns, 1.2132 ms/op
WorkloadActual 65: 1 op, 1192000.00 ns, 1.1920 ms/op
WorkloadActual 66: 1 op, 1505200.00 ns, 1.5052 ms/op
WorkloadActual 67: 1 op, 1489200.00 ns, 1.4892 ms/op
WorkloadActual 68: 1 op, 1078700.00 ns, 1.0787 ms/op
WorkloadActual 69: 1 op, 1194100.00 ns, 1.1941 ms/op
WorkloadActual 70: 1 op, 1129900.00 ns, 1.1299 ms/op
WorkloadActual 71: 1 op, 1109100.00 ns, 1.1091 ms/op
WorkloadActual 72: 1 op, 1195000.00 ns, 1.1950 ms/op
WorkloadActual 73: 1 op, 1128300.00 ns, 1.1283 ms/op
WorkloadActual 74: 1 op, 1605000.00 ns, 1.6050 ms/op
WorkloadActual 75: 1 op, 1353200.00 ns, 1.3532 ms/op
WorkloadActual 76: 1 op, 1200600.00 ns, 1.2006 ms/op
WorkloadActual 77: 1 op, 1204100.00 ns, 1.2041 ms/op
WorkloadActual 78: 1 op, 1465200.00 ns, 1.4652 ms/op
WorkloadActual 79: 1 op, 1142000.00 ns, 1.1420 ms/op
WorkloadActual 80: 1 op, 1181000.00 ns, 1.1810 ms/op
WorkloadActual 81: 1 op, 1173400.00 ns, 1.1734 ms/op
WorkloadActual 82: 1 op, 1155200.00 ns, 1.1552 ms/op
WorkloadActual 83: 1 op, 1239700.00 ns, 1.2397 ms/op
WorkloadActual 84: 1 op, 1269600.00 ns, 1.2696 ms/op
WorkloadActual 85: 1 op, 1243600.00 ns, 1.2436 ms/op
WorkloadActual 86: 1 op, 1218900.00 ns, 1.2189 ms/op
WorkloadActual 87: 1 op, 1292200.00 ns, 1.2922 ms/op
WorkloadActual 88: 1 op, 1233100.00 ns, 1.2331 ms/op
WorkloadActual 89: 1 op, 1468800.00 ns, 1.4688 ms/op
WorkloadActual 90: 1 op, 1163000.00 ns, 1.1630 ms/op
WorkloadActual 91: 1 op, 1145500.00 ns, 1.1455 ms/op
WorkloadActual 92: 1 op, 1229300.00 ns, 1.2293 ms/op
WorkloadActual 93: 1 op, 1090200.00 ns, 1.0902 ms/op
WorkloadActual 94: 1 op, 1057400.00 ns, 1.0574 ms/op
WorkloadActual 95: 1 op, 1100300.00 ns, 1.1003 ms/op
WorkloadActual 96: 1 op, 1069300.00 ns, 1.0693 ms/op
WorkloadActual 97: 1 op, 1084500.00 ns, 1.0845 ms/op
WorkloadActual 98: 1 op, 1068200.00 ns, 1.0682 ms/op
WorkloadActual 99: 1 op, 1044300.00 ns, 1.0443 ms/op
WorkloadActual 100: 1 op, 1482600.00 ns, 1.4826 ms/op
WorkloadResult 1: 1 op, 1157650.00 ns, 1.1577 ms/op
WorkloadResult 2: 1 op, 1257850.00 ns, 1.2579 ms/op
WorkloadResult 3: 1 op, 1196450.00 ns, 1.1965 ms/op
WorkloadResult 4: 1 op, 1082350.00 ns, 1.0824 ms/op
WorkloadResult 5: 1 op, 1265450.00 ns, 1.2655 ms/op
WorkloadResult 6: 1 op, 1078350.00 ns, 1.0784 ms/op
WorkloadResult 7: 1 op, 1110950.00 ns, 1.1110 ms/op
WorkloadResult 8: 1 op, 1115450.00 ns, 1.1155 ms/op
WorkloadResult 9: 1 op, 1311850.00 ns, 1.3119 ms/op
WorkloadResult 10: 1 op, 1253450.00 ns, 1.2535 ms/op
WorkloadResult 11: 1 op, 1067750.00 ns, 1.0678 ms/op
WorkloadResult 12: 1 op, 1045250.00 ns, 1.0453 ms/op
WorkloadResult 13: 1 op, 1062650.00 ns, 1.0627 ms/op
WorkloadResult 14: 1 op, 1122150.00 ns, 1.1222 ms/op
WorkloadResult 15: 1 op, 1104850.00 ns, 1.1049 ms/op
WorkloadResult 16: 1 op, 1347650.00 ns, 1.3477 ms/op
WorkloadResult 17: 1 op, 1315950.00 ns, 1.3160 ms/op
WorkloadResult 18: 1 op, 1261450.00 ns, 1.2615 ms/op
WorkloadResult 19: 1 op, 1035650.00 ns, 1.0357 ms/op
WorkloadResult 20: 1 op, 1034950.00 ns, 1.0350 ms/op
WorkloadResult 21: 1 op, 1107450.00 ns, 1.1075 ms/op
WorkloadResult 22: 1 op, 1037250.00 ns, 1.0373 ms/op
WorkloadResult 23: 1 op, 1031250.00 ns, 1.0313 ms/op
WorkloadResult 24: 1 op, 1091350.00 ns, 1.0914 ms/op
WorkloadResult 25: 1 op, 1069350.00 ns, 1.0694 ms/op
WorkloadResult 26: 1 op, 1057450.00 ns, 1.0575 ms/op
WorkloadResult 27: 1 op, 1297250.00 ns, 1.2973 ms/op
WorkloadResult 28: 1 op, 1082150.00 ns, 1.0822 ms/op
WorkloadResult 29: 1 op, 1053050.00 ns, 1.0531 ms/op
WorkloadResult 30: 1 op, 1033150.00 ns, 1.0332 ms/op
WorkloadResult 31: 1 op, 1033750.00 ns, 1.0338 ms/op
WorkloadResult 32: 1 op, 1046850.00 ns, 1.0469 ms/op
WorkloadResult 33: 1 op, 1039850.00 ns, 1.0399 ms/op
WorkloadResult 34: 1 op, 1042450.00 ns, 1.0425 ms/op
WorkloadResult 35: 1 op, 1123050.00 ns, 1.1231 ms/op
WorkloadResult 36: 1 op, 1076950.00 ns, 1.0770 ms/op
WorkloadResult 37: 1 op, 1240550.00 ns, 1.2406 ms/op
WorkloadResult 38: 1 op, 1049150.00 ns, 1.0492 ms/op
WorkloadResult 39: 1 op, 1072750.00 ns, 1.0728 ms/op
WorkloadResult 40: 1 op, 1065050.00 ns, 1.0651 ms/op
WorkloadResult 41: 1 op, 1029850.00 ns, 1.0299 ms/op
WorkloadResult 42: 1 op, 1310150.00 ns, 1.3102 ms/op
WorkloadResult 43: 1 op, 1005350.00 ns, 1.0054 ms/op
WorkloadResult 44: 1 op, 997850.00 ns, 997.8500 us/op
WorkloadResult 45: 1 op, 1422050.00 ns, 1.4221 ms/op
WorkloadResult 46: 1 op, 1019450.00 ns, 1.0195 ms/op
WorkloadResult 47: 1 op, 1001150.00 ns, 1.0012 ms/op
WorkloadResult 48: 1 op, 1304750.00 ns, 1.3048 ms/op
WorkloadResult 49: 1 op, 1005850.00 ns, 1.0059 ms/op
WorkloadResult 50: 1 op, 1065150.00 ns, 1.0652 ms/op
WorkloadResult 51: 1 op, 1397150.00 ns, 1.3972 ms/op
WorkloadResult 52: 1 op, 1035850.00 ns, 1.0359 ms/op
WorkloadResult 53: 1 op, 1061650.00 ns, 1.0617 ms/op
WorkloadResult 54: 1 op, 1052550.00 ns, 1.0526 ms/op
WorkloadResult 55: 1 op, 1054750.00 ns, 1.0548 ms/op
WorkloadResult 56: 1 op, 1098650.00 ns, 1.0987 ms/op
WorkloadResult 57: 1 op, 1119750.00 ns, 1.1198 ms/op
WorkloadResult 58: 1 op, 1351150.00 ns, 1.3512 ms/op
WorkloadResult 59: 1 op, 1149250.00 ns, 1.1493 ms/op
WorkloadResult 60: 1 op, 1371150.00 ns, 1.3712 ms/op
WorkloadResult 61: 1 op, 1200250.00 ns, 1.2003 ms/op
WorkloadResult 62: 1 op, 1191850.00 ns, 1.1919 ms/op
WorkloadResult 63: 1 op, 1335850.00 ns, 1.3359 ms/op
WorkloadResult 64: 1 op, 1212850.00 ns, 1.2129 ms/op
WorkloadResult 65: 1 op, 1191650.00 ns, 1.1917 ms/op
WorkloadResult 66: 1 op, 1504850.00 ns, 1.5049 ms/op
WorkloadResult 67: 1 op, 1488850.00 ns, 1.4889 ms/op
WorkloadResult 68: 1 op, 1078350.00 ns, 1.0784 ms/op
WorkloadResult 69: 1 op, 1193750.00 ns, 1.1938 ms/op
WorkloadResult 70: 1 op, 1129550.00 ns, 1.1296 ms/op
WorkloadResult 71: 1 op, 1108750.00 ns, 1.1088 ms/op
WorkloadResult 72: 1 op, 1194650.00 ns, 1.1947 ms/op
WorkloadResult 73: 1 op, 1127950.00 ns, 1.1280 ms/op
WorkloadResult 74: 1 op, 1352850.00 ns, 1.3529 ms/op
WorkloadResult 75: 1 op, 1200250.00 ns, 1.2003 ms/op
WorkloadResult 76: 1 op, 1203750.00 ns, 1.2038 ms/op
WorkloadResult 77: 1 op, 1464850.00 ns, 1.4649 ms/op
WorkloadResult 78: 1 op, 1141650.00 ns, 1.1417 ms/op
WorkloadResult 79: 1 op, 1180650.00 ns, 1.1807 ms/op
WorkloadResult 80: 1 op, 1173050.00 ns, 1.1731 ms/op
WorkloadResult 81: 1 op, 1154850.00 ns, 1.1549 ms/op
WorkloadResult 82: 1 op, 1239350.00 ns, 1.2394 ms/op
WorkloadResult 83: 1 op, 1269250.00 ns, 1.2693 ms/op
WorkloadResult 84: 1 op, 1243250.00 ns, 1.2433 ms/op
WorkloadResult 85: 1 op, 1218550.00 ns, 1.2186 ms/op
WorkloadResult 86: 1 op, 1291850.00 ns, 1.2919 ms/op
WorkloadResult 87: 1 op, 1232750.00 ns, 1.2328 ms/op
WorkloadResult 88: 1 op, 1468450.00 ns, 1.4685 ms/op
WorkloadResult 89: 1 op, 1162650.00 ns, 1.1627 ms/op
WorkloadResult 90: 1 op, 1145150.00 ns, 1.1452 ms/op
WorkloadResult 91: 1 op, 1228950.00 ns, 1.2290 ms/op
WorkloadResult 92: 1 op, 1089850.00 ns, 1.0899 ms/op
WorkloadResult 93: 1 op, 1057050.00 ns, 1.0571 ms/op
WorkloadResult 94: 1 op, 1099950.00 ns, 1.1000 ms/op
WorkloadResult 95: 1 op, 1068950.00 ns, 1.0690 ms/op
WorkloadResult 96: 1 op, 1084150.00 ns, 1.0842 ms/op
WorkloadResult 97: 1 op, 1067850.00 ns, 1.0679 ms/op
WorkloadResult 98: 1 op, 1043950.00 ns, 1.0440 ms/op
WorkloadResult 99: 1 op, 1482250.00 ns, 1.4823 ms/op
// GC: 0 0 0 0 1
// Threading: 0 0 1
Mean = 1.162 ms, StdErr = 0.013 ms (1.10%), N = 99, StdDev = 0.127 ms
Min = 0.998 ms, Q1 = 1.062 ms, Median = 1.122 ms, Q3 = 1.240 ms, Max = 1.505 ms
IQR = 0.178 ms, LowerFence = 0.795 ms, UpperFence = 1.507 ms
ConfidenceInterval = [1.119 ms; 1.206 ms] (CI 99.9%), Margin = 0.043 ms (3.74% of Mean)
Skewness = 0.93, Kurtosis = 3.02, MValue = 2.21
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:05 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 1 op, 144200.00 ns, 144.2000 us/op
WorkloadJitting 1: 1 op, 1778900.00 ns, 1.7789 ms/op
OverheadWarmup 1: 1 op, 1200.00 ns, 1.2000 us/op
OverheadWarmup 2: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 3: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 4: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 5: 1 op, 200.00 ns, 200.0000 ns/op
OverheadWarmup 6: 1 op, 400.00 ns, 400.0000 ns/op
OverheadActual 1: 1 op, 300.00 ns, 300.0000 ns/op
OverheadActual 2: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 3: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 4: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 5: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 6: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 7: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 8: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 9: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 10: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 11: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 12: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 13: 1 op, 200.00 ns, 200.0000 ns/op
OverheadActual 14: 1 op, 300.00 ns, 300.0000 ns/op
OverheadActual 15: 1 op, 200.00 ns, 200.0000 ns/op
WorkloadWarmup 1: 1 op, 1182000.00 ns, 1.1820 ms/op
WorkloadWarmup 2: 1 op, 913400.00 ns, 913.4000 us/op
WorkloadWarmup 3: 1 op, 953700.00 ns, 953.7000 us/op
WorkloadWarmup 4: 1 op, 2026800.00 ns, 2.0268 ms/op
WorkloadWarmup 5: 1 op, 1016000.00 ns, 1.0160 ms/op
WorkloadWarmup 6: 1 op, 947400.00 ns, 947.4000 us/op
WorkloadWarmup 7: 1 op, 1229200.00 ns, 1.2292 ms/op
WorkloadWarmup 8: 1 op, 1190800.00 ns, 1.1908 ms/op
WorkloadActual 1: 1 op, 1023100.00 ns, 1.0231 ms/op
WorkloadActual 2: 1 op, 878400.00 ns, 878.4000 us/op
WorkloadActual 3: 1 op, 1030600.00 ns, 1.0306 ms/op
WorkloadActual 4: 1 op, 1079900.00 ns, 1.0799 ms/op
WorkloadActual 5: 1 op, 946800.00 ns, 946.8000 us/op
WorkloadActual 6: 1 op, 997800.00 ns, 997.8000 us/op
WorkloadActual 7: 1 op, 982200.00 ns, 982.2000 us/op
WorkloadActual 8: 1 op, 830400.00 ns, 830.4000 us/op
WorkloadActual 9: 1 op, 969200.00 ns, 969.2000 us/op
WorkloadActual 10: 1 op, 1111900.00 ns, 1.1119 ms/op
WorkloadActual 11: 1 op, 883500.00 ns, 883.5000 us/op
WorkloadActual 12: 1 op, 812800.00 ns, 812.8000 us/op
WorkloadActual 13: 1 op, 900300.00 ns, 900.3000 us/op
WorkloadActual 14: 1 op, 1015000.00 ns, 1.0150 ms/op
WorkloadActual 15: 1 op, 934600.00 ns, 934.6000 us/op
WorkloadActual 16: 1 op, 896100.00 ns, 896.1000 us/op
WorkloadActual 17: 1 op, 946900.00 ns, 946.9000 us/op
WorkloadActual 18: 1 op, 1134200.00 ns, 1.1342 ms/op
WorkloadActual 19: 1 op, 999700.00 ns, 999.7000 us/op
WorkloadActual 20: 1 op, 1113500.00 ns, 1.1135 ms/op
WorkloadActual 21: 1 op, 995200.00 ns, 995.2000 us/op
WorkloadActual 22: 1 op, 1099400.00 ns, 1.0994 ms/op
WorkloadActual 23: 1 op, 1284500.00 ns, 1.2845 ms/op
WorkloadActual 24: 1 op, 1214900.00 ns, 1.2149 ms/op
WorkloadActual 25: 1 op, 1055900.00 ns, 1.0559 ms/op
WorkloadActual 26: 1 op, 903800.00 ns, 903.8000 us/op
WorkloadActual 27: 1 op, 987200.00 ns, 987.2000 us/op
WorkloadActual 28: 1 op, 892000.00 ns, 892.0000 us/op
WorkloadActual 29: 1 op, 1104200.00 ns, 1.1042 ms/op
WorkloadActual 30: 1 op, 1000300.00 ns, 1.0003 ms/op
WorkloadActual 31: 1 op, 1021600.00 ns, 1.0216 ms/op
WorkloadActual 32: 1 op, 1068000.00 ns, 1.0680 ms/op
WorkloadActual 33: 1 op, 895400.00 ns, 895.4000 us/op
WorkloadActual 34: 1 op, 1091100.00 ns, 1.0911 ms/op
WorkloadActual 35: 1 op, 1025100.00 ns, 1.0251 ms/op
WorkloadActual 36: 1 op, 1023500.00 ns, 1.0235 ms/op
WorkloadActual 37: 1 op, 948400.00 ns, 948.4000 us/op
WorkloadActual 38: 1 op, 885400.00 ns, 885.4000 us/op
WorkloadActual 39: 1 op, 922100.00 ns, 922.1000 us/op
WorkloadActual 40: 1 op, 1066000.00 ns, 1.0660 ms/op
WorkloadActual 41: 1 op, 930500.00 ns, 930.5000 us/op
WorkloadActual 42: 1 op, 911100.00 ns, 911.1000 us/op
WorkloadActual 43: 1 op, 1044400.00 ns, 1.0444 ms/op
WorkloadActual 44: 1 op, 1133600.00 ns, 1.1336 ms/op
WorkloadActual 45: 1 op, 889800.00 ns, 889.8000 us/op
WorkloadActual 46: 1 op, 853300.00 ns, 853.3000 us/op
WorkloadActual 47: 1 op, 1062900.00 ns, 1.0629 ms/op
WorkloadActual 48: 1 op, 976700.00 ns, 976.7000 us/op
WorkloadActual 49: 1 op, 930900.00 ns, 930.9000 us/op
WorkloadActual 50: 1 op, 1024800.00 ns, 1.0248 ms/op
WorkloadActual 51: 1 op, 1027300.00 ns, 1.0273 ms/op
WorkloadActual 52: 1 op, 1011800.00 ns, 1.0118 ms/op
WorkloadActual 53: 1 op, 1026900.00 ns, 1.0269 ms/op
WorkloadActual 54: 1 op, 1112700.00 ns, 1.1127 ms/op
WorkloadActual 55: 1 op, 873800.00 ns, 873.8000 us/op
WorkloadActual 56: 1 op, 985200.00 ns, 985.2000 us/op
WorkloadActual 57: 1 op, 878300.00 ns, 878.3000 us/op
WorkloadActual 58: 1 op, 933000.00 ns, 933.0000 us/op
WorkloadActual 59: 1 op, 943600.00 ns, 943.6000 us/op
WorkloadActual 60: 1 op, 793700.00 ns, 793.7000 us/op
WorkloadActual 61: 1 op, 866000.00 ns, 866.0000 us/op
WorkloadActual 62: 1 op, 745400.00 ns, 745.4000 us/op
WorkloadActual 63: 1 op, 956900.00 ns, 956.9000 us/op
WorkloadActual 64: 1 op, 893800.00 ns, 893.8000 us/op
WorkloadActual 65: 1 op, 1005400.00 ns, 1.0054 ms/op
WorkloadActual 66: 1 op, 912200.00 ns, 912.2000 us/op
WorkloadActual 67: 1 op, 855500.00 ns, 855.5000 us/op
WorkloadActual 68: 1 op, 880400.00 ns, 880.4000 us/op
WorkloadActual 69: 1 op, 712200.00 ns, 712.2000 us/op
WorkloadActual 70: 1 op, 819500.00 ns, 819.5000 us/op
WorkloadActual 71: 1 op, 941200.00 ns, 941.2000 us/op
WorkloadActual 72: 1 op, 814300.00 ns, 814.3000 us/op
WorkloadActual 73: 1 op, 862100.00 ns, 862.1000 us/op
WorkloadActual 74: 1 op, 903500.00 ns, 903.5000 us/op
WorkloadActual 75: 1 op, 1078800.00 ns, 1.0788 ms/op
WorkloadActual 76: 1 op, 878700.00 ns, 878.7000 us/op
WorkloadActual 77: 1 op, 757500.00 ns, 757.5000 us/op
WorkloadActual 78: 1 op, 1035900.00 ns, 1.0359 ms/op
WorkloadActual 79: 1 op, 849200.00 ns, 849.2000 us/op
WorkloadActual 80: 1 op, 1035100.00 ns, 1.0351 ms/op
WorkloadActual 81: 1 op, 1927500.00 ns, 1.9275 ms/op
WorkloadActual 82: 1 op, 1169500.00 ns, 1.1695 ms/op
WorkloadActual 83: 1 op, 1035600.00 ns, 1.0356 ms/op
WorkloadActual 84: 1 op, 1048200.00 ns, 1.0482 ms/op
WorkloadActual 85: 1 op, 912800.00 ns, 912.8000 us/op
WorkloadActual 86: 1 op, 1019100.00 ns, 1.0191 ms/op
WorkloadActual 87: 1 op, 1272200.00 ns, 1.2722 ms/op
WorkloadActual 88: 1 op, 1464100.00 ns, 1.4641 ms/op
WorkloadActual 89: 1 op, 972900.00 ns, 972.9000 us/op
WorkloadActual 90: 1 op, 985300.00 ns, 985.3000 us/op
WorkloadActual 91: 1 op, 1008900.00 ns, 1.0089 ms/op
WorkloadActual 92: 1 op, 1372600.00 ns, 1.3726 ms/op
WorkloadActual 93: 1 op, 1458700.00 ns, 1.4587 ms/op
WorkloadActual 94: 1 op, 1110000.00 ns, 1.1100 ms/op
WorkloadActual 95: 1 op, 1108500.00 ns, 1.1085 ms/op
WorkloadActual 96: 1 op, 1041900.00 ns, 1.0419 ms/op
WorkloadActual 97: 1 op, 1357800.00 ns, 1.3578 ms/op
WorkloadActual 98: 1 op, 1021200.00 ns, 1.0212 ms/op
WorkloadActual 99: 1 op, 1095800.00 ns, 1.0958 ms/op
WorkloadActual 100: 1 op, 917100.00 ns, 917.1000 us/op
WorkloadResult 1: 1 op, 1022900.00 ns, 1.0229 ms/op
WorkloadResult 2: 1 op, 878200.00 ns, 878.2000 us/op
WorkloadResult 3: 1 op, 1030400.00 ns, 1.0304 ms/op
WorkloadResult 4: 1 op, 1079700.00 ns, 1.0797 ms/op
WorkloadResult 5: 1 op, 946600.00 ns, 946.6000 us/op
WorkloadResult 6: 1 op, 997600.00 ns, 997.6000 us/op
WorkloadResult 7: 1 op, 982000.00 ns, 982.0000 us/op
WorkloadResult 8: 1 op, 830200.00 ns, 830.2000 us/op
WorkloadResult 9: 1 op, 969000.00 ns, 969.0000 us/op
WorkloadResult 10: 1 op, 1111700.00 ns, 1.1117 ms/op
WorkloadResult 11: 1 op, 883300.00 ns, 883.3000 us/op
WorkloadResult 12: 1 op, 812600.00 ns, 812.6000 us/op
WorkloadResult 13: 1 op, 900100.00 ns, 900.1000 us/op
WorkloadResult 14: 1 op, 1014800.00 ns, 1.0148 ms/op
WorkloadResult 15: 1 op, 934400.00 ns, 934.4000 us/op
WorkloadResult 16: 1 op, 895900.00 ns, 895.9000 us/op
WorkloadResult 17: 1 op, 946700.00 ns, 946.7000 us/op
WorkloadResult 18: 1 op, 1134000.00 ns, 1.1340 ms/op
WorkloadResult 19: 1 op, 999500.00 ns, 999.5000 us/op
WorkloadResult 20: 1 op, 1113300.00 ns, 1.1133 ms/op
WorkloadResult 21: 1 op, 995000.00 ns, 995.0000 us/op
WorkloadResult 22: 1 op, 1099200.00 ns, 1.0992 ms/op
WorkloadResult 23: 1 op, 1284300.00 ns, 1.2843 ms/op
WorkloadResult 24: 1 op, 1214700.00 ns, 1.2147 ms/op
WorkloadResult 25: 1 op, 1055700.00 ns, 1.0557 ms/op
WorkloadResult 26: 1 op, 903600.00 ns, 903.6000 us/op
WorkloadResult 27: 1 op, 987000.00 ns, 987.0000 us/op
WorkloadResult 28: 1 op, 891800.00 ns, 891.8000 us/op
WorkloadResult 29: 1 op, 1104000.00 ns, 1.1040 ms/op
WorkloadResult 30: 1 op, 1000100.00 ns, 1.0001 ms/op
WorkloadResult 31: 1 op, 1021400.00 ns, 1.0214 ms/op
WorkloadResult 32: 1 op, 1067800.00 ns, 1.0678 ms/op
WorkloadResult 33: 1 op, 895200.00 ns, 895.2000 us/op
WorkloadResult 34: 1 op, 1090900.00 ns, 1.0909 ms/op
WorkloadResult 35: 1 op, 1024900.00 ns, 1.0249 ms/op
WorkloadResult 36: 1 op, 1023300.00 ns, 1.0233 ms/op
WorkloadResult 37: 1 op, 948200.00 ns, 948.2000 us/op
WorkloadResult 38: 1 op, 885200.00 ns, 885.2000 us/op
WorkloadResult 39: 1 op, 921900.00 ns, 921.9000 us/op
WorkloadResult 40: 1 op, 1065800.00 ns, 1.0658 ms/op
WorkloadResult 41: 1 op, 930300.00 ns, 930.3000 us/op
WorkloadResult 42: 1 op, 910900.00 ns, 910.9000 us/op
WorkloadResult 43: 1 op, 1044200.00 ns, 1.0442 ms/op
WorkloadResult 44: 1 op, 1133400.00 ns, 1.1334 ms/op
WorkloadResult 45: 1 op, 889600.00 ns, 889.6000 us/op
WorkloadResult 46: 1 op, 853100.00 ns, 853.1000 us/op
WorkloadResult 47: 1 op, 1062700.00 ns, 1.0627 ms/op
WorkloadResult 48: 1 op, 976500.00 ns, 976.5000 us/op
WorkloadResult 49: 1 op, 930700.00 ns, 930.7000 us/op
WorkloadResult 50: 1 op, 1024600.00 ns, 1.0246 ms/op
WorkloadResult 51: 1 op, 1027100.00 ns, 1.0271 ms/op
WorkloadResult 52: 1 op, 1011600.00 ns, 1.0116 ms/op
WorkloadResult 53: 1 op, 1026700.00 ns, 1.0267 ms/op
WorkloadResult 54: 1 op, 1112500.00 ns, 1.1125 ms/op
WorkloadResult 55: 1 op, 873600.00 ns, 873.6000 us/op
WorkloadResult 56: 1 op, 985000.00 ns, 985.0000 us/op
WorkloadResult 57: 1 op, 878100.00 ns, 878.1000 us/op
WorkloadResult 58: 1 op, 932800.00 ns, 932.8000 us/op
WorkloadResult 59: 1 op, 943400.00 ns, 943.4000 us/op
WorkloadResult 60: 1 op, 793500.00 ns, 793.5000 us/op
WorkloadResult 61: 1 op, 865800.00 ns, 865.8000 us/op
WorkloadResult 62: 1 op, 745200.00 ns, 745.2000 us/op
WorkloadResult 63: 1 op, 956700.00 ns, 956.7000 us/op
WorkloadResult 64: 1 op, 893600.00 ns, 893.6000 us/op
WorkloadResult 65: 1 op, 1005200.00 ns, 1.0052 ms/op
WorkloadResult 66: 1 op, 912000.00 ns, 912.0000 us/op
WorkloadResult 67: 1 op, 855300.00 ns, 855.3000 us/op
WorkloadResult 68: 1 op, 880200.00 ns, 880.2000 us/op
WorkloadResult 69: 1 op, 712000.00 ns, 712.0000 us/op
WorkloadResult 70: 1 op, 819300.00 ns, 819.3000 us/op
WorkloadResult 71: 1 op, 941000.00 ns, 941.0000 us/op
WorkloadResult 72: 1 op, 814100.00 ns, 814.1000 us/op
WorkloadResult 73: 1 op, 861900.00 ns, 861.9000 us/op
WorkloadResult 74: 1 op, 903300.00 ns, 903.3000 us/op
WorkloadResult 75: 1 op, 1078600.00 ns, 1.0786 ms/op
WorkloadResult 76: 1 op, 878500.00 ns, 878.5000 us/op
WorkloadResult 77: 1 op, 757300.00 ns, 757.3000 us/op
WorkloadResult 78: 1 op, 1035700.00 ns, 1.0357 ms/op
WorkloadResult 79: 1 op, 849000.00 ns, 849.0000 us/op
WorkloadResult 80: 1 op, 1034900.00 ns, 1.0349 ms/op
WorkloadResult 81: 1 op, 1169300.00 ns, 1.1693 ms/op
WorkloadResult 82: 1 op, 1035400.00 ns, 1.0354 ms/op
WorkloadResult 83: 1 op, 1048000.00 ns, 1.0480 ms/op
WorkloadResult 84: 1 op, 912600.00 ns, 912.6000 us/op
WorkloadResult 85: 1 op, 1018900.00 ns, 1.0189 ms/op
WorkloadResult 86: 1 op, 1272000.00 ns, 1.2720 ms/op
WorkloadResult 87: 1 op, 972700.00 ns, 972.7000 us/op
WorkloadResult 88: 1 op, 985100.00 ns, 985.1000 us/op
WorkloadResult 89: 1 op, 1008700.00 ns, 1.0087 ms/op
WorkloadResult 90: 1 op, 1109800.00 ns, 1.1098 ms/op
WorkloadResult 91: 1 op, 1108300.00 ns, 1.1083 ms/op
WorkloadResult 92: 1 op, 1041700.00 ns, 1.0417 ms/op
WorkloadResult 93: 1 op, 1021000.00 ns, 1.0210 ms/op
WorkloadResult 94: 1 op, 1095600.00 ns, 1.0956 ms/op
WorkloadResult 95: 1 op, 916900.00 ns, 916.9000 us/op
// GC: 0 0 0 624 1
// Threading: 0 0 1
Mean = 977.040 μs, StdErr = 11.123 μs (1.14%), N = 95, StdDev = 108.415 μs
Min = 712.000 μs, Q1 = 895.550 μs, Median = 985.000 μs, Q3 = 1,038.700 μs, Max = 1,284.300 μs
IQR = 143.150 μs, LowerFence = 680.825 μs, UpperFence = 1,253.425 μs
ConfidenceInterval = [939.254 μs; 1,014.826 μs] (CI 99.9%), Margin = 37.786 μs (3.87% of Mean)
Skewness = 0.2, Kurtosis = 3.14, MValue = 3.28
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:05 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 1.162 ms, StdErr = 0.013 ms (1.10%), N = 99, StdDev = 0.127 ms
Min = 0.998 ms, Q1 = 1.062 ms, Median = 1.122 ms, Q3 = 1.240 ms, Max = 1.505 ms
IQR = 0.178 ms, LowerFence = 0.795 ms, UpperFence = 1.507 ms
ConfidenceInterval = [1.119 ms; 1.206 ms] (CI 99.9%), Margin = 0.043 ms (3.74% of Mean)
Skewness = 0.93, Kurtosis = 3.02, MValue = 2.21
-------------------- Histogram --------------------
[0.962 ms ; 1.029 ms) | @@@@@
[1.029 ms ; 1.101 ms) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[1.101 ms ; 1.175 ms) | @@@@@@@@@@@@@@@@@
[1.175 ms ; 1.263 ms) | @@@@@@@@@@@@@@@@@@@
[1.263 ms ; 1.358 ms) | @@@@@@@@@@@@
[1.358 ms ; 1.433 ms) | @@@
[1.433 ms ; 1.521 ms) | @@@@@
---------------------------------------------------
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 977.040 μs, StdErr = 11.123 μs (1.14%), N = 95, StdDev = 108.415 μs
Min = 712.000 μs, Q1 = 895.550 μs, Median = 985.000 μs, Q3 = 1,038.700 μs, Max = 1,284.300 μs
IQR = 143.150 μs, LowerFence = 680.825 μs, UpperFence = 1,253.425 μs
ConfidenceInterval = [939.254 μs; 1,014.826 μs] (CI 99.9%), Margin = 37.786 μs (3.87% of Mean)
Skewness = 0.2, Kurtosis = 3.14, MValue = 3.28
-------------------- Histogram --------------------
[ 703.465 μs ; 765.835 μs) | @@@
[ 765.835 μs ; 808.015 μs) | @
[ 808.015 μs ; 872.815 μs) | @@@@@@@@@
[ 872.815 μs ; 935.185 μs) | @@@@@@@@@@@@@@@@@@@@@@@@
[ 935.185 μs ; 981.915 μs) | @@@@@@@@@
[ 981.915 μs ; 1,053.315 μs) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@
[1,053.315 μs ; 1,115.685 μs) | @@@@@@@@@@@@@@@
[1,115.685 μs ; 1,182.535 μs) | @@@
[1,182.535 μs ; 1,246.965 μs) | @
[1,246.965 μs ; 1,315.485 μs) | @@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Median | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |-----------:|---------:|---------:|-----------:|------:|--------:|----------:|------------:|
| Hlsf | 1,162.2 μs | 43.41 μs | 127.3 μs | 1,122.2 μs | 1.20 | 0.19 | - | 0.00 |
| Libc | 977.0 μs | 37.79 μs | 108.4 μs | 985.0 μs | 1.01 | 0.16 | 624 B | 1.00 |
// * Warnings *
MinIterationTime
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 998.2μs which is very small. It's recommended to increase it to at least 100ms using more operations.
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 712.2μs which is very small. It's recommended to increase it to at least 100ms using more operations.
MultimodalDistribution
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> It seems that the distribution is bimodal (mValue = 3.28)
// * Hints *
Outliers
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 1 outlier was removed (1.60 ms)
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 5 outliers were removed (1.36 ms..1.93 ms)
// * 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)
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 μs : 1 Microsecond (0.000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:01 (1.35 sec), executed benchmarks: 2
Global total time: 00:00:02 (2.4 sec), executed benchmarks: 2
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,475 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 262144 op, 119100.00 ns, 0.4543 ns/op
WorkloadJitting 1: 262144 op, 142084800.00 ns, 542.0105 ns/op
OverheadWarmup 1: 262144 op, 1000.00 ns, 0.0038 ns/op
OverheadWarmup 2: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 3: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 4: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 5: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 6: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 1: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadActual 2: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadActual 3: 262144 op, 600.00 ns, 0.0023 ns/op
OverheadActual 4: 262144 op, 300.00 ns, 0.0011 ns/op
OverheadActual 5: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 6: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 7: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 8: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 9: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 10: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 11: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 12: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 13: 262144 op, 300.00 ns, 0.0011 ns/op
OverheadActual 14: 262144 op, 300.00 ns, 0.0011 ns/op
OverheadActual 15: 262144 op, 700.00 ns, 0.0027 ns/op
OverheadActual 16: 262144 op, 600.00 ns, 0.0023 ns/op
OverheadActual 17: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadActual 18: 262144 op, 400.00 ns, 0.0015 ns/op
OverheadActual 19: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadActual 20: 262144 op, 300.00 ns, 0.0011 ns/op
WorkloadWarmup 1: 262144 op, 152035400.00 ns, 579.9690 ns/op
WorkloadWarmup 2: 262144 op, 120709500.00 ns, 460.4702 ns/op
WorkloadWarmup 3: 262144 op, 50792500.00 ns, 193.7580 ns/op
WorkloadWarmup 4: 262144 op, 53537300.00 ns, 204.2286 ns/op
WorkloadWarmup 5: 262144 op, 47860200.00 ns, 182.5722 ns/op
WorkloadWarmup 6: 262144 op, 49233300.00 ns, 187.8101 ns/op
WorkloadWarmup 7: 262144 op, 47935100.00 ns, 182.8579 ns/op
WorkloadActual 1: 262144 op, 45635000.00 ns, 174.0837 ns/op
WorkloadActual 2: 262144 op, 44340000.00 ns, 169.1437 ns/op
WorkloadActual 3: 262144 op, 43492100.00 ns, 165.9092 ns/op
WorkloadActual 4: 262144 op, 42972000.00 ns, 163.9252 ns/op
WorkloadActual 5: 262144 op, 45904500.00 ns, 175.1118 ns/op
WorkloadActual 6: 262144 op, 43358000.00 ns, 165.3976 ns/op
WorkloadActual 7: 262144 op, 40501300.00 ns, 154.5002 ns/op
WorkloadActual 8: 262144 op, 40406600.00 ns, 154.1389 ns/op
WorkloadActual 9: 262144 op, 40467400.00 ns, 154.3709 ns/op
WorkloadActual 10: 262144 op, 39080600.00 ns, 149.0807 ns/op
WorkloadActual 11: 262144 op, 39594500.00 ns, 151.0410 ns/op
WorkloadActual 12: 262144 op, 42668400.00 ns, 162.7670 ns/op
WorkloadActual 13: 262144 op, 40527900.00 ns, 154.6017 ns/op
WorkloadActual 14: 262144 op, 40743000.00 ns, 155.4222 ns/op
WorkloadActual 15: 262144 op, 39757700.00 ns, 151.6636 ns/op
WorkloadActual 16: 262144 op, 40209100.00 ns, 153.3855 ns/op
WorkloadActual 17: 262144 op, 40352400.00 ns, 153.9322 ns/op
WorkloadActual 18: 262144 op, 41358800.00 ns, 157.7713 ns/op
WorkloadActual 19: 262144 op, 40313800.00 ns, 153.7849 ns/op
WorkloadActual 20: 262144 op, 39874200.00 ns, 152.1080 ns/op
WorkloadActual 21: 262144 op, 38127900.00 ns, 145.4464 ns/op
WorkloadActual 22: 262144 op, 37940400.00 ns, 144.7311 ns/op
WorkloadActual 23: 262144 op, 38589500.00 ns, 147.2073 ns/op
WorkloadActual 24: 262144 op, 38220600.00 ns, 145.8000 ns/op
WorkloadActual 25: 262144 op, 41102400.00 ns, 156.7932 ns/op
WorkloadActual 26: 262144 op, 38634400.00 ns, 147.3785 ns/op
WorkloadActual 27: 262144 op, 38605300.00 ns, 147.2675 ns/op
WorkloadActual 28: 262144 op, 39567300.00 ns, 150.9373 ns/op
WorkloadActual 29: 262144 op, 42502000.00 ns, 162.1323 ns/op
WorkloadActual 30: 262144 op, 47956700.00 ns, 182.9403 ns/op
WorkloadActual 31: 262144 op, 39020200.00 ns, 148.8503 ns/op
WorkloadActual 32: 262144 op, 39244200.00 ns, 149.7047 ns/op
WorkloadActual 33: 262144 op, 37817100.00 ns, 144.2608 ns/op
WorkloadActual 34: 262144 op, 41029200.00 ns, 156.5140 ns/op
WorkloadActual 35: 262144 op, 39193700.00 ns, 149.5121 ns/op
WorkloadActual 36: 262144 op, 38075500.00 ns, 145.2465 ns/op
WorkloadActual 37: 262144 op, 38564700.00 ns, 147.1127 ns/op
WorkloadActual 38: 262144 op, 37690700.00 ns, 143.7786 ns/op
WorkloadActual 39: 262144 op, 38487400.00 ns, 146.8178 ns/op
WorkloadActual 40: 262144 op, 39421300.00 ns, 150.3803 ns/op
WorkloadActual 41: 262144 op, 39772900.00 ns, 151.7216 ns/op
WorkloadActual 42: 262144 op, 41080600.00 ns, 156.7101 ns/op
WorkloadActual 43: 262144 op, 42241900.00 ns, 161.1401 ns/op
WorkloadActual 44: 262144 op, 41130100.00 ns, 156.8989 ns/op
WorkloadActual 45: 262144 op, 41106900.00 ns, 156.8104 ns/op
WorkloadActual 46: 262144 op, 40057300.00 ns, 152.8065 ns/op
WorkloadActual 47: 262144 op, 39049700.00 ns, 148.9628 ns/op
WorkloadActual 48: 262144 op, 41678800.00 ns, 158.9920 ns/op
WorkloadActual 49: 262144 op, 39764000.00 ns, 151.6876 ns/op
WorkloadActual 50: 262144 op, 40665100.00 ns, 155.1250 ns/op
WorkloadResult 1: 262144 op, 43491800.00 ns, 165.9081 ns/op
WorkloadResult 2: 262144 op, 42971700.00 ns, 163.9240 ns/op
WorkloadResult 3: 262144 op, 43357700.00 ns, 165.3965 ns/op
WorkloadResult 4: 262144 op, 40501000.00 ns, 154.4991 ns/op
WorkloadResult 5: 262144 op, 40406300.00 ns, 154.1378 ns/op
WorkloadResult 6: 262144 op, 40467100.00 ns, 154.3697 ns/op
WorkloadResult 7: 262144 op, 39080300.00 ns, 149.0795 ns/op
WorkloadResult 8: 262144 op, 39594200.00 ns, 151.0399 ns/op
WorkloadResult 9: 262144 op, 42668100.00 ns, 162.7659 ns/op
WorkloadResult 10: 262144 op, 40527600.00 ns, 154.6005 ns/op
WorkloadResult 11: 262144 op, 40742700.00 ns, 155.4211 ns/op
WorkloadResult 12: 262144 op, 39757400.00 ns, 151.6624 ns/op
WorkloadResult 13: 262144 op, 40208800.00 ns, 153.3844 ns/op
WorkloadResult 14: 262144 op, 40352100.00 ns, 153.9310 ns/op
WorkloadResult 15: 262144 op, 41358500.00 ns, 157.7702 ns/op
WorkloadResult 16: 262144 op, 40313500.00 ns, 153.7838 ns/op
WorkloadResult 17: 262144 op, 39873900.00 ns, 152.1069 ns/op
WorkloadResult 18: 262144 op, 38127600.00 ns, 145.4453 ns/op
WorkloadResult 19: 262144 op, 37940100.00 ns, 144.7300 ns/op
WorkloadResult 20: 262144 op, 38589200.00 ns, 147.2061 ns/op
WorkloadResult 21: 262144 op, 38220300.00 ns, 145.7989 ns/op
WorkloadResult 22: 262144 op, 41102100.00 ns, 156.7921 ns/op
WorkloadResult 23: 262144 op, 38634100.00 ns, 147.3774 ns/op
WorkloadResult 24: 262144 op, 38605000.00 ns, 147.2664 ns/op
WorkloadResult 25: 262144 op, 39567000.00 ns, 150.9361 ns/op
WorkloadResult 26: 262144 op, 42501700.00 ns, 162.1311 ns/op
WorkloadResult 27: 262144 op, 39019900.00 ns, 148.8491 ns/op
WorkloadResult 28: 262144 op, 39243900.00 ns, 149.7036 ns/op
WorkloadResult 29: 262144 op, 37816800.00 ns, 144.2596 ns/op
WorkloadResult 30: 262144 op, 41028900.00 ns, 156.5128 ns/op
WorkloadResult 31: 262144 op, 39193400.00 ns, 149.5110 ns/op
WorkloadResult 32: 262144 op, 38075200.00 ns, 145.2454 ns/op
WorkloadResult 33: 262144 op, 38564400.00 ns, 147.1115 ns/op
WorkloadResult 34: 262144 op, 37690400.00 ns, 143.7775 ns/op
WorkloadResult 35: 262144 op, 38487100.00 ns, 146.8166 ns/op
WorkloadResult 36: 262144 op, 39421000.00 ns, 150.3792 ns/op
WorkloadResult 37: 262144 op, 39772600.00 ns, 151.7204 ns/op
WorkloadResult 38: 262144 op, 41080300.00 ns, 156.7089 ns/op
WorkloadResult 39: 262144 op, 42241600.00 ns, 161.1389 ns/op
WorkloadResult 40: 262144 op, 41129800.00 ns, 156.8977 ns/op
WorkloadResult 41: 262144 op, 41106600.00 ns, 156.8092 ns/op
WorkloadResult 42: 262144 op, 40057000.00 ns, 152.8053 ns/op
WorkloadResult 43: 262144 op, 39049400.00 ns, 148.9616 ns/op
WorkloadResult 44: 262144 op, 41678500.00 ns, 158.9909 ns/op
WorkloadResult 45: 262144 op, 39763700.00 ns, 151.6865 ns/op
WorkloadResult 46: 262144 op, 40664800.00 ns, 155.1239 ns/op
// GC: 0 0 0 0 262144
// Threading: 0 0 262144
Mean = 152.923 ns, StdErr = 0.850 ns (0.56%), N = 46, StdDev = 5.766 ns
Min = 143.777 ns, Q1 = 148.877 ns, Median = 152.456 ns, Q3 = 156.660 ns, Max = 165.908 ns
IQR = 7.783 ns, LowerFence = 137.203 ns, UpperFence = 168.334 ns
ConfidenceInterval = [149.931 ns; 155.916 ns] (CI 99.9%), Margin = 2.993 ns (1.96% of Mean)
Skewness = 0.45, Kurtosis = 2.45, MValue = 2.21
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:11 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 262144 op, 311300.00 ns, 1.1875 ns/op
WorkloadJitting 1: 262144 op, 92598900.00 ns, 353.2368 ns/op
OverheadWarmup 1: 262144 op, 1600.00 ns, 0.0061 ns/op
OverheadWarmup 2: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 3: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 4: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadWarmup 5: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadWarmup 6: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 1: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 2: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 3: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 4: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 5: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 6: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 7: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 8: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 9: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 10: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 11: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 12: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 13: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 14: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 15: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 16: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 17: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 18: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 19: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 20: 262144 op, 100.00 ns, 0.0004 ns/op
WorkloadWarmup 1: 262144 op, 77216400.00 ns, 294.5572 ns/op
WorkloadWarmup 2: 262144 op, 81341800.00 ns, 310.2943 ns/op
WorkloadWarmup 3: 262144 op, 47875400.00 ns, 182.6302 ns/op
WorkloadWarmup 4: 262144 op, 34848500.00 ns, 132.9365 ns/op
WorkloadWarmup 5: 262144 op, 26586200.00 ns, 101.4183 ns/op
WorkloadWarmup 6: 262144 op, 23880600.00 ns, 91.0973 ns/op
WorkloadWarmup 7: 262144 op, 23589300.00 ns, 89.9860 ns/op
WorkloadWarmup 8: 262144 op, 22694900.00 ns, 86.5742 ns/op
WorkloadWarmup 9: 262144 op, 23442200.00 ns, 89.4249 ns/op
WorkloadWarmup 10: 262144 op, 23310600.00 ns, 88.9229 ns/op
WorkloadActual 1: 262144 op, 24572700.00 ns, 93.7374 ns/op
WorkloadActual 2: 262144 op, 21973300.00 ns, 83.8215 ns/op
WorkloadActual 3: 262144 op, 24617000.00 ns, 93.9064 ns/op
WorkloadActual 4: 262144 op, 22796500.00 ns, 86.9617 ns/op
WorkloadActual 5: 262144 op, 24119100.00 ns, 92.0071 ns/op
WorkloadActual 6: 262144 op, 25735300.00 ns, 98.1724 ns/op
WorkloadActual 7: 262144 op, 24709500.00 ns, 94.2593 ns/op
WorkloadActual 8: 262144 op, 24232300.00 ns, 92.4389 ns/op
WorkloadActual 9: 262144 op, 24873400.00 ns, 94.8845 ns/op
WorkloadActual 10: 262144 op, 26115400.00 ns, 99.6223 ns/op
WorkloadActual 11: 262144 op, 21777600.00 ns, 83.0750 ns/op
WorkloadActual 12: 262144 op, 22346500.00 ns, 85.2451 ns/op
WorkloadActual 13: 262144 op, 21014200.00 ns, 80.1628 ns/op
WorkloadActual 14: 262144 op, 22810200.00 ns, 87.0140 ns/op
WorkloadActual 15: 262144 op, 23287000.00 ns, 88.8329 ns/op
WorkloadActual 16: 262144 op, 23283300.00 ns, 88.8187 ns/op
WorkloadActual 17: 262144 op, 24027100.00 ns, 91.6561 ns/op
WorkloadActual 18: 262144 op, 24106200.00 ns, 91.9579 ns/op
WorkloadActual 19: 262144 op, 27029300.00 ns, 103.1086 ns/op
WorkloadActual 20: 262144 op, 25856500.00 ns, 98.6347 ns/op
WorkloadActual 21: 262144 op, 24334400.00 ns, 92.8284 ns/op
WorkloadActual 22: 262144 op, 24478600.00 ns, 93.3784 ns/op
WorkloadActual 23: 262144 op, 21801100.00 ns, 83.1646 ns/op
WorkloadActual 24: 262144 op, 24189200.00 ns, 92.2745 ns/op
WorkloadActual 25: 262144 op, 23583300.00 ns, 89.9632 ns/op
WorkloadActual 26: 262144 op, 23064100.00 ns, 87.9826 ns/op
WorkloadActual 27: 262144 op, 24515500.00 ns, 93.5192 ns/op
WorkloadActual 28: 262144 op, 24114500.00 ns, 91.9895 ns/op
WorkloadActual 29: 262144 op, 23079100.00 ns, 88.0398 ns/op
WorkloadActual 30: 262144 op, 24616600.00 ns, 93.9049 ns/op
WorkloadActual 31: 262144 op, 24865300.00 ns, 94.8536 ns/op
WorkloadActual 32: 262144 op, 22142300.00 ns, 84.4662 ns/op
WorkloadActual 33: 262144 op, 23112000.00 ns, 88.1653 ns/op
WorkloadActual 34: 262144 op, 23923900.00 ns, 91.2624 ns/op
WorkloadActual 35: 262144 op, 24726900.00 ns, 94.3256 ns/op
WorkloadActual 36: 262144 op, 24681800.00 ns, 94.1536 ns/op
WorkloadActual 37: 262144 op, 22347700.00 ns, 85.2497 ns/op
WorkloadActual 38: 262144 op, 23335100.00 ns, 89.0163 ns/op
WorkloadActual 39: 262144 op, 22427700.00 ns, 85.5549 ns/op
WorkloadActual 40: 262144 op, 22261000.00 ns, 84.9190 ns/op
WorkloadActual 41: 262144 op, 23516700.00 ns, 89.7091 ns/op
WorkloadActual 42: 262144 op, 23285900.00 ns, 88.8287 ns/op
WorkloadActual 43: 262144 op, 24345700.00 ns, 92.8715 ns/op
WorkloadActual 44: 262144 op, 22761000.00 ns, 86.8263 ns/op
WorkloadActual 45: 262144 op, 21969900.00 ns, 83.8085 ns/op
WorkloadActual 46: 262144 op, 23566200.00 ns, 89.8979 ns/op
WorkloadActual 47: 262144 op, 22317300.00 ns, 85.1337 ns/op
WorkloadActual 48: 262144 op, 22817100.00 ns, 87.0403 ns/op
WorkloadActual 49: 262144 op, 23344900.00 ns, 89.0537 ns/op
WorkloadActual 50: 262144 op, 24114200.00 ns, 91.9884 ns/op
WorkloadActual 51: 262144 op, 22212200.00 ns, 84.7328 ns/op
WorkloadActual 52: 262144 op, 23020700.00 ns, 87.8170 ns/op
WorkloadActual 53: 262144 op, 19787000.00 ns, 75.4814 ns/op
WorkloadActual 54: 262144 op, 22155100.00 ns, 84.5150 ns/op
WorkloadActual 55: 262144 op, 21446100.00 ns, 81.8104 ns/op
WorkloadActual 56: 262144 op, 23495100.00 ns, 89.6267 ns/op
WorkloadActual 57: 262144 op, 21560500.00 ns, 82.2468 ns/op
WorkloadActual 58: 262144 op, 24881800.00 ns, 94.9165 ns/op
WorkloadActual 59: 262144 op, 24142300.00 ns, 92.0956 ns/op
WorkloadActual 60: 262144 op, 23274100.00 ns, 88.7836 ns/op
WorkloadActual 61: 262144 op, 23932100.00 ns, 91.2937 ns/op
WorkloadActual 62: 262144 op, 23728200.00 ns, 90.5159 ns/op
WorkloadActual 63: 262144 op, 22081000.00 ns, 84.2323 ns/op
WorkloadActual 64: 262144 op, 23886800.00 ns, 91.1209 ns/op
WorkloadActual 65: 262144 op, 23390400.00 ns, 89.2273 ns/op
WorkloadActual 66: 262144 op, 23821000.00 ns, 90.8699 ns/op
WorkloadActual 67: 262144 op, 23570900.00 ns, 89.9158 ns/op
WorkloadActual 68: 262144 op, 23141300.00 ns, 88.2771 ns/op
WorkloadActual 69: 262144 op, 22405300.00 ns, 85.4694 ns/op
WorkloadActual 70: 262144 op, 24378000.00 ns, 92.9947 ns/op
WorkloadActual 71: 262144 op, 22381200.00 ns, 85.3775 ns/op
WorkloadActual 72: 262144 op, 23387000.00 ns, 89.2143 ns/op
WorkloadActual 73: 262144 op, 23225100.00 ns, 88.5967 ns/op
WorkloadActual 74: 262144 op, 24327500.00 ns, 92.8020 ns/op
WorkloadActual 75: 262144 op, 29341100.00 ns, 111.9274 ns/op
WorkloadActual 76: 262144 op, 26930800.00 ns, 102.7328 ns/op
WorkloadActual 77: 262144 op, 25463100.00 ns, 97.1340 ns/op
WorkloadActual 78: 262144 op, 22738800.00 ns, 86.7416 ns/op
WorkloadResult 1: 262144 op, 24572500.00 ns, 93.7366 ns/op
WorkloadResult 2: 262144 op, 21973100.00 ns, 83.8207 ns/op
WorkloadResult 3: 262144 op, 24616800.00 ns, 93.9056 ns/op
WorkloadResult 4: 262144 op, 22796300.00 ns, 86.9610 ns/op
WorkloadResult 5: 262144 op, 24118900.00 ns, 92.0063 ns/op
WorkloadResult 6: 262144 op, 25735100.00 ns, 98.1716 ns/op
WorkloadResult 7: 262144 op, 24709300.00 ns, 94.2585 ns/op
WorkloadResult 8: 262144 op, 24232100.00 ns, 92.4381 ns/op
WorkloadResult 9: 262144 op, 24873200.00 ns, 94.8837 ns/op
WorkloadResult 10: 262144 op, 26115200.00 ns, 99.6216 ns/op
WorkloadResult 11: 262144 op, 21777400.00 ns, 83.0742 ns/op
WorkloadResult 12: 262144 op, 22346300.00 ns, 85.2444 ns/op
WorkloadResult 13: 262144 op, 21014000.00 ns, 80.1620 ns/op
WorkloadResult 14: 262144 op, 22810000.00 ns, 87.0132 ns/op
WorkloadResult 15: 262144 op, 23286800.00 ns, 88.8321 ns/op
WorkloadResult 16: 262144 op, 23283100.00 ns, 88.8180 ns/op
WorkloadResult 17: 262144 op, 24026900.00 ns, 91.6553 ns/op
WorkloadResult 18: 262144 op, 24106000.00 ns, 91.9571 ns/op
WorkloadResult 19: 262144 op, 25856300.00 ns, 98.6340 ns/op
WorkloadResult 20: 262144 op, 24334200.00 ns, 92.8276 ns/op
WorkloadResult 21: 262144 op, 24478400.00 ns, 93.3777 ns/op
WorkloadResult 22: 262144 op, 21800900.00 ns, 83.1638 ns/op
WorkloadResult 23: 262144 op, 24189000.00 ns, 92.2737 ns/op
WorkloadResult 24: 262144 op, 23583100.00 ns, 89.9624 ns/op
WorkloadResult 25: 262144 op, 23063900.00 ns, 87.9818 ns/op
WorkloadResult 26: 262144 op, 24515300.00 ns, 93.5184 ns/op
WorkloadResult 27: 262144 op, 24114300.00 ns, 91.9888 ns/op
WorkloadResult 28: 262144 op, 23078900.00 ns, 88.0390 ns/op
WorkloadResult 29: 262144 op, 24616400.00 ns, 93.9041 ns/op
WorkloadResult 30: 262144 op, 24865100.00 ns, 94.8528 ns/op
WorkloadResult 31: 262144 op, 22142100.00 ns, 84.4654 ns/op
WorkloadResult 32: 262144 op, 23111800.00 ns, 88.1645 ns/op
WorkloadResult 33: 262144 op, 23923700.00 ns, 91.2617 ns/op
WorkloadResult 34: 262144 op, 24726700.00 ns, 94.3249 ns/op
WorkloadResult 35: 262144 op, 24681600.00 ns, 94.1528 ns/op
WorkloadResult 36: 262144 op, 22347500.00 ns, 85.2489 ns/op
WorkloadResult 37: 262144 op, 23334900.00 ns, 89.0156 ns/op
WorkloadResult 38: 262144 op, 22427500.00 ns, 85.5541 ns/op
WorkloadResult 39: 262144 op, 22260800.00 ns, 84.9182 ns/op
WorkloadResult 40: 262144 op, 23516500.00 ns, 89.7083 ns/op
WorkloadResult 41: 262144 op, 23285700.00 ns, 88.8279 ns/op
WorkloadResult 42: 262144 op, 24345500.00 ns, 92.8707 ns/op
WorkloadResult 43: 262144 op, 22760800.00 ns, 86.8256 ns/op
WorkloadResult 44: 262144 op, 21969700.00 ns, 83.8078 ns/op
WorkloadResult 45: 262144 op, 23566000.00 ns, 89.8972 ns/op
WorkloadResult 46: 262144 op, 22317100.00 ns, 85.1330 ns/op
WorkloadResult 47: 262144 op, 22816900.00 ns, 87.0396 ns/op
WorkloadResult 48: 262144 op, 23344700.00 ns, 89.0530 ns/op
WorkloadResult 49: 262144 op, 24114000.00 ns, 91.9876 ns/op
WorkloadResult 50: 262144 op, 22212000.00 ns, 84.7321 ns/op
WorkloadResult 51: 262144 op, 23020500.00 ns, 87.8162 ns/op
WorkloadResult 52: 262144 op, 19786800.00 ns, 75.4807 ns/op
WorkloadResult 53: 262144 op, 22154900.00 ns, 84.5142 ns/op
WorkloadResult 54: 262144 op, 21445900.00 ns, 81.8096 ns/op
WorkloadResult 55: 262144 op, 23494900.00 ns, 89.6259 ns/op
WorkloadResult 56: 262144 op, 21560300.00 ns, 82.2460 ns/op
WorkloadResult 57: 262144 op, 24881600.00 ns, 94.9158 ns/op
WorkloadResult 58: 262144 op, 24142100.00 ns, 92.0948 ns/op
WorkloadResult 59: 262144 op, 23273900.00 ns, 88.7829 ns/op
WorkloadResult 60: 262144 op, 23931900.00 ns, 91.2930 ns/op
WorkloadResult 61: 262144 op, 23728000.00 ns, 90.5151 ns/op
WorkloadResult 62: 262144 op, 22080800.00 ns, 84.2316 ns/op
WorkloadResult 63: 262144 op, 23886600.00 ns, 91.1201 ns/op
WorkloadResult 64: 262144 op, 23390200.00 ns, 89.2265 ns/op
WorkloadResult 65: 262144 op, 23820800.00 ns, 90.8691 ns/op
WorkloadResult 66: 262144 op, 23570700.00 ns, 89.9151 ns/op
WorkloadResult 67: 262144 op, 23141100.00 ns, 88.2763 ns/op
WorkloadResult 68: 262144 op, 22405100.00 ns, 85.4687 ns/op
WorkloadResult 69: 262144 op, 24377800.00 ns, 92.9939 ns/op
WorkloadResult 70: 262144 op, 22381000.00 ns, 85.3767 ns/op
WorkloadResult 71: 262144 op, 23386800.00 ns, 89.2136 ns/op
WorkloadResult 72: 262144 op, 23224900.00 ns, 88.5960 ns/op
WorkloadResult 73: 262144 op, 24327300.00 ns, 92.8013 ns/op
WorkloadResult 74: 262144 op, 25462900.00 ns, 97.1333 ns/op
WorkloadResult 75: 262144 op, 22738600.00 ns, 86.7409 ns/op
// GC: 0 0 0 288 262144
// Threading: 0 0 262144
Mean = 89.402 ns, StdErr = 0.517 ns (0.58%), N = 75, StdDev = 4.481 ns
Min = 75.481 ns, Q1 = 86.147 ns, Median = 89.227 ns, Q3 = 92.620 ns, Max = 99.622 ns
IQR = 6.472 ns, LowerFence = 76.439 ns, UpperFence = 102.328 ns
ConfidenceInterval = [87.628 ns; 91.175 ns] (CI 99.9%), Margin = 1.773 ns (1.98% of Mean)
Skewness = -0.24, Kurtosis = 3.15, MValue = 2.8
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:11 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 152.923 ns, StdErr = 0.850 ns (0.56%), N = 46, StdDev = 5.766 ns
Min = 143.777 ns, Q1 = 148.877 ns, Median = 152.456 ns, Q3 = 156.660 ns, Max = 165.908 ns
IQR = 7.783 ns, LowerFence = 137.203 ns, UpperFence = 168.334 ns
ConfidenceInterval = [149.931 ns; 155.916 ns] (CI 99.9%), Margin = 2.993 ns (1.96% of Mean)
Skewness = 0.45, Kurtosis = 2.45, MValue = 2.21
-------------------- Histogram --------------------
[142.676 ns ; 146.816 ns) | @@@@@@
[146.816 ns ; 151.040 ns) | @@@@@@@@@@@@@
[151.040 ns ; 156.964 ns) | @@@@@@@@@@@@@@@@@@@
[156.964 ns ; 161.907 ns) | @@@
[161.907 ns ; 166.132 ns) | @@@@@
---------------------------------------------------
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 89.402 ns, StdErr = 0.517 ns (0.58%), N = 75, StdDev = 4.481 ns
Min = 75.481 ns, Q1 = 86.147 ns, Median = 89.227 ns, Q3 = 92.620 ns, Max = 99.622 ns
IQR = 6.472 ns, LowerFence = 76.439 ns, UpperFence = 102.328 ns
ConfidenceInterval = [87.628 ns; 91.175 ns] (CI 99.9%), Margin = 1.773 ns (1.98% of Mean)
Skewness = -0.24, Kurtosis = 3.15, MValue = 2.8
-------------------- Histogram --------------------
[74.086 ns ; 76.875 ns) | @
[76.875 ns ; 79.809 ns) |
[79.809 ns ; 82.919 ns) | @@@
[82.919 ns ; 85.709 ns) | @@@@@@@@@@@@@@@
[85.709 ns ; 87.771 ns) | @@@@@
[87.771 ns ; 90.560 ns) | @@@@@@@@@@@@@@@@@@@@
[90.560 ns ; 94.385 ns) | @@@@@@@@@@@@@@@@@@@@@@@@
[94.385 ns ; 97.388 ns) | @@@@
[97.388 ns ; 100.291 ns) | @@@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |----------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | 152.92 ns | 2.993 ns | 5.766 ns | 1.71 | 0.11 | - | NA |
| Libc | 89.40 ns | 1.773 ns | 4.481 ns | 1.00 | 0.07 | - | NA |
// * Warnings *
MinIterationTime
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 37.691ms which is very small. It's recommended to increase it to at least 100ms using more operations.
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 19.787ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Hints *
Outliers
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 4 outliers were removed (169.14 ns..182.94 ns)
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 3 outliers were removed, 4 outliers were detected (75.48 ns, 102.73 ns..111.93 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:06 (6.84 sec), executed benchmarks: 2
Global total time: 00:00:07 (7.74 sec), executed benchmarks: 2
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,424 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 262144 op, 106700.00 ns, 0.4070 ns/op
WorkloadJitting 1: 262144 op, 122658100.00 ns, 467.9035 ns/op
OverheadWarmup 1: 262144 op, 1200.00 ns, 0.0046 ns/op
OverheadWarmup 2: 262144 op, 300.00 ns, 0.0011 ns/op
OverheadWarmup 3: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadWarmup 4: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 5: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadWarmup 6: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 7: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 1: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadActual 2: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadActual 3: 262144 op, 500.00 ns, 0.0019 ns/op
OverheadActual 4: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 5: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 6: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 7: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 8: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 9: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 10: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 11: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 12: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 13: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 14: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 15: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 16: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 17: 262144 op, 400.00 ns, 0.0015 ns/op
OverheadActual 18: 262144 op, 300.00 ns, 0.0011 ns/op
OverheadActual 19: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 20: 262144 op, 100.00 ns, 0.0004 ns/op
WorkloadWarmup 1: 262144 op, 110857600.00 ns, 422.8882 ns/op
WorkloadWarmup 2: 262144 op, 110685900.00 ns, 422.2332 ns/op
WorkloadWarmup 3: 262144 op, 60418200.00 ns, 230.4771 ns/op
WorkloadWarmup 4: 262144 op, 35849400.00 ns, 136.7546 ns/op
WorkloadWarmup 5: 262144 op, 36337400.00 ns, 138.6162 ns/op
WorkloadWarmup 6: 262144 op, 35980600.00 ns, 137.2551 ns/op
WorkloadWarmup 7: 262144 op, 36068200.00 ns, 137.5893 ns/op
WorkloadWarmup 8: 262144 op, 35766000.00 ns, 136.4365 ns/op
WorkloadActual 1: 262144 op, 35397300.00 ns, 135.0300 ns/op
WorkloadActual 2: 262144 op, 35901100.00 ns, 136.9518 ns/op
WorkloadActual 3: 262144 op, 36879000.00 ns, 140.6822 ns/op
WorkloadActual 4: 262144 op, 37440900.00 ns, 142.8257 ns/op
WorkloadActual 5: 262144 op, 37170700.00 ns, 141.7950 ns/op
WorkloadActual 6: 262144 op, 36973700.00 ns, 141.0435 ns/op
WorkloadActual 7: 262144 op, 35979000.00 ns, 137.2490 ns/op
WorkloadActual 8: 262144 op, 35645700.00 ns, 135.9776 ns/op
WorkloadActual 9: 262144 op, 35439400.00 ns, 135.1906 ns/op
WorkloadActual 10: 262144 op, 35531000.00 ns, 135.5400 ns/op
WorkloadActual 11: 262144 op, 36466900.00 ns, 139.1102 ns/op
WorkloadActual 12: 262144 op, 35649900.00 ns, 135.9936 ns/op
WorkloadActual 13: 262144 op, 35991100.00 ns, 137.2952 ns/op
WorkloadActual 14: 262144 op, 36790600.00 ns, 140.3450 ns/op
WorkloadActual 15: 262144 op, 36337700.00 ns, 138.6173 ns/op
WorkloadResult 1: 262144 op, 35397200.00 ns, 135.0296 ns/op
WorkloadResult 2: 262144 op, 35901000.00 ns, 136.9514 ns/op
WorkloadResult 3: 262144 op, 36878900.00 ns, 140.6818 ns/op
WorkloadResult 4: 262144 op, 37440800.00 ns, 142.8253 ns/op
WorkloadResult 5: 262144 op, 37170600.00 ns, 141.7946 ns/op
WorkloadResult 6: 262144 op, 36973600.00 ns, 141.0431 ns/op
WorkloadResult 7: 262144 op, 35978900.00 ns, 137.2486 ns/op
WorkloadResult 8: 262144 op, 35645600.00 ns, 135.9772 ns/op
WorkloadResult 9: 262144 op, 35439300.00 ns, 135.1902 ns/op
WorkloadResult 10: 262144 op, 35530900.00 ns, 135.5396 ns/op
WorkloadResult 11: 262144 op, 36466800.00 ns, 139.1098 ns/op
WorkloadResult 12: 262144 op, 35649800.00 ns, 135.9932 ns/op
WorkloadResult 13: 262144 op, 35991000.00 ns, 137.2948 ns/op
WorkloadResult 14: 262144 op, 36790500.00 ns, 140.3446 ns/op
WorkloadResult 15: 262144 op, 36337600.00 ns, 138.6169 ns/op
// GC: 0 0 0 0 262144
// Threading: 0 0 262144
Mean = 138.243 ns, StdErr = 0.667 ns (0.48%), N = 15, StdDev = 2.583 ns
Min = 135.030 ns, Q1 = 135.985 ns, Median = 137.295 ns, Q3 = 140.513 ns, Max = 142.825 ns
IQR = 4.528 ns, LowerFence = 129.193 ns, UpperFence = 147.305 ns
ConfidenceInterval = [135.481 ns; 141.004 ns] (CI 99.9%), Margin = 2.761 ns (2.00% of Mean)
Skewness = 0.31, Kurtosis = 1.53, MValue = 2
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:11 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 262144 op, 108300.00 ns, 0.4131 ns/op
WorkloadJitting 1: 262144 op, 87379000.00 ns, 333.3244 ns/op
OverheadWarmup 1: 262144 op, 1400.00 ns, 0.0053 ns/op
OverheadWarmup 2: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 3: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 4: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 5: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadWarmup 6: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 1: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 2: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 3: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 4: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 5: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 6: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 7: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 8: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 9: 262144 op, 300.00 ns, 0.0011 ns/op
OverheadActual 10: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 11: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 12: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 13: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 14: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 15: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 16: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 17: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 18: 262144 op, 200.00 ns, 0.0008 ns/op
OverheadActual 19: 262144 op, 100.00 ns, 0.0004 ns/op
OverheadActual 20: 262144 op, 200.00 ns, 0.0008 ns/op
WorkloadWarmup 1: 262144 op, 82202900.00 ns, 313.5792 ns/op
WorkloadWarmup 2: 262144 op, 71759200.00 ns, 273.7396 ns/op
WorkloadWarmup 3: 262144 op, 51490600.00 ns, 196.4211 ns/op
WorkloadWarmup 4: 262144 op, 25013800.00 ns, 95.4201 ns/op
WorkloadWarmup 5: 262144 op, 23585400.00 ns, 89.9712 ns/op
WorkloadWarmup 6: 262144 op, 23447700.00 ns, 89.4459 ns/op
WorkloadWarmup 7: 262144 op, 24088400.00 ns, 91.8900 ns/op
WorkloadWarmup 8: 262144 op, 22121700.00 ns, 84.3876 ns/op
WorkloadWarmup 9: 262144 op, 23537300.00 ns, 89.7877 ns/op
WorkloadWarmup 10: 262144 op, 23602700.00 ns, 90.0372 ns/op
WorkloadWarmup 11: 262144 op, 24112000.00 ns, 91.9800 ns/op
WorkloadWarmup 12: 262144 op, 25337600.00 ns, 96.6553 ns/op
WorkloadWarmup 13: 262144 op, 22122200.00 ns, 84.3895 ns/op
WorkloadActual 1: 262144 op, 24011900.00 ns, 91.5981 ns/op
WorkloadActual 2: 262144 op, 23371000.00 ns, 89.1533 ns/op
WorkloadActual 3: 262144 op, 23321700.00 ns, 88.9652 ns/op
WorkloadActual 4: 262144 op, 21343500.00 ns, 81.4190 ns/op
WorkloadActual 5: 262144 op, 23063800.00 ns, 87.9814 ns/op
WorkloadActual 6: 262144 op, 20906600.00 ns, 79.7523 ns/op
WorkloadActual 7: 262144 op, 21050500.00 ns, 80.3013 ns/op
WorkloadActual 8: 262144 op, 21801300.00 ns, 83.1654 ns/op
WorkloadActual 9: 262144 op, 21220000.00 ns, 80.9479 ns/op
WorkloadActual 10: 262144 op, 23346000.00 ns, 89.0579 ns/op
WorkloadActual 11: 262144 op, 19406000.00 ns, 74.0280 ns/op
WorkloadActual 12: 262144 op, 19528300.00 ns, 74.4946 ns/op
WorkloadActual 13: 262144 op, 22318200.00 ns, 85.1372 ns/op
WorkloadActual 14: 262144 op, 22491900.00 ns, 85.7998 ns/op
WorkloadActual 15: 262144 op, 19781500.00 ns, 75.4604 ns/op
WorkloadActual 16: 262144 op, 20619600.00 ns, 78.6575 ns/op
WorkloadActual 17: 262144 op, 23867200.00 ns, 91.0461 ns/op
WorkloadActual 18: 262144 op, 20877300.00 ns, 79.6406 ns/op
WorkloadActual 19: 262144 op, 22184300.00 ns, 84.6264 ns/op
WorkloadActual 20: 262144 op, 22826100.00 ns, 87.0747 ns/op
WorkloadActual 21: 262144 op, 21267300.00 ns, 81.1283 ns/op
WorkloadActual 22: 262144 op, 22571400.00 ns, 86.1031 ns/op
WorkloadActual 23: 262144 op, 23137500.00 ns, 88.2626 ns/op
WorkloadActual 24: 262144 op, 23343200.00 ns, 89.0472 ns/op
WorkloadActual 25: 262144 op, 23253900.00 ns, 88.7066 ns/op
WorkloadActual 26: 262144 op, 19790400.00 ns, 75.4944 ns/op
WorkloadActual 27: 262144 op, 20864400.00 ns, 79.5914 ns/op
WorkloadActual 28: 262144 op, 21747000.00 ns, 82.9582 ns/op
WorkloadActual 29: 262144 op, 23244100.00 ns, 88.6692 ns/op
WorkloadActual 30: 262144 op, 21659200.00 ns, 82.6233 ns/op
WorkloadActual 31: 262144 op, 21297200.00 ns, 81.2424 ns/op
WorkloadActual 32: 262144 op, 22508800.00 ns, 85.8643 ns/op
WorkloadActual 33: 262144 op, 22749300.00 ns, 86.7817 ns/op
WorkloadActual 34: 262144 op, 21880800.00 ns, 83.4686 ns/op
WorkloadActual 35: 262144 op, 21588200.00 ns, 82.3524 ns/op
WorkloadActual 36: 262144 op, 22222200.00 ns, 84.7710 ns/op
WorkloadActual 37: 262144 op, 20352200.00 ns, 77.6375 ns/op
WorkloadActual 38: 262144 op, 19748600.00 ns, 75.3349 ns/op
WorkloadActual 39: 262144 op, 20983700.00 ns, 80.0465 ns/op
WorkloadActual 40: 262144 op, 21518000.00 ns, 82.0847 ns/op
WorkloadActual 41: 262144 op, 22015500.00 ns, 83.9825 ns/op
WorkloadActual 42: 262144 op, 21963700.00 ns, 83.7849 ns/op
WorkloadActual 43: 262144 op, 20773400.00 ns, 79.2442 ns/op
WorkloadActual 44: 262144 op, 21364700.00 ns, 81.4999 ns/op
WorkloadActual 45: 262144 op, 19468000.00 ns, 74.2645 ns/op
WorkloadActual 46: 262144 op, 19714800.00 ns, 75.2060 ns/op
WorkloadActual 47: 262144 op, 20115200.00 ns, 76.7334 ns/op
WorkloadActual 48: 262144 op, 20625200.00 ns, 78.6789 ns/op
WorkloadActual 49: 262144 op, 22247200.00 ns, 84.8663 ns/op
WorkloadActual 50: 262144 op, 23786600.00 ns, 90.7387 ns/op
WorkloadActual 51: 262144 op, 21150400.00 ns, 80.6824 ns/op
WorkloadActual 52: 262144 op, 23360400.00 ns, 89.1129 ns/op
WorkloadActual 53: 262144 op, 19543800.00 ns, 74.5537 ns/op
WorkloadActual 54: 262144 op, 21550500.00 ns, 82.2086 ns/op
WorkloadActual 55: 262144 op, 21785900.00 ns, 83.1066 ns/op
WorkloadActual 56: 262144 op, 21197800.00 ns, 80.8632 ns/op
WorkloadActual 57: 262144 op, 21736600.00 ns, 82.9185 ns/op
WorkloadActual 58: 262144 op, 22608800.00 ns, 86.2457 ns/op
WorkloadActual 59: 262144 op, 20705800.00 ns, 78.9864 ns/op
WorkloadActual 60: 262144 op, 21855300.00 ns, 83.3714 ns/op
WorkloadActual 61: 262144 op, 21007100.00 ns, 80.1357 ns/op
WorkloadActual 62: 262144 op, 21801900.00 ns, 83.1676 ns/op
WorkloadActual 63: 262144 op, 19716700.00 ns, 75.2132 ns/op
WorkloadActual 64: 262144 op, 21014300.00 ns, 80.1632 ns/op
WorkloadActual 65: 262144 op, 20608700.00 ns, 78.6160 ns/op
WorkloadActual 66: 262144 op, 22831200.00 ns, 87.0941 ns/op
WorkloadActual 67: 262144 op, 22645600.00 ns, 86.3861 ns/op
WorkloadActual 68: 262144 op, 22753500.00 ns, 86.7977 ns/op
WorkloadActual 69: 262144 op, 23598100.00 ns, 90.0196 ns/op
WorkloadActual 70: 262144 op, 20028400.00 ns, 76.4023 ns/op
WorkloadActual 71: 262144 op, 21380800.00 ns, 81.5613 ns/op
WorkloadActual 72: 262144 op, 20425400.00 ns, 77.9167 ns/op
WorkloadActual 73: 262144 op, 21381600.00 ns, 81.5643 ns/op
WorkloadActual 74: 262144 op, 22957000.00 ns, 87.5740 ns/op
WorkloadActual 75: 262144 op, 19953100.00 ns, 76.1150 ns/op
WorkloadActual 76: 262144 op, 21239600.00 ns, 81.0226 ns/op
WorkloadActual 77: 262144 op, 20181400.00 ns, 76.9859 ns/op
WorkloadActual 78: 262144 op, 20440400.00 ns, 77.9739 ns/op
WorkloadActual 79: 262144 op, 22440900.00 ns, 85.6052 ns/op
WorkloadActual 80: 262144 op, 21102300.00 ns, 80.4989 ns/op
WorkloadActual 81: 262144 op, 21671100.00 ns, 82.6687 ns/op
WorkloadActual 82: 262144 op, 22933400.00 ns, 87.4840 ns/op
WorkloadActual 83: 262144 op, 21626200.00 ns, 82.4974 ns/op
WorkloadActual 84: 262144 op, 22042200.00 ns, 84.0843 ns/op
WorkloadActual 85: 262144 op, 22130600.00 ns, 84.4215 ns/op
WorkloadActual 86: 262144 op, 21725300.00 ns, 82.8754 ns/op
WorkloadActual 87: 262144 op, 20934200.00 ns, 79.8576 ns/op
WorkloadResult 1: 262144 op, 24011800.00 ns, 91.5977 ns/op
WorkloadResult 2: 262144 op, 23370900.00 ns, 89.1529 ns/op
WorkloadResult 3: 262144 op, 23321600.00 ns, 88.9648 ns/op
WorkloadResult 4: 262144 op, 21343400.00 ns, 81.4186 ns/op
WorkloadResult 5: 262144 op, 23063700.00 ns, 87.9810 ns/op
WorkloadResult 6: 262144 op, 20906500.00 ns, 79.7520 ns/op
WorkloadResult 7: 262144 op, 21050400.00 ns, 80.3009 ns/op
WorkloadResult 8: 262144 op, 21801200.00 ns, 83.1650 ns/op
WorkloadResult 9: 262144 op, 21219900.00 ns, 80.9475 ns/op
WorkloadResult 10: 262144 op, 23345900.00 ns, 89.0575 ns/op
WorkloadResult 11: 262144 op, 19405900.00 ns, 74.0276 ns/op
WorkloadResult 12: 262144 op, 19528200.00 ns, 74.4942 ns/op
WorkloadResult 13: 262144 op, 22318100.00 ns, 85.1368 ns/op
WorkloadResult 14: 262144 op, 22491800.00 ns, 85.7994 ns/op
WorkloadResult 15: 262144 op, 19781400.00 ns, 75.4601 ns/op
WorkloadResult 16: 262144 op, 20619500.00 ns, 78.6572 ns/op
WorkloadResult 17: 262144 op, 23867100.00 ns, 91.0458 ns/op
WorkloadResult 18: 262144 op, 20877200.00 ns, 79.6402 ns/op
WorkloadResult 19: 262144 op, 22184200.00 ns, 84.6260 ns/op
WorkloadResult 20: 262144 op, 22826000.00 ns, 87.0743 ns/op
WorkloadResult 21: 262144 op, 21267200.00 ns, 81.1279 ns/op
WorkloadResult 22: 262144 op, 22571300.00 ns, 86.1027 ns/op
WorkloadResult 23: 262144 op, 23137400.00 ns, 88.2622 ns/op
WorkloadResult 24: 262144 op, 23343100.00 ns, 89.0469 ns/op
WorkloadResult 25: 262144 op, 23253800.00 ns, 88.7062 ns/op
WorkloadResult 26: 262144 op, 19790300.00 ns, 75.4940 ns/op
WorkloadResult 27: 262144 op, 20864300.00 ns, 79.5910 ns/op
WorkloadResult 28: 262144 op, 21746900.00 ns, 82.9578 ns/op
WorkloadResult 29: 262144 op, 23244000.00 ns, 88.6688 ns/op
WorkloadResult 30: 262144 op, 21659100.00 ns, 82.6229 ns/op
WorkloadResult 31: 262144 op, 21297100.00 ns, 81.2420 ns/op
WorkloadResult 32: 262144 op, 22508700.00 ns, 85.8639 ns/op
WorkloadResult 33: 262144 op, 22749200.00 ns, 86.7813 ns/op
WorkloadResult 34: 262144 op, 21880700.00 ns, 83.4682 ns/op
WorkloadResult 35: 262144 op, 21588100.00 ns, 82.3521 ns/op
WorkloadResult 36: 262144 op, 22222100.00 ns, 84.7706 ns/op
WorkloadResult 37: 262144 op, 20352100.00 ns, 77.6371 ns/op
WorkloadResult 38: 262144 op, 19748500.00 ns, 75.3345 ns/op
WorkloadResult 39: 262144 op, 20983600.00 ns, 80.0461 ns/op
WorkloadResult 40: 262144 op, 21517900.00 ns, 82.0843 ns/op
WorkloadResult 41: 262144 op, 22015400.00 ns, 83.9821 ns/op
WorkloadResult 42: 262144 op, 21963600.00 ns, 83.7845 ns/op
WorkloadResult 43: 262144 op, 20773300.00 ns, 79.2439 ns/op
WorkloadResult 44: 262144 op, 21364600.00 ns, 81.4995 ns/op
WorkloadResult 45: 262144 op, 19467900.00 ns, 74.2641 ns/op
WorkloadResult 46: 262144 op, 19714700.00 ns, 75.2056 ns/op
WorkloadResult 47: 262144 op, 20115100.00 ns, 76.7330 ns/op
WorkloadResult 48: 262144 op, 20625100.00 ns, 78.6785 ns/op
WorkloadResult 49: 262144 op, 22247100.00 ns, 84.8660 ns/op
WorkloadResult 50: 262144 op, 23786500.00 ns, 90.7383 ns/op
WorkloadResult 51: 262144 op, 21150300.00 ns, 80.6820 ns/op
WorkloadResult 52: 262144 op, 23360300.00 ns, 89.1125 ns/op
WorkloadResult 53: 262144 op, 19543700.00 ns, 74.5533 ns/op
WorkloadResult 54: 262144 op, 21550400.00 ns, 82.2083 ns/op
WorkloadResult 55: 262144 op, 21785800.00 ns, 83.1062 ns/op
WorkloadResult 56: 262144 op, 21197700.00 ns, 80.8628 ns/op
WorkloadResult 57: 262144 op, 21736500.00 ns, 82.9182 ns/op
WorkloadResult 58: 262144 op, 22608700.00 ns, 86.2453 ns/op
WorkloadResult 59: 262144 op, 20705700.00 ns, 78.9860 ns/op
WorkloadResult 60: 262144 op, 21855200.00 ns, 83.3710 ns/op
WorkloadResult 61: 262144 op, 21007000.00 ns, 80.1353 ns/op
WorkloadResult 62: 262144 op, 21801800.00 ns, 83.1673 ns/op
WorkloadResult 63: 262144 op, 19716600.00 ns, 75.2129 ns/op
WorkloadResult 64: 262144 op, 21014200.00 ns, 80.1628 ns/op
WorkloadResult 65: 262144 op, 20608600.00 ns, 78.6156 ns/op
WorkloadResult 66: 262144 op, 22831100.00 ns, 87.0937 ns/op
WorkloadResult 67: 262144 op, 22645500.00 ns, 86.3857 ns/op
WorkloadResult 68: 262144 op, 22753400.00 ns, 86.7973 ns/op
WorkloadResult 69: 262144 op, 23598000.00 ns, 90.0192 ns/op
WorkloadResult 70: 262144 op, 20028300.00 ns, 76.4019 ns/op
WorkloadResult 71: 262144 op, 21380700.00 ns, 81.5609 ns/op
WorkloadResult 72: 262144 op, 20425300.00 ns, 77.9163 ns/op
WorkloadResult 73: 262144 op, 21381500.00 ns, 81.5639 ns/op
WorkloadResult 74: 262144 op, 22956900.00 ns, 87.5736 ns/op
WorkloadResult 75: 262144 op, 19953000.00 ns, 76.1147 ns/op
WorkloadResult 76: 262144 op, 21239500.00 ns, 81.0223 ns/op
WorkloadResult 77: 262144 op, 20181300.00 ns, 76.9855 ns/op
WorkloadResult 78: 262144 op, 20440300.00 ns, 77.9736 ns/op
WorkloadResult 79: 262144 op, 22440800.00 ns, 85.6049 ns/op
WorkloadResult 80: 262144 op, 21102200.00 ns, 80.4985 ns/op
WorkloadResult 81: 262144 op, 21671000.00 ns, 82.6683 ns/op
WorkloadResult 82: 262144 op, 22933300.00 ns, 87.4836 ns/op
WorkloadResult 83: 262144 op, 21626100.00 ns, 82.4970 ns/op
WorkloadResult 84: 262144 op, 22042100.00 ns, 84.0839 ns/op
WorkloadResult 85: 262144 op, 22130500.00 ns, 84.4212 ns/op
WorkloadResult 86: 262144 op, 21725200.00 ns, 82.8751 ns/op
WorkloadResult 87: 262144 op, 20934100.00 ns, 79.8573 ns/op
// GC: 0 0 0 0 262144
// Threading: 0 0 262144
Mean = 82.485 ns, StdErr = 0.483 ns (0.59%), N = 87, StdDev = 4.508 ns
Min = 74.028 ns, Q1 = 79.616 ns, Median = 82.497 ns, Q3 = 85.983 ns, Max = 91.598 ns
IQR = 6.368 ns, LowerFence = 70.064 ns, UpperFence = 95.535 ns
ConfidenceInterval = [80.838 ns; 84.132 ns] (CI 99.9%), Margin = 1.647 ns (2.00% of Mean)
Skewness = 0, Kurtosis = 2.14, MValue = 2.09
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:11 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 138.243 ns, StdErr = 0.667 ns (0.48%), N = 15, StdDev = 2.583 ns
Min = 135.030 ns, Q1 = 135.985 ns, Median = 137.295 ns, Q3 = 140.513 ns, Max = 142.825 ns
IQR = 4.528 ns, LowerFence = 129.193 ns, UpperFence = 147.305 ns
ConfidenceInterval = [135.481 ns; 141.004 ns] (CI 99.9%), Margin = 2.761 ns (2.00% of Mean)
Skewness = 0.31, Kurtosis = 1.53, MValue = 2
-------------------- Histogram --------------------
[134.787 ns ; 138.432 ns) | @@@@@@@@
[138.432 ns ; 144.200 ns) | @@@@@@@
---------------------------------------------------
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 82.485 ns, StdErr = 0.483 ns (0.59%), N = 87, StdDev = 4.508 ns
Min = 74.028 ns, Q1 = 79.616 ns, Median = 82.497 ns, Q3 = 85.983 ns, Max = 91.598 ns
IQR = 6.368 ns, LowerFence = 70.064 ns, UpperFence = 95.535 ns
ConfidenceInterval = [80.838 ns; 84.132 ns] (CI 99.9%), Margin = 1.647 ns (2.00% of Mean)
Skewness = 0, Kurtosis = 2.14, MValue = 2.09
-------------------- Histogram --------------------
[73.880 ns ; 77.872 ns) | @@@@@@@@@@@@@@
[77.872 ns ; 80.830 ns) | @@@@@@@@@@@@@@@@@
[80.830 ns ; 83.501 ns) | @@@@@@@@@@@@@@@@@@@@@@@
[83.501 ns ; 86.632 ns) | @@@@@@@@@@@@@@
[86.632 ns ; 89.302 ns) | @@@@@@@@@@@@@@@
[89.302 ns ; 92.144 ns) | @@@@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |----------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | 138.24 ns | 2.761 ns | 2.583 ns | 1.68 | 0.10 | - | NA |
| Libc | 82.48 ns | 1.647 ns | 4.508 ns | 1.00 | 0.08 | - | NA |
// * Warnings *
MinIterationTime
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 35.397ms which is very small. It's recommended to increase it to at least 100ms using more operations.
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 19.406ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:04 (4.78 sec), executed benchmarks: 2
Global total time: 00:00:05 (5.56 sec), executed benchmarks: 2
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,234 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 1572864 op, 118200.00 ns, 0.0751 ns/op
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.OverflowException: Out of memory: Unable to allocate new 4096MB block or find suitable bucket for allocation.
at StgSharp.HighPerformance.Memory.HybridLayerSegregatedFitAllocator.Alloc(UIntPtr size)
at StgSharp.Benchmark.HlsfAllocatorBench.RunHlsf(HybridLayerSegregatedFitAllocator allocator, FreePolicy policy)
at StgSharp.Benchmark.HlsfAllocatorBench.Hlsf()
at BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionUnroll(Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.Measure(Action`1 action, Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.RunIteration(IterationData data)
at BenchmarkDotNet.Engines.EngineFactory.Jit(Engine engine, Int32 jitIndex, Int32 invokeCount, Int32 unrollFactor)
at BenchmarkDotNet.Engines.EngineFactory.CreateReadyToRun(EngineParameters engineParameters)
at BenchmarkDotNet.Autogenerated.Runnable_0.Run(BenchmarkCase benchmarkCase, IHost host)
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
--- End of inner exception stack trace ---
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at BenchmarkDotNet.Toolchains.InProcess.Emit.Implementation.RunnableProgram.Run(BenchmarkId benchmarkId, Assembly partitionAssembly, BenchmarkCase benchmarkCase, IHost host)
Executable D:\platform-dev\StgSharp.Benchmark\bin\x64\PerformanceDebug\net8.0\StgSharp.Benchmark-Job-VLPMSV-1Emitted.dll not found
ExitCode != 0 and no results reported
No Workload Results were obtained from the run.
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:12 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 1572864 op, 202000.00 ns, 0.1284 ns/op
WorkloadJitting 1: 1572864 op, 410939600.00 ns, 261.2684 ns/op
OverheadWarmup 1: 1572864 op, 1100.00 ns, 0.0007 ns/op
OverheadWarmup 2: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadWarmup 3: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadWarmup 4: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadWarmup 5: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadWarmup 6: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 1: 1572864 op, 900.00 ns, 0.0006 ns/op
OverheadActual 2: 1572864 op, 800.00 ns, 0.0005 ns/op
OverheadActual 3: 1572864 op, 700.00 ns, 0.0004 ns/op
OverheadActual 4: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 5: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 6: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 7: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadActual 8: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 9: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadActual 10: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadActual 11: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadActual 12: 1572864 op, 100.00 ns, 0.0001 ns/op
OverheadActual 13: 1572864 op, 500.00 ns, 0.0003 ns/op
OverheadActual 14: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 15: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadActual 16: 1572864 op, 200.00 ns, 0.0001 ns/op
OverheadActual 17: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 18: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 19: 1572864 op, 300.00 ns, 0.0002 ns/op
OverheadActual 20: 1572864 op, 200.00 ns, 0.0001 ns/op
WorkloadWarmup 1: 1572864 op, 165146900.00 ns, 104.9976 ns/op
WorkloadWarmup 2: 1572864 op, 150282900.00 ns, 95.5473 ns/op
WorkloadWarmup 3: 1572864 op, 159412700.00 ns, 101.3519 ns/op
WorkloadWarmup 4: 1572864 op, 136880500.00 ns, 87.0263 ns/op
WorkloadWarmup 5: 1572864 op, 132545200.00 ns, 84.2700 ns/op
WorkloadWarmup 6: 1572864 op, 131547100.00 ns, 83.6354 ns/op
WorkloadWarmup 7: 1572864 op, 133431500.00 ns, 84.8335 ns/op
WorkloadWarmup 8: 1572864 op, 132657800.00 ns, 84.3416 ns/op
WorkloadActual 1: 1572864 op, 141275300.00 ns, 89.8204 ns/op
WorkloadActual 2: 1572864 op, 156756800.00 ns, 99.6633 ns/op
WorkloadActual 3: 1572864 op, 131499900.00 ns, 83.6054 ns/op
WorkloadActual 4: 1572864 op, 129434200.00 ns, 82.2920 ns/op
WorkloadActual 5: 1572864 op, 129770500.00 ns, 82.5059 ns/op
WorkloadActual 6: 1572864 op, 137358800.00 ns, 87.3304 ns/op
WorkloadActual 7: 1572864 op, 122767700.00 ns, 78.0536 ns/op
WorkloadActual 8: 1572864 op, 127150500.00 ns, 80.8401 ns/op
WorkloadActual 9: 1572864 op, 127897700.00 ns, 81.3152 ns/op
WorkloadActual 10: 1572864 op, 134241500.00 ns, 85.3484 ns/op
WorkloadActual 11: 1572864 op, 131170900.00 ns, 83.3962 ns/op
WorkloadActual 12: 1572864 op, 128696500.00 ns, 81.8230 ns/op
WorkloadActual 13: 1572864 op, 131658200.00 ns, 83.7060 ns/op
WorkloadActual 14: 1572864 op, 130496400.00 ns, 82.9674 ns/op
WorkloadActual 15: 1572864 op, 132939800.00 ns, 84.5208 ns/op
WorkloadActual 16: 1572864 op, 129162800.00 ns, 82.1195 ns/op
WorkloadActual 17: 1572864 op, 127534200.00 ns, 81.0841 ns/op
WorkloadActual 18: 1572864 op, 127787700.00 ns, 81.2452 ns/op
WorkloadActual 19: 1572864 op, 126947500.00 ns, 80.7110 ns/op
WorkloadActual 20: 1572864 op, 125193400.00 ns, 79.5958 ns/op
WorkloadActual 21: 1572864 op, 131908100.00 ns, 83.8649 ns/op
WorkloadActual 22: 1572864 op, 129372600.00 ns, 82.2529 ns/op
WorkloadActual 23: 1572864 op, 129443600.00 ns, 82.2980 ns/op
WorkloadActual 24: 1572864 op, 128597600.00 ns, 81.7602 ns/op
WorkloadResult 1: 1572864 op, 131499600.00 ns, 83.6052 ns/op
WorkloadResult 2: 1572864 op, 129433900.00 ns, 82.2919 ns/op
WorkloadResult 3: 1572864 op, 129770200.00 ns, 82.5057 ns/op
WorkloadResult 4: 1572864 op, 137358500.00 ns, 87.3302 ns/op
WorkloadResult 5: 1572864 op, 122767400.00 ns, 78.0534 ns/op
WorkloadResult 6: 1572864 op, 127150200.00 ns, 80.8399 ns/op
WorkloadResult 7: 1572864 op, 127897400.00 ns, 81.3150 ns/op
WorkloadResult 8: 1572864 op, 134241200.00 ns, 85.3483 ns/op
WorkloadResult 9: 1572864 op, 131170600.00 ns, 83.3960 ns/op
WorkloadResult 10: 1572864 op, 128696200.00 ns, 81.8228 ns/op
WorkloadResult 11: 1572864 op, 131657900.00 ns, 83.7058 ns/op
WorkloadResult 12: 1572864 op, 130496100.00 ns, 82.9672 ns/op
WorkloadResult 13: 1572864 op, 132939500.00 ns, 84.5207 ns/op
WorkloadResult 14: 1572864 op, 129162500.00 ns, 82.1193 ns/op
WorkloadResult 15: 1572864 op, 127533900.00 ns, 81.0839 ns/op
WorkloadResult 16: 1572864 op, 127787400.00 ns, 81.2450 ns/op
WorkloadResult 17: 1572864 op, 126947200.00 ns, 80.7109 ns/op
WorkloadResult 18: 1572864 op, 125193100.00 ns, 79.5956 ns/op
WorkloadResult 19: 1572864 op, 131907800.00 ns, 83.8647 ns/op
WorkloadResult 20: 1572864 op, 129372300.00 ns, 82.2527 ns/op
WorkloadResult 21: 1572864 op, 129443300.00 ns, 82.2978 ns/op
WorkloadResult 22: 1572864 op, 128597300.00 ns, 81.7600 ns/op
// GC: 0 0 0 0 1572864
// Threading: 0 0 1572864
Mean = 82.392 ns, StdErr = 0.419 ns (0.51%), N = 22, StdDev = 1.967 ns
Min = 78.053 ns, Q1 = 81.263 ns, Median = 82.272 ns, Q3 = 83.553 ns, Max = 87.330 ns
IQR = 2.290 ns, LowerFence = 77.827 ns, UpperFence = 86.988 ns
ConfidenceInterval = [80.790 ns; 83.994 ns] (CI 99.9%), Margin = 1.602 ns (1.94% of Mean)
Skewness = 0.28, Kurtosis = 3.45, MValue = 2
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:12 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
There are not any results runs
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 82.392 ns, StdErr = 0.419 ns (0.51%), N = 22, StdDev = 1.967 ns
Min = 78.053 ns, Q1 = 81.263 ns, Median = 82.272 ns, Q3 = 83.553 ns, Max = 87.330 ns
IQR = 2.290 ns, LowerFence = 77.827 ns, UpperFence = 86.988 ns
ConfidenceInterval = [80.790 ns; 83.994 ns] (CI 99.9%), Margin = 1.602 ns (1.94% of Mean)
Skewness = 0.28, Kurtosis = 3.45, MValue = 2
-------------------- Histogram --------------------
[77.903 ns ; 79.746 ns) | @@
[79.746 ns ; 82.530 ns) | @@@@@@@@@@@@
[82.530 ns ; 84.665 ns) | @@@@@@
[84.665 ns ; 88.252 ns) | @@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |---------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | NA | NA | NA | ? | ? | NA | ? |
| Libc | 82.39 ns | 1.602 ns | 1.967 ns | 1.00 | 0.03 | - | NA |
Benchmarks with issues:
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// * Warnings *
Environment
Summary -> Detected error exit code from one of the benchmarks. It might be caused by following antivirus software:
- Windows Defender (windowsdefender://)
Use InProcessEmitToolchain or InProcessNoEmitToolchain to avoid new process creation.
BaselineCustomAnalyzer
Summary -> A question mark '?' symbol indicates that it was not possible to compute the (Ratio, RatioSD, Alloc Ratio) column(s) because the baseline or benchmark could not be found, or the baseline value is too close to zero.
// * Hints *
Outliers
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 2 outliers were removed (89.82 ns, 99.66 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:05 (5.98 sec), executed benchmarks: 1
Global total time: 00:00:06 (6.76 sec), executed benchmarks: 1
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,200 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 786432 op, 114300.00 ns, 0.1453 ns/op
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.OverflowException: Out of memory: Unable to allocate new 4096MB block or find suitable bucket for allocation.
at StgSharp.HighPerformance.Memory.HybridLayerSegregatedFitAllocator.Alloc(UIntPtr size)
at StgSharp.Benchmark.HlsfAllocatorBench.RunHlsf(HybridLayerSegregatedFitAllocator allocator, FreePolicy policy)
at StgSharp.Benchmark.HlsfAllocatorBench.Hlsf()
at BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionUnroll(Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.Measure(Action`1 action, Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.RunIteration(IterationData data)
at BenchmarkDotNet.Engines.EngineFactory.Jit(Engine engine, Int32 jitIndex, Int32 invokeCount, Int32 unrollFactor)
at BenchmarkDotNet.Engines.EngineFactory.CreateReadyToRun(EngineParameters engineParameters)
at BenchmarkDotNet.Autogenerated.Runnable_0.Run(BenchmarkCase benchmarkCase, IHost host)
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
--- End of inner exception stack trace ---
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at BenchmarkDotNet.Toolchains.InProcess.Emit.Implementation.RunnableProgram.Run(BenchmarkId benchmarkId, Assembly partitionAssembly, BenchmarkCase benchmarkCase, IHost host)
Executable D:\platform-dev\StgSharp.Benchmark\bin\x64\PerformanceDebug\net8.0\StgSharp.Benchmark-Job-VLPMSV-1Emitted.dll not found
ExitCode != 0 and no results reported
No Workload Results were obtained from the run.
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:13 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 786432 op, 272500.00 ns, 0.3465 ns/op
WorkloadJitting 1: 786432 op, 283546800.00 ns, 360.5484 ns/op
OverheadWarmup 1: 786432 op, 800.00 ns, 0.0010 ns/op
OverheadWarmup 2: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadWarmup 3: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadWarmup 4: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadWarmup 5: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadWarmup 6: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadActual 1: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 2: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadActual 3: 786432 op, 1100.00 ns, 0.0014 ns/op
OverheadActual 4: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 5: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadActual 6: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 7: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 8: 786432 op, 500.00 ns, 0.0006 ns/op
OverheadActual 9: 786432 op, 500.00 ns, 0.0006 ns/op
OverheadActual 10: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadActual 11: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 12: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 13: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadActual 14: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 15: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadActual 16: 786432 op, 200.00 ns, 0.0003 ns/op
OverheadActual 17: 786432 op, 800.00 ns, 0.0010 ns/op
OverheadActual 18: 786432 op, 400.00 ns, 0.0005 ns/op
OverheadActual 19: 786432 op, 300.00 ns, 0.0004 ns/op
OverheadActual 20: 786432 op, 200.00 ns, 0.0003 ns/op
WorkloadWarmup 1: 786432 op, 177081300.00 ns, 225.1705 ns/op
WorkloadWarmup 2: 786432 op, 83441200.00 ns, 106.1010 ns/op
WorkloadWarmup 3: 786432 op, 71793700.00 ns, 91.2904 ns/op
WorkloadWarmup 4: 786432 op, 73979600.00 ns, 94.0699 ns/op
WorkloadWarmup 5: 786432 op, 71654600.00 ns, 91.1135 ns/op
WorkloadWarmup 6: 786432 op, 70864800.00 ns, 90.1093 ns/op
WorkloadWarmup 7: 786432 op, 72973000.00 ns, 92.7900 ns/op
WorkloadWarmup 8: 786432 op, 74296000.00 ns, 94.4722 ns/op
WorkloadWarmup 9: 786432 op, 77626300.00 ns, 98.7069 ns/op
WorkloadWarmup 10: 786432 op, 74617600.00 ns, 94.8812 ns/op
WorkloadActual 1: 786432 op, 71797800.00 ns, 91.2956 ns/op
WorkloadActual 2: 786432 op, 76039200.00 ns, 96.6888 ns/op
WorkloadActual 3: 786432 op, 72729800.00 ns, 92.4807 ns/op
WorkloadActual 4: 786432 op, 68925300.00 ns, 87.6431 ns/op
WorkloadActual 5: 786432 op, 72758900.00 ns, 92.5177 ns/op
WorkloadActual 6: 786432 op, 69658300.00 ns, 88.5751 ns/op
WorkloadActual 7: 786432 op, 81699400.00 ns, 103.8862 ns/op
WorkloadActual 8: 786432 op, 75090200.00 ns, 95.4821 ns/op
WorkloadActual 9: 786432 op, 70600600.00 ns, 89.7733 ns/op
WorkloadActual 10: 786432 op, 65057200.00 ns, 82.7245 ns/op
WorkloadActual 11: 786432 op, 66548400.00 ns, 84.6207 ns/op
WorkloadActual 12: 786432 op, 61023500.00 ns, 77.5954 ns/op
WorkloadActual 13: 786432 op, 65876400.00 ns, 83.7662 ns/op
WorkloadActual 14: 786432 op, 62012700.00 ns, 78.8532 ns/op
WorkloadActual 15: 786432 op, 64825000.00 ns, 82.4293 ns/op
WorkloadActual 16: 786432 op, 65207800.00 ns, 82.9160 ns/op
WorkloadActual 17: 786432 op, 62358300.00 ns, 79.2927 ns/op
WorkloadActual 18: 786432 op, 65015400.00 ns, 82.6714 ns/op
WorkloadActual 19: 786432 op, 65443100.00 ns, 83.2152 ns/op
WorkloadActual 20: 786432 op, 61746200.00 ns, 78.5144 ns/op
WorkloadActual 21: 786432 op, 67061100.00 ns, 85.2726 ns/op
WorkloadActual 22: 786432 op, 62854400.00 ns, 79.9235 ns/op
WorkloadActual 23: 786432 op, 67830700.00 ns, 86.2512 ns/op
WorkloadActual 24: 786432 op, 63916100.00 ns, 81.2735 ns/op
WorkloadActual 25: 786432 op, 68091500.00 ns, 86.5828 ns/op
WorkloadActual 26: 786432 op, 68909000.00 ns, 87.6223 ns/op
WorkloadActual 27: 786432 op, 64960900.00 ns, 82.6021 ns/op
WorkloadActual 28: 786432 op, 65687200.00 ns, 83.5256 ns/op
WorkloadActual 29: 786432 op, 66187900.00 ns, 84.1623 ns/op
WorkloadActual 30: 786432 op, 68711500.00 ns, 87.3712 ns/op
WorkloadActual 31: 786432 op, 62861700.00 ns, 79.9328 ns/op
WorkloadActual 32: 786432 op, 67319200.00 ns, 85.6008 ns/op
WorkloadActual 33: 786432 op, 66537600.00 ns, 84.6069 ns/op
WorkloadActual 34: 786432 op, 62686800.00 ns, 79.7104 ns/op
WorkloadActual 35: 786432 op, 67844800.00 ns, 86.2691 ns/op
WorkloadActual 36: 786432 op, 68469500.00 ns, 87.0635 ns/op
WorkloadActual 37: 786432 op, 62314100.00 ns, 79.2365 ns/op
WorkloadActual 38: 786432 op, 69435500.00 ns, 88.2918 ns/op
WorkloadActual 39: 786432 op, 67670800.00 ns, 86.0479 ns/op
WorkloadActual 40: 786432 op, 70529700.00 ns, 89.6832 ns/op
WorkloadActual 41: 786432 op, 69438800.00 ns, 88.2960 ns/op
WorkloadActual 42: 786432 op, 62218500.00 ns, 79.1149 ns/op
WorkloadActual 43: 786432 op, 63930300.00 ns, 81.2916 ns/op
WorkloadActual 44: 786432 op, 62494300.00 ns, 79.4656 ns/op
WorkloadActual 45: 786432 op, 62698000.00 ns, 79.7246 ns/op
WorkloadActual 46: 786432 op, 58191400.00 ns, 73.9942 ns/op
WorkloadActual 47: 786432 op, 62828900.00 ns, 79.8911 ns/op
WorkloadActual 48: 786432 op, 65412800.00 ns, 83.1767 ns/op
WorkloadActual 49: 786432 op, 61486700.00 ns, 78.1844 ns/op
WorkloadActual 50: 786432 op, 62803100.00 ns, 79.8583 ns/op
WorkloadActual 51: 786432 op, 62769200.00 ns, 79.8152 ns/op
WorkloadActual 52: 786432 op, 62944300.00 ns, 80.0378 ns/op
WorkloadActual 53: 786432 op, 62638600.00 ns, 79.6491 ns/op
WorkloadActual 54: 786432 op, 63655100.00 ns, 80.9416 ns/op
WorkloadActual 55: 786432 op, 65557900.00 ns, 83.3612 ns/op
WorkloadActual 56: 786432 op, 62510300.00 ns, 79.4860 ns/op
WorkloadActual 57: 786432 op, 64525400.00 ns, 82.0483 ns/op
WorkloadActual 58: 786432 op, 65281400.00 ns, 83.0096 ns/op
WorkloadActual 59: 786432 op, 66175500.00 ns, 84.1465 ns/op
WorkloadActual 60: 786432 op, 62543300.00 ns, 79.5279 ns/op
WorkloadActual 61: 786432 op, 59456000.00 ns, 75.6022 ns/op
WorkloadActual 62: 786432 op, 65781700.00 ns, 83.6458 ns/op
WorkloadActual 63: 786432 op, 61663900.00 ns, 78.4097 ns/op
WorkloadActual 64: 786432 op, 60669900.00 ns, 77.1458 ns/op
WorkloadActual 65: 786432 op, 60812900.00 ns, 77.3276 ns/op
WorkloadActual 66: 786432 op, 66279900.00 ns, 84.2793 ns/op
WorkloadActual 67: 786432 op, 61144400.00 ns, 77.7491 ns/op
WorkloadActual 68: 786432 op, 61055600.00 ns, 77.6362 ns/op
WorkloadActual 69: 786432 op, 62388700.00 ns, 79.3313 ns/op
WorkloadActual 70: 786432 op, 62531200.00 ns, 79.5125 ns/op
WorkloadActual 71: 786432 op, 64258300.00 ns, 81.7087 ns/op
WorkloadActual 72: 786432 op, 65326100.00 ns, 83.0664 ns/op
WorkloadActual 73: 786432 op, 63049300.00 ns, 80.1713 ns/op
WorkloadActual 74: 786432 op, 63431600.00 ns, 80.6575 ns/op
WorkloadActual 75: 786432 op, 64226500.00 ns, 81.6682 ns/op
WorkloadResult 1: 786432 op, 71797500.00 ns, 91.2952 ns/op
WorkloadResult 2: 786432 op, 72729500.00 ns, 92.4803 ns/op
WorkloadResult 3: 786432 op, 68925000.00 ns, 87.6427 ns/op
WorkloadResult 4: 786432 op, 72758600.00 ns, 92.5173 ns/op
WorkloadResult 5: 786432 op, 69658000.00 ns, 88.5747 ns/op
WorkloadResult 6: 786432 op, 70600300.00 ns, 89.7729 ns/op
WorkloadResult 7: 786432 op, 65056900.00 ns, 82.7241 ns/op
WorkloadResult 8: 786432 op, 66548100.00 ns, 84.6203 ns/op
WorkloadResult 9: 786432 op, 61023200.00 ns, 77.5950 ns/op
WorkloadResult 10: 786432 op, 65876100.00 ns, 83.7658 ns/op
WorkloadResult 11: 786432 op, 62012400.00 ns, 78.8528 ns/op
WorkloadResult 12: 786432 op, 64824700.00 ns, 82.4289 ns/op
WorkloadResult 13: 786432 op, 65207500.00 ns, 82.9156 ns/op
WorkloadResult 14: 786432 op, 62358000.00 ns, 79.2923 ns/op
WorkloadResult 15: 786432 op, 65015100.00 ns, 82.6710 ns/op
WorkloadResult 16: 786432 op, 65442800.00 ns, 83.2148 ns/op
WorkloadResult 17: 786432 op, 61745900.00 ns, 78.5140 ns/op
WorkloadResult 18: 786432 op, 67060800.00 ns, 85.2722 ns/op
WorkloadResult 19: 786432 op, 62854100.00 ns, 79.9231 ns/op
WorkloadResult 20: 786432 op, 67830400.00 ns, 86.2508 ns/op
WorkloadResult 21: 786432 op, 63915800.00 ns, 81.2731 ns/op
WorkloadResult 22: 786432 op, 68091
@@ -0,0 +1,375 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 127300.00 ns, 0.2428 ns/op
WorkloadJitting 1: 524288 op, 344623100.00 ns, 657.3164 ns/op
OverheadWarmup 1: 524288 op, 1500.00 ns, 0.0029 ns/op
OverheadWarmup 2: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 3: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 4: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadWarmup 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 1: 524288 op, 600.00 ns, 0.0011 ns/op
OverheadActual 2: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 3: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 5: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 6: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 9: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 10: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 11: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 12: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 13: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 14: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 15: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 16: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 17: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 18: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 19: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 20: 524288 op, 400.00 ns, 0.0008 ns/op
WorkloadWarmup 1: 524288 op, 99750000.00 ns, 190.2580 ns/op
WorkloadWarmup 2: 524288 op, 117031100.00 ns, 223.2191 ns/op
WorkloadWarmup 3: 524288 op, 96056600.00 ns, 183.2134 ns/op
WorkloadWarmup 4: 524288 op, 86407000.00 ns, 164.8083 ns/op
WorkloadWarmup 5: 524288 op, 104009800.00 ns, 198.3829 ns/op
WorkloadWarmup 6: 524288 op, 82499500.00 ns, 157.3553 ns/op
WorkloadActual 1: 524288 op, 83109500.00 ns, 158.5188 ns/op
WorkloadActual 2: 524288 op, 82020800.00 ns, 156.4423 ns/op
WorkloadActual 3: 524288 op, 79255800.00 ns, 151.1684 ns/op
WorkloadActual 4: 524288 op, 75998400.00 ns, 144.9554 ns/op
WorkloadActual 5: 524288 op, 77819900.00 ns, 148.4297 ns/op
WorkloadActual 6: 524288 op, 74558600.00 ns, 142.2092 ns/op
WorkloadActual 7: 524288 op, 74009300.00 ns, 141.1615 ns/op
WorkloadActual 8: 524288 op, 75033700.00 ns, 143.1154 ns/op
WorkloadActual 9: 524288 op, 77884900.00 ns, 148.5537 ns/op
WorkloadActual 10: 524288 op, 82038200.00 ns, 156.4754 ns/op
WorkloadActual 11: 524288 op, 76501400.00 ns, 145.9148 ns/op
WorkloadActual 12: 524288 op, 75644200.00 ns, 144.2799 ns/op
WorkloadActual 13: 524288 op, 76225600.00 ns, 145.3888 ns/op
WorkloadActual 14: 524288 op, 77151600.00 ns, 147.1550 ns/op
WorkloadActual 15: 524288 op, 72707800.00 ns, 138.6791 ns/op
WorkloadActual 16: 524288 op, 74118700.00 ns, 141.3702 ns/op
WorkloadActual 17: 524288 op, 71484700.00 ns, 136.3462 ns/op
WorkloadActual 18: 524288 op, 73459300.00 ns, 140.1125 ns/op
WorkloadActual 19: 524288 op, 73239800.00 ns, 139.6938 ns/op
WorkloadActual 20: 524288 op, 78846800.00 ns, 150.3883 ns/op
WorkloadActual 21: 524288 op, 72395500.00 ns, 138.0835 ns/op
WorkloadActual 22: 524288 op, 73737500.00 ns, 140.6431 ns/op
WorkloadActual 23: 524288 op, 73339900.00 ns, 139.8848 ns/op
WorkloadActual 24: 524288 op, 79202500.00 ns, 151.0668 ns/op
WorkloadActual 25: 524288 op, 75850000.00 ns, 144.6724 ns/op
WorkloadActual 26: 524288 op, 74549800.00 ns, 142.1925 ns/op
WorkloadActual 27: 524288 op, 73733500.00 ns, 140.6355 ns/op
WorkloadActual 28: 524288 op, 75948900.00 ns, 144.8610 ns/op
WorkloadActual 29: 524288 op, 77917800.00 ns, 148.6164 ns/op
WorkloadActual 30: 524288 op, 72781000.00 ns, 138.8187 ns/op
WorkloadActual 31: 524288 op, 74696100.00 ns, 142.4715 ns/op
WorkloadActual 32: 524288 op, 74712500.00 ns, 142.5028 ns/op
WorkloadActual 33: 524288 op, 73382200.00 ns, 139.9654 ns/op
WorkloadActual 34: 524288 op, 73410700.00 ns, 140.0198 ns/op
WorkloadActual 35: 524288 op, 74397300.00 ns, 141.9016 ns/op
WorkloadActual 36: 524288 op, 72721700.00 ns, 138.7056 ns/op
WorkloadActual 37: 524288 op, 71562800.00 ns, 136.4952 ns/op
WorkloadActual 38: 524288 op, 74578600.00 ns, 142.2474 ns/op
WorkloadActual 39: 524288 op, 72040800.00 ns, 137.4069 ns/op
WorkloadResult 1: 524288 op, 79255500.00 ns, 151.1679 ns/op
WorkloadResult 2: 524288 op, 75998100.00 ns, 144.9549 ns/op
WorkloadResult 3: 524288 op, 77819600.00 ns, 148.4291 ns/op
WorkloadResult 4: 524288 op, 74558300.00 ns, 142.2087 ns/op
WorkloadResult 5: 524288 op, 74009000.00 ns, 141.1610 ns/op
WorkloadResult 6: 524288 op, 75033400.00 ns, 143.1149 ns/op
WorkloadResult 7: 524288 op, 77884600.00 ns, 148.5531 ns/op
WorkloadResult 8: 524288 op, 76501100.00 ns, 145.9143 ns/op
WorkloadResult 9: 524288 op, 75643900.00 ns, 144.2793 ns/op
WorkloadResult 10: 524288 op, 76225300.00 ns, 145.3882 ns/op
WorkloadResult 11: 524288 op, 77151300.00 ns, 147.1544 ns/op
WorkloadResult 12: 524288 op, 72707500.00 ns, 138.6786 ns/op
WorkloadResult 13: 524288 op, 74118400.00 ns, 141.3696 ns/op
WorkloadResult 14: 524288 op, 71484400.00 ns, 136.3457 ns/op
WorkloadResult 15: 524288 op, 73459000.00 ns, 140.1119 ns/op
WorkloadResult 16: 524288 op, 73239500.00 ns, 139.6933 ns/op
WorkloadResult 17: 524288 op, 78846500.00 ns, 150.3878 ns/op
WorkloadResult 18: 524288 op, 72395200.00 ns, 138.0829 ns/op
WorkloadResult 19: 524288 op, 73737200.00 ns, 140.6425 ns/op
WorkloadResult 20: 524288 op, 73339600.00 ns, 139.8842 ns/op
WorkloadResult 21: 524288 op, 79202200.00 ns, 151.0662 ns/op
WorkloadResult 22: 524288 op, 75849700.00 ns, 144.6718 ns/op
WorkloadResult 23: 524288 op, 74549500.00 ns, 142.1919 ns/op
WorkloadResult 24: 524288 op, 73733200.00 ns, 140.6349 ns/op
WorkloadResult 25: 524288 op, 75948600.00 ns, 144.8605 ns/op
WorkloadResult 26: 524288 op, 77917500.00 ns, 148.6158 ns/op
WorkloadResult 27: 524288 op, 72780700.00 ns, 138.8182 ns/op
WorkloadResult 28: 524288 op, 74695800.00 ns, 142.4709 ns/op
WorkloadResult 29: 524288 op, 74712200.00 ns, 142.5022 ns/op
WorkloadResult 30: 524288 op, 73381900.00 ns, 139.9649 ns/op
WorkloadResult 31: 524288 op, 73410400.00 ns, 140.0192 ns/op
WorkloadResult 32: 524288 op, 74397000.00 ns, 141.9010 ns/op
WorkloadResult 33: 524288 op, 72721400.00 ns, 138.7051 ns/op
WorkloadResult 34: 524288 op, 71562500.00 ns, 136.4946 ns/op
WorkloadResult 35: 524288 op, 74578300.00 ns, 142.2468 ns/op
WorkloadResult 36: 524288 op, 72040500.00 ns, 137.4063 ns/op
// GC: 0 0 0 0 524288
// Threading: 0 0 524288
Mean = 142.780 ns, StdErr = 0.681 ns (0.48%), N = 36, StdDev = 4.085 ns
Min = 136.346 ns, Q1 = 139.945 ns, Median = 142.200 ns, Q3 = 145.063 ns, Max = 151.168 ns
IQR = 5.119 ns, LowerFence = 132.267 ns, UpperFence = 152.741 ns
ConfidenceInterval = [140.335 ns; 145.226 ns] (CI 99.9%), Margin = 2.445 ns (1.71% of Mean)
Skewness = 0.5, Kurtosis = 2.26, MValue = 2
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:15 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 96700.00 ns, 0.1844 ns/op
WorkloadJitting 1: 524288 op, 188500900.00 ns, 359.5369 ns/op
OverheadWarmup 1: 524288 op, 1500.00 ns, 0.0029 ns/op
OverheadWarmup 2: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadWarmup 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 1: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 2: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 5: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 7: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 8: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 9: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 10: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 11: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 12: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 13: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 14: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 15: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 16: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 17: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 18: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 19: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 20: 524288 op, 200.00 ns, 0.0004 ns/op
WorkloadWarmup 1: 524288 op, 99213700.00 ns, 189.2351 ns/op
WorkloadWarmup 2: 524288 op, 57878200.00 ns, 110.3939 ns/op
WorkloadWarmup 3: 524288 op, 46811300.00 ns, 89.2855 ns/op
WorkloadWarmup 4: 524288 op, 48562400.00 ns, 92.6254 ns/op
WorkloadWarmup 5: 524288 op, 42878600.00 ns, 81.7844 ns/op
WorkloadWarmup 6: 524288 op, 45507100.00 ns, 86.7979 ns/op
WorkloadWarmup 7: 524288 op, 42794900.00 ns, 81.6248 ns/op
WorkloadActual 1: 524288 op, 44760800.00 ns, 85.3745 ns/op
WorkloadActual 2: 524288 op, 44827600.00 ns, 85.5019 ns/op
WorkloadActual 3: 524288 op, 41012300.00 ns, 78.2248 ns/op
WorkloadActual 4: 524288 op, 41438200.00 ns, 79.0371 ns/op
WorkloadActual 5: 524288 op, 42349000.00 ns, 80.7743 ns/op
WorkloadActual 6: 524288 op, 43418500.00 ns, 82.8142 ns/op
WorkloadActual 7: 524288 op, 39325200.00 ns, 75.0069 ns/op
WorkloadActual 8: 524288 op, 45356400.00 ns, 86.5105 ns/op
WorkloadActual 9: 524288 op, 42998200.00 ns, 82.0126 ns/op
WorkloadActual 10: 524288 op, 42543700.00 ns, 81.1457 ns/op
WorkloadActual 11: 524288 op, 42022200.00 ns, 80.1510 ns/op
WorkloadActual 12: 524288 op, 41589700.00 ns, 79.3261 ns/op
WorkloadActual 13: 524288 op, 41791400.00 ns, 79.7108 ns/op
WorkloadActual 14: 524288 op, 42872000.00 ns, 81.7719 ns/op
WorkloadActual 15: 524288 op, 43705800.00 ns, 83.3622 ns/op
WorkloadActual 16: 524288 op, 41635500.00 ns, 79.4134 ns/op
WorkloadActual 17: 524288 op, 43287700.00 ns, 82.5647 ns/op
WorkloadActual 18: 524288 op, 42481200.00 ns, 81.0265 ns/op
WorkloadActual 19: 524288 op, 40153300.00 ns, 76.5863 ns/op
WorkloadActual 20: 524288 op, 44237400.00 ns, 84.3761 ns/op
WorkloadActual 21: 524288 op, 43768200.00 ns, 83.4812 ns/op
WorkloadActual 22: 524288 op, 39950200.00 ns, 76.1990 ns/op
WorkloadActual 23: 524288 op, 44188300.00 ns, 84.2825 ns/op
WorkloadActual 24: 524288 op, 44841800.00 ns, 85.5289 ns/op
WorkloadActual 25: 524288 op, 45335800.00 ns, 86.4712 ns/op
WorkloadActual 26: 524288 op, 44310900.00 ns, 84.5163 ns/op
WorkloadActual 27: 524288 op, 43363100.00 ns, 82.7085 ns/op
WorkloadActual 28: 524288 op, 42334500.00 ns, 80.7467 ns/op
WorkloadActual 29: 524288 op, 44788100.00 ns, 85.4265 ns/op
WorkloadActual 30: 524288 op, 45293100.00 ns, 86.3897 ns/op
WorkloadActual 31: 524288 op, 43721600.00 ns, 83.3923 ns/op
WorkloadActual 32: 524288 op, 42628000.00 ns, 81.3065 ns/op
WorkloadActual 33: 524288 op, 41615200.00 ns, 79.3747 ns/op
WorkloadActual 34: 524288 op, 41328000.00 ns, 78.8269 ns/op
WorkloadActual 35: 524288 op, 42970200.00 ns, 81.9592 ns/op
WorkloadActual 36: 524288 op, 42667100.00 ns, 81.3810 ns/op
WorkloadActual 37: 524288 op, 42134300.00 ns, 80.3648 ns/op
WorkloadActual 38: 524288 op, 39485300.00 ns, 75.3122 ns/op
WorkloadActual 39: 524288 op, 42620100.00 ns, 81.2914 ns/op
WorkloadActual 40: 524288 op, 43928200.00 ns, 83.7864 ns/op
WorkloadActual 41: 524288 op, 43979100.00 ns, 83.8835 ns/op
WorkloadActual 42: 524288 op, 43079900.00 ns, 82.1684 ns/op
WorkloadResult 1: 524288 op, 44760600.00 ns, 85.3741 ns/op
WorkloadResult 2: 524288 op, 44827400.00 ns, 85.5015 ns/op
WorkloadResult 3: 524288 op, 41012100.00 ns, 78.2244 ns/op
WorkloadResult 4: 524288 op, 41438000.00 ns, 79.0367 ns/op
WorkloadResult 5: 524288 op, 42348800.00 ns, 80.7739 ns/op
WorkloadResult 6: 524288 op, 43418300.00 ns, 82.8138 ns/op
WorkloadResult 7: 524288 op, 39325000.00 ns, 75.0065 ns/op
WorkloadResult 8: 524288 op, 45356200.00 ns, 86.5101 ns/op
WorkloadResult 9: 524288 op, 42998000.00 ns, 82.0122 ns/op
WorkloadResult 10: 524288 op, 42543500.00 ns, 81.1453 ns/op
WorkloadResult 11: 524288 op, 42022000.00 ns, 80.1506 ns/op
WorkloadResult 12: 524288 op, 41589500.00 ns, 79.3257 ns/op
WorkloadResult 13: 524288 op, 41791200.00 ns, 79.7104 ns/op
WorkloadResult 14: 524288 op, 42871800.00 ns, 81.7715 ns/op
WorkloadResult 15: 524288 op, 43705600.00 ns, 83.3618 ns/op
WorkloadResult 16: 524288 op, 41635300.00 ns, 79.4130 ns/op
WorkloadResult 17: 524288 op, 43287500.00 ns, 82.5644 ns/op
WorkloadResult 18: 524288 op, 42481000.00 ns, 81.0261 ns/op
WorkloadResult 19: 524288 op, 40153100.00 ns, 76.5860 ns/op
WorkloadResult 20: 524288 op, 44237200.00 ns, 84.3758 ns/op
WorkloadResult 21: 524288 op, 43768000.00 ns, 83.4808 ns/op
WorkloadResult 22: 524288 op, 39950000.00 ns, 76.1986 ns/op
WorkloadResult 23: 524288 op, 44188100.00 ns, 84.2821 ns/op
WorkloadResult 24: 524288 op, 44841600.00 ns, 85.5286 ns/op
WorkloadResult 25: 524288 op, 45335600.00 ns, 86.4708 ns/op
WorkloadResult 26: 524288 op, 44310700.00 ns, 84.5160 ns/op
WorkloadResult 27: 524288 op, 43362900.00 ns, 82.7082 ns/op
WorkloadResult 28: 524288 op, 42334300.00 ns, 80.7463 ns/op
WorkloadResult 29: 524288 op, 44787900.00 ns, 85.4261 ns/op
WorkloadResult 30: 524288 op, 45292900.00 ns, 86.3894 ns/op
WorkloadResult 31: 524288 op, 43721400.00 ns, 83.3920 ns/op
WorkloadResult 32: 524288 op, 42627800.00 ns, 81.3061 ns/op
WorkloadResult 33: 524288 op, 41615000.00 ns, 79.3743 ns/op
WorkloadResult 34: 524288 op, 41327800.00 ns, 78.8265 ns/op
WorkloadResult 35: 524288 op, 42970000.00 ns, 81.9588 ns/op
WorkloadResult 36: 524288 op, 42666900.00 ns, 81.3807 ns/op
WorkloadResult 37: 524288 op, 42134100.00 ns, 80.3644 ns/op
WorkloadResult 38: 524288 op, 39485100.00 ns, 75.3119 ns/op
WorkloadResult 39: 524288 op, 42619900.00 ns, 81.2910 ns/op
WorkloadResult 40: 524288 op, 43928000.00 ns, 83.7860 ns/op
WorkloadResult 41: 524288 op, 43978900.00 ns, 83.8831 ns/op
WorkloadResult 42: 524288 op, 43079700.00 ns, 82.1680 ns/op
// GC: 0 0 0 624 524288
// Threading: 0 0 524288
Mean = 81.749 ns, StdErr = 0.460 ns (0.56%), N = 42, StdDev = 2.980 ns
Min = 75.006 ns, Q1 = 79.820 ns, Median = 81.865 ns, Q3 = 83.859 ns, Max = 86.510 ns
IQR = 4.038 ns, LowerFence = 73.763 ns, UpperFence = 89.916 ns
ConfidenceInterval = [80.119 ns; 83.379 ns] (CI 99.9%), Margin = 1.630 ns (1.99% of Mean)
Skewness = -0.38, Kurtosis = 2.5, MValue = 2
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 14:15 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 142.780 ns, StdErr = 0.681 ns (0.48%), N = 36, StdDev = 4.085 ns
Min = 136.346 ns, Q1 = 139.945 ns, Median = 142.200 ns, Q3 = 145.063 ns, Max = 151.168 ns
IQR = 5.119 ns, LowerFence = 132.267 ns, UpperFence = 152.741 ns
ConfidenceInterval = [140.335 ns; 145.226 ns] (CI 99.9%), Margin = 2.445 ns (1.71% of Mean)
Skewness = 0.5, Kurtosis = 2.26, MValue = 2
-------------------- Histogram --------------------
[135.958 ns ; 139.474 ns) | @@@@@@@
[139.474 ns ; 142.722 ns) | @@@@@@@@@@@@@@@
[142.722 ns ; 146.138 ns) | @@@@@@@
[146.138 ns ; 151.422 ns) | @@@@@@@
---------------------------------------------------
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 81.749 ns, StdErr = 0.460 ns (0.56%), N = 42, StdDev = 2.980 ns
Min = 75.006 ns, Q1 = 79.820 ns, Median = 81.865 ns, Q3 = 83.859 ns, Max = 86.510 ns
IQR = 4.038 ns, LowerFence = 73.763 ns, UpperFence = 89.916 ns
ConfidenceInterval = [80.119 ns; 83.379 ns] (CI 99.9%), Margin = 1.630 ns (1.99% of Mean)
Skewness = -0.38, Kurtosis = 2.5, MValue = 2
-------------------- Histogram --------------------
[74.671 ns ; 78.169 ns) | @@@@
[78.169 ns ; 80.655 ns) | @@@@@@@@@
[80.655 ns ; 83.320 ns) | @@@@@@@@@@@@@@
[83.320 ns ; 85.571 ns) | @@@@@@@@@@@@
[85.571 ns ; 87.636 ns) | @@@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |----------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | 142.78 ns | 2.445 ns | 4.085 ns | 1.75 | 0.08 | - | NA |
| Libc | 81.75 ns | 1.630 ns | 2.980 ns | 1.00 | 0.05 | - | NA |
// * Warnings *
MinIterationTime
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 71.485ms which is very small. It's recommended to increase it to at least 100ms using more operations.
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 39.325ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Hints *
Outliers
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 3 outliers were removed (156.44 ns..158.52 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:08 (8.71 sec), executed benchmarks: 2
Global total time: 00:00:09 (9.5 sec), executed benchmarks: 2
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,281 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 118100.00 ns, 0.2253 ns/op
WorkloadJitting 1: 524288 op, 362247300.00 ns, 690.9319 ns/op
OverheadWarmup 1: 524288 op, 1800.00 ns, 0.0034 ns/op
OverheadWarmup 2: 524288 op, 800.00 ns, 0.0015 ns/op
OverheadWarmup 3: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadWarmup 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 5: 524288 op, 700.00 ns, 0.0013 ns/op
OverheadWarmup 6: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadWarmup 7: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 8: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 1: 524288 op, 700.00 ns, 0.0013 ns/op
OverheadActual 2: 524288 op, 600.00 ns, 0.0011 ns/op
OverheadActual 3: 524288 op, 800.00 ns, 0.0015 ns/op
OverheadActual 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 5: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 9: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 10: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 11: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 12: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 13: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 14: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 15: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 16: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 17: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 18: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 19: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 20: 524288 op, 300.00 ns, 0.0006 ns/op
WorkloadWarmup 1: 524288 op, 261282000.00 ns, 498.3559 ns/op
WorkloadWarmup 2: 524288 op, 222119300.00 ns, 423.6589 ns/op
WorkloadWarmup 3: 524288 op, 224656200.00 ns, 428.4977 ns/op
WorkloadWarmup 4: 524288 op, 219228000.00 ns, 418.1442 ns/op
WorkloadWarmup 5: 524288 op, 230952400.00 ns, 440.5067 ns/op
WorkloadWarmup 6: 524288 op, 209467600.00 ns, 399.5277 ns/op
WorkloadActual 1: 524288 op, 230079600.00 ns, 438.8420 ns/op
WorkloadActual 2: 524288 op, 219833700.00 ns, 419.2995 ns/op
WorkloadActual 3: 524288 op, 191251500.00 ns, 364.7833 ns/op
WorkloadActual 4: 524288 op, 190933200.00 ns, 364.1762 ns/op
WorkloadActual 5: 524288 op, 187688700.00 ns, 357.9878 ns/op
WorkloadActual 6: 524288 op, 195972400.00 ns, 373.7877 ns/op
WorkloadActual 7: 524288 op, 187445100.00 ns, 357.5232 ns/op
WorkloadActual 8: 524288 op, 190997400.00 ns, 364.2986 ns/op
WorkloadActual 9: 524288 op, 191719100.00 ns, 365.6752 ns/op
WorkloadActual 10: 524288 op, 192303300.00 ns, 366.7894 ns/op
WorkloadActual 11: 524288 op, 186038000.00 ns, 354.8393 ns/op
WorkloadActual 12: 524288 op, 184847100.00 ns, 352.5679 ns/op
WorkloadActual 13: 524288 op, 192115100.00 ns, 366.4305 ns/op
WorkloadActual 14: 524288 op, 190557100.00 ns, 363.4588 ns/op
WorkloadActual 15: 524288 op, 189907400.00 ns, 362.2196 ns/op
WorkloadResult 1: 524288 op, 191251100.00 ns, 364.7825 ns/op
WorkloadResult 2: 524288 op, 190932800.00 ns, 364.1754 ns/op
WorkloadResult 3: 524288 op, 187688300.00 ns, 357.9870 ns/op
WorkloadResult 4: 524288 op, 195972000.00 ns, 373.7869 ns/op
WorkloadResult 5: 524288 op, 187444700.00 ns, 357.5224 ns/op
WorkloadResult 6: 524288 op, 190997000.00 ns, 364.2979 ns/op
WorkloadResult 7: 524288 op, 191718700.00 ns, 365.6744 ns/op
WorkloadResult 8: 524288 op, 192302900.00 ns, 366.7887 ns/op
WorkloadResult 9: 524288 op, 186037600.00 ns, 354.8386 ns/op
WorkloadResult 10: 524288 op, 184846700.00 ns, 352.5671 ns/op
WorkloadResult 11: 524288 op, 192114700.00 ns, 366.4297 ns/op
WorkloadResult 12: 524288 op, 190556700.00 ns, 363.4581 ns/op
WorkloadResult 13: 524288 op, 189907000.00 ns, 362.2189 ns/op
// GC: 0 0 0 0 524288
// Threading: 0 0 524288
Mean = 362.656 ns, StdErr = 1.572 ns (0.43%), N = 13, StdDev = 5.670 ns
Min = 352.567 ns, Q1 = 357.987 ns, Median = 364.175 ns, Q3 = 365.674 ns, Max = 373.787 ns
IQR = 7.687 ns, LowerFence = 346.456 ns, UpperFence = 377.205 ns
ConfidenceInterval = [355.866 ns; 369.446 ns] (CI 99.9%), Margin = 6.790 ns (1.87% of Mean)
Skewness = -0.08, Kurtosis = 2.32, MValue = 2
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 16:30 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 113200.00 ns, 0.2159 ns/op
WorkloadJitting 1: 524288 op, 193998300.00 ns, 370.0224 ns/op
OverheadWarmup 1: 524288 op, 1000.00 ns, 0.0019 ns/op
OverheadWarmup 2: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 6: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadWarmup 7: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 1: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 2: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 9: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 10: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 11: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 12: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 13: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 14: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 15: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 16: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 17: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 18: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 19: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 20: 524288 op, 200.00 ns, 0.0004 ns/op
WorkloadWarmup 1: 524288 op, 136176100.00 ns, 259.7353 ns/op
WorkloadWarmup 2: 524288 op, 62339100.00 ns, 118.9024 ns/op
WorkloadWarmup 3: 524288 op, 47576100.00 ns, 90.7442 ns/op
WorkloadWarmup 4: 524288 op, 47170000.00 ns, 89.9696 ns/op
WorkloadWarmup 5: 524288 op, 42901900.00 ns, 81.8289 ns/op
WorkloadWarmup 6: 524288 op, 46176000.00 ns, 88.0737 ns/op
WorkloadWarmup 7: 524288 op, 44997000.00 ns, 85.8250 ns/op
WorkloadWarmup 8: 524288 op, 41723200.00 ns, 79.5807 ns/op
WorkloadWarmup 9: 524288 op, 42964100.00 ns, 81.9475 ns/op
WorkloadWarmup 10: 524288 op, 44117900.00 ns, 84.1482 ns/op
WorkloadWarmup 11: 524288 op, 42704200.00 ns, 81.4518 ns/op
WorkloadActual 1: 524288 op, 42949100.00 ns, 81.9189 ns/op
WorkloadActual 2: 524288 op, 42231100.00 ns, 80.5494 ns/op
WorkloadActual 3: 524288 op, 44446600.00 ns, 84.7752 ns/op
WorkloadActual 4: 524288 op, 44677800.00 ns, 85.2161 ns/op
WorkloadActual 5: 524288 op, 43298000.00 ns, 82.5844 ns/op
WorkloadActual 6: 524288 op, 44244300.00 ns, 84.3893 ns/op
WorkloadActual 7: 524288 op, 44176500.00 ns, 84.2600 ns/op
WorkloadActual 8: 524288 op, 60064400.00 ns, 114.5638 ns/op
WorkloadActual 9: 524288 op, 65755600.00 ns, 125.4189 ns/op
WorkloadActual 10: 524288 op, 42845400.00 ns, 81.7211 ns/op
WorkloadActual 11: 524288 op, 47539500.00 ns, 90.6744 ns/op
WorkloadActual 12: 524288 op, 44916900.00 ns, 85.6722 ns/op
WorkloadActual 13: 524288 op, 44199900.00 ns, 84.3046 ns/op
WorkloadActual 14: 524288 op, 43254600.00 ns, 82.5016 ns/op
WorkloadActual 15: 524288 op, 43000000.00 ns, 82.0160 ns/op
WorkloadActual 16: 524288 op, 44285900.00 ns, 84.4687 ns/op
WorkloadActual 17: 524288 op, 44213600.00 ns, 84.3307 ns/op
WorkloadActual 18: 524288 op, 42392500.00 ns, 80.8573 ns/op
WorkloadActual 19: 524288 op, 44178700.00 ns, 84.2642 ns/op
WorkloadResult 1: 524288 op, 42948900.00 ns, 81.9185 ns/op
WorkloadResult 2: 524288 op, 42230900.00 ns, 80.5490 ns/op
WorkloadResult 3: 524288 op, 44446400.00 ns, 84.7748 ns/op
WorkloadResult 4: 524288 op, 44677600.00 ns, 85.2158 ns/op
WorkloadResult 5: 524288 op, 43297800.00 ns, 82.5840 ns/op
WorkloadResult 6: 524288 op, 44244100.00 ns, 84.3889 ns/op
WorkloadResult 7: 524288 op, 44176300.00 ns, 84.2596 ns/op
WorkloadResult 8: 524288 op, 42845200.00 ns, 81.7207 ns/op
WorkloadResult 9: 524288 op, 44916700.00 ns, 85.6718 ns/op
WorkloadResult 10: 524288 op, 44199700.00 ns, 84.3042 ns/op
WorkloadResult 11: 524288 op, 43254400.00 ns, 82.5012 ns/op
WorkloadResult 12: 524288 op, 42999800.00 ns, 82.0156 ns/op
WorkloadResult 13: 524288 op, 44285700.00 ns, 84.4683 ns/op
WorkloadResult 14: 524288 op, 44213400.00 ns, 84.3304 ns/op
WorkloadResult 15: 524288 op, 42392300.00 ns, 80.8569 ns/op
WorkloadResult 16: 524288 op, 44178500.00 ns, 84.2638 ns/op
// GC: 0 0 0 624 524288
// Threading: 0 0 524288
Mean = 83.364 ns, StdErr = 0.401 ns (0.48%), N = 16, StdDev = 1.604 ns
Min = 80.549 ns, Q1 = 81.991 ns, Median = 84.262 ns, Q3 = 84.409 ns, Max = 85.672 ns
IQR = 2.417 ns, LowerFence = 78.365 ns, UpperFence = 88.035 ns
ConfidenceInterval = [81.730 ns; 84.998 ns] (CI 99.9%), Margin = 1.634 ns (1.96% of Mean)
Skewness = -0.33, Kurtosis = 1.58, MValue = 2
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 16:30 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 362.656 ns, StdErr = 1.572 ns (0.43%), N = 13, StdDev = 5.670 ns
Min = 352.567 ns, Q1 = 357.987 ns, Median = 364.175 ns, Q3 = 365.674 ns, Max = 373.787 ns
IQR = 7.687 ns, LowerFence = 346.456 ns, UpperFence = 377.205 ns
ConfidenceInterval = [355.866 ns; 369.446 ns] (CI 99.9%), Margin = 6.790 ns (1.87% of Mean)
Skewness = -0.08, Kurtosis = 2.32, MValue = 2
-------------------- Histogram --------------------
[351.724 ns ; 360.859 ns) | @@@@
[360.859 ns ; 376.952 ns) | @@@@@@@@@
---------------------------------------------------
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 83.364 ns, StdErr = 0.401 ns (0.48%), N = 16, StdDev = 1.604 ns
Min = 80.549 ns, Q1 = 81.991 ns, Median = 84.262 ns, Q3 = 84.409 ns, Max = 85.672 ns
IQR = 2.417 ns, LowerFence = 78.365 ns, UpperFence = 88.035 ns
ConfidenceInterval = [81.730 ns; 84.998 ns] (CI 99.9%), Margin = 1.634 ns (1.96% of Mean)
Skewness = -0.33, Kurtosis = 1.58, MValue = 2
-------------------- Histogram --------------------
[79.713 ns ; 82.988 ns) | @@@@@@@
[82.988 ns ; 85.815 ns) | @@@@@@@@@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |----------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | 362.66 ns | 6.790 ns | 5.670 ns | 4.35 | 0.10 | - | NA |
| Libc | 83.36 ns | 1.634 ns | 1.604 ns | 1.00 | 0.03 | - | NA |
// * Warnings *
MinIterationTime
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 42.231ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Hints *
Outliers
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 2 outliers were removed (419.30 ns, 438.84 ns)
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 3 outliers were removed (90.67 ns..125.42 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:08 (8.94 sec), executed benchmarks: 2
Global total time: 00:00:09 (9.83 sec), executed benchmarks: 2
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,416 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 109000.00 ns, 0.2079 ns/op
WorkloadJitting 1: 524288 op, 277213100.00 ns, 528.7420 ns/op
OverheadWarmup 1: 524288 op, 1000.00 ns, 0.0019 ns/op
OverheadWarmup 2: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 1: 524288 op, 900.00 ns, 0.0017 ns/op
OverheadActual 2: 524288 op, 800.00 ns, 0.0015 ns/op
OverheadActual 3: 524288 op, 600.00 ns, 0.0011 ns/op
OverheadActual 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 9: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 10: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 11: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 12: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 13: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 14: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 15: 524288 op, 200.00 ns, 0.0004 ns/op
WorkloadWarmup 1: 524288 op, 192352000.00 ns, 366.8823 ns/op
WorkloadWarmup 2: 524288 op, 190580700.00 ns, 363.5038 ns/op
WorkloadWarmup 3: 524288 op, 185356900.00 ns, 353.5402 ns/op
WorkloadWarmup 4: 524288 op, 187840900.00 ns, 358.2781 ns/op
WorkloadWarmup 5: 524288 op, 185652600.00 ns, 354.1042 ns/op
WorkloadWarmup 6: 524288 op, 181298000.00 ns, 345.7985 ns/op
WorkloadWarmup 7: 524288 op, 183174500.00 ns, 349.3776 ns/op
WorkloadWarmup 8: 524288 op, 188295800.00 ns, 359.1457 ns/op
WorkloadWarmup 9: 524288 op, 183870300.00 ns, 350.7048 ns/op
WorkloadActual 1: 524288 op, 207343200.00 ns, 395.4758 ns/op
WorkloadActual 2: 524288 op, 182015400.00 ns, 347.1668 ns/op
WorkloadActual 3: 524288 op, 181097700.00 ns, 345.4165 ns/op
WorkloadActual 4: 524288 op, 188868000.00 ns, 360.2371 ns/op
WorkloadActual 5: 524288 op, 186466900.00 ns, 355.6574 ns/op
WorkloadActual 6: 524288 op, 179882700.00 ns, 343.0990 ns/op
WorkloadActual 7: 524288 op, 185142400.00 ns, 353.1311 ns/op
WorkloadActual 8: 524288 op, 180815100.00 ns, 344.8774 ns/op
WorkloadActual 9: 524288 op, 182246100.00 ns, 347.6068 ns/op
WorkloadActual 10: 524288 op, 181802900.00 ns, 346.7615 ns/op
WorkloadActual 11: 524288 op, 180365500.00 ns, 344.0199 ns/op
WorkloadActual 12: 524288 op, 196167400.00 ns, 374.1596 ns/op
WorkloadActual 13: 524288 op, 179815900.00 ns, 342.9716 ns/op
WorkloadActual 14: 524288 op, 180257400.00 ns, 343.8137 ns/op
WorkloadActual 15: 524288 op, 179158900.00 ns, 341.7185 ns/op
WorkloadResult 1: 524288 op, 182015200.00 ns, 347.1664 ns/op
WorkloadResult 2: 524288 op, 181097500.00 ns, 345.4161 ns/op
WorkloadResult 3: 524288 op, 188867800.00 ns, 360.2367 ns/op
WorkloadResult 4: 524288 op, 186466700.00 ns, 355.6570 ns/op
WorkloadResult 5: 524288 op, 179882500.00 ns, 343.0986 ns/op
WorkloadResult 6: 524288 op, 185142200.00 ns, 353.1307 ns/op
WorkloadResult 7: 524288 op, 180814900.00 ns, 344.8771 ns/op
WorkloadResult 8: 524288 op, 182245900.00 ns, 347.6065 ns/op
WorkloadResult 9: 524288 op, 181802700.00 ns, 346.7611 ns/op
WorkloadResult 10: 524288 op, 180365300.00 ns, 344.0195 ns/op
WorkloadResult 11: 524288 op, 179815700.00 ns, 342.9712 ns/op
WorkloadResult 12: 524288 op, 180257200.00 ns, 343.8133 ns/op
WorkloadResult 13: 524288 op, 179158700.00 ns, 341.7181 ns/op
// GC: 0 0 0 0 524288
// Threading: 0 0 524288
Mean = 347.421 ns, StdErr = 1.543 ns (0.44%), N = 13, StdDev = 5.562 ns
Min = 341.718 ns, Q1 = 343.813 ns, Median = 345.416 ns, Q3 = 347.606 ns, Max = 360.237 ns
IQR = 3.793 ns, LowerFence = 338.124 ns, UpperFence = 353.296 ns
ConfidenceInterval = [340.760 ns; 354.082 ns] (CI 99.9%), Margin = 6.661 ns (1.92% of Mean)
Skewness = 1.07, Kurtosis = 2.8, MValue = 2
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 16:30 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 105400.00 ns, 0.2010 ns/op
WorkloadJitting 1: 524288 op, 168283400.00 ns, 320.9751 ns/op
OverheadWarmup 1: 524288 op, 1100.00 ns, 0.0021 ns/op
OverheadWarmup 2: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadWarmup 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 1: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 2: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 9: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 10: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 11: 524288 op, 100.00 ns, 0.0002 ns/op
OverheadActual 12: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 13: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 14: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 15: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 16: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 17: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 18: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 19: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 20: 524288 op, 200.00 ns, 0.0004 ns/op
WorkloadWarmup 1: 524288 op, 150705000.00 ns, 287.4470 ns/op
WorkloadWarmup 2: 524288 op, 63909200.00 ns, 121.8971 ns/op
WorkloadWarmup 3: 524288 op, 43190600.00 ns, 82.3795 ns/op
WorkloadWarmup 4: 524288 op, 44031000.00 ns, 83.9825 ns/op
WorkloadWarmup 5: 524288 op, 44370700.00 ns, 84.6304 ns/op
WorkloadWarmup 6: 524288 op, 44177600.00 ns, 84.2621 ns/op
WorkloadWarmup 7: 524288 op, 45769000.00 ns, 87.2974 ns/op
WorkloadWarmup 8: 524288 op, 44222500.00 ns, 84.3477 ns/op
WorkloadActual 1: 524288 op, 46731800.00 ns, 89.1338 ns/op
WorkloadActual 2: 524288 op, 42714600.00 ns, 81.4716 ns/op
WorkloadActual 3: 524288 op, 43581800.00 ns, 83.1257 ns/op
WorkloadActual 4: 524288 op, 46662500.00 ns, 89.0017 ns/op
WorkloadActual 5: 524288 op, 42315500.00 ns, 80.7104 ns/op
WorkloadActual 6: 524288 op, 44748500.00 ns, 85.3510 ns/op
WorkloadActual 7: 524288 op, 41948800.00 ns, 80.0110 ns/op
WorkloadActual 8: 524288 op, 41482500.00 ns, 79.1216 ns/op
WorkloadActual 9: 524288 op, 41853500.00 ns, 79.8292 ns/op
WorkloadActual 10: 524288 op, 42577100.00 ns, 81.2094 ns/op
WorkloadActual 11: 524288 op, 43674200.00 ns, 83.3019 ns/op
WorkloadActual 12: 524288 op, 44280400.00 ns, 84.4582 ns/op
WorkloadActual 13: 524288 op, 46371300.00 ns, 88.4462 ns/op
WorkloadActual 14: 524288 op, 45367400.00 ns, 86.5314 ns/op
WorkloadActual 15: 524288 op, 47254100.00 ns, 90.1300 ns/op
WorkloadActual 16: 524288 op, 44862500.00 ns, 85.5684 ns/op
WorkloadActual 17: 524288 op, 43611400.00 ns, 83.1821 ns/op
WorkloadActual 18: 524288 op, 53393300.00 ns, 101.8396 ns/op
WorkloadActual 19: 524288 op, 44079800.00 ns, 84.0755 ns/op
WorkloadActual 20: 524288 op, 42983900.00 ns, 81.9853 ns/op
WorkloadActual 21: 524288 op, 41438700.00 ns, 79.0380 ns/op
WorkloadActual 22: 524288 op, 42927200.00 ns, 81.8771 ns/op
WorkloadActual 23: 524288 op, 44137500.00 ns, 84.1856 ns/op
WorkloadActual 24: 524288 op, 38009100.00 ns, 72.4966 ns/op
WorkloadActual 25: 524288 op, 38857400.00 ns, 74.1146 ns/op
WorkloadActual 26: 524288 op, 41548500.00 ns, 79.2475 ns/op
WorkloadActual 27: 524288 op, 38934800.00 ns, 74.2622 ns/op
WorkloadActual 28: 524288 op, 40722500.00 ns, 77.6720 ns/op
WorkloadActual 29: 524288 op, 41149600.00 ns, 78.4866 ns/op
WorkloadActual 30: 524288 op, 38797500.00 ns, 74.0004 ns/op
WorkloadActual 31: 524288 op, 37921800.00 ns, 72.3301 ns/op
WorkloadActual 32: 524288 op, 39932700.00 ns, 76.1656 ns/op
WorkloadActual 33: 524288 op, 41332400.00 ns, 78.8353 ns/op
WorkloadActual 34: 524288 op, 45421000.00 ns, 86.6337 ns/op
WorkloadActual 35: 524288 op, 38307800.00 ns, 73.0663 ns/op
WorkloadActual 36: 524288 op, 40402600.00 ns, 77.0618 ns/op
WorkloadActual 37: 524288 op, 44693200.00 ns, 85.2455 ns/op
WorkloadActual 38: 524288 op, 42630100.00 ns, 81.3105 ns/op
WorkloadActual 39: 524288 op, 37551900.00 ns, 71.6246 ns/op
WorkloadActual 40: 524288 op, 40584700.00 ns, 77.4092 ns/op
WorkloadActual 41: 524288 op, 37521300.00 ns, 71.5662 ns/op
WorkloadActual 42: 524288 op, 42117800.00 ns, 80.3333 ns/op
WorkloadActual 43: 524288 op, 41377700.00 ns, 78.9217 ns/op
WorkloadActual 44: 524288 op, 39474900.00 ns, 75.2924 ns/op
WorkloadActual 45: 524288 op, 40426700.00 ns, 77.1078 ns/op
WorkloadActual 46: 524288 op, 39300000.00 ns, 74.9588 ns/op
WorkloadActual 47: 524288 op, 42661400.00 ns, 81.3702 ns/op
WorkloadActual 48: 524288 op, 38718800.00 ns, 73.8503 ns/op
WorkloadActual 49: 524288 op, 41211400.00 ns, 78.6045 ns/op
WorkloadActual 50: 524288 op, 40978600.00 ns, 78.1605 ns/op
WorkloadActual 51: 524288 op, 39744500.00 ns, 75.8066 ns/op
WorkloadActual 52: 524288 op, 38842600.00 ns, 74.0864 ns/op
WorkloadActual 53: 524288 op, 38910900.00 ns, 74.2167 ns/op
WorkloadActual 54: 524288 op, 39885400.00 ns, 76.0754 ns/op
WorkloadActual 55: 524288 op, 39814400.00 ns, 75.9399 ns/op
WorkloadActual 56: 524288 op, 41937300.00 ns, 79.9891 ns/op
WorkloadActual 57: 524288 op, 42134600.00 ns, 80.3654 ns/op
WorkloadActual 58: 524288 op, 38301200.00 ns, 73.0537 ns/op
WorkloadActual 59: 524288 op, 42086300.00 ns, 80.2732 ns/op
WorkloadActual 60: 524288 op, 41222500.00 ns, 78.6257 ns/op
WorkloadActual 61: 524288 op, 41328300.00 ns, 78.8275 ns/op
WorkloadActual 62: 524288 op, 40509400.00 ns, 77.2655 ns/op
WorkloadActual 63: 524288 op, 39978400.00 ns, 76.2527 ns/op
WorkloadActual 64: 524288 op, 39838100.00 ns, 75.9851 ns/op
WorkloadActual 65: 524288 op, 38333600.00 ns, 73.1155 ns/op
WorkloadActual 66: 524288 op, 39932500.00 ns, 76.1652 ns/op
WorkloadActual 67: 524288 op, 40811600.00 ns, 77.8419 ns/op
WorkloadActual 68: 524288 op, 38750200.00 ns, 73.9101 ns/op
WorkloadActual 69: 524288 op, 40898100.00 ns, 78.0069 ns/op
WorkloadActual 70: 524288 op, 41990100.00 ns, 80.0898 ns/op
WorkloadActual 71: 524288 op, 40918200.00 ns, 78.0453 ns/op
WorkloadActual 72: 524288 op, 40010300.00 ns, 76.3136 ns/op
WorkloadActual 73: 524288 op, 42222400.00 ns, 80.5328 ns/op
WorkloadActual 74: 524288 op, 39622900.00 ns, 75.5747 ns/op
WorkloadActual 75: 524288 op, 40126600.00 ns, 76.5354 ns/op
WorkloadActual 76: 524288 op, 41612200.00 ns, 79.3690 ns/op
WorkloadActual 77: 524288 op, 55148600.00 ns, 105.1876 ns/op
WorkloadActual 78: 524288 op, 40925400.00 ns, 78.0590 ns/op
WorkloadActual 79: 524288 op, 40683600.00 ns, 77.5978 ns/op
WorkloadActual 80: 524288 op, 42620800.00 ns, 81.2927 ns/op
WorkloadActual 81: 524288 op, 50476500.00 ns, 96.2763 ns/op
WorkloadActual 82: 524288 op, 46461900.00 ns, 88.6190 ns/op
WorkloadActual 83: 524288 op, 42989000.00 ns, 81.9950 ns/op
WorkloadActual 84: 524288 op, 42728900.00 ns, 81.4989 ns/op
WorkloadActual 85: 524288 op, 39563700.00 ns, 75.4618 ns/op
WorkloadActual 86: 524288 op, 41526700.00 ns, 79.2059 ns/op
WorkloadActual 87: 524288 op, 40389200.00 ns, 77.0363 ns/op
WorkloadActual 88: 524288 op, 39835400.00 ns, 75.9800 ns/op
WorkloadActual 89: 524288 op, 40311300.00 ns, 76.8877 ns/op
WorkloadResult 1: 524288 op, 46731600.00 ns, 89.1335 ns/op
WorkloadResult 2: 524288 op, 42714400.00 ns, 81.4713 ns/op
WorkloadResult 3: 524288 op, 43581600.00 ns, 83.1253 ns/op
WorkloadResult 4: 524288 op, 46662300.00 ns, 89.0013 ns/op
WorkloadResult 5: 524288 op, 42315300.00 ns, 80.7100 ns/op
WorkloadResult 6: 524288 op, 44748300.00 ns, 85.3506 ns/op
WorkloadResult 7: 524288 op, 41948600.00 ns, 80.0106 ns/op
WorkloadResult 8: 524288 op, 41482300.00 ns, 79.1212 ns/op
WorkloadResult 9: 524288 op, 41853300.00 ns, 79.8288 ns/op
WorkloadResult 10: 524288 op, 42576900.00 ns, 81.2090 ns/op
WorkloadResult 11: 524288 op, 43674000.00 ns, 83.3015 ns/op
WorkloadResult 12: 524288 op, 44280200.00 ns, 84.4578 ns/op
WorkloadResult 13: 524288 op, 46371100.00 ns, 88.4459 ns/op
WorkloadResult 14: 524288 op, 45367200.00 ns, 86.5311 ns/op
WorkloadResult 15: 524288 op, 44862300.00 ns, 85.5680 ns/op
WorkloadResult 16: 524288 op, 43611200.00 ns, 83.1818 ns/op
WorkloadResult 17: 524288 op, 44079600.00 ns, 84.0752 ns/op
WorkloadResult 18: 524288 op, 42983700.00 ns, 81.9849 ns/op
WorkloadResult 19: 524288 op, 41438500.00 ns, 79.0377 ns/op
WorkloadResult 20: 524288 op, 42927000.00 ns, 81.8768 ns/op
WorkloadResult 21: 524288 op, 44137300.00 ns, 84.1852 ns/op
WorkloadResult 22: 524288 op, 38008900.00 ns, 72.4962 ns/op
WorkloadResult 23: 524288 op, 38857200.00 ns, 74.1142 ns/op
WorkloadResult 24: 524288 op, 41548300.00 ns, 79.2471 ns/op
WorkloadResult 25: 524288 op, 38934600.00 ns, 74.2619 ns/op
WorkloadResult 26: 524288 op, 40722300.00 ns, 77.6716 ns/op
WorkloadResult 27: 524288 op, 41149400.00 ns, 78.4863 ns/op
WorkloadResult 28: 524288 op, 38797300.00 ns, 74.0000 ns/op
WorkloadResult 29: 524288 op, 37921600.00 ns, 72.3297 ns/op
WorkloadResult 30: 524288 op, 39932500.00 ns, 76.1652 ns/op
WorkloadResult 31: 524288 op, 41332200.00 ns, 78.8349 ns/op
WorkloadResult 32: 524288 op, 45420800.00 ns, 86.6333 ns/op
WorkloadResult 33: 524288 op, 38307600.00 ns, 73.0659 ns/op
WorkloadResult 34: 524288 op, 40402400.00 ns, 77.0615 ns/op
WorkloadResult 35: 524288 op, 44693000.00 ns, 85.2451 ns/op
WorkloadResult 36: 524288 op, 42629900.00 ns, 81.3101 ns/op
WorkloadResult 37: 524288 op, 37551700.00 ns, 71.6242 ns/op
WorkloadResult 38: 524288 op, 40584500.00 ns, 77.4088 ns/op
WorkloadResult 39: 524288 op, 37521100.00 ns, 71.5658 ns/op
WorkloadResult 40: 524288 op, 42117600.00 ns, 80.3329 ns/op
WorkloadResult 41: 524288 op, 41377500.00 ns, 78.9213 ns/op
WorkloadResult 42: 524288 op, 39474700.00 ns, 75.2920 ns/op
WorkloadResult 43: 524288 op, 40426500.00 ns, 77.1074 ns/op
WorkloadResult 44: 524288 op, 39299800.00 ns, 74.9584 ns/op
WorkloadResult 45: 524288 op, 42661200.00 ns, 81.3698 ns/op
WorkloadResult 46: 524288 op, 38718600.00 ns, 73.8499 ns/op
WorkloadResult 47: 524288 op, 41211200.00 ns, 78.6041 ns/op
WorkloadResult 48: 524288 op, 40978400.00 ns, 78.1601 ns/op
WorkloadResult 49: 524288 op, 39744300.00 ns, 75.8062 ns/op
WorkloadResult 50: 524288 op, 38842400.00 ns, 74.0860 ns/op
WorkloadResult 51: 524288 op, 38910700.00 ns, 74.2163 ns/op
WorkloadResult 52: 524288 op, 39885200.00 ns, 76.0750 ns/op
WorkloadResult 53: 524288 op, 39814200.00 ns, 75.9396 ns/op
WorkloadResult 54: 524288 op, 41937100.00 ns, 79.9887 ns/op
WorkloadResult 55: 524288 op, 42134400.00 ns, 80.3650 ns/op
WorkloadResult 56: 524288 op, 38301000.00 ns, 73.0534 ns/op
WorkloadResult 57: 524288 op, 42086100.00 ns, 80.2729 ns/op
WorkloadResult 58: 524288 op, 41222300.00 ns, 78.6253 ns/op
WorkloadResult 59: 524288 op, 41328100.00 ns, 78.8271 ns/op
WorkloadResult 60: 524288 op, 40509200.00 ns, 77.2652 ns/op
WorkloadResult 61: 524288 op, 39978200.00 ns, 76.2524 ns/op
WorkloadResult 62: 524288 op, 39837900.00 ns, 75.9848 ns/op
WorkloadResult 63: 524288 op, 38333400.00 ns, 73.1152 ns/op
WorkloadResult 64: 524288 op, 39932300.00 ns, 76.1648 ns/op
WorkloadResult 65: 524288 op, 40811400.00 ns, 77.8416 ns/op
WorkloadResult 66: 524288 op, 38750000.00 ns, 73.9098 ns/op
WorkloadResult 67: 524288 op, 40897900.00 ns, 78.0066 ns/op
WorkloadResult 68: 524288 op, 41989900.00 ns, 80.0894 ns/op
WorkloadResult 69: 524288 op, 40918000.00 ns, 78.0449 ns/op
WorkloadResult 70: 524288 op, 40010100.00 ns, 76.3132 ns/op
WorkloadResult 71: 524288 op, 42222200.00 ns, 80.5325 ns/op
WorkloadResult 72: 524288 op, 39622700.00 ns, 75.5743 ns/op
WorkloadResult 73: 524288 op, 40126400.00 ns, 76.5350 ns/op
WorkloadResult 74: 524288 op, 41612000.00 ns, 79.3686 ns/op
WorkloadResult 75: 524288 op, 40925200.00 ns, 78.0586 ns/op
WorkloadResult 76: 524288 op, 40683400.00 ns, 77.5974 ns/op
WorkloadResult 77: 524288 op, 42620600.00 ns, 81.2923 ns/op
WorkloadResult 78: 524288 op, 46461700.00 ns, 88.6187 ns/op
WorkloadResult 79: 524288 op, 42988800.00 ns, 81.9946 ns/op
WorkloadResult 80: 524288 op, 42728700.00 ns, 81.4985 ns/op
WorkloadResult 81: 524288 op, 39563500.00 ns, 75.4614 ns/op
WorkloadResult 82: 524288 op, 41526500.00 ns, 79.2055 ns/op
WorkloadResult 83: 524288 op, 40389000.00 ns, 77.0359 ns/op
WorkloadResult 84: 524288 op, 39835200.00 ns, 75.9796 ns/op
WorkloadResult 85: 524288 op, 40311100.00 ns, 76.8873 ns/op
// GC: 0 0 0 624 524288
// Threading: 0 0 524288
Mean = 78.913 ns, StdErr = 0.454 ns (0.58%), N = 85, StdDev = 4.185 ns
Min = 71.566 ns, Q1 = 75.985 ns, Median = 78.604 ns, Q3 = 81.310 ns, Max = 89.133 ns
IQR = 5.325 ns, LowerFence = 67.997 ns, UpperFence = 89.298 ns
ConfidenceInterval = [77.365 ns; 80.461 ns] (CI 99.9%), Margin = 1.548 ns (1.96% of Mean)
Skewness = 0.53, Kurtosis = 2.78, MValue = 2
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 16:30 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 347.421 ns, StdErr = 1.543 ns (0.44%), N = 13, StdDev = 5.562 ns
Min = 341.718 ns, Q1 = 343.813 ns, Median = 345.416 ns, Q3 = 347.606 ns, Max = 360.237 ns
IQR = 3.793 ns, LowerFence = 338.124 ns, UpperFence = 353.296 ns
ConfidenceInterval = [340.760 ns; 354.082 ns] (CI 99.9%), Margin = 6.661 ns (1.92% of Mean)
Skewness = 1.07, Kurtosis = 2.8, MValue = 2
-------------------- Histogram --------------------
[341.216 ns ; 350.850 ns) | @@@@@@@@@@
[350.850 ns ; 363.342 ns) | @@@
---------------------------------------------------
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 78.913 ns, StdErr = 0.454 ns (0.58%), N = 85, StdDev = 4.185 ns
Min = 71.566 ns, Q1 = 75.985 ns, Median = 78.604 ns, Q3 = 81.310 ns, Max = 89.133 ns
IQR = 5.325 ns, LowerFence = 67.997 ns, UpperFence = 89.298 ns
ConfidenceInterval = [77.365 ns; 80.461 ns] (CI 99.9%), Margin = 1.548 ns (1.96% of Mean)
Skewness = 0.53, Kurtosis = 2.78, MValue = 2
-------------------- Histogram --------------------
[71.091 ns ; 73.832 ns) | @@@@@@@
[73.832 ns ; 76.331 ns) | @@@@@@@@@@@@@@@@@@@@
[76.331 ns ; 79.377 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@
[79.377 ns ; 82.161 ns) | @@@@@@@@@@@@@@@@@@
[82.161 ns ; 85.596 ns) | @@@@@@@@@
[85.596 ns ; 90.383 ns) | @@@@@@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |----------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | 347.42 ns | 6.661 ns | 5.562 ns | 4.41 | 0.24 | - | NA |
| Libc | 78.91 ns | 1.548 ns | 4.185 ns | 1.00 | 0.07 | - | NA |
// * Warnings *
MinIterationTime
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 37.521ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Hints *
Outliers
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 2 outliers were removed (374.16 ns, 395.48 ns)
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 4 outliers were removed (90.13 ns..105.19 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:12 (12.36 sec), executed benchmarks: 2
Global total time: 00:00:13 (13.11 sec), executed benchmarks: 2
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,392 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.03 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 158700.00 ns, 0.3027 ns/op
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.OverflowException: Out of memory: insufficient block size returned from spare memory.
at StgSharp.HighPerformance.Memory.HybridLayerSegregatedFitAllocator.Alloc(UIntPtr size)
at StgSharp.Benchmark.HlsfAllocatorBench.RunHlsf(Int32 batch, HybridLayerSegregatedFitAllocator allocator, FreePolicy policy)
at StgSharp.Benchmark.HlsfAllocatorBench.Hlsf()
at BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionUnroll(Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.Measure(Action`1 action, Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.RunIteration(IterationData data)
at BenchmarkDotNet.Engines.EngineFactory.Jit(Engine engine, Int32 jitIndex, Int32 invokeCount, Int32 unrollFactor)
at BenchmarkDotNet.Engines.EngineFactory.CreateReadyToRun(EngineParameters engineParameters)
at BenchmarkDotNet.Autogenerated.Runnable_0.Run(BenchmarkCase benchmarkCase, IHost host)
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
--- End of inner exception stack trace ---
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at BenchmarkDotNet.Toolchains.InProcess.Emit.Implementation.RunnableProgram.Run(BenchmarkId benchmarkId, Assembly partitionAssembly, BenchmarkCase benchmarkCase, IHost host)
Executable D:\platform-dev\StgSharp.Benchmark\bin\x64\PerformanceDebug\net8.0\StgSharp.Benchmark-Job-VLPMSV-1Emitted.dll not found
ExitCode != 0 and no results reported
No Workload Results were obtained from the run.
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 17:53 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 112300.00 ns, 0.2142 ns/op
WorkloadJitting 1: 524288 op, 282938900.00 ns, 539.6631 ns/op
OverheadWarmup 1: 524288 op, 1600.00 ns, 0.0031 ns/op
OverheadWarmup 2: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadWarmup 3: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadWarmup 4: 524288 op, 700.00 ns, 0.0013 ns/op
OverheadWarmup 5: 524288 op, 800.00 ns, 0.0015 ns/op
OverheadWarmup 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 7: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadWarmup 8: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 1: 524288 op, 600.00 ns, 0.0011 ns/op
OverheadActual 2: 524288 op, 900.00 ns, 0.0017 ns/op
OverheadActual 3: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 4: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 6: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 9: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 10: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 11: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 12: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 13: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 14: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 15: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 16: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 17: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 18: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 19: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 20: 524288 op, 200.00 ns, 0.0004 ns/op
WorkloadWarmup 1: 524288 op, 203550800.00 ns, 388.2423 ns/op
WorkloadWarmup 2: 524288 op, 75433700.00 ns, 143.8784 ns/op
WorkloadWarmup 3: 524288 op, 57207000.00 ns, 109.1137 ns/op
WorkloadWarmup 4: 524288 op, 54305200.00 ns, 103.5789 ns/op
WorkloadWarmup 5: 524288 op, 50096700.00 ns, 95.5519 ns/op
WorkloadWarmup 6: 524288 op, 50238500.00 ns, 95.8223 ns/op
WorkloadWarmup 7: 524288 op, 47626400.00 ns, 90.8401 ns/op
WorkloadWarmup 8: 524288 op, 45578900.00 ns, 86.9349 ns/op
WorkloadWarmup 9: 524288 op, 46404500.00 ns, 88.5096 ns/op
WorkloadWarmup 10: 524288 op, 45732200.00 ns, 87.2272 ns/op
WorkloadActual 1: 524288 op, 51532300.00 ns, 98.2901 ns/op
WorkloadActual 2: 524288 op, 62483800.00 ns, 119.1784 ns/op
WorkloadActual 3: 524288 op, 43758500.00 ns, 83.4627 ns/op
WorkloadActual 4: 524288 op, 41526400.00 ns, 79.2053 ns/op
WorkloadActual 5: 524288 op, 41275500.00 ns, 78.7268 ns/op
WorkloadActual 6: 524288 op, 46204600.00 ns, 88.1283 ns/op
WorkloadActual 7: 524288 op, 38803600.00 ns, 74.0120 ns/op
WorkloadActual 8: 524288 op, 48192800.00 ns, 91.9205 ns/op
WorkloadActual 9: 524288 op, 42154000.00 ns, 80.4024 ns/op
WorkloadActual 10: 524288 op, 47635600.00 ns, 90.8577 ns/op
WorkloadActual 11: 524288 op, 44029900.00 ns, 83.9804 ns/op
WorkloadActual 12: 524288 op, 43347400.00 ns, 82.6786 ns/op
WorkloadActual 13: 524288 op, 43926600.00 ns, 83.7833 ns/op
WorkloadActual 14: 524288 op, 37980100.00 ns, 72.4413 ns/op
WorkloadActual 15: 524288 op, 38802900.00 ns, 74.0107 ns/op
WorkloadActual 16: 524288 op, 40905200.00 ns, 78.0205 ns/op
WorkloadActual 17: 524288 op, 39616500.00 ns, 75.5625 ns/op
WorkloadActual 18: 524288 op, 44513800.00 ns, 84.9033 ns/op
WorkloadActual 19: 524288 op, 40492800.00 ns, 77.2339 ns/op
WorkloadActual 20: 524288 op, 40236000.00 ns, 76.7441 ns/op
WorkloadActual 21: 524288 op, 45854900.00 ns, 87.4613 ns/op
WorkloadActual 22: 524288 op, 43222900.00 ns, 82.4411 ns/op
WorkloadActual 23: 524288 op, 43253600.00 ns, 82.4997 ns/op
WorkloadActual 24: 524288 op, 40747300.00 ns, 77.7193 ns/op
WorkloadActual 25: 524288 op, 38060000.00 ns, 72.5937 ns/op
WorkloadActual 26: 524288 op, 49260700.00 ns, 93.9573 ns/op
WorkloadActual 27: 524288 op, 40123900.00 ns, 76.5303 ns/op
WorkloadActual 28: 524288 op, 40088700.00 ns, 76.4631 ns/op
WorkloadActual 29: 524288 op, 44342900.00 ns, 84.5774 ns/op
WorkloadActual 30: 524288 op, 40322600.00 ns, 76.9093 ns/op
WorkloadActual 31: 524288 op, 38524400.00 ns, 73.4795 ns/op
WorkloadActual 32: 524288 op, 38632600.00 ns, 73.6858 ns/op
WorkloadActual 33: 524288 op, 42580800.00 ns, 81.2164 ns/op
WorkloadActual 34: 524288 op, 38863300.00 ns, 74.1259 ns/op
WorkloadActual 35: 524288 op, 39206900.00 ns, 74.7812 ns/op
WorkloadActual 36: 524288 op, 40001100.00 ns, 76.2960 ns/op
WorkloadActual 37: 524288 op, 42873700.00 ns, 81.7751 ns/op
WorkloadActual 38: 524288 op, 41807000.00 ns, 79.7405 ns/op
WorkloadActual 39: 524288 op, 44323800.00 ns, 84.5409 ns/op
WorkloadActual 40: 524288 op, 43602600.00 ns, 83.1654 ns/op
WorkloadActual 41: 524288 op, 43524100.00 ns, 83.0156 ns/op
WorkloadActual 42: 524288 op, 42963200.00 ns, 81.9458 ns/op
WorkloadActual 43: 524288 op, 43123500.00 ns, 82.2515 ns/op
WorkloadActual 44: 524288 op, 41645900.00 ns, 79.4333 ns/op
WorkloadActual 45: 524288 op, 39457200.00 ns, 75.2586 ns/op
WorkloadActual 46: 524288 op, 41472300.00 ns, 79.1021 ns/op
WorkloadActual 47: 524288 op, 52368600.00 ns, 99.8852 ns/op
WorkloadActual 48: 524288 op, 42546200.00 ns, 81.1504 ns/op
WorkloadActual 49: 524288 op, 38418300.00 ns, 73.2771 ns/op
WorkloadActual 50: 524288 op, 40549400.00 ns, 77.3418 ns/op
WorkloadActual 51: 524288 op, 43907900.00 ns, 83.7477 ns/op
WorkloadActual 52: 524288 op, 43076200.00 ns, 82.1613 ns/op
WorkloadActual 53: 524288 op, 41058300.00 ns, 78.3125 ns/op
WorkloadActual 54: 524288 op, 41587800.00 ns, 79.3224 ns/op
WorkloadActual 55: 524288 op, 41399800.00 ns, 78.9639 ns/op
WorkloadActual 56: 524288 op, 39337900.00 ns, 75.0311 ns/op
WorkloadActual 57: 524288 op, 36633700.00 ns, 69.8732 ns/op
WorkloadActual 58: 524288 op, 39413000.00 ns, 75.1743 ns/op
WorkloadActual 59: 524288 op, 41877700.00 ns, 79.8754 ns/op
WorkloadActual 60: 524288 op, 38206800.00 ns, 72.8737 ns/op
WorkloadActual 61: 524288 op, 37522300.00 ns, 71.5681 ns/op
WorkloadActual 62: 524288 op, 41227400.00 ns, 78.6350 ns/op
WorkloadActual 63: 524288 op, 38965500.00 ns, 74.3208 ns/op
WorkloadActual 64: 524288 op, 46424400.00 ns, 88.5475 ns/op
WorkloadActual 65: 524288 op, 39323300.00 ns, 75.0032 ns/op
WorkloadActual 66: 524288 op, 40388800.00 ns, 77.0355 ns/op
WorkloadActual 67: 524288 op, 36990700.00 ns, 70.5542 ns/op
WorkloadActual 68: 524288 op, 39161300.00 ns, 74.6943 ns/op
WorkloadActual 69: 524288 op, 40079900.00 ns, 76.4463 ns/op
WorkloadActual 70: 524288 op, 41903300.00 ns, 79.9242 ns/op
WorkloadActual 71: 524288 op, 39337800.00 ns, 75.0309 ns/op
WorkloadActual 72: 524288 op, 43974300.00 ns, 83.8743 ns/op
WorkloadActual 73: 524288 op, 42499000.00 ns, 81.0604 ns/op
WorkloadActual 74: 524288 op, 41748800.00 ns, 79.6295 ns/op
WorkloadActual 75: 524288 op, 40434600.00 ns, 77.1229 ns/op
WorkloadActual 76: 524288 op, 41375000.00 ns, 78.9165 ns/op
WorkloadActual 77: 524288 op, 42255100.00 ns, 80.5952 ns/op
WorkloadActual 78: 524288 op, 44473100.00 ns, 84.8257 ns/op
WorkloadActual 79: 524288 op, 44029100.00 ns, 83.9788 ns/op
WorkloadActual 80: 524288 op, 42709100.00 ns, 81.4611 ns/op
WorkloadActual 81: 524288 op, 40423200.00 ns, 77.1011 ns/op
WorkloadActual 82: 524288 op, 40002000.00 ns, 76.2978 ns/op
WorkloadActual 83: 524288 op, 41108000.00 ns, 78.4073 ns/op
WorkloadActual 84: 524288 op, 39557500.00 ns, 75.4499 ns/op
WorkloadActual 85: 524288 op, 41994400.00 ns, 80.0980 ns/op
WorkloadActual 86: 524288 op, 39806300.00 ns, 75.9245 ns/op
WorkloadActual 87: 524288 op, 38232600.00 ns, 72.9229 ns/op
WorkloadActual 88: 524288 op, 39345800.00 ns, 75.0462 ns/op
WorkloadActual 89: 524288 op, 43241600.00 ns, 82.4768 ns/op
WorkloadActual 90: 524288 op, 40044200.00 ns, 76.3783 ns/op
WorkloadActual 91: 524288 op, 42783800.00 ns, 81.6036 ns/op
WorkloadActual 92: 524288 op, 45928700.00 ns, 87.6020 ns/op
WorkloadActual 93: 524288 op, 42584400.00 ns, 81.2233 ns/op
WorkloadActual 94: 524288 op, 39979300.00 ns, 76.2545 ns/op
WorkloadActual 95: 524288 op, 42005300.00 ns, 80.1188 ns/op
WorkloadActual 96: 524288 op, 43468400.00 ns, 82.9094 ns/op
WorkloadActual 97: 524288 op, 45171800.00 ns, 86.1584 ns/op
WorkloadActual 98: 524288 op, 42725100.00 ns, 81.4917 ns/op
WorkloadActual 99: 524288 op, 43682300.00 ns, 83.3174 ns/op
WorkloadResult 1: 524288 op, 43758300.00 ns, 83.4623 ns/op
WorkloadResult 2: 524288 op, 41526200.00 ns, 79.2049 ns/op
WorkloadResult 3: 524288 op, 41275300.00 ns, 78.7264 ns/op
WorkloadResult 4: 524288 op, 46204400.00 ns, 88.1279 ns/op
WorkloadResult 5: 524288 op, 38803400.00 ns, 74.0116 ns/op
WorkloadResult 6: 524288 op, 48192600.00 ns, 91.9201 ns/op
WorkloadResult 7: 524288 op, 42153800.00 ns, 80.4020 ns/op
WorkloadResult 8: 524288 op, 47635400.00 ns, 90.8573 ns/op
WorkloadResult 9: 524288 op, 44029700.00 ns, 83.9800 ns/op
WorkloadResult 10: 524288 op, 43347200.00 ns, 82.6782 ns/op
WorkloadResult 11: 524288 op, 43926400.00 ns, 83.7830 ns/op
WorkloadResult 12: 524288 op, 37979900.00 ns, 72.4409 ns/op
WorkloadResult 13: 524288 op, 38802700.00 ns, 74.0103 ns/op
WorkloadResult 14: 524288 op, 40905000.00 ns, 78.0201 ns/op
WorkloadResult 15: 524288 op, 39616300.00 ns, 75.5621 ns/op
WorkloadResult 16: 524288 op, 44513600.00 ns, 84.9030 ns/op
WorkloadResult 17: 524288 op, 40492600.00 ns, 77.2335 ns/op
WorkloadResult 18: 524288 op, 40235800.00 ns, 76.7437 ns/op
WorkloadResult 19: 524288 op, 45854700.00 ns, 87.4609 ns/op
WorkloadResult 20: 524288 op, 43222700.00 ns, 82.4408 ns/op
WorkloadResult 21: 524288 op, 43253400.00 ns, 82.4993 ns/op
WorkloadResult 22: 524288 op, 40747100.00 ns, 77.7189 ns/op
WorkloadResult 23: 524288 op, 38059800.00 ns, 72.5933 ns/op
WorkloadResult 24: 524288 op, 40123700.00 ns, 76.5299 ns/op
WorkloadResult 25: 524288 op, 40088500.00 ns, 76.4627 ns/op
WorkloadResult 26: 524288 op, 44342700.00 ns, 84.5770 ns/op
WorkloadResult 27: 524288 op, 40322400.00 ns, 76.9089 ns/op
WorkloadResult 28: 524288 op, 38524200.00 ns, 73.4791 ns/op
WorkloadResult 29: 524288 op, 38632400.00 ns, 73.6855 ns/op
WorkloadResult 30: 524288 op, 42580600.00 ns, 81.2160 ns/op
WorkloadResult 31: 524288 op, 38863100.00 ns, 74.1255 ns/op
WorkloadResult 32: 524288 op, 39206700.00 ns, 74.7808 ns/op
WorkloadResult 33: 524288 op, 40000900.00 ns, 76.2957 ns/op
WorkloadResult 34: 524288 op, 42873500.00 ns, 81.7747 ns/op
WorkloadResult 35: 524288 op, 41806800.00 ns, 79.7401 ns/op
WorkloadResult 36: 524288 op, 44323600.00 ns, 84.5406 ns/op
WorkloadResult 37: 524288 op, 43602400.00 ns, 83.1650 ns/op
WorkloadResult 38: 524288 op, 43523900.00 ns, 83.0153 ns/op
WorkloadResult 39: 524288 op, 42963000.00 ns, 81.9454 ns/op
WorkloadResult 40: 524288 op, 43123300.00 ns, 82.2512 ns/op
WorkloadResult 41: 524288 op, 41645700.00 ns, 79.4329 ns/op
WorkloadResult 42: 524288 op, 39457000.00 ns, 75.2583 ns/op
WorkloadResult 43: 524288 op, 41472100.00 ns, 79.1018 ns/op
WorkloadResult 44: 524288 op, 42546000.00 ns, 81.1501 ns/op
WorkloadResult 45: 524288 op, 38418100.00 ns, 73.2767 ns/op
WorkloadResult 46: 524288 op, 40549200.00 ns, 77.3415 ns/op
WorkloadResult 47: 524288 op, 43907700.00 ns, 83.7473 ns/op
WorkloadResult 48: 524288 op, 43076000.00 ns, 82.1609 ns/op
WorkloadResult 49: 524288 op, 41058100.00 ns, 78.3121 ns/op
WorkloadResult 50: 524288 op, 41587600.00 ns, 79.3221 ns/op
WorkloadResult 51: 524288 op, 41399600.00 ns, 78.9635 ns/op
WorkloadResult 52: 524288 op, 39337700.00 ns, 75.0307 ns/op
WorkloadResult 53: 524288 op, 36633500.00 ns, 69.8729 ns/op
WorkloadResult 54: 524288 op, 39412800.00 ns, 75.1740 ns/op
WorkloadResult 55: 524288 op, 41877500.00 ns, 79.8750 ns/op
WorkloadResult 56: 524288 op, 38206600.00 ns, 72.8733 ns/op
WorkloadResult 57: 524288 op, 37522100.00 ns, 71.5677 ns/op
WorkloadResult 58: 524288 op, 41227200.00 ns, 78.6346 ns/op
WorkloadResult 59: 524288 op, 38965300.00 ns, 74.3204 ns/op
WorkloadResult 60: 524288 op, 46424200.00 ns, 88.5471 ns/op
WorkloadResult 61: 524288 op, 39323100.00 ns, 75.0029 ns/op
WorkloadResult 62: 524288 op, 40388600.00 ns, 77.0351 ns/op
WorkloadResult 63: 524288 op, 36990500.00 ns, 70.5538 ns/op
WorkloadResult 64: 524288 op, 39161100.00 ns, 74.6939 ns/op
WorkloadResult 65: 524288 op, 40079700.00 ns, 76.4460 ns/op
WorkloadResult 66: 524288 op, 41903100.00 ns, 79.9238 ns/op
WorkloadResult 67: 524288 op, 39337600.00 ns, 75.0305 ns/op
WorkloadResult 68: 524288 op, 43974100.00 ns, 83.8739 ns/op
WorkloadResult 69: 524288 op, 42498800.00 ns, 81.0600 ns/op
WorkloadResult 70: 524288 op, 41748600.00 ns, 79.6291 ns/op
WorkloadResult 71: 524288 op, 40434400.00 ns, 77.1225 ns/op
WorkloadResult 72: 524288 op, 41374800.00 ns, 78.9162 ns/op
WorkloadResult 73: 524288 op, 42254900.00 ns, 80.5948 ns/op
WorkloadResult 74: 524288 op, 44472900.00 ns, 84.8253 ns/op
WorkloadResult 75: 524288 op, 44028900.00 ns, 83.9785 ns/op
WorkloadResult 76: 524288 op, 42708900.00 ns, 81.4608 ns/op
WorkloadResult 77: 524288 op, 40423000.00 ns, 77.1008 ns/op
WorkloadResult 78: 524288 op, 40001800.00 ns, 76.2974 ns/op
WorkloadResult 79: 524288 op, 41107800.00 ns, 78.4069 ns/op
WorkloadResult 80: 524288 op, 39557300.00 ns, 75.4496 ns/op
WorkloadResult 81: 524288 op, 41994200.00 ns, 80.0976 ns/op
WorkloadResult 82: 524288 op, 39806100.00 ns, 75.9241 ns/op
WorkloadResult 83: 524288 op, 38232400.00 ns, 72.9225 ns/op
WorkloadResult 84: 524288 op, 39345600.00 ns, 75.0458 ns/op
WorkloadResult 85: 524288 op, 43241400.00 ns, 82.4764 ns/op
WorkloadResult 86: 524288 op, 40044000.00 ns, 76.3779 ns/op
WorkloadResult 87: 524288 op, 42783600.00 ns, 81.6032 ns/op
WorkloadResult 88: 524288 op, 45928500.00 ns, 87.6017 ns/op
WorkloadResult 89: 524288 op, 42584200.00 ns, 81.2229 ns/op
WorkloadResult 90: 524288 op, 39979100.00 ns, 76.2541 ns/op
WorkloadResult 91: 524288 op, 42005100.00 ns, 80.1184 ns/op
WorkloadResult 92: 524288 op, 43468200.00 ns, 82.9090 ns/op
WorkloadResult 93: 524288 op, 45171600.00 ns, 86.1580 ns/op
WorkloadResult 94: 524288 op, 42724900.00 ns, 81.4913 ns/op
WorkloadResult 95: 524288 op, 43682100.00 ns, 83.3170 ns/op
// GC: 0 0 0 0 524288
// Threading: 0 0 524288
Mean = 79.244 ns, StdErr = 0.466 ns (0.59%), N = 95, StdDev = 4.542 ns
Min = 69.873 ns, Q1 = 75.743 ns, Median = 79.102 ns, Q3 = 82.459 ns, Max = 91.920 ns
IQR = 6.715 ns, LowerFence = 65.670 ns, UpperFence = 92.532 ns
ConfidenceInterval = [77.661 ns; 80.827 ns] (CI 99.9%), Margin = 1.583 ns (2.00% of Mean)
Skewness = 0.36, Kurtosis = 2.76, MValue = 2.24
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 17:53 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
There are not any results runs
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 79.244 ns, StdErr = 0.466 ns (0.59%), N = 95, StdDev = 4.542 ns
Min = 69.873 ns, Q1 = 75.743 ns, Median = 79.102 ns, Q3 = 82.459 ns, Max = 91.920 ns
IQR = 6.715 ns, LowerFence = 65.670 ns, UpperFence = 92.532 ns
ConfidenceInterval = [77.661 ns; 80.827 ns] (CI 99.9%), Margin = 1.583 ns (2.00% of Mean)
Skewness = 0.36, Kurtosis = 2.76, MValue = 2.24
-------------------- Histogram --------------------
[69.414 ns ; 72.074 ns) | @@@
[72.074 ns ; 74.657 ns) | @@@@@@@@@@@
[74.657 ns ; 78.622 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[78.622 ns ; 81.414 ns) | @@@@@@@@@@@@@@@@@@@@
[81.414 ns ; 84.027 ns) | @@@@@@@@@@@@@@@@@@@@@
[84.027 ns ; 86.656 ns) | @@@@@
[86.656 ns ; 89.311 ns) | @@@@
[89.311 ns ; 92.695 ns) | @@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |---------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | NA | NA | NA | ? | ? | NA | ? |
| Libc | 79.24 ns | 1.583 ns | 4.542 ns | 1.00 | 0.08 | - | NA |
Benchmarks with issues:
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// * Warnings *
Environment
Summary -> Detected error exit code from one of the benchmarks. It might be caused by following antivirus software:
- Windows Defender (windowsdefender://)
Use InProcessEmitToolchain or InProcessNoEmitToolchain to avoid new process creation.
BaselineCustomAnalyzer
Summary -> A question mark '?' symbol indicates that it was not possible to compute the (Ratio, RatioSD, Alloc Ratio) column(s) because the baseline or benchmark could not be found, or the baseline value is too close to zero.
MinIterationTime
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 36.634ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Hints *
Outliers
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 4 outliers were removed (93.96 ns..119.18 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:07 (7.14 sec), executed benchmarks: 1
Global total time: 00:00:08 (8.07 sec), executed benchmarks: 1
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,323 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.04 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 164900.00 ns, 0.3145 ns/op
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.OverflowException: Out of memory: insufficient block size returned from spare memory.
at StgSharp.HighPerformance.Memory.HybridLayerSegregatedFitAllocator.Alloc(UIntPtr size)
at StgSharp.Benchmark.HlsfAllocatorBench.RunHlsf(Int32 batch, HybridLayerSegregatedFitAllocator allocator, FreePolicy policy)
at StgSharp.Benchmark.HlsfAllocatorBench.Hlsf()
at BenchmarkDotNet.Autogenerated.Runnable_0.WorkloadActionUnroll(Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.Measure(Action`1 action, Int64 invokeCount)
at BenchmarkDotNet.Engines.Engine.RunIteration(IterationData data)
at BenchmarkDotNet.Engines.EngineFactory.Jit(Engine engine, Int32 jitIndex, Int32 invokeCount, Int32 unrollFactor)
at BenchmarkDotNet.Engines.EngineFactory.CreateReadyToRun(EngineParameters engineParameters)
at BenchmarkDotNet.Autogenerated.Runnable_0.Run(BenchmarkCase benchmarkCase, IHost host)
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
--- End of inner exception stack trace ---
at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)
at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at BenchmarkDotNet.Toolchains.InProcess.Emit.Implementation.RunnableProgram.Run(BenchmarkId benchmarkId, Assembly partitionAssembly, BenchmarkCase benchmarkCase, IHost host)
Executable D:\platform-dev\StgSharp.Benchmark\bin\x64\PerformanceDebug\net8.0\StgSharp.Benchmark-Job-VLPMSV-1Emitted.dll not found
ExitCode != 0 and no results reported
No Workload Results were obtained from the run.
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 17:57 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 119700.00 ns, 0.2283 ns/op
WorkloadJitting 1: 524288 op, 261154100.00 ns, 498.1119 ns/op
OverheadWarmup 1: 524288 op, 2100.00 ns, 0.0040 ns/op
OverheadWarmup 2: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadWarmup 3: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 5: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 7: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 1: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 2: 524288 op, 600.00 ns, 0.0011 ns/op
OverheadActual 3: 524288 op, 900.00 ns, 0.0017 ns/op
OverheadActual 4: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 5: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 6: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 9: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 10: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 11: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 12: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 13: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 14: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 15: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 16: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 17: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 18: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 19: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 20: 524288 op, 500.00 ns, 0.0010 ns/op
WorkloadWarmup 1: 524288 op, 232156800.00 ns, 442.8040 ns/op
WorkloadWarmup 2: 524288 op, 101291700.00 ns, 193.1986 ns/op
WorkloadWarmup 3: 524288 op, 55157600.00 ns, 105.2048 ns/op
WorkloadWarmup 4: 524288 op, 58533200.00 ns, 111.6432 ns/op
WorkloadWarmup 5: 524288 op, 70997300.00 ns, 135.4166 ns/op
WorkloadWarmup 6: 524288 op, 65011400.00 ns, 123.9994 ns/op
WorkloadWarmup 7: 524288 op, 61015000.00 ns, 116.3769 ns/op
WorkloadWarmup 8: 524288 op, 58458900.00 ns, 111.5015 ns/op
WorkloadWarmup 9: 524288 op, 53588400.00 ns, 102.2118 ns/op
WorkloadWarmup 10: 524288 op, 55418100.00 ns, 105.7016 ns/op
WorkloadWarmup 11: 524288 op, 56434100.00 ns, 107.6395 ns/op
WorkloadWarmup 12: 524288 op, 56056700.00 ns, 106.9197 ns/op
WorkloadActual 1: 524288 op, 56035200.00 ns, 106.8787 ns/op
WorkloadActual 2: 524288 op, 55319100.00 ns, 105.5128 ns/op
WorkloadActual 3: 524288 op, 60177300.00 ns, 114.7791 ns/op
WorkloadActual 4: 524288 op, 59395600.00 ns, 113.2881 ns/op
WorkloadActual 5: 524288 op, 49096700.00 ns, 93.6445 ns/op
WorkloadActual 6: 524288 op, 46569800.00 ns, 88.8248 ns/op
WorkloadActual 7: 524288 op, 49716000.00 ns, 94.8257 ns/op
WorkloadActual 8: 524288 op, 49313800.00 ns, 94.0586 ns/op
WorkloadActual 9: 524288 op, 49337100.00 ns, 94.1031 ns/op
WorkloadActual 10: 524288 op, 49834900.00 ns, 95.0525 ns/op
WorkloadActual 11: 524288 op, 48532900.00 ns, 92.5692 ns/op
WorkloadActual 12: 524288 op, 48949000.00 ns, 93.3628 ns/op
WorkloadActual 13: 524288 op, 53338000.00 ns, 101.7342 ns/op
WorkloadActual 14: 524288 op, 50492400.00 ns, 96.3066 ns/op
WorkloadActual 15: 524288 op, 49630400.00 ns, 94.6625 ns/op
WorkloadActual 16: 524288 op, 50724300.00 ns, 96.7489 ns/op
WorkloadActual 17: 524288 op, 72301100.00 ns, 137.9034 ns/op
WorkloadActual 18: 524288 op, 52940500.00 ns, 100.9760 ns/op
WorkloadActual 19: 524288 op, 51501600.00 ns, 98.2315 ns/op
WorkloadActual 20: 524288 op, 49700000.00 ns, 94.7952 ns/op
WorkloadActual 21: 524288 op, 50208600.00 ns, 95.7653 ns/op
WorkloadActual 22: 524288 op, 47051700.00 ns, 89.7440 ns/op
WorkloadActual 23: 524288 op, 51822600.00 ns, 98.8438 ns/op
WorkloadActual 24: 524288 op, 46852600.00 ns, 89.3642 ns/op
WorkloadActual 25: 524288 op, 51565400.00 ns, 98.3532 ns/op
WorkloadActual 26: 524288 op, 49218700.00 ns, 93.8772 ns/op
WorkloadActual 27: 524288 op, 45966400.00 ns, 87.6740 ns/op
WorkloadActual 28: 524288 op, 48984700.00 ns, 93.4309 ns/op
WorkloadActual 29: 524288 op, 50667400.00 ns, 96.6404 ns/op
WorkloadActual 30: 524288 op, 47839700.00 ns, 91.2470 ns/op
WorkloadActual 31: 524288 op, 47379600.00 ns, 90.3694 ns/op
WorkloadActual 32: 524288 op, 47219000.00 ns, 90.0631 ns/op
WorkloadActual 33: 524288 op, 47992300.00 ns, 91.5380 ns/op
WorkloadActual 34: 524288 op, 47621200.00 ns, 90.8302 ns/op
WorkloadActual 35: 524288 op, 46254500.00 ns, 88.2235 ns/op
WorkloadActual 36: 524288 op, 49441400.00 ns, 94.3020 ns/op
WorkloadActual 37: 524288 op, 50744200.00 ns, 96.7869 ns/op
WorkloadActual 38: 524288 op, 43622700.00 ns, 83.2037 ns/op
WorkloadActual 39: 524288 op, 46955200.00 ns, 89.5599 ns/op
WorkloadActual 40: 524288 op, 45042600.00 ns, 85.9119 ns/op
WorkloadActual 41: 524288 op, 47271700.00 ns, 90.1636 ns/op
WorkloadActual 42: 524288 op, 46877000.00 ns, 89.4108 ns/op
WorkloadActual 43: 524288 op, 44576500.00 ns, 85.0229 ns/op
WorkloadActual 44: 524288 op, 50367100.00 ns, 96.0676 ns/op
WorkloadActual 45: 524288 op, 47948600.00 ns, 91.4547 ns/op
WorkloadActual 46: 524288 op, 48267000.00 ns, 92.0620 ns/op
WorkloadActual 47: 524288 op, 46292100.00 ns, 88.2952 ns/op
WorkloadActual 48: 524288 op, 47918200.00 ns, 91.3967 ns/op
WorkloadActual 49: 524288 op, 48392000.00 ns, 92.3004 ns/op
WorkloadActual 50: 524288 op, 46562300.00 ns, 88.8105 ns/op
WorkloadActual 51: 524288 op, 46230000.00 ns, 88.1767 ns/op
WorkloadActual 52: 524288 op, 46164800.00 ns, 88.0524 ns/op
WorkloadActual 53: 524288 op, 46454200.00 ns, 88.6044 ns/op
WorkloadActual 54: 524288 op, 50142900.00 ns, 95.6400 ns/op
WorkloadActual 55: 524288 op, 50885900.00 ns, 97.0572 ns/op
WorkloadActual 56: 524288 op, 47252300.00 ns, 90.1266 ns/op
WorkloadActual 57: 524288 op, 46803800.00 ns, 89.2712 ns/op
WorkloadActual 58: 524288 op, 46255700.00 ns, 88.2257 ns/op
WorkloadActual 59: 524288 op, 46668300.00 ns, 89.0127 ns/op
WorkloadActual 60: 524288 op, 49233600.00 ns, 93.9056 ns/op
WorkloadActual 61: 524288 op, 47410400.00 ns, 90.4282 ns/op
WorkloadActual 62: 524288 op, 48287700.00 ns, 92.1015 ns/op
WorkloadActual 63: 524288 op, 48881700.00 ns, 93.2344 ns/op
WorkloadActual 64: 524288 op, 47329300.00 ns, 90.2735 ns/op
WorkloadActual 65: 524288 op, 47396700.00 ns, 90.4020 ns/op
WorkloadResult 1: 524288 op, 49096400.00 ns, 93.6440 ns/op
WorkloadResult 2: 524288 op, 46569500.00 ns, 88.8243 ns/op
WorkloadResult 3: 524288 op, 49715700.00 ns, 94.8252 ns/op
WorkloadResult 4: 524288 op, 49313500.00 ns, 94.0580 ns/op
WorkloadResult 5: 524288 op, 49336800.00 ns, 94.1025 ns/op
WorkloadResult 6: 524288 op, 49834600.00 ns, 95.0520 ns/op
WorkloadResult 7: 524288 op, 48532600.00 ns, 92.5686 ns/op
WorkloadResult 8: 524288 op, 48948700.00 ns, 93.3622 ns/op
WorkloadResult 9: 524288 op, 53337700.00 ns, 101.7336 ns/op
WorkloadResult 10: 524288 op, 50492100.00 ns, 96.3060 ns/op
WorkloadResult 11: 524288 op, 49630100.00 ns, 94.6619 ns/op
WorkloadResult 12: 524288 op, 50724000.00 ns, 96.7484 ns/op
WorkloadResult 13: 524288 op, 52940200.00 ns, 100.9754 ns/op
WorkloadResult 14: 524288 op, 51501300.00 ns, 98.2309 ns/op
WorkloadResult 15: 524288 op, 49699700.00 ns, 94.7947 ns/op
WorkloadResult 16: 524288 op, 50208300.00 ns, 95.7647 ns/op
WorkloadResult 17: 524288 op, 47051400.00 ns, 89.7434 ns/op
WorkloadResult 18: 524288 op, 51822300.00 ns, 98.8432 ns/op
WorkloadResult 19: 524288 op, 46852300.00 ns, 89.3637 ns/op
WorkloadResult 20: 524288 op, 51565100.00 ns, 98.3526 ns/op
WorkloadResult 21: 524288 op, 49218400.00 ns, 93.8766 ns/op
WorkloadResult 22: 524288 op, 45966100.00 ns, 87.6734 ns/op
WorkloadResult 23: 524288 op, 48984400.00 ns, 93.4303 ns/op
WorkloadResult 24: 524288 op, 50667100.00 ns, 96.6398 ns/op
WorkloadResult 25: 524288 op, 47839400.00 ns, 91.2464 ns/op
WorkloadResult 26: 524288 op, 47379300.00 ns, 90.3688 ns/op
WorkloadResult 27: 524288 op, 47218700.00 ns, 90.0625 ns/op
WorkloadResult 28: 524288 op, 47992000.00 ns, 91.5375 ns/op
WorkloadResult 29: 524288 op, 47620900.00 ns, 90.8297 ns/op
WorkloadResult 30: 524288 op, 46254200.00 ns, 88.2229 ns/op
WorkloadResult 31: 524288 op, 49441100.00 ns, 94.3014 ns/op
WorkloadResult 32: 524288 op, 50743900.00 ns, 96.7863 ns/op
WorkloadResult 33: 524288 op, 43622400.00 ns, 83.2031 ns/op
WorkloadResult 34: 524288 op, 46954900.00 ns, 89.5594 ns/op
WorkloadResult 35: 524288 op, 45042300.00 ns, 85.9114 ns/op
WorkloadResult 36: 524288 op, 47271400.00 ns, 90.1630 ns/op
WorkloadResult 37: 524288 op, 46876700.00 ns, 89.4102 ns/op
WorkloadResult 38: 524288 op, 44576200.00 ns, 85.0224 ns/op
WorkloadResult 39: 524288 op, 50366800.00 ns, 96.0670 ns/op
WorkloadResult 40: 524288 op, 47948300.00 ns, 91.4541 ns/op
WorkloadResult 41: 524288 op, 48266700.00 ns, 92.0614 ns/op
WorkloadResult 42: 524288 op, 46291800.00 ns, 88.2946 ns/op
WorkloadResult 43: 524288 op, 47917900.00 ns, 91.3961 ns/op
WorkloadResult 44: 524288 op, 48391700.00 ns, 92.2998 ns/op
WorkloadResult 45: 524288 op, 46562000.00 ns, 88.8100 ns/op
WorkloadResult 46: 524288 op, 46229700.00 ns, 88.1762 ns/op
WorkloadResult 47: 524288 op, 46164500.00 ns, 88.0518 ns/op
WorkloadResult 48: 524288 op, 46453900.00 ns, 88.6038 ns/op
WorkloadResult 49: 524288 op, 50142600.00 ns, 95.6394 ns/op
WorkloadResult 50: 524288 op, 50885600.00 ns, 97.0566 ns/op
WorkloadResult 51: 524288 op, 47252000.00 ns, 90.1260 ns/op
WorkloadResult 52: 524288 op, 46803500.00 ns, 89.2706 ns/op
WorkloadResult 53: 524288 op, 46255400.00 ns, 88.2252 ns/op
WorkloadResult 54: 524288 op, 46668000.00 ns, 89.0121 ns/op
WorkloadResult 55: 524288 op, 49233300.00 ns, 93.9051 ns/op
WorkloadResult 56: 524288 op, 47410100.00 ns, 90.4276 ns/op
WorkloadResult 57: 524288 op, 48287400.00 ns, 92.1009 ns/op
WorkloadResult 58: 524288 op, 48881400.00 ns, 93.2339 ns/op
WorkloadResult 59: 524288 op, 47329000.00 ns, 90.2729 ns/op
WorkloadResult 60: 524288 op, 47396400.00 ns, 90.4015 ns/op
// GC: 0 0 0 0 524288
// Threading: 0 0 524288
Mean = 92.251 ns, StdErr = 0.495 ns (0.54%), N = 60, StdDev = 3.831 ns
Min = 83.203 ns, Q1 = 89.399 ns, Median = 91.799 ns, Q3 = 94.802 ns, Max = 101.734 ns
IQR = 5.404 ns, LowerFence = 81.293 ns, UpperFence = 102.908 ns
ConfidenceInterval = [90.539 ns; 93.964 ns] (CI 99.9%), Margin = 1.713 ns (1.86% of Mean)
Skewness = 0.24, Kurtosis = 2.71, MValue = 2.55
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 17:57 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
There are not any results runs
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 92.251 ns, StdErr = 0.495 ns (0.54%), N = 60, StdDev = 3.831 ns
Min = 83.203 ns, Q1 = 89.399 ns, Median = 91.799 ns, Q3 = 94.802 ns, Max = 101.734 ns
IQR = 5.404 ns, LowerFence = 81.293 ns, UpperFence = 102.908 ns
ConfidenceInterval = [90.539 ns; 93.964 ns] (CI 99.9%), Margin = 1.713 ns (1.86% of Mean)
Skewness = 0.24, Kurtosis = 2.71, MValue = 2.55
-------------------- Histogram --------------------
[ 81.919 ns ; 84.183 ns) | @
[ 84.183 ns ; 86.751 ns) | @@
[ 86.751 ns ; 90.524 ns) | @@@@@@@@@@@@@@@@@@@@@@
[ 90.524 ns ; 93.215 ns) | @@@@@@@@@
[ 93.215 ns ; 95.784 ns) | @@@@@@@@@@@@@@@
[ 95.784 ns ; 100.070 ns) | @@@@@@@@@
[100.070 ns ; 103.018 ns) | @@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |---------:|---------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | NA | NA | NA | ? | ? | NA | ? |
| Libc | 92.25 ns | 1.713 ns | 3.831 ns | 1.00 | 0.06 | - | NA |
Benchmarks with issues:
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// * Warnings *
Environment
Summary -> Detected error exit code from one of the benchmarks. It might be caused by following antivirus software:
- Windows Defender (windowsdefender://)
Use InProcessEmitToolchain or InProcessNoEmitToolchain to avoid new process creation.
BaselineCustomAnalyzer
Summary -> A question mark '?' symbol indicates that it was not possible to compute the (Ratio, RatioSD, Alloc Ratio) column(s) because the baseline or benchmark could not be found, or the baseline value is too close to zero.
MinIterationTime
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 43.623ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Hints *
Outliers
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 5 outliers were removed (105.51 ns..137.90 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:06 (6.28 sec), executed benchmarks: 1
Global total time: 00:00:07 (7.27 sec), executed benchmarks: 1
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,577 @@
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// ***** Done, took 00:00:00 (0.04 sec) *****
// Found 2 benchmarks:
// HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 170700.00 ns, 0.3256 ns/op
WorkloadJitting 1: 524288 op, 213418000.00 ns, 407.0625 ns/op
OverheadWarmup 1: 524288 op, 1700.00 ns, 0.0032 ns/op
OverheadWarmup 2: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadWarmup 3: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadWarmup 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 5: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 6: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 1: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 2: 524288 op, 700.00 ns, 0.0013 ns/op
OverheadActual 3: 524288 op, 600.00 ns, 0.0011 ns/op
OverheadActual 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 5: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 7: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 8: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 9: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 10: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 11: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 12: 524288 op, 800.00 ns, 0.0015 ns/op
OverheadActual 13: 524288 op, 500.00 ns, 0.0010 ns/op
OverheadActual 14: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 15: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 16: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 17: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 18: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 19: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 20: 524288 op, 400.00 ns, 0.0008 ns/op
WorkloadWarmup 1: 524288 op, 252951300.00 ns, 482.4663 ns/op
WorkloadWarmup 2: 524288 op, 161605900.00 ns, 308.2388 ns/op
WorkloadWarmup 3: 524288 op, 93609600.00 ns, 178.5461 ns/op
WorkloadWarmup 4: 524288 op, 96000800.00 ns, 183.1070 ns/op
WorkloadWarmup 5: 524288 op, 91877900.00 ns, 175.2432 ns/op
WorkloadWarmup 6: 524288 op, 108375300.00 ns, 206.7095 ns/op
WorkloadWarmup 7: 524288 op, 93183900.00 ns, 177.7342 ns/op
WorkloadActual 1: 524288 op, 110120000.00 ns, 210.0372 ns/op
WorkloadActual 2: 524288 op, 97982000.00 ns, 186.8858 ns/op
WorkloadActual 3: 524288 op, 97769700.00 ns, 186.4809 ns/op
WorkloadActual 4: 524288 op, 94653300.00 ns, 180.5368 ns/op
WorkloadActual 5: 524288 op, 114211600.00 ns, 217.8413 ns/op
WorkloadActual 6: 524288 op, 104147800.00 ns, 198.6462 ns/op
WorkloadActual 7: 524288 op, 95028900.00 ns, 181.2532 ns/op
WorkloadActual 8: 524288 op, 96647600.00 ns, 184.3407 ns/op
WorkloadActual 9: 524288 op, 100436100.00 ns, 191.5667 ns/op
WorkloadActual 10: 524288 op, 88665200.00 ns, 169.1154 ns/op
WorkloadActual 11: 524288 op, 107480700.00 ns, 205.0032 ns/op
WorkloadActual 12: 524288 op, 101578100.00 ns, 193.7449 ns/op
WorkloadActual 13: 524288 op, 100039600.00 ns, 190.8104 ns/op
WorkloadActual 14: 524288 op, 96859000.00 ns, 184.7439 ns/op
WorkloadActual 15: 524288 op, 95897100.00 ns, 182.9092 ns/op
WorkloadActual 16: 524288 op, 90386400.00 ns, 172.3984 ns/op
WorkloadActual 17: 524288 op, 97892800.00 ns, 186.7157 ns/op
WorkloadActual 18: 524288 op, 92106000.00 ns, 175.6783 ns/op
WorkloadActual 19: 524288 op, 92751200.00 ns, 176.9089 ns/op
WorkloadActual 20: 524288 op, 91233500.00 ns, 174.0141 ns/op
WorkloadActual 21: 524288 op, 91745300.00 ns, 174.9903 ns/op
WorkloadActual 22: 524288 op, 92608500.00 ns, 176.6367 ns/op
WorkloadActual 23: 524288 op, 89622900.00 ns, 170.9421 ns/op
WorkloadActual 24: 524288 op, 96809600.00 ns, 184.6497 ns/op
WorkloadActual 25: 524288 op, 89716700.00 ns, 171.1210 ns/op
WorkloadActual 26: 524288 op, 94844800.00 ns, 180.9021 ns/op
WorkloadActual 27: 524288 op, 89636200.00 ns, 170.9675 ns/op
WorkloadActual 28: 524288 op, 99140900.00 ns, 189.0963 ns/op
WorkloadActual 29: 524288 op, 90009900.00 ns, 171.6803 ns/op
WorkloadActual 30: 524288 op, 111639900.00 ns, 212.9362 ns/op
WorkloadActual 31: 524288 op, 95279100.00 ns, 181.7305 ns/op
WorkloadActual 32: 524288 op, 92575300.00 ns, 176.5734 ns/op
WorkloadActual 33: 524288 op, 94218800.00 ns, 179.7081 ns/op
WorkloadActual 34: 524288 op, 102244400.00 ns, 195.0157 ns/op
WorkloadActual 35: 524288 op, 100934600.00 ns, 192.5175 ns/op
WorkloadActual 36: 524288 op, 94720200.00 ns, 180.6644 ns/op
WorkloadActual 37: 524288 op, 88482900.00 ns, 168.7677 ns/op
WorkloadActual 38: 524288 op, 97937100.00 ns, 186.8002 ns/op
WorkloadActual 39: 524288 op, 86984600.00 ns, 165.9100 ns/op
WorkloadActual 40: 524288 op, 93292200.00 ns, 177.9408 ns/op
WorkloadActual 41: 524288 op, 89443100.00 ns, 170.5992 ns/op
WorkloadActual 42: 524288 op, 94903600.00 ns, 181.0143 ns/op
WorkloadActual 43: 524288 op, 90231100.00 ns, 172.1022 ns/op
WorkloadActual 44: 524288 op, 92198800.00 ns, 175.8553 ns/op
WorkloadActual 45: 524288 op, 89323200.00 ns, 170.3705 ns/op
WorkloadActual 46: 524288 op, 94476800.00 ns, 180.2002 ns/op
WorkloadActual 47: 524288 op, 99674700.00 ns, 190.1144 ns/op
WorkloadActual 48: 524288 op, 93194000.00 ns, 177.7534 ns/op
WorkloadActual 49: 524288 op, 95677200.00 ns, 182.4898 ns/op
WorkloadActual 50: 524288 op, 103928400.00 ns, 198.2277 ns/op
WorkloadActual 51: 524288 op, 90548800.00 ns, 172.7081 ns/op
WorkloadActual 52: 524288 op, 95283900.00 ns, 181.7396 ns/op
WorkloadActual 53: 524288 op, 111606700.00 ns, 212.8729 ns/op
WorkloadActual 54: 524288 op, 142315300.00 ns, 271.4449 ns/op
WorkloadActual 55: 524288 op, 112542800.00 ns, 214.6584 ns/op
WorkloadActual 56: 524288 op, 123428000.00 ns, 235.4202 ns/op
WorkloadActual 57: 524288 op, 114441700.00 ns, 218.2802 ns/op
WorkloadActual 58: 524288 op, 104485200.00 ns, 199.2897 ns/op
WorkloadActual 59: 524288 op, 113106100.00 ns, 215.7328 ns/op
WorkloadActual 60: 524288 op, 89002800.00 ns, 169.7594 ns/op
WorkloadActual 61: 524288 op, 96677700.00 ns, 184.3981 ns/op
WorkloadActual 62: 524288 op, 97580400.00 ns, 186.1198 ns/op
WorkloadActual 63: 524288 op, 95495800.00 ns, 182.1438 ns/op
WorkloadActual 64: 524288 op, 87817600.00 ns, 167.4988 ns/op
WorkloadActual 65: 524288 op, 95919600.00 ns, 182.9521 ns/op
WorkloadActual 66: 524288 op, 91671600.00 ns, 174.8497 ns/op
WorkloadActual 67: 524288 op, 95040800.00 ns, 181.2759 ns/op
WorkloadActual 68: 524288 op, 89474400.00 ns, 170.6589 ns/op
WorkloadActual 69: 524288 op, 94837700.00 ns, 180.8886 ns/op
WorkloadActual 70: 524288 op, 89780300.00 ns, 171.2423 ns/op
WorkloadActual 71: 524288 op, 90327100.00 ns, 172.2853 ns/op
WorkloadActual 72: 524288 op, 92119000.00 ns, 175.7030 ns/op
WorkloadActual 73: 524288 op, 88611900.00 ns, 169.0138 ns/op
WorkloadActual 74: 524288 op, 93362000.00 ns, 178.0739 ns/op
WorkloadActual 75: 524288 op, 89523900.00 ns, 170.7533 ns/op
WorkloadActual 76: 524288 op, 93311000.00 ns, 177.9766 ns/op
WorkloadActual 77: 524288 op, 90112000.00 ns, 171.8750 ns/op
WorkloadActual 78: 524288 op, 95963200.00 ns, 183.0353 ns/op
WorkloadActual 79: 524288 op, 91199500.00 ns, 173.9492 ns/op
WorkloadActual 80: 524288 op, 94759300.00 ns, 180.7390 ns/op
WorkloadResult 1: 524288 op, 97981600.00 ns, 186.8851 ns/op
WorkloadResult 2: 524288 op, 97769300.00 ns, 186.4801 ns/op
WorkloadResult 3: 524288 op, 94652900.00 ns, 180.5361 ns/op
WorkloadResult 4: 524288 op, 104147400.00 ns, 198.6454 ns/op
WorkloadResult 5: 524288 op, 95028500.00 ns, 181.2525 ns/op
WorkloadResult 6: 524288 op, 96647200.00 ns, 184.3399 ns/op
WorkloadResult 7: 524288 op, 100435700.00 ns, 191.5659 ns/op
WorkloadResult 8: 524288 op, 88664800.00 ns, 169.1147 ns/op
WorkloadResult 9: 524288 op, 107480300.00 ns, 205.0024 ns/op
WorkloadResult 10: 524288 op, 101577700.00 ns, 193.7441 ns/op
WorkloadResult 11: 524288 op, 100039200.00 ns, 190.8096 ns/op
WorkloadResult 12: 524288 op, 96858600.00 ns, 184.7431 ns/op
WorkloadResult 13: 524288 op, 95896700.00 ns, 182.9084 ns/op
WorkloadResult 14: 524288 op, 90386000.00 ns, 172.3976 ns/op
WorkloadResult 15: 524288 op, 97892400.00 ns, 186.7149 ns/op
WorkloadResult 16: 524288 op, 92105600.00 ns, 175.6775 ns/op
WorkloadResult 17: 524288 op, 92750800.00 ns, 176.9081 ns/op
WorkloadResult 18: 524288 op, 91233100.00 ns, 174.0133 ns/op
WorkloadResult 19: 524288 op, 91744900.00 ns, 174.9895 ns/op
WorkloadResult 20: 524288 op, 92608100.00 ns, 176.6359 ns/op
WorkloadResult 21: 524288 op, 89622500.00 ns, 170.9414 ns/op
WorkloadResult 22: 524288 op, 96809200.00 ns, 184.6489 ns/op
WorkloadResult 23: 524288 op, 89716300.00 ns, 171.1203 ns/op
WorkloadResult 24: 524288 op, 94844400.00 ns, 180.9013 ns/op
WorkloadResult 25: 524288 op, 89635800.00 ns, 170.9667 ns/op
WorkloadResult 26: 524288 op, 99140500.00 ns, 189.0955 ns/op
WorkloadResult 27: 524288 op, 90009500.00 ns, 171.6795 ns/op
WorkloadResult 28: 524288 op, 95278700.00 ns, 181.7297 ns/op
WorkloadResult 29: 524288 op, 92574900.00 ns, 176.5726 ns/op
WorkloadResult 30: 524288 op, 94218400.00 ns, 179.7073 ns/op
WorkloadResult 31: 524288 op, 102244000.00 ns, 195.0150 ns/op
WorkloadResult 32: 524288 op, 100934200.00 ns, 192.5167 ns/op
WorkloadResult 33: 524288 op, 94719800.00 ns, 180.6637 ns/op
WorkloadResult 34: 524288 op, 88482500.00 ns, 168.7670 ns/op
WorkloadResult 35: 524288 op, 97936700.00 ns, 186.7994 ns/op
WorkloadResult 36: 524288 op, 86984200.00 ns, 165.9092 ns/op
WorkloadResult 37: 524288 op, 93291800.00 ns, 177.9400 ns/op
WorkloadResult 38: 524288 op, 89442700.00 ns, 170.5984 ns/op
WorkloadResult 39: 524288 op, 94903200.00 ns, 181.0135 ns/op
WorkloadResult 40: 524288 op, 90230700.00 ns, 172.1014 ns/op
WorkloadResult 41: 524288 op, 92198400.00 ns, 175.8545 ns/op
WorkloadResult 42: 524288 op, 89322800.00 ns, 170.3697 ns/op
WorkloadResult 43: 524288 op, 94476400.00 ns, 180.1994 ns/op
WorkloadResult 44: 524288 op, 99674300.00 ns, 190.1136 ns/op
WorkloadResult 45: 524288 op, 93193600.00 ns, 177.7527 ns/op
WorkloadResult 46: 524288 op, 95676800.00 ns, 182.4890 ns/op
WorkloadResult 47: 524288 op, 103928000.00 ns, 198.2269 ns/op
WorkloadResult 48: 524288 op, 90548400.00 ns, 172.7074 ns/op
WorkloadResult 49: 524288 op, 95283500.00 ns, 181.7389 ns/op
WorkloadResult 50: 524288 op, 104484800.00 ns, 199.2889 ns/op
WorkloadResult 51: 524288 op, 89002400.00 ns, 169.7586 ns/op
WorkloadResult 52: 524288 op, 96677300.00 ns, 184.3973 ns/op
WorkloadResult 53: 524288 op, 97580000.00 ns, 186.1191 ns/op
WorkloadResult 54: 524288 op, 95495400.00 ns, 182.1430 ns/op
WorkloadResult 55: 524288 op, 87817200.00 ns, 167.4980 ns/op
WorkloadResult 56: 524288 op, 95919200.00 ns, 182.9514 ns/op
WorkloadResult 57: 524288 op, 91671200.00 ns, 174.8489 ns/op
WorkloadResult 58: 524288 op, 95040400.00 ns, 181.2752 ns/op
WorkloadResult 59: 524288 op, 89474000.00 ns, 170.6581 ns/op
WorkloadResult 60: 524288 op, 94837300.00 ns, 180.8878 ns/op
WorkloadResult 61: 524288 op, 89779900.00 ns, 171.2416 ns/op
WorkloadResult 62: 524288 op, 90326700.00 ns, 172.2845 ns/op
WorkloadResult 63: 524288 op, 92118600.00 ns, 175.7023 ns/op
WorkloadResult 64: 524288 op, 88611500.00 ns, 169.0130 ns/op
WorkloadResult 65: 524288 op, 93361600.00 ns, 178.0731 ns/op
WorkloadResult 66: 524288 op, 89523500.00 ns, 170.7525 ns/op
WorkloadResult 67: 524288 op, 93310600.00 ns, 177.9758 ns/op
WorkloadResult 68: 524288 op, 90111600.00 ns, 171.8742 ns/op
WorkloadResult 69: 524288 op, 95962800.00 ns, 183.0345 ns/op
WorkloadResult 70: 524288 op, 91199100.00 ns, 173.9485 ns/op
WorkloadResult 71: 524288 op, 94758900.00 ns, 180.7383 ns/op
// GC: 0 0 0 0 524288
// Threading: 0 0 524288
Mean = 179.943 ns, StdErr = 1.016 ns (0.56%), N = 71, StdDev = 8.560 ns
Min = 165.909 ns, Q1 = 172.341 ns, Median = 180.199 ns, Q3 = 184.523 ns, Max = 205.002 ns
IQR = 12.182 ns, LowerFence = 154.068 ns, UpperFence = 202.796 ns
ConfidenceInterval = [176.454 ns; 183.433 ns] (CI 99.9%), Margin = 3.489 ns (1.94% of Mean)
Skewness = 0.69, Kurtosis = 3, MValue = 2.67
// ** Remained 1 (50.0%) benchmark(s) to run. Estimated finish 2026-05-08 18:00 (0h 0m from now) **
Setup power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// **************************
// Benchmark: HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
// *** Execute ***
// Launch: 1 / 1
// Benchmark Process Environment Information:
// BenchmarkDotNet v0.15.8
// Runtime=.NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
// GC=Concurrent Workstation
// HardwareIntrinsics=AVX2+BMI1+BMI2+F16C+FMA+LZCNT+MOVBE,AVX,SSE3+SSSE3+SSE4.1+SSE4.2+POPCNT,X86Base+SSE+SSE2,AES+PCLMUL VectorSize=256
// Job: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
OverheadJitting 1: 524288 op, 161600.00 ns, 0.3082 ns/op
WorkloadJitting 1: 524288 op, 294013600.00 ns, 560.7864 ns/op
OverheadWarmup 1: 524288 op, 1500.00 ns, 0.0029 ns/op
OverheadWarmup 2: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 3: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadWarmup 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadWarmup 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 1: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 2: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 3: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 4: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 5: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 6: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 7: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 8: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 9: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 10: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 11: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 12: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 13: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 14: 524288 op, 200.00 ns, 0.0004 ns/op
OverheadActual 15: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 16: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 17: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 18: 524288 op, 400.00 ns, 0.0008 ns/op
OverheadActual 19: 524288 op, 300.00 ns, 0.0006 ns/op
OverheadActual 20: 524288 op, 300.00 ns, 0.0006 ns/op
WorkloadWarmup 1: 524288 op, 227604000.00 ns, 434.1202 ns/op
WorkloadWarmup 2: 524288 op, 119837700.00 ns, 228.5723 ns/op
WorkloadWarmup 3: 524288 op, 65902300.00 ns, 125.6987 ns/op
WorkloadWarmup 4: 524288 op, 67319100.00 ns, 128.4010 ns/op
WorkloadWarmup 5: 524288 op, 64887800.00 ns, 123.7637 ns/op
WorkloadWarmup 6: 524288 op, 60407500.00 ns, 115.2182 ns/op
WorkloadWarmup 7: 524288 op, 76115700.00 ns, 145.1792 ns/op
WorkloadWarmup 8: 524288 op, 79675300.00 ns, 151.9686 ns/op
WorkloadWarmup 9: 524288 op, 84446600.00 ns, 161.0691 ns/op
WorkloadWarmup 10: 524288 op, 81308200.00 ns, 155.0831 ns/op
WorkloadActual 1: 524288 op, 82950400.00 ns, 158.2153 ns/op
WorkloadActual 2: 524288 op, 72158000.00 ns, 137.6305 ns/op
WorkloadActual 3: 524288 op, 78382500.00 ns, 149.5028 ns/op
WorkloadActual 4: 524288 op, 81705300.00 ns, 155.8405 ns/op
WorkloadActual 5: 524288 op, 66191700.00 ns, 126.2506 ns/op
WorkloadActual 6: 524288 op, 66158800.00 ns, 126.1879 ns/op
WorkloadActual 7: 524288 op, 66801700.00 ns, 127.4141 ns/op
WorkloadActual 8: 524288 op, 67309600.00 ns, 128.3829 ns/op
WorkloadActual 9: 524288 op, 70345300.00 ns, 134.1730 ns/op
WorkloadActual 10: 524288 op, 68140300.00 ns, 129.9673 ns/op
WorkloadActual 11: 524288 op, 72253800.00 ns, 137.8132 ns/op
WorkloadActual 12: 524288 op, 65647300.00 ns, 125.2123 ns/op
WorkloadActual 13: 524288 op, 66886600.00 ns, 127.5761 ns/op
WorkloadActual 14: 524288 op, 72539800.00 ns, 138.3587 ns/op
WorkloadActual 15: 524288 op, 70354500.00 ns, 134.1906 ns/op
WorkloadActual 16: 524288 op, 60502900.00 ns, 115.4001 ns/op
WorkloadActual 17: 524288 op, 70347200.00 ns, 134.1766 ns/op
WorkloadActual 18: 524288 op, 63269400.00 ns, 120.6768 ns/op
WorkloadActual 19: 524288 op, 56961200.00 ns, 108.6449 ns/op
WorkloadActual 20: 524288 op, 65538300.00 ns, 125.0044 ns/op
WorkloadActual 21: 524288 op, 62201500.00 ns, 118.6399 ns/op
WorkloadActual 22: 524288 op, 61408600.00 ns, 117.1276 ns/op
WorkloadActual 23: 524288 op, 62908700.00 ns, 119.9888 ns/op
WorkloadActual 24: 524288 op, 63762400.00 ns, 121.6171 ns/op
WorkloadActual 25: 524288 op, 79688600.00 ns, 151.9939 ns/op
WorkloadActual 26: 524288 op, 67264900.00 ns, 128.2976 ns/op
WorkloadActual 27: 524288 op, 60927900.00 ns, 116.2107 ns/op
WorkloadActual 28: 524288 op, 67153700.00 ns, 128.0855 ns/op
WorkloadActual 29: 524288 op, 63684400.00 ns, 121.4684 ns/op
WorkloadActual 30: 524288 op, 72046300.00 ns, 137.4174 ns/op
WorkloadActual 31: 524288 op, 61618600.00 ns, 117.5282 ns/op
WorkloadActual 32: 524288 op, 61241800.00 ns, 116.8095 ns/op
WorkloadActual 33: 524288 op, 57179700.00 ns, 109.0616 ns/op
WorkloadActual 34: 524288 op, 63173800.00 ns, 120.4945 ns/op
WorkloadActual 35: 524288 op, 64729300.00 ns, 123.4613 ns/op
WorkloadActual 36: 524288 op, 61525700.00 ns, 117.3510 ns/op
WorkloadActual 37: 524288 op, 66442600.00 ns, 126.7292 ns/op
WorkloadActual 38: 524288 op, 61029600.00 ns, 116.4047 ns/op
WorkloadActual 39: 524288 op, 72412200.00 ns, 138.1153 ns/op
WorkloadActual 40: 524288 op, 61968800.00 ns, 118.1961 ns/op
WorkloadActual 41: 524288 op, 61055900.00 ns, 116.4549 ns/op
WorkloadActual 42: 524288 op, 59906900.00 ns, 114.2633 ns/op
WorkloadActual 43: 524288 op, 61735000.00 ns, 117.7502 ns/op
WorkloadActual 44: 524288 op, 60758100.00 ns, 115.8869 ns/op
WorkloadActual 45: 524288 op, 63402600.00 ns, 120.9309 ns/op
WorkloadActual 46: 524288 op, 61279600.00 ns, 116.8816 ns/op
WorkloadActual 47: 524288 op, 64273400.00 ns, 122.5918 ns/op
WorkloadActual 48: 524288 op, 77675800.00 ns, 148.1548 ns/op
WorkloadActual 49: 524288 op, 78931900.00 ns, 150.5507 ns/op
WorkloadActual 50: 524288 op, 67842700.00 ns, 129.3997 ns/op
WorkloadActual 51: 524288 op, 63186500.00 ns, 120.5187 ns/op
WorkloadActual 52: 524288 op, 63598000.00 ns, 121.3036 ns/op
WorkloadActual 53: 524288 op, 70199900.00 ns, 133.8957 ns/op
WorkloadActual 54: 524288 op, 66064300.00 ns, 126.0077 ns/op
WorkloadActual 55: 524288 op, 66947900.00 ns, 127.6930 ns/op
WorkloadActual 56: 524288 op, 67338600.00 ns, 128.4382 ns/op
WorkloadActual 57: 524288 op, 70583700.00 ns, 134.6277 ns/op
WorkloadActual 58: 524288 op, 68584900.00 ns, 130.8153 ns/op
WorkloadActual 59: 524288 op, 83089100.00 ns, 158.4799 ns/op
WorkloadActual 60: 524288 op, 73370200.00 ns, 139.9426 ns/op
WorkloadActual 61: 524288 op, 69931000.00 ns, 133.3828 ns/op
WorkloadActual 62: 524288 op, 69143100.00 ns, 131.8800 ns/op
WorkloadActual 63: 524288 op, 62223300.00 ns, 118.6815 ns/op
WorkloadActual 64: 524288 op, 66849800.00 ns, 127.5059 ns/op
WorkloadActual 65: 524288 op, 66068700.00 ns, 126.0160 ns/op
WorkloadActual 66: 524288 op, 61960300.00 ns, 118.1799 ns/op
WorkloadActual 67: 524288 op, 93133300.00 ns, 177.6377 ns/op
WorkloadActual 68: 524288 op, 76250600.00 ns, 145.4365 ns/op
WorkloadActual 69: 524288 op, 63350400.00 ns, 120.8313 ns/op
WorkloadActual 70: 524288 op, 68484700.00 ns, 130.6242 ns/op
WorkloadActual 71: 524288 op, 72942700.00 ns, 139.1272 ns/op
WorkloadActual 72: 524288 op, 73245200.00 ns, 139.7041 ns/op
WorkloadActual 73: 524288 op, 67134200.00 ns, 128.0483 ns/op
WorkloadActual 74: 524288 op, 59117300.00 ns, 112.7573 ns/op
WorkloadActual 75: 524288 op, 71966800.00 ns, 137.2658 ns/op
WorkloadActual 76: 524288 op, 72453300.00 ns, 138.1937 ns/op
WorkloadActual 77: 524288 op, 68227300.00 ns, 130.1332 ns/op
WorkloadActual 78: 524288 op, 72685600.00 ns, 138.6368 ns/op
WorkloadActual 79: 524288 op, 68093400.00 ns, 129.8779 ns/op
WorkloadActual 80: 524288 op, 59091900.00 ns, 112.7089 ns/op
WorkloadActual 81: 524288 op, 68364100.00 ns, 130.3942 ns/op
WorkloadActual 82: 524288 op, 65218600.00 ns, 124.3946 ns/op
WorkloadActual 83: 524288 op, 61323000.00 ns, 116.9643 ns/op
WorkloadActual 84: 524288 op, 78995500.00 ns, 150.6720 ns/op
WorkloadActual 85: 524288 op, 72060900.00 ns, 137.4453 ns/op
WorkloadActual 86: 524288 op, 60735300.00 ns, 115.8434 ns/op
WorkloadActual 87: 524288 op, 79016400.00 ns, 150.7118 ns/op
WorkloadActual 88: 524288 op, 63084900.00 ns, 120.3249 ns/op
WorkloadActual 89: 524288 op, 60692600.00 ns, 115.7619 ns/op
WorkloadActual 90: 524288 op, 75530600.00 ns, 144.0632 ns/op
WorkloadActual 91: 524288 op, 57794200.00 ns, 110.2337 ns/op
WorkloadActual 92: 524288 op, 67526200.00 ns, 128.7960 ns/op
WorkloadActual 93: 524288 op, 65949300.00 ns, 125.7883 ns/op
WorkloadActual 94: 524288 op, 79662000.00 ns, 151.9432 ns/op
WorkloadActual 95: 524288 op, 80607400.00 ns, 153.7464 ns/op
WorkloadActual 96: 524288 op, 73809300.00 ns, 140.7801 ns/op
WorkloadActual 97: 524288 op, 66853900.00 ns, 127.5137 ns/op
WorkloadActual 98: 524288 op, 61136500.00 ns, 116.6086 ns/op
WorkloadActual 99: 524288 op, 61301300.00 ns, 116.9230 ns/op
WorkloadActual 100: 524288 op, 65858000.00 ns, 125.6142 ns/op
WorkloadResult 1: 524288 op, 82950200.00 ns, 158.2150 ns/op
WorkloadResult 2: 524288 op, 72157800.00 ns, 137.6301 ns/op
WorkloadResult 3: 524288 op, 78382300.00 ns, 149.5024 ns/op
WorkloadResult 4: 524288 op, 81705100.00 ns, 155.8401 ns/op
WorkloadResult 5: 524288 op, 66191500.00 ns, 126.2503 ns/op
WorkloadResult 6: 524288 op, 66158600.00 ns, 126.1875 ns/op
WorkloadResult 7: 524288 op, 66801500.00 ns, 127.4137 ns/op
WorkloadResult 8: 524288 op, 67309400.00 ns, 128.3825 ns/op
WorkloadResult 9: 524288 op, 70345100.00 ns, 134.1726 ns/op
WorkloadResult 10: 524288 op, 68140100.00 ns, 129.9669 ns/op
WorkloadResult 11: 524288 op, 72253600.00 ns, 137.8128 ns/op
WorkloadResult 12: 524288 op, 65647100.00 ns, 125.2119 ns/op
WorkloadResult 13: 524288 op, 66886400.00 ns, 127.5757 ns/op
WorkloadResult 14: 524288 op, 72539600.00 ns, 138.3583 ns/op
WorkloadResult 15: 524288 op, 70354300.00 ns, 134.1902 ns/op
WorkloadResult 16: 524288 op, 60502700.00 ns, 115.3997 ns/op
WorkloadResult 17: 524288 op, 70347000.00 ns, 134.1763 ns/op
WorkloadResult 18: 524288 op, 63269200.00 ns, 120.6764 ns/op
WorkloadResult 19: 524288 op, 56961000.00 ns, 108.6445 ns/op
WorkloadResult 20: 524288 op, 65538100.00 ns, 125.0040 ns/op
WorkloadResult 21: 524288 op, 62201300.00 ns, 118.6396 ns/op
WorkloadResult 22: 524288 op, 61408400.00 ns, 117.1272 ns/op
WorkloadResult 23: 524288 op, 62908500.00 ns, 119.9884 ns/op
WorkloadResult 24: 524288 op, 63762200.00 ns, 121.6167 ns/op
WorkloadResult 25: 524288 op, 79688400.00 ns, 151.9936 ns/op
WorkloadResult 26: 524288 op, 67264700.00 ns, 128.2972 ns/op
WorkloadResult 27: 524288 op, 60927700.00 ns, 116.2104 ns/op
WorkloadResult 28: 524288 op, 67153500.00 ns, 128.0851 ns/op
WorkloadResult 29: 524288 op, 63684200.00 ns, 121.4680 ns/op
WorkloadResult 30: 524288 op, 72046100.00 ns, 137.4170 ns/op
WorkloadResult 31: 524288 op, 61618400.00 ns, 117.5278 ns/op
WorkloadResult 32: 524288 op, 61241600.00 ns, 116.8091 ns/op
WorkloadResult 33: 524288 op, 57179500.00 ns, 109.0612 ns/op
WorkloadResult 34: 524288 op, 63173600.00 ns, 120.4941 ns/op
WorkloadResult 35: 524288 op, 64729100.00 ns, 123.4610 ns/op
WorkloadResult 36: 524288 op, 61525500.00 ns, 117.3506 ns/op
WorkloadResult 37: 524288 op, 66442400.00 ns, 126.7288 ns/op
WorkloadResult 38: 524288 op, 61029400.00 ns, 116.4043 ns/op
WorkloadResult 39: 524288 op, 72412000.00 ns, 138.1149 ns/op
WorkloadResult 40: 524288 op, 61968600.00 ns, 118.1957 ns/op
WorkloadResult 41: 524288 op, 61055700.00 ns, 116.4545 ns/op
WorkloadResult 42: 524288 op, 59906700.00 ns, 114.2630 ns/op
WorkloadResult 43: 524288 op, 61734800.00 ns, 117.7498 ns/op
WorkloadResult 44: 524288 op, 60757900.00 ns, 115.8865 ns/op
WorkloadResult 45: 524288 op, 63402400.00 ns, 120.9305 ns/op
WorkloadResult 46: 524288 op, 61279400.00 ns, 116.8812 ns/op
WorkloadResult 47: 524288 op, 64273200.00 ns, 122.5914 ns/op
WorkloadResult 48: 524288 op, 77675600.00 ns, 148.1544 ns/op
WorkloadResult 49: 524288 op, 78931700.00 ns, 150.5503 ns/op
WorkloadResult 50: 524288 op, 67842500.00 ns, 129.3993 ns/op
WorkloadResult 51: 524288 op, 63186300.00 ns, 120.5183 ns/op
WorkloadResult 52: 524288 op, 63597800.00 ns, 121.3032 ns/op
WorkloadResult 53: 524288 op, 70199700.00 ns, 133.8953 ns/op
WorkloadResult 54: 524288 op, 66064100.00 ns, 126.0073 ns/op
WorkloadResult 55: 524288 op, 66947700.00 ns, 127.6926 ns/op
WorkloadResult 56: 524288 op, 67338400.00 ns, 128.4378 ns/op
WorkloadResult 57: 524288 op, 70583500.00 ns, 134.6273 ns/op
WorkloadResult 58: 524288 op, 68584700.00 ns, 130.8149 ns/op
WorkloadResult 59: 524288 op, 83088900.00 ns, 158.4795 ns/op
WorkloadResult 60: 524288 op, 73370000.00 ns, 139.9422 ns/op
WorkloadResult 61: 524288 op, 69930800.00 ns, 133.3824 ns/op
WorkloadResult 62: 524288 op, 69142900.00 ns, 131.8796 ns/op
WorkloadResult 63: 524288 op, 62223100.00 ns, 118.6811 ns/op
WorkloadResult 64: 524288 op, 66849600.00 ns, 127.5055 ns/op
WorkloadResult 65: 524288 op, 66068500.00 ns, 126.0157 ns/op
WorkloadResult 66: 524288 op, 61960100.00 ns, 118.1795 ns/op
WorkloadResult 67: 524288 op, 76250400.00 ns, 145.4361 ns/op
WorkloadResult 68: 524288 op, 63350200.00 ns, 120.8309 ns/op
WorkloadResult 69: 524288 op, 68484500.00 ns, 130.6238 ns/op
WorkloadResult 70: 524288 op, 72942500.00 ns, 139.1268 ns/op
WorkloadResult 71: 524288 op, 73245000.00 ns, 139.7038 ns/op
WorkloadResult 72: 524288 op, 67134000.00 ns, 128.0479 ns/op
WorkloadResult 73: 524288 op, 59117100.00 ns, 112.7569 ns/op
WorkloadResult 74: 524288 op, 71966600.00 ns, 137.2654 ns/op
WorkloadResult 75: 524288 op, 72453100.00 ns, 138.1933 ns/op
WorkloadResult 76: 524288 op, 68227100.00 ns, 130.1329 ns/op
WorkloadResult 77: 524288 op, 72685400.00 ns, 138.6364 ns/op
WorkloadResult 78: 524288 op, 68093200.00 ns, 129.8775 ns/op
WorkloadResult 79: 524288 op, 59091700.00 ns, 112.7085 ns/op
WorkloadResult 80: 524288 op, 68363900.00 ns, 130.3938 ns/op
WorkloadResult 81: 524288 op, 65218400.00 ns, 124.3942 ns/op
WorkloadResult 82: 524288 op, 61322800.00 ns, 116.9640 ns/op
WorkloadResult 83: 524288 op, 78995300.00 ns, 150.6716 ns/op
WorkloadResult 84: 524288 op, 72060700.00 ns, 137.4449 ns/op
WorkloadResult 85: 524288 op, 60735100.00 ns, 115.8430 ns/op
WorkloadResult 86: 524288 op, 79016200.00 ns, 150.7114 ns/op
WorkloadResult 87: 524288 op, 63084700.00 ns, 120.3245 ns/op
WorkloadResult 88: 524288 op, 60692400.00 ns, 115.7616 ns/op
WorkloadResult 89: 524288 op, 75530400.00 ns, 144.0628 ns/op
WorkloadResult 90: 524288 op, 57794000.00 ns, 110.2333 ns/op
WorkloadResult 91: 524288 op, 67526000.00 ns, 128.7956 ns/op
WorkloadResult 92: 524288 op, 65949100.00 ns, 125.7879 ns/op
WorkloadResult 93: 524288 op, 79661800.00 ns, 151.9428 ns/op
WorkloadResult 94: 524288 op, 80607200.00 ns, 153.7460 ns/op
WorkloadResult 95: 524288 op, 73809100.00 ns, 140.7797 ns/op
WorkloadResult 96: 524288 op, 66853700.00 ns, 127.5133 ns/op
WorkloadResult 97: 524288 op, 61136300.00 ns, 116.6082 ns/op
WorkloadResult 98: 524288 op, 61301100.00 ns, 116.9226 ns/op
WorkloadResult 99: 524288 op, 65857800.00 ns, 125.6138 ns/op
// GC: 0 0 0 624 524288
// Threading: 0 0 524288
Mean = 128.724 ns, StdErr = 1.194 ns (0.93%), N = 99, StdDev = 11.884 ns
Min = 108.644 ns, Q1 = 118.660 ns, Median = 127.505 ns, Q3 = 137.341 ns, Max = 158.479 ns
IQR = 18.681 ns, LowerFence = 90.639 ns, UpperFence = 165.363 ns
ConfidenceInterval = [124.672 ns; 132.776 ns] (CI 99.9%), Margin = 4.052 ns (3.15% of Mean)
Skewness = 0.67, Kurtosis = 2.73, MValue = 2.33
// ** Remained 0 (0.0%) benchmark(s) to run. Estimated finish 2026-05-08 18:00 (0h 0m from now) **
Successfully reverted power plan (GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c FriendlyName: 高性能)
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.csv
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report-github.md
BenchmarkDotNet.Artifacts\results\StgSharp.Benchmark.HlsfAllocatorBench-report.html
// * Detailed results *
HlsfAllocatorBench.Hlsf: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 179.943 ns, StdErr = 1.016 ns (0.56%), N = 71, StdDev = 8.560 ns
Min = 165.909 ns, Q1 = 172.341 ns, Median = 180.199 ns, Q3 = 184.523 ns, Max = 205.002 ns
IQR = 12.182 ns, LowerFence = 154.068 ns, UpperFence = 202.796 ns
ConfidenceInterval = [176.454 ns; 183.433 ns] (CI 99.9%), Margin = 3.489 ns (1.94% of Mean)
Skewness = 0.69, Kurtosis = 3, MValue = 2.67
-------------------- Histogram --------------------
[163.196 ns ; 168.677 ns) | @@
[168.677 ns ; 174.103 ns) | @@@@@@@@@@@@@@@@@@@@
[174.103 ns ; 179.512 ns) | @@@@@@@@@@@@
[179.512 ns ; 184.938 ns) | @@@@@@@@@@@@@@@@@@@@@
[184.938 ns ; 191.178 ns) | @@@@@@@@
[191.178 ns ; 196.004 ns) | @@@@
[196.004 ns ; 201.471 ns) | @@@
[201.471 ns ; 207.716 ns) | @
---------------------------------------------------
HlsfAllocatorBench.Libc: Job-VLPMSV(Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1)
Runtime = ; GC =
Mean = 128.724 ns, StdErr = 1.194 ns (0.93%), N = 99, StdDev = 11.884 ns
Min = 108.644 ns, Q1 = 118.660 ns, Median = 127.505 ns, Q3 = 137.341 ns, Max = 158.479 ns
IQR = 18.681 ns, LowerFence = 90.639 ns, UpperFence = 165.363 ns
ConfidenceInterval = [124.672 ns; 132.776 ns] (CI 99.9%), Margin = 4.052 ns (3.15% of Mean)
Skewness = 0.67, Kurtosis = 2.73, MValue = 2.33
-------------------- Histogram --------------------
[108.082 ns ; 115.136 ns) | @@@@@@
[115.136 ns ; 121.880 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[121.880 ns ; 130.976 ns) | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[130.976 ns ; 140.034 ns) | @@@@@@@@@@@@@@@@@@@
[140.034 ns ; 147.578 ns) | @@@
[147.578 ns ; 154.322 ns) | @@@@@@@@
[154.322 ns ; 161.851 ns) | @@@
---------------------------------------------------
// * Summary *
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |---------:|--------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | 179.9 ns | 3.49 ns | 8.56 ns | 1.41 | 0.14 | - | NA |
| Libc | 128.7 ns | 4.05 ns | 11.88 ns | 1.01 | 0.13 | - | NA |
// * Warnings *
MinIterationTime
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 86.985ms which is very small. It's recommended to increase it to at least 100ms using more operations.
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> The minimum observed iteration time is 56.961ms which is very small. It's recommended to increase it to at least 100ms using more operations.
// * Hints *
Outliers
HlsfAllocatorBench.Hlsf: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 9 outliers were removed (210.04 ns..271.44 ns)
HlsfAllocatorBench.Libc: Toolchain=InProcessEmitToolchain, InvocationCount=1, UnrollFactor=1 -> 1 outlier was removed (177.64 ns)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Ratio : Mean of the ratio distribution ([Current]/[Baseline])
RatioSD : Standard deviation of the ratio distribution ([Current]/[Baseline])
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
Alloc Ratio : Allocated memory ratio distribution ([Current]/[Baseline])
1 ns : 1 Nanosecond (0.000000001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
Run time: 00:00:20 (20.49 sec), executed benchmarks: 2
Global total time: 00:00:21 (21.61 sec), executed benchmarks: 2
// * Artifacts cleanup *
Artifacts cleanup is finished
@@ -0,0 +1,14 @@
```
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
```
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|------- |---------:|--------:|---------:|------:|--------:|----------:|------------:|
| Hlsf | 179.9 ns | 3.49 ns | 8.56 ns | 1.41 | 0.14 | - | NA |
| Libc | 128.7 ns | 4.05 ns | 11.88 ns | 1.01 | 0.13 | - | NA |
@@ -0,0 +1,3 @@
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Ratio,RatioSD,Allocated,Alloc Ratio
Hlsf,Job-VLPMSV,False,Default,Default,Default,Default,Default,Default,1111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,InProcessEmitToolchain,Default,1,Default,Default,Default,Default,Default,Default,Default,Default,Default,1,Default,179.9 ns,3.49 ns,8.56 ns,1.41,0.14,0 B,NA
Libc,Job-VLPMSV,False,Default,Default,Default,Default,Default,Default,1111111111111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,InProcessEmitToolchain,Default,1,Default,Default,Default,Default,Default,Default,Default,Default,Default,1,Default,128.7 ns,4.05 ns,11.88 ns,1.01,0.13,0 B,NA
1 Method Job AnalyzeLaunchVariance EvaluateOverhead MaxAbsoluteError MaxRelativeError MinInvokeCount MinIterationTime OutlierMode Affinity EnvironmentVariables Jit LargeAddressAware Platform PowerPlanMode Runtime AllowVeryLargeObjects Concurrent CpuGroups Force HeapAffinitizeMask HeapCount NoAffinitize RetainVm Server Arguments BuildConfiguration Clock EngineFactory NuGetReferences Toolchain IsMutator InvocationCount IterationCount IterationTime LaunchCount MaxIterationCount MaxWarmupIterationCount MemoryRandomization MinIterationCount MinWarmupIterationCount RunStrategy UnrollFactor WarmupCount Mean Error StdDev Ratio RatioSD Allocated Alloc Ratio
2 Hlsf Job-VLPMSV False Default Default Default Default Default Default 1111111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 8.0 False True False True Default Default False False False Default Default Default Default Default InProcessEmitToolchain Default 1 Default Default Default Default Default Default Default Default Default 1 Default 179.9 ns 3.49 ns 8.56 ns 1.41 0.14 0 B NA
3 Libc Job-VLPMSV False Default Default Default Default Default Default 1111111111111111 Empty RyuJit Default X64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 8.0 False True False True Default Default False False False Default Default Default Default Default InProcessEmitToolchain Default 1 Default Default Default Default Default Default Default Default Default 1 Default 128.7 ns 4.05 ns 11.88 ns 1.01 0.13 0 B NA
@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>StgSharp.Benchmark.HlsfAllocatorBench-20260508-175952</title>
<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
tr { background-color: #fff; border-top: 1px solid #ccc; }
tr:nth-child(even) { background: #f8f8f8; }
</style>
</head>
<body>
<pre><code>
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8246/25H2/2025Update/HudsonValley2)
AMD Ryzen 7 6800H with Radeon Graphics 3.20GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.203
[Host] : .NET 8.0.26 (8.0.26, 8.0.2626.16921), X64 RyuJIT x86-64-v3
</code></pre>
<pre><code>Toolchain=InProcessEmitToolchain InvocationCount=1 UnrollFactor=1
</code></pre>
<table>
<thead><tr><th>Method</th><th>Mean</th><th>Error</th><th>StdDev</th><th>Ratio</th><th>RatioSD</th><th>Allocated</th><th>Alloc Ratio</th>
</tr>
</thead><tbody><tr><td>Hlsf</td><td>179.9 ns</td><td>3.49 ns</td><td>8.56 ns</td><td>1.41</td><td>0.14</td><td>-</td><td>NA</td>
</tr><tr><td>Libc</td><td>128.7 ns</td><td>4.05 ns</td><td>11.88 ns</td><td>1.01</td><td>0.13</td><td>-</td><td>NA</td>
</tr></tbody></table>
</body>
</html>
+5 -2
View File
@@ -78,8 +78,11 @@
<!-- 当前编译的 RID -->
<BuildRid>$(_OsTag)-$(_ArchTag)</BuildRid>
<!-- 分层的 build 输出目录 -->
<NativeBuildDir>$(SolutionRoot)build\$(BuildRid)\</NativeBuildDir>
<!-- 托管项目分层输出目录 -->
<ManagedBuildDir>$(SolutionRoot)build\$(BuildRid)\</ManagedBuildDir>
<!-- CMake native 输出目录 -->
<NativeBuildDir>$(SolutionRoot)cmake_build\$(_OsTag)_$(_ArchTag)\</NativeBuildDir>
</PropertyGroup>
<!-- ════════════════════════════════════════════════════════ -->
+17 -17
View File
@@ -8,7 +8,7 @@
AfterTargets="Build"
Condition="'$(DisablePostBuildCopy)'!='true'">
<MakeDir Directories="$(NativeBuildDir)" />
<MakeDir Directories="$(ManagedBuildDir)" />
<!-- 拷贝所有编译输出(DLL + PDB + XML + deps.json) -->
<ItemGroup>
@@ -17,11 +17,11 @@
</ItemGroup>
<Copy SourceFiles="@(_OutputFiles)"
DestinationFolder="$(NativeBuildDir)%(RecursiveDir)"
DestinationFolder="$(ManagedBuildDir)%(RecursiveDir)"
SkipUnchangedFiles="true" />
<Message Importance="high"
Text="[StgSharp] $(MSBuildProjectName) → $(NativeBuildDir)" />
Text="[StgSharp] $(MSBuildProjectName) → $(ManagedBuildDir)" />
</Target>
<!-- ════════════════════════════════════════════════════════ -->
@@ -66,32 +66,32 @@
<ItemGroup>
<!-- 扫描 build/ 下所有 RID 子目录中的 native 文件 -->
<_PackNative Include="$(SolutionRoot)build\win-x64\$(NativeLibName).dll"
Condition="Exists('$(SolutionRoot)build\win-x64\$(NativeLibName).dll')"
<_PackNative Include="$(SolutionRoot)cmake_build\win_x64\$(NativeLibName).dll"
Condition="Exists('$(SolutionRoot)cmake_build\win_x64\$(NativeLibName).dll')"
PackagePath="runtimes\win-x64\native" Pack="true" />
<_PackNative Include="$(SolutionRoot)build\win-arm64\$(NativeLibName).dll"
Condition="Exists('$(SolutionRoot)build\win-arm64\$(NativeLibName).dll')"
<_PackNative Include="$(SolutionRoot)cmake_build\win_arm64\$(NativeLibName).dll"
Condition="Exists('$(SolutionRoot)cmake_build\win_arm64\$(NativeLibName).dll')"
PackagePath="runtimes\win-arm64\native" Pack="true" />
<_PackNative Include="$(SolutionRoot)build\linux-x64\lib$(NativeLibName).so"
Condition="Exists('$(SolutionRoot)build\linux-x64\lib$(NativeLibName).so')"
<_PackNative Include="$(SolutionRoot)cmake_build\linux_x64\lib$(NativeLibName).so"
Condition="Exists('$(SolutionRoot)cmake_build\linux_x64\lib$(NativeLibName).so')"
PackagePath="runtimes\linux-x64\native" Pack="true" />
<_PackNative Include="$(SolutionRoot)build\linux-arm64\lib$(NativeLibName).so"
Condition="Exists('$(SolutionRoot)build\linux-arm64\lib$(NativeLibName).so')"
<_PackNative Include="$(SolutionRoot)cmake_build\linux_arm64\lib$(NativeLibName).so"
Condition="Exists('$(SolutionRoot)cmake_build\linux_arm64\lib$(NativeLibName).so')"
PackagePath="runtimes\linux-arm64\native" Pack="true" />
<_PackNative Include="$(SolutionRoot)build\linux-ppc64le\lib$(NativeLibName).so"
Condition="Exists('$(SolutionRoot)build\linux-ppc64le\lib$(NativeLibName).so')"
<_PackNative Include="$(SolutionRoot)cmake_build\linux_ppc64le\lib$(NativeLibName).so"
Condition="Exists('$(SolutionRoot)cmake_build\linux_ppc64le\lib$(NativeLibName).so')"
PackagePath="runtimes\linux-ppc64le\native" Pack="true" />
<_PackNative Include="$(SolutionRoot)build\osx-x64\lib$(NativeLibName).dylib"
Condition="Exists('$(SolutionRoot)build\osx-x64\lib$(NativeLibName).dylib')"
<_PackNative Include="$(SolutionRoot)cmake_build\osx_x64\lib$(NativeLibName).dylib"
Condition="Exists('$(SolutionRoot)cmake_build\osx_x64\lib$(NativeLibName).dylib')"
PackagePath="runtimes\osx-x64\native" Pack="true" />
<_PackNative Include="$(SolutionRoot)build\osx-arm64\lib$(NativeLibName).dylib"
Condition="Exists('$(SolutionRoot)build\osx-arm64\lib$(NativeLibName).dylib')"
<_PackNative Include="$(SolutionRoot)cmake_build\osx_arm64\lib$(NativeLibName).dylib"
Condition="Exists('$(SolutionRoot)cmake_build\osx_arm64\lib$(NativeLibName).dylib')"
PackagePath="runtimes\osx-arm64\native" Pack="true" />
<None Include="@(_PackNative)" />
+122 -58
View File
@@ -1,35 +1,32 @@
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// file="HlsfAllocatorBench.cs"
// file="HlsfAllocatorBench"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using BenchmarkDotNet.Attributes;
using StgSharp.Mathematics.Memory;
using StgSharp.HighPerformance.Memory;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
@@ -37,7 +34,6 @@ using System.Runtime.InteropServices;
namespace StgSharp.Benchmark
{
[MemoryDiagnoser]
[InvocationCount(2048)]
public class HlsfAllocatorBench
{
@@ -45,11 +41,24 @@ namespace StgSharp.Benchmark
private const int AllocationCount = 2048;
private static readonly int[] AllocSizes = [ 64, 96, 150, 200, 400, 1024, 4096 ];
private HybridLayerSegregatedFitAllocator _hlsfAllocator = null!;
private readonly List<hlsfHandle> _hlsfLocalList = new();
private const int BatchCount = 256;
private const int TotalOperationsPerInvoke = BatchCount * AllocationCount;
private static readonly int[] AllocSizes = [
64,
100,
200,
400,
1024,
4096
];
private readonly int[] _freeOrderByBatch = new int[TotalOperationsPerInvoke];
private readonly uint[] _requestSizesByBatch = new uint[TotalOperationsPerInvoke];
private readonly List<HlsfHandle> _hlsfLocalList = new();
private readonly List<nint> _libcLocalList = new();
private Random _random = new(42);
private HybridLayerSegregatedFitAllocator _hlsfAllocator = null!;
[GlobalCleanup]
public void Cleanup()
@@ -61,52 +70,65 @@ namespace StgSharp.Benchmark
_libcLocalList.TrimExcess();
}
[Benchmark]
[Benchmark(OperationsPerInvoke = TotalOperationsPerInvoke)]
public void Hlsf()
{
RunHlsf(_hlsfAllocator, FreePolicy.NoCollect);
for (int batch = 0; batch < BatchCount; batch++) {
RunHlsf(batch, _hlsfAllocator, FreePolicy.NoCollect);
}
}
[IterationCleanup]
public void IterationCleanup()
{
_hlsfAllocator?.Dispose();
_hlsfAllocator = null!;
_hlsfLocalList.Clear();
_libcLocalList.Clear();
}
[IterationSetup]
public void IterationSetup()
{
_hlsfAllocator?.Dispose();
_random = new Random(42);
_hlsfAllocator = new HybridLayerSegregatedFitAllocator(GetArenaBytes(), align:(int)Alignment);
BuildIterationWorkload();
_hlsfLocalList.Clear();
_libcLocalList.Clear();
}
[Benchmark(Baseline = true)]
[Benchmark(Baseline = true, OperationsPerInvoke = TotalOperationsPerInvoke)]
public unsafe void Libc()
{
_libcLocalList.Clear();
for (int i = 0; i < AllocationCount; i++)
{
uint size = AlignSize(GetNextRandomSize());
void* allocate = NativeMemory.AlignedAlloc(size, Alignment);
if (allocate == null) {
throw new OutOfMemoryException("NativeMemory.AlignedAlloc returned null.");
}
_libcLocalList.Add((nint)allocate);
}
for (int i = 0; i < _libcLocalList.Count; i++) {
NativeMemory.AlignedFree((void*)_libcLocalList[i]);
for (int batch = 0; batch < BatchCount; batch++) {
RunLibc(batch);
}
}
[GlobalSetup]
public void Setup()
{
_random = new Random(42);
_hlsfAllocator = new HybridLayerSegregatedFitAllocator(GetArenaBytes(), align:(int)Alignment);
}
private static uint AlignSize(uint size)
private static uint AlignSize(
uint size
)
{
uint mask = Alignment - 1;
return (size + mask) & ~mask;
}
private void BuildIterationWorkload()
{
for (int batch = 0; batch < BatchCount; batch++)
{
int batchOffset = batch * AllocationCount;
for (int i = 0; i < AllocationCount; i++)
{
_requestSizesByBatch[batchOffset + i] = AlignSize((uint)AllocSizes[_random.Next(AllocSizes.Length)]);
_freeOrderByBatch[batchOffset + i] = i;
}
ShuffleFreeOrder(batchOffset, AllocationCount);
}
}
private static nuint GetArenaBytes()
{
const int defaultMb = 512;
@@ -114,28 +136,70 @@ namespace StgSharp.Benchmark
int mb = defaultMb;
string? env = Environment.GetEnvironmentVariable("HLSF_BENCH_ARENA_MB");
if (!string.IsNullOrWhiteSpace(env) && int.TryParse(env, out int parsed) && parsed >= minMb) {
if (!string.IsNullOrWhiteSpace(env) &&
int.TryParse(env, out int parsed) &&
parsed >= minMb) {
mb = parsed;
}
return (nuint)mb * 1024u * 1024u;
}
private uint GetNextRandomSize() => (uint)AllocSizes[_random.Next(AllocSizes.Length)];
private void RunHlsf(HybridLayerSegregatedFitAllocator allocator, FreePolicy policy)
private void RunHlsf(
int batch,
HybridLayerSegregatedFitAllocator allocator,
FreePolicy policy
)
{
int batchOffset = batch * AllocationCount;
_hlsfLocalList.Clear();
for (int i = 0; i < AllocationCount; i++)
{
uint size = AlignSize(GetNextRandomSize());
hlsfHandle allocate = allocator.Alloc(size);
uint size = _requestSizesByBatch[batchOffset + i];
HlsfHandle allocate = allocator.Alloc(size);
_hlsfLocalList.Add(allocate);
}
for (int i = 0; i < _hlsfLocalList.Count; i++) {
allocator.Free(_hlsfLocalList[i], policy);
allocator.Free(_hlsfLocalList[_freeOrderByBatch[batchOffset + i]], policy);
}
}
private unsafe void RunLibc(
int batch
)
{
int batchOffset = batch * AllocationCount;
_libcLocalList.Clear();
for (int i = 0; i < AllocationCount; i++)
{
uint size = _requestSizesByBatch[batchOffset + i];
void* allocate = NativeMemory.AlignedAlloc(size, Alignment);
if (allocate == null) {
throw new OutOfMemoryException("NativeMemory.AlignedAlloc returned null.");
}
_libcLocalList.Add((nint)allocate);
}
for (int i = 0; i < _libcLocalList.Count; i++) {
NativeMemory.AlignedFree((void*)_libcLocalList[_freeOrderByBatch[batchOffset + i]]);
}
}
private void ShuffleFreeOrder(
int offset,
int count
)
{
for (int i = count - 1; i > 0; i--)
{
int swapIndex = _random.Next(i + 1);
int left = offset + i;
int right = offset + swapIndex;
(_freeOrderByBatch[left], _freeOrderByBatch[right]) =
(_freeOrderByBatch[right], _freeOrderByBatch[left]);
}
}
+3 -17
View File
@@ -32,21 +32,7 @@ using BenchmarkDotNet.Running;
using BenchmarkDotNet.Toolchains.InProcess.Emit;
using StgSharp.Benchmark;
namespace StgSharp.Benchmark
{
internal static class Program
{
private static void Main(
string[] args
)
{
IConfig config = ManualConfig.Create(DefaultConfig.Instance)
IConfig config = ManualConfig.Create(DefaultConfig.Instance)
.AddLogger(ConsoleLogger.Default)
.AddJob(Job.Default
.WithToolchain(InProcessEmitToolchain.Instance));
_ = BenchmarkRunner.Run<SwissTableBench>(config);
}
}
}
.AddJob(Job.Default.WithToolchain(InProcessEmitToolchain.Instance));
_ = BenchmarkRunner.Run<HlsfAllocatorBench>(config);
@@ -39,7 +39,7 @@ namespace StgSharp.HighPerformance.Memory
public void DebugAgeAll()
{
AgeAll();
// AgeAll();
}
public bool DebugContains(
@@ -109,11 +109,11 @@ namespace StgSharp.HighPerformance.Memory
*
* This is safe only with the current L4 allocation/layout guarantees.
*/
short predictCount = Volatile.Read(ref (*_predictCount)[index]);
short mapCount = Volatile.Read(ref (*_mapCount)[index]);
int decrement = (short.Min(predictCount, mapCount) + 1) / 2;
_ = Interlocked.Add(ref Unsafe.As<short, int>(ref (*_predictCount)[index]), -decrement);
_ = Interlocked.Add(ref Unsafe.As<short, int>(ref (*_mapCount)[index]), -decrement);
int predictCount = Volatile.Read(ref (*_predictCount)[index]);
int mapCount = Volatile.Read(ref (*_mapCount)[index]);
int decrement = (int.Min(predictCount, mapCount) + 1) / 2;
_ = Interlocked.Add(ref (*_predictCount)[index], -decrement);
_ = Interlocked.Add(ref (*_mapCount)[index], -decrement);
}
(*_predictCount)[index]++;
}
@@ -0,0 +1,384 @@
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// file="Ptr64"
// Project: StgSharp
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
namespace StgSharp.HighPerformance.Memory
{
#pragma warning disable CA2225
public readonly struct Ptr64 : IEquatable<Ptr64>, IComparable<Ptr64>, IFormattable
{
public Ptr64(
ulong value
)
{
Value = value;
}
public ulong Value { get; }
public int CompareTo(
Ptr64 other
)
{
return Value.CompareTo(other.Value);
}
public bool Equals(
Ptr64 other
)
{
return Value == other.Value;
}
public override bool Equals(
object? obj
)
{
return obj is Ptr64 other && Equals(other);
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
public override string ToString()
{
return Value.ToString();
}
public string ToString(
string? format,
IFormatProvider? formatProvider
)
{
return Value.ToString(format, formatProvider);
}
public static Ptr64 operator -(
Ptr64 left,
ulong right
)
{
return new(left.Value - right);
}
public static ulong operator -(
Ptr64 left,
Ptr64 right
)
{
return left.Value - right.Value;
}
public static bool operator !=(
Ptr64 left,
Ptr64 right
)
{
return left.Value != right.Value;
}
public static Ptr64 operator &(
Ptr64 left,
ulong mask
)
{
return new(left.Value & mask);
}
public static Ptr64 operator |(
Ptr64 left,
ulong mask
)
{
return new(left.Value | mask);
}
public static Ptr64 operator +(
Ptr64 left,
ulong right
)
{
return new(left.Value + right);
}
public static bool operator <(
Ptr64 left,
Ptr64 right
)
{
return left.Value < right.Value;
}
public static Ptr64 operator <<(
Ptr64 left,
int shift
)
{
return new Ptr64(left.Value << shift);
}
public static bool operator <=(
Ptr64 left,
Ptr64 right
)
{
return left.Value <= right.Value;
}
public static bool operator ==(
Ptr64 left,
Ptr64 right
)
{
return left.Value == right.Value;
}
public static bool operator >(
Ptr64 left,
Ptr64 right
)
{
return left.Value > right.Value;
}
public static bool operator >=(
Ptr64 left,
Ptr64 right
)
{
return left.Value >= right.Value;
}
public static Ptr64 operator >>(
Ptr64 left,
int shift
)
{
return new Ptr64(left.Value >> shift);
}
public static implicit operator Ptr64(
ulong value
)
{
return new(value);
}
public static implicit operator ulong(
Ptr64 value
)
{
return value.Value;
}
}
public readonly struct SPtr64 : IEquatable<SPtr64>, IComparable<SPtr64>, IFormattable
{
public SPtr64(
long value
)
{
Value = value;
}
public long Value { get; }
public int CompareTo(
SPtr64 other
)
{
return Value.CompareTo(other.Value);
}
public bool Equals(
SPtr64 other
)
{
return Value == other.Value;
}
public override bool Equals(
object? obj
)
{
return obj is SPtr64 other && Equals(other);
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
public override string ToString()
{
return Value.ToString();
}
public string ToString(
string? format,
IFormatProvider? formatProvider
)
{
return Value.ToString(format, formatProvider);
}
public static SPtr64 operator -(
SPtr64 left,
long right
)
{
return new(left.Value - right);
}
public static long operator -(
SPtr64 left,
SPtr64 right
)
{
return left.Value - right.Value;
}
public static bool operator !=(
SPtr64 left,
SPtr64 right
)
{
return left.Value != right.Value;
}
public static SPtr64 operator &(
SPtr64 left,
long mask
)
{
return new(left.Value & mask);
}
public static SPtr64 operator |(
SPtr64 left,
long mask
)
{
return new(left.Value | mask);
}
public static SPtr64 operator +(
SPtr64 left,
long right
)
{
return new(left.Value + right);
}
public static bool operator <(
SPtr64 left,
SPtr64 right
)
{
return left.Value < right.Value;
}
public static SPtr64 operator <<(
SPtr64 left,
int shift
)
{
return new SPtr64(left.Value << shift);
}
public static bool operator <=(
SPtr64 left,
SPtr64 right
)
{
return left.Value <= right.Value;
}
public static bool operator ==(
SPtr64 left,
SPtr64 right
)
{
return left.Value == right.Value;
}
public static bool operator >(
SPtr64 left,
SPtr64 right
)
{
return left.Value > right.Value;
}
public static bool operator >=(
SPtr64 left,
SPtr64 right
)
{
return left.Value >= right.Value;
}
public static SPtr64 operator >>(
SPtr64 left,
int shift
)
{
return new SPtr64(left.Value >> shift);
}
public static implicit operator long(
SPtr64 value
)
{
return value.Value;
}
public static implicit operator SPtr64(
long value
)
{
return new(value);
}
}
#pragma warning disable CA2225
}
@@ -56,29 +56,25 @@ namespace StgSharp.HighPerformance.Memory
/// </exception>
/// <remarks>
/// <para><strong> Important Threading Considerations: </strong></para> <para> While SLAB
/// /// /// /// allocators themselves may be designed for single-threaded use,
/// allocated /// objects /// are /// frequently shared across multiple threads in
/// real-world /// applications. Due to /// the /// special implementation of
/// expandable concurrent /// sequential SLAB allocators, /// they rely /// on
/// internal expansion locks to /// ensure that memory buffer expansions /// (which
/// involve /// copying the entire /// buffer to a new location) do not occur while
/// /// other threads are /// reading /// from allocated regions.</para>
/// <para><strong> /// Sequential Layout Limitations: /// /// </strong><br />
/// Sequential layout SLAB allocators /// cannot provide a single- /// threaded ///
/// version because:<list /// type="bullet"><item><description> They use ///
/// contiguous memory /// layout that requires /// buffer expansion when capacity is
/// /// exceeded /// /// </description></item><item><description> Buffer expansion
/// involves /// copying all /// /// existing data to a new memory /// location
/// </description></item><item><description>/// /// Without proper ///
/// synchronization, concurrent access to allocated objects during /// /// expansion
/// /// would cause memory corruption </description></item><item><description> The ///
/// /// /// expansion lock mechanism is essential even if allocation itself is
/// single- /// /// /// threaded</description></item></list></para> <para><strong>
/// Chunked Layout: /// /// /// </strong><br /> Chunked layout allocators can
/// optionally provide single-threaded /// /// /// versions since they don't
/// require buffer expansion and copying. Each /// chunk is /// /// allocated
/// independently, avoiding the memory relocation issues /// present in ///
/// sequential /// layouts.</para>
/// allocators themselves may be designed for single-threaded use, allocated objects are
/// frequently shared across multiple threads in real-world applications. Due to the
/// special implementation of expandable concurrent sequential SLAB allocators, they rely
/// on internal expansion locks to ensure that memory buffer expansions (which involve
/// copying the entire buffer to a new location) do not occur while other threads are
/// reading from allocated regions.</para> <para><strong>Sequential Layout
/// Limitations:</strong><br /> Sequential layout SLAB allocators cannot provide a single-
/// threaded version because:<list type="bullet"><item><description>They use contiguous
/// memory layout that requires buffer expansion when capacity is
/// exceeded</description></item><item><description>Buffer expansion involves copying all
/// existing data to a new memory location</description></item><item><description> Without
/// proper synchronization, concurrent access to allocated objects during synchronization,
/// concurrent access to allocated objects during expansion would cause memory corruption
/// </description></item><item><description> The expansion lock mechanism is essential
/// even if allocation itself is single- threaded</description></item></list></para>
/// <para><strong> Chunked Layout: </strong><br /> Chunked layout allocators can
/// optionally provide single-threaded versions since they don't require buffer expansion
/// and copying. Each chunk is allocated independently, avoiding the memory relocation
/// issues present in sequential layouts.</para>
/// </remarks>
public static SlabAllocator<T> Create<T>(
nuint count,
@@ -89,12 +85,12 @@ namespace StgSharp.HighPerformance.Memory
return layout switch
{
SlabBufferLayout.Sequential => concurrentSupport ?
(new ConcurrentSequentialSlabAllocator<T>(count)) :
(throw new NotSupportedException("Non-concurrent version of sequential layout SLAB is not supported due to expansion lock requirements for memory safety during buffer expansion.")),
new ConcurrentSequentialSlabAllocator<T>(count) :
throw (new NotSupportedException("Non-concurrent version of sequential layout SLAB is not supported due to expansion lock requirements for memory safety during buffer expansion.")),
SlabBufferLayout.Chunked => concurrentSupport ?
(new ConcurrentChunkedSlabAllocator<T>(count)) :
(new ChunkedSlabAllocator<T>(count)),
_ => throw new ArgumentOutOfRangeException(nameof(layout), layout, null)
new ConcurrentChunkedSlabAllocator<T>(count) :
new ChunkedSlabAllocator<T>(count),
_ => throw (new ArgumentOutOfRangeException(nameof(layout), layout, null))
};
}
@@ -0,0 +1,215 @@
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// file="TwoLayerSegregatedFitAllocator"
// Project: StgSharp
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.HighPerformance.Memory;
using StgSharp.HighPerformance.ProcessorAbstraction;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using static StgSharp.HighPerformance.Memory.TwoLayerSegregatedFitAllocator;
namespace StgSharp.HighPerformance.Memory
{
public unsafe class TwoLayerSegregatedFitAllocator : IDisposable
{
private const ulong Mask48Bits = 0x0000FFFFFFFFFFFF;
private Metadata* _allocEnd;
private readonly Metadata*[] _bucket;
private readonly Metadata* _spareMemory;
private readonly Action<nuint> _freeHandle;
private bool disposedValue;
private readonly int _align;
private readonly Ptr64 _basePtr;
private readonly ulong _maxAllocSize;
private readonly ulong _totalSize;
internal TwoLayerSegregatedFitAllocator(
nuint byteSize,
int align,
ulong maxBlockSize,
Func<nuint, int, nuint> allocator,
Action<nuint> freeHandle
)
: this(byteSize, align, maxBlockSize, (void*)allocator(byteSize, align), freeHandle) { }
internal TwoLayerSegregatedFitAllocator(
nuint byteSize,
int align,
ulong maxBlockSize,
void* externalPointer,
Action<nuint> freeHandle
)
{
_totalSize = byteSize;
_basePtr = (Ptr64)(ulong)externalPointer;
_align = align;
_maxAllocSize = ulong.Max(64, (~64UL) & (ulong.Min(maxBlockSize + 63, Mask48Bits)));
_bucket = new Metadata*[58 - BitOperations.LeadingZeroCount(_maxAllocSize)];
_spareMemory = &((Metadata*)(ulong)(_basePtr + _totalSize))[-1];
_freeHandle = freeHandle ?? (static_ => { });
_allocEnd = _spareMemory;
// init spare memory node
_spareMemory->Position = 0UL;
_spareMemory->Size = _totalSize - Metadata.SizeOf;
_spareMemory->NextLevel = 0;
_spareMemory->NextNear = 0;
_spareMemory->PreviousLevel = 0;
_spareMemory->PreviousNear = 0;
}
public TwoLayerSegregatedFitAllocator(
nuint byteSize
)
: this(byteSize, 16, 32U * 1024U * 1024U, NativeMemory.AlignedAlloc(byteSize, 16),
ptr => NativeMemory.AlignedFree((void*)ptr)) { }
public TwoLayerSegregatedFitAllocator(
nuint byteSize,
uint maxBlockSize
)
: this(byteSize, 16, maxBlockSize, NativeMemory.AlignedAlloc(byteSize, 16),
ptr => NativeMemory.AlignedFree((void*)ptr)) { }
public TwoLayerSegregatedFitAllocator(
nuint byteSize,
int align
)
: this(byteSize, align, 32U * 1024U * 1024U, NativeMemory.AlignedAlloc(byteSize, 16),
ptr => NativeMemory.AlignedFree((void*)ptr)) { }
public TwoLayerSegregatedFitAllocator(
nuint byteSize,
int align,
nuint maxBlockSize
)
: this(byteSize, align, maxBlockSize, NativeMemory.AlignedAlloc(byteSize, 16),
ptr => NativeMemory.AlignedFree((void*)ptr)) { }
public Handle Alloc(
nuint size
)
{
ulong allocSize = nuint.Max(64, (~64U) & (size + 63));
if (allocSize > _maxAllocSize) {
throw new OverflowException("Requested allocation size exceeds the maximum block size.");
}
int level = 57 - BitOperations.LeadingZeroCount(allocSize);
Metadata* entry = null;
for (int i = level; i < _bucket.Length; i++)
{
entry = _bucket[i];
if (entry is not null)
{
_bucket[i] = entry->NextLevel != 0 ? &_spareMemory[-entry->NextLevel] : null;
break;
}
}
if (entry is null)
{
// alloc new from spare
}
ulong remain = entry->Size - allocSize;
throw new NotImplementedException();
}
public void Dispose()
{
Dispose(disposing:true);
GC.SuppressFinalize(this);
}
public void Free(
Handle handle
)
{
throw new NotImplementedException();
}
protected virtual void Dispose(
bool disposing
)
{
if (!disposedValue)
{
if (disposing) {
_freeHandle((nuint)_basePtr);
}
disposedValue = true;
}
}
[StructLayout(LayoutKind.Sequential)]
public struct Handle
{
internal readonly Metadata* Meta;
public readonly void* Pointer;
}
[StructLayout(LayoutKind.Explicit, Size = 32)]
internal struct Metadata
{
[FieldOffset(24)] private ulong PositionMask;
[FieldOffset(16)] private ulong SizeMask;
[FieldOffset(0)] public int NextLevel;
[FieldOffset(4)] public int NextNear;
[FieldOffset(8)] public int PreviousLevel;
[FieldOffset(12)] public int PreviousNear;
[FieldOffset(22)] public ushort Mask1;
[FieldOffset(30)] public ushort Mask2;
public Ptr64 Position
{
readonly get => (Ptr64)(PositionMask & Mask48Bits);
set => PositionMask = (PositionMask & ~Mask48Bits) | ((ulong)value & Mask48Bits);
}
public Ptr64 Size
{
readonly get => (Ptr64)(SizeMask & Mask48Bits);
set => SizeMask = (SizeMask & ~Mask48Bits) | ((ulong)value & Mask48Bits);
}
public static uint SizeOf { get; } = (uint)Unsafe.SizeOf<Metadata>();
}
}
}
@@ -53,13 +53,13 @@ namespace StgSharp.HighPerformance.Memory
Entry* entry = null;
nuint requestedOffset = GetAllocSize(size);
(int level, int segment) = GetIndexPairOnce(size);
int index = (3 * level) + segment;
int index = int.Min((3 * level) + segment, _bucketHeads.Length);
int i = index;
while ((i < _bucketHeads.Length) && !TryPopLevelForAllocation(index, out entry)) {
while ((i < _bucketHeads.Length) && !TryPopLevelForAllocation(i, out entry)) {
i++;
}
if ((i > _maxLevel) && !TryAllocateNewBlock(requestedOffset, out entry)) {
throw new OverflowException("Out of memory: Unable to allocate new 16MB block or find suitable bucket for allocation.");
if ((i >= _bucketHeads.Length) && !TryAllocateNewBlock(requestedOffset, out entry)) {
throw new OverflowException($"Out of memory: unable to satisfy request of {size} B (aligned {requestedOffset} B) from existing buckets or spare memory.");
}
if (entry != null)
{
@@ -96,13 +96,13 @@ namespace StgSharp.HighPerformance.Memory
Entry* entry = null;
nuint requestedOffset = GetAllocSize(size);
(int level, int segment) = GetIndexPairOnce(size);
int index = (3 * level) + segment;
int index = int.Min((3 * level) + segment, _bucketHeads.Length);
int i = index;
while ((i < _bucketHeads.Length) && !TryPopLevelForAllocation(index, out entry)) {
while ((i < _bucketHeads.Length) && !TryPopLevelForAllocation(i, out entry)) {
i++;
}
if ((i > _maxLevel) && !TryAllocateNewBlock(requestedOffset, out entry)) {
throw new OverflowException("Out of memory: Unable to allocate new 16MB block or find suitable bucket for allocation.");
if ((i >= _bucketHeads.Length) && !TryAllocateNewBlock(requestedOffset, out entry)) {
throw new OverflowException($"Out of memory: unable to satisfy request of {size} B (aligned {requestedOffset} B) from existing buckets or spare memory.");
}
if (entry != null)
@@ -139,9 +139,23 @@ namespace StgSharp.HighPerformance.Memory
Entry* next = e;
nuint remain = sizeToSlice; // remained size to slice
nuint offset = e->Position - sizeToSlice - ((nuint)m_Buffer); // offset of buffer to slice
nuint position = e->Position - sizeToSlice; // position of buffer to slice
nuint end = e->Position - ((nuint)m_Buffer); // end offset of buffer to slice
int i = (BitOperations.TrailingZeroCount(offset) - 6) / 2;
int i = GetBucketIndexOnce(sizeToSlice);
Entry* entry = (Entry*)_entries.Allocate();
SetEntryLevel(entry, position, remain);
entry->State = EntryState.Empty;
BucketNode* bucketNode = (BucketNode*)entry->Position;
bucketNode->EntryRef = entry;
PushNodeToBucket(i, bucketNode);
Entry* prev = next->PreviousNear;
prev->NextNear = entry;
entry->PreviousNear = prev;
entry->NextNear = next;
next->PreviousNear = entry;
}
/// <summary>
@@ -34,6 +34,12 @@ namespace StgSharp.HighPerformance.Memory
{
public unsafe partial class HybridLayerSegregatedFitAllocator
{
/*
* All operations with style of (level, segment)
* DO NOT assume that the level are valid.
* They are just used to calculate the bucket index,
* which may exceed the range of _bucketHeads.
*/
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void PushBucketToLevel(
@@ -46,7 +52,7 @@ namespace StgSharp.HighPerformance.Memory
return;
}
int index = (3 * levelIndex) + sizeIndex;
int index = Math.Min((3 * levelIndex) + sizeIndex, _bucketHeads.Length - 1);
PushNodeToBucket(index, node);
}
@@ -55,7 +61,7 @@ namespace StgSharp.HighPerformance.Memory
BucketNode* node
)
{
index = (index >= _bucketHeads.Length) ? _bucketHeads.Length : index;
index = Math.Min(index, _bucketHeads.Length - 1);
if (_bucketHeads[index] is null)
{
_bucketHeads[index] = node;
@@ -69,15 +75,12 @@ namespace StgSharp.HighPerformance.Memory
{
BucketNode* head = _bucketHeads[index];
node->NextLevel = head;
BucketNode* headNode = head;
node->IsInBucket = true;
_bucketHeads[index] = node;
// Console.WriteLine($"Push to head of level of {levelIndex} {sizeIndex}, bucket pos {(ulong)node}, previous head is at {head}");
if (headNode != null)
{
headNode->PreviousLevel = node;
}
head->PreviousLevel = node;
return;
}
}
@@ -89,8 +92,7 @@ namespace StgSharp.HighPerformance.Memory
BucketNode* node
)
{
int index = (3 * levelIndex) + sizeIndex;
index = (index >= _bucketHeads.Length) ? _bucketHeads.Length : index;
int index = Math.Min((3 * levelIndex) + sizeIndex, _bucketHeads.Length - 1);
if (_bucketHeads[index] == node)
{
if (TryPopBucket(index, out _)) {
@@ -157,8 +159,7 @@ namespace StgSharp.HighPerformance.Memory
out BucketNode* node
)
{
int index = (3 * levelIndex) + sizeIndex;
index = (index >= _bucketHeads.Length) ? (_bucketHeads.Length - 1) : index;
int index = int.Min((3 * levelIndex) + sizeIndex, _bucketHeads.Length - 1);
return TryPopBucket(index, out node);
}
@@ -74,12 +74,14 @@ namespace StgSharp.HighPerformance.Memory
{
size += cur->Size;
Entry* next = cur->NextNear;
RemoveFromBucket(cur->Level, DetermineSegmentIndex(_levelSizeArray, cur->Size, cur->Level), (BucketNode*)cur->Position);
RemoveFromBucket(cur->Level, GetSegmentFromLevel(cur->Size, cur->Level), (BucketNode*)cur->Position);
RemoveFromPositionChain(cur);
cur = next;
} while ((cur != null) && (cur != _spareMemory) && (cur->State == EntryState.Empty));
if (size > 0) {
if (size > 0)
{
OrganizeMemory(cur, size);
size = 0;
}
}
}
@@ -108,16 +110,12 @@ namespace StgSharp.HighPerformance.Memory
e->State = EntryState.Empty;
// Try merge with adjacent free blocks and remove them from buckets
if (collectPolicy == FreePolicy.LazyCollect)
{
MergeAndRemoveFromBuckets(e);
}
// Calculate final level and segment for the merged block
nuint finalSize = e->Size;
int finalLevel = GetLevelFromSize(finalSize);
(int finalLevel, int finalSegment) = GetIndexPairOnce(finalSize);
e->Level = finalLevel;
int finalSegment = DetermineSegmentIndex(_levelSizeArray, finalSize, finalLevel);
// Push the merged entry back to appropriate bucket
PushBucketToLevel(finalLevel, finalSegment, (BucketNode*)e->Position);
@@ -145,16 +143,14 @@ namespace StgSharp.HighPerformance.Memory
e->State = EntryState.Empty;
// Try merge with adjacent free blocks and remove them from buckets
if (collectPolicy == FreePolicy.LazyCollect)
{
/**/
MergeAndRemoveFromBuckets(e);
}
// Calculate final level and segment for the merged block
nuint finalSize = e->Size;
int finalLevel = GetLevelFromSize(finalSize);
e->Level = finalLevel;
int finalSegment = DetermineSegmentIndex(_levelSizeArray, finalSize, finalLevel);
int finalSegment = GetSegmentFromLevel(finalSize, finalLevel);
// Push the merged entry back to appropriate bucket
PushBucketToLevel(finalLevel, finalSegment, (BucketNode*)e->Position);
@@ -62,7 +62,7 @@ namespace StgSharp.HighPerformance.Memory
level = Math.Min(level, _maxLevel);
uint levelSize = 1u << (log2Size & (~1));
int segment = ((int)(size / levelSize)) - 1;
return (level * 3) + segment;
return Math.Min((level * 3) + segment, _bucketHeads.Length - 1);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -82,6 +82,19 @@ namespace StgSharp.HighPerformance.Memory
return (level, segment);
}
/// <summary>
/// NOTICE: returned level may exceed maxLevel, caller is responsible for ensuring the
/// returned level is within bounds. This method is designed for performance and does not
/// perform bounds checking.
/// </summary>
/// <param name="size">
/// Size of the memory block to determine level for. This method does not assume size is
/// already aligned
/// </param>
/// <returns>
/// Level corresponding to the given size. Level is determined based on the formula: level
/// >= (log2(S) - 6) / 2
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private int GetLevelFromSize(
nuint size
@@ -104,7 +117,7 @@ namespace StgSharp.HighPerformance.Memory
int level = Math.Max(0, (log2Size - 6) / 2);
// caller is responsible for ensuring level is within bounds
return Math.Min(level, _maxLevel);
return level;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -42,13 +42,12 @@ namespace StgSharp.HighPerformance.Memory
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static bool AssertAdjacentTo(
Entry* current,
Entry* other
Entry* front,
Entry* back
)
{
// Only a predicate; never throw here. Callers rely on false to skip merging.
return (other->Position + other->Size == current->Position) ||
(current->Position + current->Size == other->Position);
return front->Position + front->Size == back->Position;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -83,7 +82,8 @@ namespace StgSharp.HighPerformance.Memory
/// strategy.
/// </summary>
private void MergeAndRemoveFromBuckets(
Entry* entry
Entry* entry,
int maxScanRange = 4
)
{
if (entry == null) {
@@ -94,7 +94,8 @@ namespace StgSharp.HighPerformance.Memory
nuint size = entry->Size;
int originLevel = entry->Level;
int segment = GetSegmentFromLevel(size, originLevel);
do
for (int i = 0; i < maxScanRange; i++)
{
// previous direction merge
Entry* p = entry->PreviousNear;
@@ -112,9 +113,9 @@ namespace StgSharp.HighPerformance.Memory
entry->Position = p->Position;
RemoveFromBucket(originLevel, GetSegmentFromLevel(p->Size, originLevel), (BucketNode*)p->Position);
RemoveFromPositionChain(p);
} while (true);
}
do
for (int i = 0; i < maxScanRange; i++)
{
// next direction merge
Entry* n = entry->NextNear;
@@ -122,7 +123,7 @@ namespace StgSharp.HighPerformance.Memory
(n == _spareMemory) ||
(n->State != EntryState.Empty) ||
(n->Level != entry->Level) ||
!AssertAdjacentTo(n, entry))
!AssertAdjacentTo(entry, n))
{
break;
}
@@ -131,8 +132,9 @@ namespace StgSharp.HighPerformance.Memory
entry->Size += n->Size;
RemoveFromBucket(originLevel, GetSegmentFromLevel(n->Size, originLevel), (BucketNode*)n->Position);
RemoveFromPositionChain(n);
} while (true);
originLevel = int.Min(9, originLevel);
}
// originLevel = int.Min(9, originLevel);
entry->Level = GetLevelFromSize(entry->Size);
BucketNode* bucket = (BucketNode*)entry->Position;
@@ -191,6 +193,18 @@ namespace StgSharp.HighPerformance.Memory
}
[StructLayout(LayoutKind.Explicit, Size = 32)]
internal struct Metadata
{
[FieldOffset(0)] internal int NextLevel;
[FieldOffset(4)] internal int NextNear;
[FieldOffset(8)] internal int PreviousLevel;
[FieldOffset(12)] internal int PreviousNear;
[FieldOffset(16)] internal nuint Size;
}
internal enum EntryState : uint
{
@@ -38,6 +38,7 @@ namespace StgSharp.HighPerformance.Memory
// Bucket system field - directly in main allocator class
private readonly BucketNode*[] _bucketHeads;
private Metadata* _metadata;
// _spareMemory is also the beginning position of allocator
private Entry* _spareMemory;
@@ -46,9 +47,12 @@ namespace StgSharp.HighPerformance.Memory
private readonly Action<nuint> _freeHandle;
private bool disposedValue;
private readonly int _align;
private readonly int _maxAllocCount;
private readonly int _maxLevel;
private int unusedMetaData;
private readonly nuint _maxAllocSize;
private readonly nuint _size;
private Ptr64 _basePtr;
private readonly SlabAllocator<Entry> _entries;
internal HybridLayerSegregatedFitAllocator(
@@ -78,6 +82,8 @@ namespace StgSharp.HighPerformance.Memory
_entries = entryManager ??
SlabAllocator.Create<Entry>(64, SlabBufferLayout.Chunked, false);
m_Buffer = (byte*)externalPointer;
_basePtr = (Ptr64)(nuint)externalPointer;
_metadata = (Metadata*)((nuint)externalPointer + byteSize);
_align = align;
_size = byteSize;
@@ -71,6 +71,13 @@ namespace StgSharp.HighPerformance.ProcessorAbstraction
return value.GetHashCode();
}
public ulong GetLowerBits(
int bitCount
)
{
return value & ((1UL << bitCount) - 1);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ref T Member<T>(
int index
@@ -79,6 +86,14 @@ namespace StgSharp.HighPerformance.ProcessorAbstraction
return ref Unsafe.As<byte, T>(ref buffer[index * sizeof(T)]);
}
public void SetLowerBits(
int bitCount,
ulong bits
)
{
value = (value & (~(1UL << bitCount))) | (bits & (1UL << bitCount));
}
public static bool operator !=(
M64 left,
M64 right
-8
View File
@@ -5,14 +5,6 @@
<IsNativeHost>true</IsNativeHost>
</PropertyGroup>
<ItemGroup Condition="'$(IsWindows)'=='true'">
<ProjectReference Include="..\StgSharp.Native\$(NativeLibName).vcxproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties>
<GlobalPropertiesToRemove>TargetFramework</GlobalPropertiesToRemove>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
</ItemGroup>
+3 -2
View File
@@ -26,6 +26,7 @@
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Graphics;
using StgSharp.HighPerformance.ProcessorAbstraction;
using StgSharp.Mathematics;
using System;
@@ -154,12 +155,12 @@ namespace StgSharp.Graphics.OpenGL
public TextureProperty(
TextureFilter onMagnify,
TextureFilter onMinify,
TextureWrap onHorizontial,
TextureWrap onHorizontal,
TextureWrap onVertical)
{
FilterOnMagnify = onMagnify;
FilterOnMinify = onMinify;
WrapOnHorizontial = onHorizontial;
WrapOnHorizontial = onHorizontal;
WrapOnVertical = onVertical;
}
+51 -20
View File
@@ -2,8 +2,8 @@
// -----------------------------------------------------------------------
// file="Vec2"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -25,6 +25,7 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.HighPerformance.ProcessorAbstraction;
using StgSharp.Mathematics;
using StgSharp.Mathematics.Numeric;
using System.Net.Http.Headers;
@@ -55,7 +56,9 @@ namespace StgSharp.Mathematics.Graphics
[FieldOffset(4)]
public float Y;
internal Vec2(Vector2 vec)
internal Vec2(
Vector2 vec
)
{
Unsafe.SkipInit(out reg);
Unsafe.SkipInit(out X);
@@ -63,7 +66,9 @@ namespace StgSharp.Mathematics.Graphics
v = vec;
}
internal Vec2(M128 vec)
internal Vec2(
M128 vec
)
{
Unsafe.SkipInit(out reg);
Unsafe.SkipInit(out X);
@@ -72,7 +77,10 @@ namespace StgSharp.Mathematics.Graphics
reg.Member<ulong>(1) = 0;
}
public Vec2(float x, float y)
public Vec2(
float x,
float y
)
{
v = new Vector2(x, y);
}
@@ -81,11 +89,7 @@ namespace StgSharp.Mathematics.Graphics
public static Vec2 Zero => new Vec2(0, 0);
public static Vec2 One
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => new Vec2(1, 1);
}
public static Vec2 One => new Vec2(1, 1);
public Vec2 XY
{
@@ -104,56 +108,83 @@ namespace StgSharp.Mathematics.Graphics
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public float Cross(Vec2 right)
public float Cross(
Vec2 right
)
{
return X * right.Y - Y * right.X;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public float Dot(Vec2 vec)
public float Dot(
Vec2 vec
)
{
return Vector2.Dot(v, vec.v);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec2 operator -(Vec2 left, Vec2 right)
public static Vec2 operator -(
Vec2 left,
Vec2 right
)
{
return new Vec2(left.v - right.v);
}
public static bool operator !=(Vec2 left, Vec2 right)
public static bool operator !=(
Vec2 left,
Vec2 right
)
{
return !(left == right);
}
public static Vec2 operator *(Vec2 vec, float value)
public static Vec2 operator *(
Vec2 vec,
float value
)
{
return new Vec2(vec.v * value);
}
public static Vec2 operator *(float value, Vec2 vec)
public static Vec2 operator *(
float value,
Vec2 vec
)
{
return new Vec2(vec.v * value);
}
public static Vec2 operator /(Vec2 vec, float value)
public static Vec2 operator /(
Vec2 vec,
float value
)
{
return new Vec2(vec.v / value);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec2 operator +(Vec2 left, Vec2 right)
public static Vec2 operator +(
Vec2 left,
Vec2 right
)
{
return new Vec2(left.v + right.v);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator ==(Vec2 left, Vec2 right)
public static bool operator ==(
Vec2 left,
Vec2 right
)
{
return left.v == right.v;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static implicit operator Vec2((float, float) tuple)
public static implicit operator Vec2(
(float, float) tuple
)
{
return new Vec2(tuple.Item1, tuple.Item2);
}
+75 -22
View File
@@ -2,8 +2,8 @@
// -----------------------------------------------------------------------
// file="Vec3"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -25,6 +25,7 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.HighPerformance.ProcessorAbstraction;
using StgSharp.Mathematics;
using StgSharp.Mathematics.Numeric;
using System;
@@ -50,14 +51,18 @@ namespace StgSharp.Mathematics.Graphics
[FieldOffset(4)] public float Y;
[FieldOffset(8)] public float Z;
internal Vec3(M128 vector)
internal Vec3(
M128 vector
)
{
Unsafe.SkipInit(out this);
reg = vector;
reg.Member<uint>(3) = 0;
}
internal Vec3(Vector3 vector)
internal Vec3(
Vector3 vector
)
{
v = vector;
}
@@ -67,14 +72,21 @@ namespace StgSharp.Mathematics.Graphics
Unsafe.SkipInit(out this);
}
public Vec3(Vec2 xy, float z)
public Vec3(
Vec2 xy,
float z
)
{
Unsafe.SkipInit(out this);
reg = xy.reg;
Z = z;
}
public Vec3(float x, float y, float z)
public Vec3(
float x,
float y,
float z
)
{
Unsafe.SkipInit(out this);
v = new Vector3(x, y, z);
@@ -107,28 +119,39 @@ namespace StgSharp.Mathematics.Graphics
public static Vec3 UnitZ => new(0, 0, 1);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec3 Cross(Vec3 left, Vec3 right)
public static Vec3 Cross(
Vec3 left,
Vec3 right
)
{
return Linear.Cross(left, right);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public readonly float Dot(Vec3 right)
public readonly float Dot(
Vec3 right
)
{
return Vector3.Dot(v, right.v);
}
public readonly bool Equals(Vec3 other)
public readonly bool Equals(
Vec3 other
)
{
return reg == other.reg;
}
public override readonly bool Equals(object obj)
public override readonly bool Equals(
object obj
)
{
return obj is not null && obj is Vec3 vec && this == vec;
}
public static Vec3 FromSpan(ReadOnlySpan<float> span)
public static Vec3 FromSpan(
ReadOnlySpan<float> span
)
{
Vec3 v = new();
span.CopyTo(MemoryMarshal.CreateSpan(ref v.X, 3));
@@ -158,7 +181,10 @@ namespace StgSharp.Mathematics.Graphics
return ret;
}
public static bool IsParallel(Vec3 left, Vec3 right)
public static bool IsParallel(
Vec3 left,
Vec3 right
)
{
return Cross(left, right) == Zero;
}
@@ -168,61 +194,88 @@ namespace StgSharp.Mathematics.Graphics
return $"[{X},{Y},{Z}]";
}
public readonly string ToString(string sample)
public readonly string ToString(
string sample
)
{
return $"[{X.ToString(sample)},{Y.ToString(sample)},{Z.ToString(sample)}]";
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec3 operator -(Vec3 vec)
public static Vec3 operator -(
Vec3 vec
)
{
return new Vec3(-vec.v);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec3 operator -(Vec3 left, Vec3 right)
public static Vec3 operator -(
Vec3 left,
Vec3 right
)
{
return new Vec3(left.v - right.v);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator !=(Vec3 left, Vec3 right)
public static bool operator !=(
Vec3 left,
Vec3 right
)
{
return left.v != right.v;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec3 operator *(Vec3 vec, float value)
public static Vec3 operator *(
Vec3 vec,
float value
)
{
return new Vec3(vec.v * value);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float operator *(Vec3 left, Vec3 right)
public static float operator *(
Vec3 left,
Vec3 right
)
{
return Vector3.Dot(left.v, right.v);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec3 operator /(Vec3 vec, float value)
public static Vec3 operator /(
Vec3 vec,
float value
)
{
return new Vec3(vec.v / value);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Vec3 operator +(Vec3 left, Vec3 right)
public static Vec3 operator +(
Vec3 left,
Vec3 right
)
{
return new Vec3(left.v + right.v);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator ==(Vec3 left, Vec3 right)
public static bool operator ==(
Vec3 left,
Vec3 right
)
{
return left.v == right.v;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe implicit operator Vec3((float, float, float) tuple)
public static unsafe implicit operator Vec3(
(float, float, float) tuple
)
{
return Unsafe.As<(float,float,float), Vec3>(ref tuple);
}
@@ -25,6 +25,7 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.HighPerformance.ProcessorAbstraction;
using StgSharp.Mathematics;
using StgSharp.Mathematics.Internal;
using StgSharp.Mathematics.Numeric;
@@ -1,35 +1,32 @@
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// file="Matrix.Create.cs"
// file="Matrix.Create"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.HighPerformance.Memory;
using StgSharp.Mathematics;
using StgSharp.Mathematics.Memory;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -48,7 +45,8 @@ namespace StgSharp.Mathematics.Numeric
int columnLength,
int rowLength,
MatrixLayout layout,
HybridLayerSegregatedFitAllocator allocator)
HybridLayerSegregatedFitAllocator allocator
)
{
ArgumentNullException.ThrowIfNull(allocator);
@@ -77,10 +75,11 @@ namespace StgSharp.Mathematics.Numeric
long requiredBytes = kernelCount * MatrixKernel<T>.Size;
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(requiredBytes, nameof(requiredBytes));
hlsfHandle handle = allocator.Alloc((uint)requiredBytes);
HlsfHandle handle = allocator.Alloc((uint)requiredBytes);
MatrixStorageHLSF<T> storage = new MatrixStorageHLSF<T>(allocator, handle);
Matrix<T> matrix = new Matrix<T>(MatrixKernelBoarder.Create(layout), new MatrixSize(columnLength, rowLength,
Matrix<T> matrix = new Matrix<T>(MatrixKernelBoarder.Create(layout), new MatrixSize(columnLength,
rowLength,
kernelColumns,
kernelRows), storage);
@@ -88,13 +87,18 @@ namespace StgSharp.Mathematics.Numeric
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int DivideRoundUp(int value, int divisor)
private static int DivideRoundUp(
int value,
int divisor
)
{
return (value + (divisor - 1)) / divisor;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static long TriangularKernelCount(int order)
private static long TriangularKernelCount(
int order
)
{
long n = order;
return (n * (n + 1L)) / 2L;
@@ -71,7 +71,7 @@ namespace StgSharp.Mathematics.Numeric
op(task);
return;
}
MatrixParallelWrap taskWrap = MatrixParallel.ScheduleTask<BufferQueueLeftRightAns_NoNuma>(task);
MatrixParallelWrap taskWrap = /**/ null/*MatrixParallel.ScheduleTask<BufferQueueLeftRightAns_NoNuma>(task)/**/;
taskWrap.LaunchParallel(SleepMode.DeepSleep);
taskWrap.Dispose();
}
@@ -2,8 +2,8 @@
// -----------------------------------------------------------------------
// file="MatrixStorage"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -25,8 +25,8 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.HighPerformance.Memory;
using StgSharp.Mathematics;
using StgSharp.Mathematics.Memory;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -35,15 +35,16 @@ using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using HLSFAllocator = global::StgSharp.Mathematics.Memory.HybridLayerSegregatedFitAllocator;
using HLSFHandle = global::StgSharp.Mathematics.Memory.hlsfHandle;
using HLSFAllocator = global::StgSharp.HighPerformance.Memory.HybridLayerSegregatedFitAllocator;
namespace StgSharp.Mathematics.Numeric
{
public abstract class MatrixStorage<T> : IDisposable where T: unmanaged, INumber<T>
public abstract class MatrixStorage<T> : IDisposable where T : unmanaged, INumber<T>
{
internal unsafe ref MatrixKernel<T> this[long index] => ref Unsafe.AsRef<MatrixKernel<T>>(BufferPointer + (MatrixKernel<T>.Size * index));
internal unsafe ref MatrixKernel<T> this[
long index
] => ref Unsafe.AsRef<MatrixKernel<T>>(BufferPointer + (MatrixKernel<T>.Size * index));
protected internal abstract unsafe T* BufferPointer { get; }
@@ -51,12 +52,14 @@ namespace StgSharp.Mathematics.Numeric
}
internal class MatrixStorageHLSF<T>(HLSFAllocator allocator, HLSFHandle handle) : MatrixStorage<T>
where T: unmanaged, INumber<T>
internal class MatrixStorageHLSF<T>(
HLSFAllocator allocator,
HlsfHandle handle
) : MatrixStorage<T> where T : unmanaged, INumber<T>
{
internal HLSFAllocator _allocator = allocator;
internal HLSFHandle _handle = handle;
internal readonly HLSFAllocator _allocator = allocator;
internal readonly HlsfHandle _handle = handle;
protected internal override unsafe T* BufferPointer => (T*)_handle.Pointer;
@@ -25,7 +25,6 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Common.HighPerformance.ProcessorAbstraction;
using StgSharp.HighPerformance.ProcessorAbstraction;
using StgSharp.Internal;
using StgSharp.Mathematics.Numeric.Runtime;
@@ -94,11 +93,11 @@ namespace StgSharp.Mathematics.Numeric
internal void Pause()
{
ObjectDisposedException.ThrowIf(_disposed, nameof(MatrixParallelThread));
if (State == MatrixThreadState.Retired) {
if (State == MatrixThreadState.Idle) {
return;
}
_resetEvent.Set();
SpinWait.SpinUntil(() => State == MatrixThreadState.Retired);
SpinWait.SpinUntil(() => State == MatrixThreadState.Idle);
_managedThread.Join();
}
@@ -1,30 +1,27 @@
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// file="MatrixParallelWrap.cs"
// file="MatrixParallelWrap"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
@@ -59,7 +56,9 @@ namespace StgSharp.Mathematics.Numeric
private bool _disposed;
private readonly CountdownEvent _countdownEvent;
internal MatrixParallelWrap(MatrixParallelThread[] threadArray)
internal MatrixParallelWrap(
MatrixParallelThread[] threadArray
)
{
_threads = threadArray;
_countdownEvent = new CountdownEvent(threadArray.Length);
@@ -71,8 +70,6 @@ namespace StgSharp.Mathematics.Numeric
internal L4 DataCache { get; set; }
internal PredictPolicy Policy { get; set; }
public void Dispose()
{
Dispose(true);
@@ -81,14 +78,17 @@ namespace StgSharp.Mathematics.Numeric
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void LaunchParallel(SleepMode afterWork)
public void LaunchParallel(
SleepMode afterWork
)
{
ObjectDisposedException.ThrowIf(_disposed, nameof(MatrixParallelWrap));
AfterWork = (ThreadPriority)afterWork;
foreach (MatrixParallelThread thread in _threads)
{
thread.AfterWork = AfterWork;
thread.BindedWrap = this;
// thread.BindedWrap = this;
}
WaitAllWraps();
}
@@ -108,14 +108,16 @@ namespace StgSharp.Mathematics.Numeric
_ = _countdownEvent.Signal();
}
private void Dispose(bool disposing)
private void Dispose(
bool disposing
)
{
if (_disposed) {
return;
}
if (disposing)
{
MatrixParallel.ReturnParallelResources(ref _threads);
// MatrixParallel.ReturnParallelResources(ref _threads);
_countdownEvent.Dispose();
}
_disposed = true;
@@ -36,7 +36,6 @@ namespace StgSharp.Mathematics.Numeric
internal interface IMatrixQueueFactory
{
IMatrixParallelQueue<IMatrixParallelQueue> CreateSequential();
// IMatrixParallelQueue<IMatrixParallelQueue> CreateSequential();
}
}
+63 -73
View File
@@ -1,34 +1,31 @@
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// file="HlsfStressTest.cs"
// file="HlsfStressTest"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Mathematics.Memory;
using StgSharp.HighPerformance.Memory;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -48,36 +45,8 @@ namespace StgSharp
3UL * 1024UL * 1024UL * 1024UL; // lower default to 512MB
private static readonly uint[] SizeSweep = {
64,
128,
192,
256,
512,
768,
1024,
2048,
3072,
4096,
8192,
12288,
16384,
32768,
49152,
65536,
131072,
196608,
262144,
524288,
786432,
1_048_576,
2_097_152,
3_145_728,
4_194_304,
8_388_608,
12_582_912,
16_777_216,
25_165_824,
33_554_432 };
64, 128, 192, 256, 512, 768, 1024, 2048, 3072, 4096, 8192, 12288, 16384, 32768, 49152, 65536, 131072, 196608, 262144, 524288, 786432, 1_048_576, 2_097_152, 3_145_728, 4_194_304, 8_388_608, 12_582_912, 16_777_216, 25_165_824, 33_554_432
};
public static unsafe void Run()
{
@@ -95,7 +64,10 @@ namespace StgSharp
{
uint size = sz > MaxAllocSize ? MaxAllocSize : sz;
BenchAllocThroughput(allocator, size, touch:false);
allocator.Collect();
// allocator.DumpPositionChain();
GC.Collect();
GC.WaitForPendingFinalizers();
}
@@ -147,12 +119,16 @@ namespace StgSharp
Console.WriteLine("=== Benchmark Complete ===");
}
private static void BenchAllocFreePairs(HybridLayerSegregatedFitAllocator allocator, int pairs, uint blockSize)
private static void BenchAllocFreePairs(
HybridLayerSegregatedFitAllocator allocator,
int pairs,
uint blockSize
)
{
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < pairs; i++)
{
hlsfHandle h = allocator.Alloc(blockSize);
HlsfHandle h = allocator.Alloc(blockSize);
allocator.Free(h);
}
sw.Stop();
@@ -165,7 +141,8 @@ namespace StgSharp
private static void BenchAllocThroughput(
HybridLayerSegregatedFitAllocator allocator,
uint blockSize,
bool touch)
bool touch
)
{
ulong budget = ArenaBytes / 2; // use half arena for test
if (blockSize == 0) {
@@ -178,11 +155,11 @@ namespace StgSharp
return;
}
List<hlsfHandle> list = new List<hlsfHandle>((int)ops);
List<HlsfHandle> list = new List<HlsfHandle>((int)ops);
Stopwatch sw = Stopwatch.StartNew();
for (long i = 0; i < ops; i++)
{
hlsfHandle h = allocator.Alloc(blockSize);
HlsfHandle h = allocator.Alloc(blockSize);
if (touch)
{
Span<byte> span = h.BufferHandle;
@@ -196,30 +173,33 @@ namespace StgSharp
}
sw.Stop();
double allocOpsPerSec = ops / sw.Elapsed.TotalSeconds;
foreach (hlsfHandle h in list) {
foreach (HlsfHandle h in list) {
allocator.Free(h);
}
// Left align and widen columns
Console.WriteLine($" size={Fmt(blockSize),-12} ops={ops,-12} alloc/s={allocOpsPerSec,-16:0.0} touch={touch,-5}");
Console.WriteLine($" size={Fmt(blockSize),-12} ops={ops,-12} alloc/s={allocOpsPerSec,-16:0.000000} touch={touch,-5}");
}
private static void BenchFragmentationCycle(HybridLayerSegregatedFitAllocator allocator, int targetMiB)
private static void BenchFragmentationCycle(
HybridLayerSegregatedFitAllocator allocator,
int targetMiB
)
{
int targetBytes = targetMiB * 1024 * 1024;
Random rng = new Random(123);
List<hlsfHandle> live = new List<hlsfHandle>(128 * 1024);
List<HlsfHandle> live = new List<HlsfHandle>(128 * 1024);
long allocated = 0;
Stopwatch swA = Stopwatch.StartNew();
while (allocated < targetBytes)
{
uint sz = PickSize(rng);
hlsfHandle h = allocator.Alloc(sz);
HlsfHandle h = allocator.Alloc(sz);
live.Add(h);
allocated += sz;
}
swA.Stop();
Console.WriteLine($" phaseA alloc {targetMiB}MB in {swA.Elapsed.TotalSeconds:0.00}s blocks={live.Count}");
Console.WriteLine($" phaseA alloc {targetMiB}MB in {swA.Elapsed.TotalSeconds:0.000000}s blocks={live.Count}");
Stopwatch swB = Stopwatch.StartNew();
int freed = 0;
@@ -230,7 +210,7 @@ namespace StgSharp
freed++;
}
swB.Stop();
Console.WriteLine($" phaseB freed {freed} in {swB.Elapsed.TotalSeconds:0.00}s remain={live.Count}");
Console.WriteLine($" phaseB freed {freed} in {swB.Elapsed.TotalSeconds:0.000000}s remain={live.Count}");
allocated = 0;
int reCount = 0;
@@ -238,7 +218,7 @@ namespace StgSharp
while (allocated < targetBytes / 2)
{
uint sz = PickSize(rng);
hlsfHandle h = allocator.Alloc(sz);
HlsfHandle h = allocator.Alloc(sz);
live.Add(h);
allocated += sz;
reCount++;
@@ -247,7 +227,7 @@ namespace StgSharp
Console.WriteLine($" phaseC re-alloc {reCount} in {swC.Elapsed.TotalSeconds:0.00}s ~{allocated / (1024.0 * 1024.0):0}MB");
Stopwatch swD = Stopwatch.StartNew();
foreach (hlsfHandle h in live) {
foreach (HlsfHandle h in live) {
allocator.Free(h);
}
@@ -255,9 +235,13 @@ namespace StgSharp
Console.WriteLine($" cleanup freed {live.Count} in {swD.Elapsed.TotalSeconds:0.00}s");
}
private static void BenchFreeThroughput(HybridLayerSegregatedFitAllocator allocator, int count, uint blockSize)
private static void BenchFreeThroughput(
HybridLayerSegregatedFitAllocator allocator,
int count,
uint blockSize
)
{
List<hlsfHandle> list = new List<hlsfHandle>(count);
List<HlsfHandle> list = new List<HlsfHandle>(count);
for (int i = 0; i < count; i++) {
list.Add(allocator.Alloc(blockSize));
}
@@ -274,7 +258,9 @@ namespace StgSharp
Console.WriteLine($" size={Fmt(blockSize),-12} count={count,-12} free/s={freesPerSec,-16:0.0}");
}
private static string Fmt(uint bytes)
private static string Fmt(
uint bytes
)
{
if (bytes >= 1024 * 1024) {
return $"{bytes / (1024 * 1024)}MB";
@@ -287,20 +273,24 @@ namespace StgSharp
return $"{bytes}B";
}
private static uint PickSize(Random rng)
private static uint PickSize(
Random rng
)
{
uint raw = SizeSweep[rng.Next(SizeSweep.Length)];
return raw > MaxAllocSize ? MaxAllocSize : raw;
}
private static void Warmup(HybridLayerSegregatedFitAllocator allocator)
private static void Warmup(
HybridLayerSegregatedFitAllocator allocator
)
{
List<hlsfHandle> tmp = new List<hlsfHandle>(4096);
List<HlsfHandle> tmp = new List<HlsfHandle>(4096);
for (int i = 0; i < 4096; i++) {
tmp.Add(allocator.Alloc(256));
}
foreach (hlsfHandle h in tmp) {
foreach (HlsfHandle h in tmp) {
allocator.Free(h);
}
}
+12 -11
View File
@@ -25,7 +25,7 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Mathematics.Memory;
using StgSharp.HighPerformance.Memory;
using StgSharp.Mathematics.Numeric;
using System;
using System.Collections.Generic;
@@ -41,10 +41,10 @@ namespace StgSharp
internal static partial class Program
{
private const long size = 1024L * 1024L * 1024L * 4L;
private static int sideLength = 1000;
private static readonly nuint size = (nuint)(1024UL * 1024UL * 1024UL * 4UL);
internal static unsafe void TestMatrix(
)
{
@@ -52,18 +52,18 @@ namespace StgSharp
/**/
HybridLayerSegregatedFitAllocator hlsf;
unchecked {
hlsf = new((nuint)size, 32, size);
hlsf = new(size, 32, size);
}
Matrix<T> m = Matrix<T>.Create(sideLength, sideLength, MatrixLayout.DenseRectangle,
hlsf);
Matrix<float> m = Matrix<float>.Create(sideLength, sideLength,
MatrixLayout.DenseRectangle, hlsf);
// MatrixCompute.Fill(m, 1.0f);
Matrix<T> n = Matrix<T>.Create(sideLength, sideLength, MatrixLayout.DenseRectangle,
hlsf);
Matrix<float> n = Matrix<float>.Create(sideLength, sideLength,
MatrixLayout.DenseRectangle, hlsf);
// MatrixCompute.Fill(n, 1.0f);
Matrix<T> p = Matrix<T>.Create(sideLength, sideLength, MatrixLayout.DenseRectangle,
hlsf);
Matrix<float> p = Matrix<float>.Create(sideLength, sideLength,
MatrixLayout.DenseRectangle, hlsf);
// MatrixCompute.Fill(p, 0.0f);
@@ -89,7 +89,7 @@ namespace StgSharp
for (int j = 0; j < 20; j++)
{
string extra = j % 4 == 3 ? " " : ",";
T value = p[j, i];
float value = p[j, i];
// value = T.Abs(value) < 1e-6 ? 0 : value;
@@ -102,6 +102,7 @@ namespace StgSharp
Console.WriteLine("===================================================");
/**/
hlsf.Dispose();
}
}
+8 -6
View File
@@ -25,13 +25,13 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Common.Timing;
using StgSharp.Graphics;
using StgSharp.HighPerformance.Memory;
using StgSharp.Internal;
using StgSharp.Mathematics;
using StgSharp.Mathematics.Memory;
using StgSharp.Mathematics.Numeric;
using StgSharp.Timing;
using StgSharp.Timing;
namespace StgSharp
{
@@ -47,16 +47,18 @@ namespace StgSharp
try
{
World.Initialize()
.UseModule<NumericalModule>()
.UseModule<GraphicModule>()
// .UseModule<NumericalModule>()
// .UseModule<GraphicModule>()
.InitializeModule();
// TestRegexAnalyse.Run();
TestHlsf();
// HlsfStressTest.Run();
// TestSwiss();
TestL4Prefetch();
// TestSwiss();
// TestL4Prefetch();
// TestMatrix();
+1 -1
View File
@@ -25,7 +25,7 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Mathematics.Memory;
using StgSharp.HighPerformance.Memory;
using System;
using System.Diagnostics;
+48 -15
View File
@@ -2,8 +2,8 @@
// -----------------------------------------------------------------------
// file="hlsf-test"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// AuthorGroup: Nitload
// Copyright (c) Nitload. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -25,7 +25,7 @@
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Mathematics.Memory;
using StgSharp.HighPerformance.Memory;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -40,45 +40,78 @@ namespace StgSharp
public static void TestHlsf()
{
unchecked
{
nuint size = (nuint)(4UL * 1024UL * 1024UL * 1024UL);
// HLSF test arena
Console.WriteLine(
"=== HLSF (Hybrid Layer Segregated Fit Allocator) Single-threaded Stress Test ===\n");
HybridLayerSegregatedFitAllocator hlsfAllocator = new HybridLayerSegregatedFitAllocator(1024 * 1024 * 1024);
HybridLayerSegregatedFitAllocator hlsfAllocator = new(size);
// === 简洁交替测试:100次alloc与100次free交替进行,直到触发异常或达到最大循环 ===
Console.WriteLine("\n=== 简洁交替测试:100次alloc + 100次free 交替 ===");
int maxRounds = 10000; // 可调整
uint[] sizes = {
int maxCount = 10000;
uint[] sizes = [
64u,
128u,
256u,
512u,
1024u };
1024u,
4096u,
16384u,
65536u,
262144u,
1048576u
];
int[] offset = [
-4,
-3,
-2,
-1,
0,
1,
2,
3,
4
];
Random rnd = new Random(42);
for (int round = 1; round <= maxRounds; round++)
{
// 100 次分配
List<hlsfHandle> batch = new List<hlsfHandle>(100);
for (int i = 0; i < 100; i++)
List<HlsfHandle> batch = new(maxCount);
for (int i = 0; i < maxCount; i++)
{
uint sz = sizes[rnd.Next(sizes.Length)];
batch.Add(hlsfAllocator.Alloc(sz));
Console.WriteLine($"alloced:{i}");
}
// 100 次释放(逆序)
// Console.WriteLine($"alloced:{i}");
}
for (int i = 5; i < maxCount; i += 10)
{
HlsfHandle origin = batch[i];
int index = i + offset[rnd.Next(offset.Length)];
batch[i] = batch[index];
batch[index] = origin;
}
for (int i = batch.Count - 1; i >= 0; i--)
{
hlsfAllocator.Free(batch[i]);
Console.WriteLine($"freed:{i}");
// Console.WriteLine($"freed:{i}");
}
if (round % 100 == 0) {
Console.WriteLine($"[交替测试] 已完成 {round} 轮 100alloc+100free");
if (round % 100 == 0)
{
Console.WriteLine($"[交替测试] 已完成 {round} 轮 {maxCount}alloc+{maxCount}free");
hlsfAllocator.DumpPositionChain(false, 10);
hlsfAllocator.Collect();
hlsfAllocator.DumpPositionChain(false, 10);
}
}
Console.WriteLine("[交替测试] 正常结束,无异常触发");
}
}
}
}