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