c - 二进制文件的大小如何影响执行速度

标签 c performance numerical

<分区>

二进制文件的大小如何影响执行速度?具体来说,我说的是使用 gnu 或 intel 编译器将用 ANSI-C 编写的代码翻译成机器语言。二进制文件的目标平台是具有运行 Linux 操作系统的英特尔或 AMD 多核 CPU 的现代计算机。该代码可能使用 openMP 并行执行数值计算,二进制文件可能有几兆字节。

请注意,执行时间在任何情况下都会比加载代码和库所需的时间长得多。我想到了用于求解大型常微分方程系统以模拟动力学方程的非常具体的代码,对于中等大小的系统,这些方程通常受 CPU 限制,但也可能受内存限制。

我想问小二进制大小是否应该成为高效代码的设计标准,或者我是否总是可以优先考虑显式代码(最终重复可以作为函数实现的代码块)和编译器优化,例如循环展开等.

我知道分析技术以及如何将它们应用于特定问题,但我想知道可以在多大程度上进行一般性陈述。

最佳答案

CPU 有缓存。

与 CPU 速度相比,对系统内存的访问速度较慢。这就是 CPU 具有高速缓存(由超快内存构成)的原因。

每个级别的 CPU 缓存都有不同的大小和速度。

因此,要实现尽可能快的速度,避免在最低级别(不幸的是,这也是最小的缓存)进行缓存刷新至关重要。

codedata 都会强制刷新缓存。所以大小在这两种情况下都很重要。

例如:代码可能在您跳转调用时产生缓存未命中。当您在远程地址加载变量时,数据可能产生缓存未命中。

alignment 等其他问题会极大地影响速度,但代价不超过 CPU 缓存未命中(重新加载 CPU 缓存涉及 CPU 核心同步,这不是一件容易的事:它可以大约需要 250 个 CPU 周期!)。

无需进入特定于平台的详细信息,这就是可以说的。

结论:保持简单。小即是美。

关于c - 二进制文件的大小如何影响执行速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937412/

相关文章:

c - 如何将一个 TCP 服务器连接到另一个 TCP 服务器

javascript - 为什么 [].concat() 比 Array.prototype.concat() 快?

performance - 在 Bash 中高效计算数十万次浮点运算

testing - 如何测试数值分析例程?

python - 为 Windows 7 构建 Mesa。Mesa 9.1

c - fwrite 截断字符串

mysql - 使用复合索引优化查询,即使用where

c - 如何在c中快速交换 double

python - 使用 python dblquad 进行复平面中的区域积分

c - Realloc 现有数据丢失