Files
JuliaFEM.jl/benchmarks/results/struct_size_scaling.json
T
Jukka Aho 2cbb382ca8 feat(benchmark): Validate O(n) vs O(1) struct scaling hypothesis
- Tests 1 to 5000 fields to find crossover point
- Confirms stack copying is O(n) at 0.16 ns/field
- Confirms Dict mutation is O(1) at 7 ns constant
- Crossover at 100 fields (800 bytes) for updates
- Typical FEM elements (20-60 fields) well below crossover
- Immutable wins for access and iteration at ALL sizes
- Generates 5 publication-quality plots
- Exports JSON + CSV with system specs
- System: Intel Xeon Gold 6326, 32 cores, 503 GB RAM
2025-11-09 21:00:51 +02:00

196 lines
5.9 KiB
JSON

{
"struct_sizes": [
1,
2,
5,
10,
20,
50,
100,
200,
500,
1000,
2000,
5000
],
"system_info": {
"cpu_model": "Intel(R) Xeon(R) Gold 6326 CPU @ 2.90GHz",
"julia_version": "1.12.1",
"total_memory_gb": 503.35,
"l1_cache": "48K",
"l2_cache": "1280K",
"l3_cache": "24576K",
"cpu_cores": 32
},
"results": [
{
"mutable_update_ns": 7.1991991991991995,
"immutable_copy_ns": 2.023,
"mutable_access_ns": 4.615,
"bytes": 8,
"speedup_update": 3.1098052696324836,
"speedup_iter": 5.817081904038426,
"immutable_access_ns": 2.023,
"speedup_access": 2.2812654473554126,
"nfields": 1,
"immutable_update_ns": 2.315,
"mutable_iter_ns": 11.773773773773774,
"immutable_iter_ns": 2.024
},
{
"mutable_update_ns": 7.207207207207207,
"immutable_copy_ns": 2.029,
"mutable_access_ns": 4.904,
"bytes": 16,
"speedup_update": 3.11460985618289,
"speedup_iter": 7.1555456592196744,
"immutable_access_ns": 2.023,
"speedup_access": 2.4241225902125554,
"nfields": 2,
"immutable_update_ns": 2.314,
"mutable_iter_ns": 14.48997995991984,
"immutable_iter_ns": 2.025
},
{
"mutable_update_ns": 7.201201201201201,
"immutable_copy_ns": 2.383,
"mutable_access_ns": 4.897,
"bytes": 40,
"speedup_update": 2.765438249309217,
"speedup_iter": 7.227257282731553,
"immutable_access_ns": 2.373,
"speedup_access": 2.063632532659081,
"nfields": 5,
"immutable_update_ns": 2.604,
"mutable_iter_ns": 16.70941883767535,
"immutable_iter_ns": 2.312
},
{
"mutable_update_ns": 7.1991991991991995,
"immutable_copy_ns": 3.311,
"mutable_access_ns": 4.621,
"bytes": 80,
"speedup_update": 2.7667944654877785,
"speedup_iter": 8.889902422912249,
"immutable_access_ns": 2.029,
"speedup_access": 2.2774765894529327,
"nfields": 10,
"immutable_update_ns": 2.602,
"mutable_iter_ns": 23.13152610441767,
"immutable_iter_ns": 2.602
},
{
"mutable_update_ns": 7.201201201201201,
"immutable_copy_ns": 3.177,
"mutable_access_ns": 4.618,
"bytes": 160,
"speedup_update": 2.2764646179280326,
"speedup_iter": 11.43067764857165,
"immutable_access_ns": 2.023,
"speedup_access": 2.282748393475037,
"nfields": 20,
"immutable_update_ns": 3.1633266533066133,
"mutable_iter_ns": 63.131632653061224,
"immutable_iter_ns": 5.523
},
{
"mutable_update_ns": 7.197197197197197,
"immutable_copy_ns": 6.895895895895896,
"mutable_access_ns": 4.617,
"bytes": 400,
"speedup_update": 1.1951506471599465,
"speedup_iter": 7.942862982909166,
"immutable_access_ns": 2.029,
"speedup_access": 2.275505174963036,
"nfields": 50,
"immutable_update_ns": 6.022,
"mutable_iter_ns": 196.84902597402598,
"immutable_iter_ns": 24.783132530120483
},
{
"mutable_update_ns": 7.198198198198198,
"immutable_copy_ns": 9.476476476476476,
"mutable_access_ns": 4.618,
"bytes": 800,
"speedup_update": 0.612834498039884,
"speedup_iter": 3.803593753682347,
"immutable_access_ns": 2.025,
"speedup_access": 2.280493827160494,
"nfields": 100,
"immutable_update_ns": 11.745745745745745,
"mutable_iter_ns": 260.55786350148367,
"immutable_iter_ns": 68.50307377049181
},
{
"mutable_update_ns": 7.41041041041041,
"immutable_copy_ns": 20.948897795591183,
"mutable_access_ns": 4.621,
"bytes": 1600,
"speedup_update": 0.30082611651798524,
"speedup_iter": 5.013605562294905,
"immutable_access_ns": 2.373,
"speedup_access": 1.9473240623683101,
"nfields": 200,
"immutable_update_ns": 24.633534136546185,
"mutable_iter_ns": 777.9142857142857,
"immutable_iter_ns": 155.1606475716065
},
{
"mutable_update_ns": 7.198198198198198,
"immutable_copy_ns": 58.68463886063072,
"mutable_access_ns": 4.624,
"bytes": 4000,
"speedup_update": 0.08904413723690831,
"speedup_iter": 2.3155840000000003,
"immutable_access_ns": 2.027,
"speedup_access": 2.281203749383325,
"nfields": 500,
"immutable_update_ns": 80.83854166666667,
"mutable_iter_ns": 1156.3,
"immutable_iter_ns": 499.35567010309273
},
{
"mutable_update_ns": 7.2002002002002,
"immutable_copy_ns": 45.70171890798787,
"mutable_access_ns": 4.671,
"bytes": 8000,
"speedup_update": 0.03725604952469045,
"speedup_iter": 3.1501090710779853,
"immutable_access_ns": 2.084,
"speedup_access": 2.241362763915547,
"nfields": 1000,
"immutable_update_ns": 193.26257861635222,
"mutable_iter_ns": 3465.75,
"immutable_iter_ns": 1100.2
},
{
"mutable_update_ns": 7.197197197197197,
"immutable_copy_ns": 82.94813278008299,
"mutable_access_ns": 4.625,
"bytes": 16000,
"speedup_update": 0.0175176399491468,
"speedup_iter": 2.1613809428742545,
"immutable_access_ns": 2.024,
"speedup_access": 2.2850790513833994,
"nfields": 2000,
"immutable_update_ns": 410.8542713567839,
"mutable_iter_ns": 4811.714285714285,
"immutable_iter_ns": 2226.222222222222
},
{
"mutable_update_ns": 7.2042042042042045,
"immutable_copy_ns": 867.0408163265306,
"mutable_access_ns": 4.623,
"bytes": 40000,
"speedup_update": 0.0037209876577677828,
"speedup_iter": 5.994000529365056,
"immutable_access_ns": 2.083,
"speedup_access": 2.2193951032165145,
"nfields": 5000,
"immutable_update_ns": 1936.1,
"mutable_iter_ns": 33969.0,
"immutable_iter_ns": 5667.166666666667
}
],
"timestamp": "2025-11-09T20:12:52.503"
}