[hellollvm] 学习编译libc++时的头文件处理 (42)
还是从硬件断点
2 hw watchpoint keep y *(unsigned long *)0x555569fb71e0
stop only if *(unsigned long *)0x555569fb71e0==93825335973472
stop only if *(unsigned long *)0x555569fb71e0==93825335973472
出发跟对forward.h的分析
我手工回溯文件包含关系:
(rr) p IncludeMacroStack
$11 = {__begin_ = 0x555569d843c0, __end_ = 0x555569d844d8,
__end_cap_ = {<std::__1::__compressed_pair_elem<clang::Preprocessor::IncludeStackInfo*, 0, false>> = {
__value_ = 0x555569d84740}, <std::__1::__compressed_pair_elem<std::__1::allocator<clang::Preprocessor::IncludeStackInfo>, 1, true>> = {<std::__1::allocator<clang::Preprocessor::IncludeStackInfo>> = {<std::__1::__non_trivial_if<true, std::__1::allocator<clang::Preprocessor::IncludeStackInfo> >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}}
(rr) x/10gx 0x555569d843c0
0x555569d843c0: 0x0000555566a6bd40 0x0000000000000000
0x555569d843d0: 0x0000555569d5cd50 0x0000555569d5cd50
0x555569d843e0: 0x0000000000000000 0x0000000000000000
0x555569d843f0: 0x0000000000000000 0x0000555566a6bd40
0x555569d84400: 0x0000000000000000 0x0000555569ce7440
$11 = {__begin_ = 0x555569d843c0, __end_ = 0x555569d844d8,
__end_cap_ = {<std::__1::__compressed_pair_elem<clang::Preprocessor::IncludeStackInfo*, 0, false>> = {
__value_ = 0x555569d84740}, <std::__1::__compressed_pair_elem<std::__1::allocator<clang::Preprocessor::IncludeStackInfo>, 1, true>> = {<std::__1::allocator<clang::Preprocessor::IncludeStackInfo>> = {<std::__1::__non_trivial_if<true, std::__1::allocator<clang::Preprocessor::IncludeStackInfo> >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}}
(rr) x/10gx 0x555569d843c0
0x555569d843c0: 0x0000555566a6bd40 0x0000000000000000
0x555569d843d0: 0x0000555569d5cd50 0x0000555569d5cd50
0x555569d843e0: 0x0000000000000000 0x0000000000000000
0x555569d843f0: 0x0000000000000000 0x0000555566a6bd40
0x555569d84400: 0x0000000000000000 0x0000555569ce7440
然后对潜在的包含文件进行打印:
p *(clang::Lexer *)0x0000555569dc4fa0
$13 = {<clang::PreprocessorLexer> = {_vptr$PreprocessorLexer = 0x555569b25990 <vtable for clang::Lexer+16>, PP = 0x555569cee198, FID = {ID = 1242},
InitialNumSLocEntries = 1243, ParsingPreprocessorDirective = false, ParsingFilename = false, LexingRawMode = false, MIOpt = {ReadAnyTokens = true,
ImmediatelyAfterTopLevelIfndef = false, DidMacroExpansion = true, TheMacro = 0x555569dbd568, DefinedMacro = 0x555569dbd568, MacroLoc = {
ID = 324889}, DefinedLoc = {ID = 324936}}
$13 = {<clang::PreprocessorLexer> = {_vptr$PreprocessorLexer = 0x555569b25990 <vtable for clang::Lexer+16>, PP = 0x555569cee198, FID = {ID = 1242},
InitialNumSLocEntries = 1243, ParsingPreprocessorDirective = false, ParsingFilename = false, LexingRawMode = false, MIOpt = {ReadAnyTokens = true,
ImmediatelyAfterTopLevelIfndef = false, DidMacroExpansion = true, TheMacro = 0x555569dbd568, DefinedMacro = 0x555569dbd568, MacroLoc = {
ID = 324889}, DefinedLoc = {ID = 324936}}
听PyTorch Europe 2026 大会,来自阿尔托大学和 Mind Lab 的 Songlin Jiang 发表了题为《万亿参数规模的强化学习优化》的演讲。Jiang 详细介绍了团队如何使用veRL、Megatron-Bridge 和 vLLM 在万亿参数的混合专家(MoE)推理模型上实现和优化强化学习系统。演讲分为两个核心部分:首先,他阐述了使用 LoRA 在超大规模下运行强化学习的系统设计,包括 LoRA 适配器在专家层的实现方式、适配器在张量/流水线/专家并行下的分片与融合机制,以及训练后端 Megatron 与推理引擎vLLM 之间 LoRA 参数同步(refit)的关键实现;其次,他深入分析了 MoE强化学习中训练-推理不匹配的难题,解释了传统缓解方法(如裁剪和重要性采样)失效的原因,并展示了团队如何通过在 vLLM、veRL 和 Megatron中实现固定路由重放(Router Replay R3)技术来对齐推理和训练阶段的路由决策。这些研究成果由 Mind Lab团队共同完成,相关技术细节已发布在团队博客上,为构建大规模强化学习训练系统的研究者和工程师提供了宝贵的实践经验。