优化dmd后端速度
原文
1,翻译源码,x*2为x<<1
,内联函数
.
2,选指应生成:
SETC AL
MOVZ EAX,AL
//或:
SBB EAX
NEG EAX
3,优化分析数据流
,如:传播常量,消除死码,分配寄存器,循环不变量
这是比较容易提升
的.不久前,我改进了BT
指令用法.实现猜
语句,固定整除用乘倒数
实现.
乔金:dmd
的后端与那些具有纪念意义的后端
的差距在30%
以内,这一点令人印象深刻.
dmd
后端是d
写的后端
.搞好它是很有意义
的.
llvm
通过识别越来越多模式,来提升优化.
W.B
:32
位代码生成器做了很多push/pop
,但64位代码生成器
做的要少得多,因为大部分时间都是在寄存器
中传递函数
参数.
dmd
也做了一堆模式.我只是寻找一些显着影响结果
的方法.Codegen
始终有最高优先级.
回归测试的原因
是为了确保固定
的东西保持固定,因害怕引入新错误而瘫痪
并不是任何项目的前进方向.ddmd
后端为d
也会帮助我们.
DMC++
总是带改变
构建并测试来复制自身.这过滤掉大量问题.但DMC++
是32位
的,ddmd
会修复它.
在每个版本中分离出新dmd
分支,可在必要时
修补.
dmd
也配置优化,如用-profile
运行,产生trace.def
文件,可提供给控制可执行文件中函数布局
的链接器.组织布局,以便强连接
函数驻留在同一页面
中,从而最大限度地减少交换
并提高缓存命中率
.参考在此
净赚0.5%
是很值得
的.会重复运行数据流分析优化器
,寄存器分配器
也重复运行.每次优化
都会暴露出更多可能性.
成本启发式
已用于内联程序
(它在前端,在'inline.d'
中).其也用于寄存器分配器
.
但它用成本函数
并重复运行,直到不再需要内联
.
我叫它聚集体的水平切片
.dmd
可大量受益,也不难实现.大量用区间
,因而优化
它更重要.净赚不止0.5%
.
dmd
不展开循环,dmd
可完整分析数据流
,包括消除
死代码和死存储,仍然生成的死存储
是个问题.
PGO
很好,但人们很懒.因而只想-O
,就优化了.
成本函数是模糊的,但它往往工作得很好.
确实,如果生成exe
,编译器可标记叶类
为final
并去虚拟
化.(当然,你可手动添加"final
"到类中.)
通过协同消除关键任务组件
的歧义,优化器可利用核心能力
的蓝天杠杆来产生超级
能力,来最大限度地利用资源.
人们告诉我我不会编写C
编译器,然后告诉我我不会编写C++
编译器.我仍然是唯一实现
过完整C++
编译器(C++98)
的人.然后他们都(100%)
嘲笑我开始使用D
,说没有人
会使用它.
我的整个职业生涯
都是建立
在超越那些告诉我我无能为力并且一事无成的人之上
的.
LLVM
是一个很好的编译器,但它没什么神奇之处
.
此外,我们有一个LLVM
没有的秘密提高生产力的武器–D
!
写ARM
后端不难.其比X86
简单多了.多数工作是删除
一半的X86
的代码生成器.
有时,增加更多的人力只会使进度变慢.
64
位x86
的主要问题是它无限混乱的非正交性
.Win64
移植很糟糕,因为他们发明了奇怪的调用约定
.
我知道它应该
是先进技术,但它非常简单
.只需查找
仅在寄存器边界
上访问的聚合实例
,并且不获取地址.然后分割它们为单独寄存器
大小变量,并重新运行优化器.瞧!
亚当:大约十年来,dmc
在功能,编译速度,代码优化和稳定性
方面的努力都超过了大公司.但dmc
让了它们15
年.
我不认为从另一种语言
生成JS
有多大意义.你不能做任何比JS
能做的更多的事情,而且你很可能做的更少.
已经在用产品
的更有兴趣,他们只是暂时不用.
H.S.Z:是的,很好地为现有客户
服务,他们会为你宣传,从而吸引
更多客户.转移精力去取悦
非客户,希望能赢得他们,你最终可能会赶走你拥有
的客户.
苹果
曾一度获得赛门铁克C++
的许可.我有时想知道它对clang
有什么影响.
多年来,许多人不相信我可以自己创建C++
编译器,他们很快就相信我无所不能.拒绝查看其他编译器
对此有很大帮助.
我仍然是唯一一个从前到后
创建过C++
编译器的人.:-)
.当然,DMC++
是C++
98编译器,C++
已经向前发展了.
编写一个C++
编译器需要10
年的时间,许多公司认为购买编译器更实际.EDG
授权给intel
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现