优化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的代码生成器.
有时,增加更多的人力只会使进度变慢.
64x86的主要问题是它无限混乱的非正交性.Win64移植很糟糕,因为他们发明了奇怪的调用约定.
我知道它应该是先进技术,但它非常简单.只需查找仅在寄存器边界上访问的聚合实例,并且不获取地址.然后分割它们为单独寄存器大小变量,并重新运行优化器.瞧!
亚当:大约十年来,dmc功能,编译速度,代码优化和稳定性方面的努力都超过了大公司.但dmc让了它们15年.
我不认为从另一种语言生成JS有多大意义.你不能做任何比JS能做的更多的事情,而且你很可能做的更少.
已经在用产品的更有兴趣,他们只是暂时不用.
H.S.Z:是的,很好地为现有客户服务,他们会为你宣传,从而吸引更多客户.转移精力去取悦非客户,希望能赢得他们,你最终可能会赶走你拥有的客户.
苹果曾一度获得赛门铁克C++的许可.我有时想知道它对clang有什么影响.
多年来,许多人不相信我可以自己创建C++编译器,他们很快就相信我无所不能.拒绝查看其他编译器对此有很大帮助.
我仍然是唯一一个从前到后创建过C++编译器的人.:-).当然,DMC++C++98编译器,C++已经向前发展了.
编写一个C++编译器需要10年的时间,许多公司认为购买编译器更实际.EDG授权给intel.

posted @   zjh6  阅读(23)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示