| 语言 | 格式 | 评分 |
|---|---|---|
中文(简体) | .pdf | 3 |
| 摘要 | ||
文档介绍了字节跳动程序语言团队在GoLLVM编译方面的探索。背景包括传统编译优化在Go编译器上的实现,如Inline策略调整、栈大小调整、Fast path inline和Aggressive BCE。团队选择探索利用LLVM的优化能力,因为LLVM支持多种语言且优化基础设施更完善。当前GoLLVM存在功能问题(如asm、plugin、pprof支持不完善)和性能问题(与Go编译器性能相差较远),性能测试显示部分基准测试性能下降显著(如Gzip+144.45%)。问题解决方面包括在LLVM侧增加优化pass插入write barrier和boundary check、支持GC精确式栈扫描(但存在bug)、处理ABI转换(Plan9基于栈的调用约定与GoLLVM基于C的调用约定差异)以及兼容性问题(如reflect.typelinks、结构体类型、iface、mangle机制)。 | ||
| AI总结 | ||
字节跳动程序语言团队工程师马春辉介绍了GoLLVM编译探索的成果。团队面临两条技术路线:继续在原生Go SDK上开发(优化pass少,SSA简陋),或利用LLVM框架的优化能力。GoLLVM现状存在功能问题(不支持asm、plugin、pprof、vaargs等)和性能问题(与Go编译器差距大)。针对性能瓶颈,团队在LLVM侧增加优化pass来插入write barrier和boundary check,支持GC精确式栈扫描,但存在bug且spill register开销大。ABI转换方面,GoLLVM基于C的calling convention,需保存所有被调用保存寄存器。兼容性问题包括GoLLVM没有moduledata概念、结构体类型差异、iface指向问题、mangle机制等,解决方案是修改常见三方库,维护一套GoLLVM实现。阶段性成果显示,部分基准测试性能有提升(如Fannkuch11提升15.94%),但多数测试性能下降明显(如Gzip下降144.45%,GobEncode下降95.88%)。未来展望包括继续解决兼容性和性能问题。 | ||
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
13 页请下载阅读 -
文档评分














1.2.2 GoLLVM 编译探索
Spring Framework 1.2.2 Changelog
PyWebIO v1.2.2 Documentation