加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 分配更多内存会减慢操作速度吗?

发布时间:2020-12-16 10:00:29 所属栏目:百科 来源:网络整理
导读:我正在读一本名为“实时渲染”的书,作为射线球交叉算法的优化,使用了球体的平方半径,因此作者说: The scalar r2 (square of radius) could be computed once and stored within the data structure of the sphere in an attempt to gain further efficiency
我正在读一本名为“实时渲染”的书,作为射线球交叉算法的优化,使用了球体的平方半径,因此作者说:

The scalar r2 (square of radius) could be computed once and stored within the data
structure of the sphere in an attempt to gain further efficiency. In
practice such an “optimization” may be slower,as more memory is then
access,a major factor for algorithm performance.

怎么可能效率不高? r2值将在函数的局部范围内访问一次,这可能比明确地计算r2 = r * r慢吗?

我甚至不确定缓慢的操作是值访问还是实际将数据存储在内存中.

解决方法

你真的应该进行基准测试,但是作者可能想到的是 CPU cache.有时(通常,但并非总是)重复的缓存未命中(或错误的 branch prediction)将减慢你的程序.

通常,当(super-scalar,pipelined)处理器丢失缓存(因此L3缓存未命中)到从RAM棒获取数据时,它可能会丢失几百个周期(或纳秒),这就足够了几百个算术运算(在寄存器内的数据上,或在L1缓存内).
因此,可能发生memoizing简单计算可能不值得(例如,因为具有更大的结构可能需要更多的存储器带宽和更多的高速缓存未命中).

但是细节就是邪恶,你需要进行基准测试(在不同的计算机上,例如你的笔记本电脑和运行相同Linux操作系统的桌面,使用相同的编译器和相同的二进制可执行文件)可能会有所不同,当然在编译器中启用了optimizations(例如g -Wall -O2 -march = native with GCC …).

您将通过阅读computer architecture上的书籍了解更多信息.

阅读teach yourself programming in ten years上这个引人深思的发人深省的页面.它还给出了典型PC上各种操作的近似时间表(它已在其他地方借过).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读