设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 3053|回复: 25
打印 上一主题 下一主题

[信息技术] C++ 提速的新发现

[复制链接]

该用户从未签到

楼主
发表于 2022-9-24 23:15:41 | 显示全部楼层
会不会代码本身的缺陷阻止了自动优化?另外,硬件配置和开发环境可能也有关系。
回复 支持 反对

使用道具 举报

该用户从未签到

沙发
发表于 2022-9-25 01:27:53 | 显示全部楼层
雷达 发表于 2022-9-25 00:46' ~. `3 w) w8 m0 t0 U- D1 }
有道理。1 z- F4 u5 r. p0 p; _: i! C3 j
所以存在内循环速度就上不去,把内循环取消,改成两个向量直接点乘再求和应该就会好得多,这大 ...

- h3 x) M2 F! j: _. d2 s# F; s3 Z3 d你两个试验之间就差了一个空循环, call 1000次按理不会有秒级差异,可能还是编译器优化的问题。举个例子,把循环本身翻译成机器指令loop或dec/jnz,两者速度上会差很多
& @5 K$ \0 ?2 |( P. A  kWhy is the loop instruction slow? Couldn't Intel have implemented it efficiently?
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
发表于 2022-9-25 01:48:51 | 显示全部楼层
数值分析 发表于 2022-9-25 00:20
, u) x( ]2 t% c9 T( t这个不是这么比的吧。。。
6 V0 j7 ~5 T8 u9 X: b9 v4 v% c& U
您这个函数,不带内循环的话,汇编完总共操作也没几个(不到100个)。
而加上内循环,光jmp和dec指令就至少多执行了6000个
, U; Y( _! j& ~, R  W! f+ l
+ |, O; r. F! n8 M
现在的CPU,可以把判断、jmp和dec指令全部融合进一个µOp(微操作,CPU内部流水线上的执行单位)。如果循环这样跑,花不了多少时间。
回复 支持 反对

使用道具 举报

该用户从未签到

地板
发表于 2022-9-25 05:51:23 | 显示全部楼层
雷达 发表于 2022-9-25 04:47( \5 Y7 W& P$ g6 |! U
又写了个小实验,没有调用子函数,双层循环,外层6千次,内循环30万次空转,有或没有空转内循环,时间差 ...

( U3 u* k. F: C8 |9 |9 `时间差一倍的结果可以接受。  y$ G" N! p/ f' [# W' u
( P) r( V% A. t1 ~$ Q3 Z1 M
你还是用profile工具看看吧。现在大家都主观瞎猜。
回复 支持 反对

使用道具 举报

手机版|小黑屋|Archiver|网站错误报告|爱吱声   

GMT+8, 2024-5-5 01:16 , Processed in 0.034397 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表