矩阵大小对转置性能的影响
您观察到的现象(与 513x513 矩阵相比,512x512 矩阵的转置速度更慢)归因于缓存
缓存结构和访问
缓存是一种内存结构,它通过将频繁访问的数据存储在靠近处理器的位置来帮助提高内存密集型任务的性能。它被组织成集合,其中包含许多保存数据的行。每个缓存行的大小为几个字节,一个缓存集可以包含多行。
访问内存地址时,缓存会检查该地址的数据是否存在于其内存中的任何行中。对应的集合。如果是,则发生缓存命中并快速检索数据。如果不是,则会发生缓存未命中,并且必须从主内存中获取数据,这要慢得多。
关键步幅和缓存未命中
使用时在矩阵中,关键步幅是以连续模式访问的元素之间的距离。在您的情况下,关键步幅是矩阵单行中元素之间的距离。如果步幅与缓存行大小匹配或者是其倍数,则可能会导致缓存未命中和性能下降。
矩阵转置和关键步幅
在您的矩阵转置代码,您正在沿对角线交换元素。对于 512x512 矩阵,每行中的元素以 512 字节的跨度访问,这等于缓存行大小。这会导致大量缓存未命中并降低性能。
为什么 513x513 更快
对于 513x513 矩阵,关键步幅不再是缓存行大小。每行中的元素以 513 字节的跨度进行访问,这确保它们落入不同的缓存行。这减少了缓存未命中的数量并提高了性能。
实际影响
了解关键步幅对缓存的影响对于优化内存密集型任务至关重要。在您的情况下,调整矩阵的大小以避免多次关键步幅可以显着提高转置性能。
以上是为什么转置 513x513 矩阵比 512x512 矩阵更快?的详细内容。更多信息请关注PHP中文网其他相关文章!