其他分享
首页 > 其他分享> > d论坛笔记03

d论坛笔记03

作者:互联网

V.p.:我们知道,速度并不与指令数同步发展.2个有趣观察:
1,zig前端和llvm后端对检查很灵活,如果能证明永不溢出,则不会发射检查溢出指令.我想总是发出他,则编译器会生成两个版本,1个检查,1个不检查,当不会溢出时,则调用不检查版本.真有意思.
2,总是生成检查时,牺牲了2.7%效率.应该说是划算的.

lea能够加速的原因是地址解码器算术逻辑单元独立,他们是并行的,因而能够加速.对立即值,也不需要另一个寄存器.
循环代码使用了,硬编码极限,超过它,可能溢出.未超过,就不算.

对小程序2.7%可能有利,对大程序,对缓存指令不利.同样,对预测分支不利,更多跳降低其他预测.agu/生成地址单元

w.b.:lea慢,但比多个快,单独一个,不会用lea来替换,在优化代码中,经常用lea.生成代码要适用大多数cpu.
如果你保存该在中变量至寄存器,是要花成本的,因为要尽量映射局部变量至寄存器.
一般来说,

序号优化
1对超过1个操作,lea更好.
2尽量少用寄存器
3尽量将局部变量映射为寄存器
4指令越少越好
5指令越短越好
6不跳的指令更好

但,也不是必然的,因为intel/arm新处理器上老是在变(折腾).
rust团队花大量精力检查溢出,结果失败了.在发布版关掉了检查.我不会重复他们的努力.再说一次,d编译时提升整/传播值区间来免费的检查溢出了的,而zig/rust都没有.

v.p:cpu越来越快且便宜,甚至100%降速都可忍受,因为摩尔定律.长期来看,人们倾向正确(更短代码)而不仅仅是更快.
rust在调试模式下检查溢出.而zig更倾向于速度,如视频/游戏中,出点错没啥.因而区分正确/更快两种模式有意义.

w.b:如果你在运行数据中心,1%即是1百万.人们,喜欢.d聚集内存安全,比整溢出更重要.zig未在内存安全上下太多功夫,d目前聚焦内存安全.py不算系统语言.

AA:正确,如果比最快慢15%,就该倒闭了.是啊,是在竞争啊,你慢,就有问题.
不同标志,使代码更特殊,因而更快,但更不可移植.这不是一个严肃语言的性能要求.即不能追求更特殊化,而应更普遍化.
性能,可转化为.

m.h:intel快速数学选项可能有问题,我在想是否可以提升类型系统或者允许来提供可用哪些优化器更普遍的消除检查.也许可以标准化下部分语义.

w.b,1%就是巨大的进步了.如rust发布版关闭检查溢出.跑分会变得不公平.只有在与实际接近时才有意义.
静态分析局限,不用硬编码极限优化的不能用硬编码极限.

标签:03,lea,寄存器,检查,笔记,zig,指令,论坛,溢出
来源: https://blog.csdn.net/fqbqrr/article/details/115369599