mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 23:00:29 -04:00
phase-36: rung R made 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), shared headers stay serial (two headers can share an includer's object), bodies judged bottom-up within a file so a bank never shifts a body still to come, and the in-flight map is per-file under the lock so a killed run restores every worker's file
This commit is contained in:
+187
-187
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
+111
-57
@@ -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 `<object>.<tag>.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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user