From 936aa1404144fe022e5e3d4a5c5a086bd083b1eb Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 23 Aug 2026 16:07:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(tpv):=20Phase=20B=20=E5=8D=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=AE=A1=E6=97=B6=E2=80=94=E2=80=94llc=20=E5=B7=B2?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=97=A5=E5=BF=97=E6=98=BE=E7=A4=BA=20merge/?= =?UTF-8?q?write/task=20=E4=B8=89=E6=AD=A5=E8=80=97=E6=97=B6=20-=20?= =?UTF-8?q?=E7=94=A8=20w32.win32base.GetTickCount64()=20=E5=9C=A8=20Phase?= =?UTF-8?q?=20B=20=E5=BE=AA=E7=8E=AF=E5=86=85=E5=AF=B9=E6=AF=8F=E4=B8=AA?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=B5=8B=E9=87=8F=20BuildCombinedIR(merge)?= =?UTF-8?q?=E3=80=81write=5Fir=5Fto=5Ffile(write)=E3=80=81init=5Fllc=5Ftas?= =?UTF-8?q?k(task)=20=E4=B8=89=E6=AD=A5=E8=80=97=E6=97=B6=20-=20=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=A0=BC=E5=BC=8F:=20[x/81]=20llc=20=E5=B7=B2?= =?UTF-8?q?=E6=8F=90=E4=BA=A4:=20=20(merge=3DN=20ms,=20write=3DN=20m?= =?UTF-8?q?s,=20task=3DN=20ms,=20total=3DN=20ms)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/lib/Phase/Phase2/__init__.vp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/App/lib/Phase/Phase2/__init__.vp b/App/lib/Phase/Phase2/__init__.vp index 90fca2e..c08d08b 100644 --- a/App/lib/Phase/Phase2/__init__.vp +++ b/App/lib/Phase/Phase2/__init__.vp @@ -927,6 +927,8 @@ def RunMultiFileProject(mb: memhub.MemBuddy | t.CPtr, ent: SrcFileEntry | t.CPtr = (SrcFileEntry | t.CPtr)(t.CVoid(ea, t.CPtr)) if ent is None or ent.Path is None or ent.Sha1 is None: continue + # 单文件三步计时起点(GetTickCount64,ms) + t_pb0: t.CUInt64T = w32.win32base.GetTickCount64() # 组合本地 stub + 所有依赖 stub + 本地 text → 完整 IR combined_ir: bytes = stdlib.malloc(COMBINED_IR_SIZE) if combined_ir is None: @@ -943,6 +945,8 @@ def RunMultiFileProject(mb: memhub.MemBuddy | t.CPtr, VLogger.error(fb, "PhaseB") stdlib.free(combined_ir) continue + # 计时点 1:BuildCombinedIR 完成 + t_pb1: t.CUInt64T = w32.win32base.GetTickCount64() # 写 .ll(llc 线程只读此文件);llc 本身改为循环后批量并行 ret_w: int = BuildPipeline.write_ir_to_file(combined_ir, combined_len, temp_dir, ent.Sha1) @@ -953,6 +957,8 @@ def RunMultiFileProject(mb: memhub.MemBuddy | t.CPtr, viperlib.snprintf(fb, 1024, "写 .ll 失败: %s", ent.Path) VLogger.error(fb, "PhaseB") sys.exit(1) + # 计时点 2:写 .ll 完成 + t_pb2: t.CUInt64T = w32.win32base.GetTickCount64() # 构造 llc 任务(命令串 stdlib.malloc,线程运行期不被 reset 回收) llc_ir_path: str = BuildPipeline.build_sliced_path(temp_dir, ent.Sha1, "ll") @@ -968,13 +974,17 @@ def RunMultiFileProject(mb: memhub.MemBuddy | t.CPtr, viperlib.snprintf(fb, 1024, "llc 任务构造失败: %s", ent.Path) VLogger.error(fb, "PhaseB") sys.exit(1) + # 计时点 3:llc 任务构造完成 + t_pb3: t.CUInt64T = w32.win32base.GetTickCount64() llc_task_count += 1 compiled_count += 1 - # 显示已提交 llc 的文件 + # 显示已提交 llc 的文件(含三步计时:合并 stub / 写 .ll / 构造任务) fb_comp: str = VLogger.fmt_buf() if fb_comp is not None: - viperlib.snprintf(fb_comp, 1024, "[%d/%d] llc 已提交: %s", i + 1, file_count, ent.Path) + viperlib.snprintf(fb_comp, 1024, "[%d/%d] llc 已提交: %s (merge=%llu ms, write=%llu ms, task=%llu ms, total=%llu ms)", + i + 1, file_count, ent.Path, + t_pb1 - t_pb0, t_pb2 - t_pb1, t_pb3 - t_pb2, t_pb3 - t_pb0) VLogger.info(fb_comp, "PhaseB") # 构造 .obj 路径,检测是否是 main 模块(test_main.vp/.py 或 main.vp/.py) od_len: t.CSizeT = string.strlen(output_dir)