feat(tpv): Phase B 单文件计时——llc 已提交日志显示 merge/write/task 三步耗时 - 用 w32.win32base.GetTickCount64() 在 Phase B 循环内对每个文件测量 BuildCombinedIR(merge)、write_ir_to_file(write)、init_llc_task(task) 三步耗时 - 日志格式: [x/81] llc 已提交: <path> (merge=N ms, write=N ms, task=N ms, total=N ms)

This commit is contained in:
TermiNexus committed 2026-08-23 16:07:37 +08:00
1 parent 347998664e
commit 936aa14041
1 file changed
+12 -2
+12 -2
View File
@@ -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)