c++ - 分配更多内存会减慢操作速度?

标签 c++ performance

我正在阅读一本名为实时渲染的书,作为光线-球面相交算法的优化,使用了球体的平方半径,因此作者说:

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 简单的计算可能不值得(例如,因为具有更大的结构可能需要更多的内存带宽和更多的缓存未命中)。

但是细节决定成败,您需要基准测试(在不同的计算机上情况可能会有所不同,例如在您的笔记本电脑上和在我的台式机上运行 em>相同 Linux 操作系统,具有相同 编译器和相同二进制可执行文件),当然还有optimizations在你的编译器中启用(例如 g++ -Wall -O2 -march=native with GCC ...)。

阅读有关 computer architecture 的书籍,您会学到更多东西.

teach yourself programming in ten years 上阅读这个发人深省的好页面.它还提供了一个表格,其中包含典型 PC 上各种操作的大致时间(它从别处借来的)。

关于c++ - 分配更多内存会减慢操作速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107136/

相关文章:

c++ - 在 C 中使用 C++ 结构

java - 为什么在 Docker 容器中启动 jar 比在本地机器上启动更快?

java - 有没有关于加速从 Java FileChannel 随机读取的代码提示?

jquery - 绑定(bind)事件的最佳方式?

c++ - 如何使用一些 MPI 命令(或组合命令)在两个处理器之间交换存储在二维数组中的数据?

c++ - 我该如何修复错误 : conversion from ‘void’ to non-scalar type ‘std::vector<int>’ requested

c++程序从网页中读取表格

php - SQL 基准 : PHP ActiveRecord ORM vs. MySQL 与 CodeIgniter Active Record 与标准 PHP

java - return语句后执行的代码

c++ - 为什么这个 RAII 只 move 类型不能正确模拟 `std::unique_ptr` ?