algorithm - 存储在缓存中的算法应该多小? (需要线索)

标签 algorithm optimization cpu-cache

我正在做一个国际象棋移动生成器,我有机会用许多“if 语句”替换“while/for 循环”,我想知道添加这些 ~3000 行是否会像理论上那样提高性能,或者只是使算法太大,无法存储在 cpu 缓存中

我知道这取决于缓存大小(我有 AMD Phenom 8650 三核 2.3)但我真的没有 IDEA

最佳答案

首先,您可能有几 MB 的缓存,所以我怀疑它是否会填满整个缓存。

除此之外,除了您的代码之外,CPU 还忙着做很多事情,所以我怀疑整个缓存是否只用于您的代码。

除此之外,RAM(您可能有几 GB)到缓存之间的移动几乎可以忽略不计。

所以,是的,删除循环(如果它是一个恒定长度的循环)并用显式行替换它应该会给你带来改进。
在这种情况下,改进的数量或百分比实际上更多地取决于语言和编译器,而不是硬件。
请注意,有些语言和情况甚至可能需要更长的时间(例如解释性语言)

免责声明:
这种优化用得不多,主要是(通常)提升不大。
尝试着眼于其他地方(或其他方式)进行改进。

关于algorithm - 存储在缓存中的算法应该多小? (需要线索),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6780272/

相关文章:

MySQL 大表 JOIN 使数据库崩溃

java - while(true) 使cpu无法读取共享变量的最新值

cpu-architecture - 平均内存访问时间的公式困惑

linq - 计算假期

二维插值算法

algorithm - 优化算法计算 (sin(x)-x)*x^{-3} (在 matlab 中)

python - 调度优化以最小化时隙数(有约束)

python - 一段 Julia 和 Python 代码的优化建议

haskell - 优化 Haskell、管道、attoparsec 和容器中的内存

java - 频繁执行的表达式是否缓存了它的结果?