c – 分配更多内存会减慢操作速度吗?
我正在读一本名为“实时渲染”的书,作为射线球交叉算法的优化,使用了球体的平方半径,因此作者说:
怎么可能效率不高? r2值将在函数的局部范围内访问一次,这可能比明确地计算r2 = r * r慢吗? 我甚至不确定缓慢的操作是值访问还是实际将数据存储在内存中. 解决方法
你真的应该进行基准测试,但是作者可能想到的是
CPU cache.有时(通常,但并非总是)重复的缓存未命中(或错误的
branch prediction)将减慢你的程序.
通常,当(super-scalar,pipelined)处理器丢失缓存(因此L3缓存未命中)到从RAM棒获取数据时,它可能会丢失几百个周期(或纳秒),这就足够了几百个算术运算(在寄存器内的数据上,或在L1缓存内). 但是细节就是邪恶,你需要进行基准测试(在不同的计算机上,例如你的笔记本电脑和运行相同Linux操作系统的桌面,使用相同的编译器和相同的二进制可执行文件)可能会有所不同,当然在编译器中启用了optimizations(例如g -Wall -O2 -march = native with GCC …). 您将通过阅读computer architecture上的书籍了解更多信息. 阅读teach yourself programming in ten years上这个引人深思的发人深省的页面.它还给出了典型PC上各种操作的近似时间表(它已在其他地方借过). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |