optimization - 现代 Intel 或 AMD CPU 上的分散写入速度与分散读取速度?

标签 optimization cpu low-level

我正在考虑通过采用线性数组并将每个元素写入另一个数组中的任意位置(从 CPU 的角度来看是随机的)来优化程序。我只进行简单的写入,而不读回元素。

据我所知,传统 CPU 的分散读取可能会非常慢,因为每次访问都会导致缓存未命中,从而导致处理器等待。但我认为分散写入在技术上可能会很快,因为处理器不等待结果,因此它可能不必等待事务完成。

不幸的是,我不熟悉经典 CPU 内存架构的所有细节,因此可能会出现一些复杂情况,导致速度也相当慢。

有人试过这个吗?

(我应该说我正在尝试解决我遇到的问题。我目前有一个线性数组,我可以从中读取任意值 - 分散读取 - 并且由于所有缓存未命中而速度非常慢。我的想法是,我可以将此操作转化为分散写入,以获得显着的速度优势。)

最佳答案

一般来说,对尚未在高速缓存中的地址进行分散写入会付出高昂的代价,因为每次写入都必须加载和存储整个高速缓存行,因此 FSB 和 DRAM 带宽要求将远高于顺序写入写道。当然,每次写入都会导致缓存未命中(现代 CPU 上通常会发生几百个周期),并且任何自动预取机制都不会提供任何帮助。

关于optimization - 现代 Intel 或 AMD CPU 上的分散写入速度与分散读取速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101743/

相关文章:

optimization - 仅在优化场景中将断言软限制为可满足性可能吗?

c - 在代码中使用 turboboost 测量 CPU 频率

java - 只要 ServerSocket 空闲,Linux 上的 Tomcat6 就会使用 100% 的 CPU

硬件仿真项目

javascript - if+覆盖变量与 if+else 条件。哪个更好,性能明智?

python - GEKKO:不响应约束也不求解obj函数

algorithm - 联合查找最小边的排序列表

Azure CPU 性能基准和/或规范

c - Windows 内核驱动程序 : ZwAllocateVirtualMemory causing thread to terminate

c - 使用 ps aux,进程 11558 和 16290 的路径位于括号中 : "(dd)" and "(security_authra)". 这些是什么?