diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index 7a3314963..72aed8a40 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -1,7 +1,7 @@ { - "head": "a2da99b13", + "head": "aef115948", "stamp": "b44c5a8a3423", - "generated": "2026-09-09 12:22", + "generated": "2026-09-09 15:18", "aliases": [ "main", "ov_SC03_014", @@ -21,207 +21,207 @@ "main": { "objects": 85, "identical": 85, - "seconds": 10.411, - "mean_s": 0.122 + "seconds": 13.021000000000003, + "mean_s": 0.153 }, "ov_SC03_014": { "objects": 32, "identical": 32, - "seconds": 6.194000000000002, - "mean_s": 0.194 + "seconds": 6.852000000000002, + "mean_s": 0.214 }, "ov_SC03_015": { "objects": 32, "identical": 32, - "seconds": 6.275, - "mean_s": 0.196 + "seconds": 6.595999999999999, + "mean_s": 0.206 }, "ov_SC04_011": { "objects": 28, "identical": 28, - "seconds": 5.665000000000001, - "mean_s": 0.202 + "seconds": 5.715, + "mean_s": 0.204 } }, "per_object_seconds": { - "build/src/800.o": 1.137, - "build/src/800_b.o": 0.106, - "build/src/800_b_2.o": 0.399, - "build/src/800_b_o0a.o": 0.089, - "build/src/800_c.o": 0.437, - "build/src/800b2.o": 0.142, - "build/src/apicard1.o": 0.082, - "build/src/apicard2.o": 0.167, - "build/src/apicard3.o": 0.077, - "build/src/apicard4.o": 0.12, - "build/src/apicard5.o": 0.109, - "build/src/apicard6.o": 0.144, - "build/src/apicard7.o": 0.136, - "build/src/boot.o": 0.133, - "build/src/gap.o": 0.085, - "build/src/libapi1.o": 0.1, - "build/src/libapi2.o": 0.08, - "build/src/libc2_1.o": 0.089, - "build/src/libc2_2.o": 0.085, - "build/src/libcd1.o": 0.102, - "build/src/libcd2.o": 0.066, - "build/src/libetc.o": 0.066, - "build/src/libgpu.o": 0.172, - "build/src/libgpu2.o": 0.103, - "build/src/libgs1.o": 0.094, - "build/src/libgs2.o": 0.098, - "build/src/libgs3.o": 0.16, - "build/src/libgs4.o": 0.079, - "build/src/libgs5.o": 0.175, - "build/src/libgs6.o": 0.096, - "build/src/libgs7.o": 0.085, - "build/src/libgs8.o": 0.114, - "build/src/libgte1.o": 0.089, - "build/src/libgte10.o": 0.081, - "build/src/libgte11.o": 0.133, - "build/src/libgte12.o": 0.08, - "build/src/libgte13.o": 0.091, - "build/src/libgte14.o": 0.069, - "build/src/libgte15.o": 0.064, - "build/src/libgte16.o": 0.086, - "build/src/libgte17.o": 0.064, - "build/src/libgte18.o": 0.07, - "build/src/libgte19.o": 0.126, - "build/src/libgte2.o": 0.067, - "build/src/libgte20.o": 0.069, - "build/src/libgte21.o": 0.154, - "build/src/libgte22.o": 0.077, - "build/src/libgte23.o": 0.079, - "build/src/libgte24.o": 0.175, - "build/src/libgte25.o": 0.09, - "build/src/libgte26.o": 0.157, - "build/src/libgte27.o": 0.071, - "build/src/libgte28.o": 0.104, - "build/src/libgte29.o": 0.095, - "build/src/libgte3.o": 0.081, - "build/src/libgte30.o": 0.125, - "build/src/libgte4.o": 0.064, - "build/src/libgte5.o": 0.126, - "build/src/libgte6.o": 0.076, - "build/src/libgte7.o": 0.092, - "build/src/libgte8.o": 0.207, - "build/src/libgte9.o": 0.201, - "build/src/libmcrd1.o": 0.103, - "build/src/libmcrd2.o": 0.077, - "build/src/libpad1.o": 0.071, - "build/src/libpad2.o": 0.168, - "build/src/sgap.o": 0.083, - "build/src/sgap_2.o": 0.087, - "build/src/sgap_3.o": 0.085, - "build/src/sgap_4.o": 0.102, - "build/src/sgap_5.o": 0.23, - "build/src/sgap_6.o": 0.082, - "build/src/sgap_8.o": 0.08, - "build/src/snd1.o": 0.109, - "build/src/snd10.o": 0.072, - "build/src/snd11.o": 0.073, - "build/src/snd12.o": 0.072, - "build/src/snd2.o": 0.076, - "build/src/snd3.o": 0.144, - "build/src/snd4.o": 0.088, - "build/src/snd5.o": 0.085, - "build/src/snd6.o": 0.083, - "build/src/snd7.o": 0.07, - "build/src/snd8.o": 0.071, - "build/src/snd9.o": 0.11, - "build/src/ov_SC03_014/ov_SC03_014.o": 0.144, - "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.695, - "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.437, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.204, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.075, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.143, - "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.193, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.164, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.088, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.076, - "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.235, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.086, - "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.192, - "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.194, - "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.166, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.086, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.133, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.545, - "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.469, - "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.168, - "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.236, - "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.073, - "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.117, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.093, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.208, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.242, - "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.059, - "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.33, - "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.073, - "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.096, - "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.078, - "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.096, - "build/src/ov_SC03_015/ov_SC03_015.o": 0.195, - "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.743, - "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.558, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.073, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.109, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.153, - "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.23, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.163, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.083, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.083, - "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.192, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.126, - "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.229, + "build/src/800.o": 0.914, + "build/src/800_b.o": 0.242, + "build/src/800_b_2.o": 0.599, + "build/src/800_b_o0a.o": 0.179, + "build/src/800_c.o": 0.343, + "build/src/800b2.o": 0.21, + "build/src/apicard1.o": 0.217, + "build/src/apicard2.o": 0.153, + "build/src/apicard3.o": 0.233, + "build/src/apicard4.o": 0.224, + "build/src/apicard5.o": 0.281, + "build/src/apicard6.o": 0.212, + "build/src/apicard7.o": 0.22, + "build/src/boot.o": 0.223, + "build/src/gap.o": 0.211, + "build/src/libapi1.o": 0.191, + "build/src/libapi2.o": 0.083, + "build/src/libc2_1.o": 0.127, + "build/src/libc2_2.o": 0.103, + "build/src/libcd1.o": 0.196, + "build/src/libcd2.o": 0.127, + "build/src/libetc.o": 0.115, + "build/src/libgpu.o": 0.211, + "build/src/libgpu2.o": 0.131, + "build/src/libgs1.o": 0.144, + "build/src/libgs2.o": 0.107, + "build/src/libgs3.o": 0.122, + "build/src/libgs4.o": 0.152, + "build/src/libgs5.o": 0.074, + "build/src/libgs6.o": 0.139, + "build/src/libgs7.o": 0.093, + "build/src/libgs8.o": 0.084, + "build/src/libgte1.o": 0.155, + "build/src/libgte10.o": 0.078, + "build/src/libgte11.o": 0.106, + "build/src/libgte12.o": 0.119, + "build/src/libgte13.o": 0.081, + "build/src/libgte14.o": 0.197, + "build/src/libgte15.o": 0.076, + "build/src/libgte16.o": 0.068, + "build/src/libgte17.o": 0.171, + "build/src/libgte18.o": 0.08, + "build/src/libgte19.o": 0.088, + "build/src/libgte2.o": 0.098, + "build/src/libgte20.o": 0.099, + "build/src/libgte21.o": 0.234, + "build/src/libgte22.o": 0.088, + "build/src/libgte23.o": 0.08, + "build/src/libgte24.o": 0.196, + "build/src/libgte25.o": 0.081, + "build/src/libgte26.o": 0.143, + "build/src/libgte27.o": 0.165, + "build/src/libgte28.o": 0.082, + "build/src/libgte29.o": 0.086, + "build/src/libgte3.o": 0.073, + "build/src/libgte30.o": 0.089, + "build/src/libgte4.o": 0.127, + "build/src/libgte5.o": 0.142, + "build/src/libgte6.o": 0.084, + "build/src/libgte7.o": 0.119, + "build/src/libgte8.o": 0.121, + "build/src/libgte9.o": 0.101, + "build/src/libmcrd1.o": 0.157, + "build/src/libmcrd2.o": 0.092, + "build/src/libpad1.o": 0.188, + "build/src/libpad2.o": 0.204, + "build/src/sgap.o": 0.11, + "build/src/sgap_2.o": 0.12, + "build/src/sgap_3.o": 0.086, + "build/src/sgap_4.o": 0.108, + "build/src/sgap_5.o": 0.136, + "build/src/sgap_6.o": 0.149, + "build/src/sgap_8.o": 0.148, + "build/src/snd1.o": 0.15, + "build/src/snd10.o": 0.199, + "build/src/snd11.o": 0.085, + "build/src/snd12.o": 0.197, + "build/src/snd2.o": 0.187, + "build/src/snd3.o": 0.071, + "build/src/snd4.o": 0.098, + "build/src/snd5.o": 0.069, + "build/src/snd6.o": 0.081, + "build/src/snd7.o": 0.073, + "build/src/snd8.o": 0.076, + "build/src/snd9.o": 0.15, + "build/src/ov_SC03_014/ov_SC03_014.o": 0.157, + "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.685, + "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.701, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.082, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.071, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.146, + "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.356, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.141, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.165, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.08, + "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.323, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.172, + "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.227, + "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.112, + "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.099, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.106, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.129, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.709, + "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.328, + "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.123, + "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.248, + "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.075, + "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.157, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.092, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.346, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.243, + "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.126, + "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.317, + "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.067, + "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.1, + "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.07, + "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.099, + "build/src/ov_SC03_015/ov_SC03_015.o": 0.201, + "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.741, + "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.498, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.063, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.083, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.136, + "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.165, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.16, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.129, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.089, + "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.207, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.077, + "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.214, "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.102, - "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.078, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.081, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.113, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.557, - "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.454, - "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.114, - "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.255, - "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.109, - "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.143, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.118, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.243, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.226, - "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.062, - "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.361, - "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.078, - "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.09, - "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.072, - "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.082, - "build/src/ov_SC04_011/ov_SC04_011.o": 0.252, - "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.691, - "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.439, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.067, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.08, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.192, - "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.188, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.126, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.092, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.092, - "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.214, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.091, - "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.203, - "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.164, - "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.092, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.127, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.176, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.453, - "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.307, - "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.113, - "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.222, - "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.077, - "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.227, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.101, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.129, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.589, - "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.079, - "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.082 + "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.132, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.11, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.234, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.614, + "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.506, + "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.131, + "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.241, + "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.071, + "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.176, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.079, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.358, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.246, + "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.086, + "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.343, + "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.075, + "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.072, + "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.139, + "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.118, + "build/src/ov_SC04_011/ov_SC04_011.o": 0.21, + "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.539, + "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.432, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.103, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.061, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.162, + "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.183, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.136, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.102, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.07, + "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.283, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.095, + "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.255, + "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.137, + "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.123, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.087, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.167, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.481, + "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.278, + "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.13, + "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.217, + "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.15, + "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.141, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.104, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.159, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.668, + "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.096, + "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.146 }, "ok": true, - "seconds": 3.2 + "seconds": 3.5 } diff --git a/.run/P36/delever/sweep_cap40.log b/.run/P36/delever/sweep_cap40.log new file mode 100644 index 000000000..996a5ed8a --- /dev/null +++ b/.run/P36/delever/sweep_cap40.log @@ -0,0 +1,10 @@ +delever --recipes: control 3/3 — the identity splice reproduces its text and the untouched file its object +delever --recipes: 300 RESIDUE bodies in 244 TU(s) + 1 header(s), cap 40, 24 worker(s) + [25/300] 0 closed · 1056 compiles · 0.5 min · 49 bodies/min + [50/300] 0 closed · 2132 compiles · 0.8 min · 63 bodies/min + [75/300] 0 closed · 3151 compiles · 1.2 min · 62 bodies/min + [100/300] 0 closed · 4185 compiles · 1.5 min · 67 bodies/min + [125/300] 0 closed · 5182 compiles · 2.2 min · 58 bodies/min + [150/300] 0 closed · 6222 compiles · 2.4 min · 62 bodies/min + [175/300] 0 closed · 7262 compiles · 2.7 min · 65 bodies/min + [200/300] 0 closed · 8206 compiles · 3.5 min · 58 bodies/min diff --git a/tools/delever.py b/tools/delever.py index bb22d443c..d5daa5bcd 100644 --- a/tools/delever.py +++ b/tools/delever.py @@ -1569,20 +1569,33 @@ def recipes(a): def recs_for(tu): return [r for t_ in inc.get(tu, []) for r in by_src.get(t_, [])] if tu.endswith(".h") else by_src.get(tu, []) - def judge(tu, cand): + inflight = {} + + def judge(tu, cand, tag="rec"): """judge one candidate, and be killable: the oracle writes the candidate into the tree to compile it, so a SIGTERM - between the write and the restore leaves a candidate in `src/`. The original text goes into inflight.json first, the - same file `--restore` reads (P35's rule: a tool restores from its OWN snapshot, never `git checkout`) — S99 killed a - run mid-judge and found exactly that leftover.""" + between the write and the restore leaves a candidate in `src/`. Every in-flight file's ORIGINAL text is held in + inflight.json, the same file `--restore` reads (P35's rule: a tool restores from its OWN snapshot, never + `git checkout`) — S99 killed a run mid-judge and found exactly that leftover. The map is per-FILE and written under + the lock, so a killed parallel run restores every worker's file and not just the last one's. + + `tag` names the scratch object: `compile_obj` writes `..o`, so two workers on the same object would + clobber each other's output — which is why a worker owns a whole TU and headers stay serial.""" path = REPO / tu raw, st = path.read_text(errors="surrogateescape"), path.stat() - RUN.mkdir(parents=True, exist_ok=True) - INFLIGHT.write_text(json.dumps({tu: raw})) + with _LOCK: + RUN.mkdir(parents=True, exist_ok=True) + inflight[tu] = raw + INFLIGHT.write_text(json.dumps(inflight)) try: - return oracle.judge_all(recs_for(tu), cand, tag="rec", write_path=(tu if tu.endswith(".h") else None)) + return oracle.judge_all(recs_for(tu), cand, tag=tag, write_path=(tu if tu.endswith(".h") else None)) finally: restore_file(path, raw, st) - INFLIGHT.unlink(missing_ok=True) + with _LOCK: + inflight.pop(tu, None) + if inflight: + INFLIGHT.write_text(json.dumps(inflight)) + else: + INFLIGHT.unlink(missing_ok=True) def lever_free(tu, raw, fn): m, ls = same_len_mask(raw), line_starts(raw) @@ -1628,58 +1641,99 @@ def recipes(a): for b in bad[:5]: print(f" CONTROL FAILED {b[0]}:{b[1]} -> {b[2]} {b[3]}") sys.exit("delever --recipes: the control did not pass — no verdict from this run is usable (R39)") - print(f"delever --recipes: {len(todo)} RESIDUE bodies", flush=True) - rows, won, tried, compiles = [], 0, 0, 0 + # THE SWEEP, TU-PARALLEL. A worker owns a WHOLE translation unit: the oracle writes each candidate to the real source + # path and names its scratch object after the object it builds, so two workers sharing a TU would overwrite each other's + # source AND their scratch objects. Shared headers stay SERIAL for the same reason one level up — two different headers + # can be included by the same TU, and both would compile that includer's object at once (`--apply` draws them the same + # way). Bodies of one TU are judged in that worker, in order, against that file's own text. + by_tu = collections.OrderedDict() + for k, r in todo: + by_tu.setdefault(k[0], []).append((k, r)) + # BOTTOM-UP WITHIN A FILE: a banked body changes the line numbers of everything below it, and the census positions this + # sweep rewrites from were taken before the run. Judging a file's bodies in descending order means an accepted edit never + # moves a body still to come (the alternative is a REFUSED token mismatch on every later body of a file that banked one). + for tu in by_tu: + by_tu[tu].sort(key=lambda kr: -min((s["line"] for s in sites_by[kr[0]]), default=0)) + tus = [tu for tu in by_tu if not tu.endswith(".h")] + hdrs = [tu for tu in by_tu if tu.endswith(".h")] + print(f"delever --recipes: {len(todo)} RESIDUE bodies in {len(tus)} TU(s) + {len(hdrs)} header(s), " + f"cap {a.cap}, {a.jobs} worker(s)", flush=True) + state = dict(won=0, tried=0, compiles=0, done=0, skipped=0) + rows = [] t0 = time.time() - for n_body, ((tu, fn), r) in enumerate(todo, 1): - path = REPO / tu - raw = path.read_text(errors="surrogateescape") - names = pin_names(sites_by[(tu, fn)]) # may be empty: R5 needs no pinned declaration - try: - free = lever_free(tu, raw, fn) - except Refuse: - continue - cands = recipe_candidates(free, tu, fn, names, cap=a.cap) - if not cands: - continue - tried += 1 - hit = None - for rec, desc, cand in cands: - v, dt, err = judge(tu, cand) - compiles += len(recs_for(tu)) - if v == "IDENTICAL": - hit = (rec, desc, cand) - break - if n_body % 10 == 0 or hit: # R55: a lane that runs unattended leaves evidence - print(f" [{n_body}/{len(todo)}] {won} closed · {compiles} compiles · {(time.time() - t0) / 60:.1f} min", - flush=True) - row = dict(ts=time.strftime("%Y-%m-%d %H:%M:%S"), label=a.label, rung="R", calib=dict(head=oracle.head(), stamp=oracle.config_stamp()), - tu=tu, fn=fn, addr=fn_addr(fn, tu), aliases=r.get("aliases"), header=tu.endswith(".h"), - nhash_before=r.get("nhash_after"), nhash_after=None, candidates=len(cands), pins=len(names), - verdict=("LEVER-FREE" if hit else "RESIDUE"), recipe=(hit[0] if hit else None), how=(hit[1] if hit else None), - sites=([] if hit else r.get("sites", []))) - if hit: - path.write_text(hit[2], errors="surrogateescape") - # the body's own markers are now orphans (its levers are gone); every OTHER body's marker is still honest, so the - # scrub is scoped to this body's line span — a file-wide scrub would leave the census with UNMARKED sites elsewhere - recs_ = sc.scan_text(hit[2], tu, shared_defs=None) - d_ = next((x for x in recs_ if x["form"] == "def" and x["name"] == fn), None) - span = range(d_["line"], d_["end"] + 1) if d_ else range(0) - scrub = scrub_edits(hit[2], [i + 1 for i, l in enumerate(hit[2].split("\n")) if FAKE in l and i + 1 in span]) - if scrub: - cand2 = apply_edits(hit[2], scrub) - v2, _, _ = judge(tu, cand2) - if v2 == "IDENTICAL": - path.write_text(cand2, errors="surrogateescape") - walk = lc.walk_file(path.read_text(errors="surrogateescape"), tu, tu.endswith(".h")) - row["nhash_after"] = next((x["nhash"] for x in walk["defs"] if x["name"] == fn), None) - won += 1 - print(f" {tu}:{fn} — {hit[0]} {hit[1]} IDENTICAL ({len(names)} pin(s) gone)", flush=True) - rows.append(row) + + def work_tu(tu, tag): + out = [] + for (tu_, fn), r in by_tu[tu]: + path = REPO / tu + raw = path.read_text(errors="surrogateescape") + names = pin_names(sites_by[(tu, fn)]) # may be empty: R5/R7 need no pinned declaration + try: + free = lever_free(tu, raw, fn) + except Refuse: + with _LOCK: + state["skipped"] += 1 + state["done"] += 1 + continue + cands = recipe_candidates(free, tu, fn, names, cap=a.cap) + if not cands: + with _LOCK: + state["skipped"] += 1 + state["done"] += 1 + continue + hit, n_c = None, 0 + for rec, desc, cand in cands: + v, dt, err = judge(tu, cand, tag=tag) + n_c += len(recs_for(tu)) + if v == "IDENTICAL": + hit = (rec, desc, cand) + break + row = dict(ts=time.strftime("%Y-%m-%d %H:%M:%S"), label=a.label, rung="R", + calib=dict(head=oracle.head(), stamp=oracle.config_stamp()), + tu=tu, fn=fn, addr=fn_addr(fn, tu), aliases=r.get("aliases"), header=tu.endswith(".h"), + nhash_before=r.get("nhash_after"), nhash_after=None, candidates=len(cands), pins=len(names), + verdict=("LEVER-FREE" if hit else "RESIDUE"), recipe=(hit[0] if hit else None), + how=(hit[1] if hit else None), sites=([] if hit else r.get("sites", []))) + if hit: + path.write_text(hit[2], errors="surrogateescape") + # the body's own markers are now orphans (its levers are gone); every OTHER body's marker is still honest, + # so the scrub is scoped to this body's line span — a file-wide scrub would leave the census UNMARKED elsewhere + recs2 = sc.scan_text(hit[2], tu, shared_defs=None) + d_ = next((x for x in recs2 if x["form"] == "def" and x["name"] == fn), None) + span = range(d_["line"], d_["end"] + 1) if d_ else range(0) + scrub = scrub_edits(hit[2], [i + 1 for i, l in enumerate(hit[2].split("\n")) if FAKE in l and i + 1 in span]) + if scrub: + cand2 = apply_edits(hit[2], scrub) + v2, _, _ = judge(tu, cand2, tag=tag) + n_c += len(recs_for(tu)) + if v2 == "IDENTICAL": + path.write_text(cand2, errors="surrogateescape") + walk = lc.walk_file(path.read_text(errors="surrogateescape"), tu, tu.endswith(".h")) + row["nhash_after"] = next((x["nhash"] for x in walk["defs"] if x["name"] == fn), None) + out.append(row) + with _LOCK: + state["tried"] += 1 + state["compiles"] += n_c + state["done"] += 1 + if hit: + state["won"] += 1 + print(f" {tu}:{fn} — {hit[0]} {hit[1]} IDENTICAL ({len(names)} pin(s) gone)", flush=True) + if state["done"] % 25 == 0: # R55: a lane that runs unattended leaves evidence + el = (time.time() - t0) / 60 + print(f" [{state['done']}/{len(todo)}] {state['won']} closed · {state['compiles']} compiles · " + f"{el:.1f} min · {state['done'] / max(el, 0.01):.0f} bodies/min", flush=True) + return out + + with ThreadPoolExecutor(max_workers=max(1, a.jobs)) as pool: + for res in pool.map(lambda it: work_tu(it[1], f"r{it[0] % max(1, a.jobs)}"), list(enumerate(tus))): + rows += res + for n, tu in enumerate(hdrs): # serial: two headers can share an includer's object + rows += work_tu(tu, "rh") ledger_append(rows) needed = sum(len([s for s in r.get("sites", []) if s.get("verdict") == "NEEDED"]) for _, r in todo) - print(f"recipes: {won} of {tried} bodies closed lever-free ({needed} NEEDED sites in the {len(todo)} drawn), " - f"{compiles} compiles in {(time.time() - t0) / 60:.1f} min") + print(f"recipes: {state['won']} of {state['tried']} bodies closed lever-free ({needed} NEEDED sites in the " + f"{len(todo)} drawn, {state['skipped']} with no candidate), {state['compiles']} compiles in " + f"{(time.time() - t0) / 60:.1f} min") return 0