首页 > 后端开发 > C++ > 为什么 513x513 矩阵转置比 512x512 矩阵转置更快?

为什么 513x513 矩阵转置比 512x512 矩阵转置更快?

Patricia Arquette
发布: 2024-12-12 22:18:09
原创
941 人浏览过

Why are 513x513 matrix transpositions faster than 512x512 matrix transpositions?

了解 512x512 和 513x513 矩阵大小的矩阵转置的性能差异

不同大小的方形矩阵在涉及到时表现出独特的时间差异转置它们。有趣的是,与维度为 2^n 1 的矩阵相比,维度为 2^n 的矩阵往往具有更慢的转置时间。虽然这些差异对于较小的 n 值可能似乎微不足道,但在较大维度上它们变得显着,如 MATSIZE 512 所证明的那样.

为了理解这种性能差异的根本原因,我们深入研究了以下概念:缓存。

缓存组织和集合映射

缓存被组织成集合和行。每组包含多条可以存储数据的线。为了找到特定内存地址所属的集合,我们使用以下公式:

set = (address / lineSize) % numberOfsets
登录后复制

因此,内存地址以某种统一的方式映射到集合。

缓存未命中和行驱逐

访问内存位置时,缓存会检查数据是否已存在。如果没有,则发生高速缓存未命中,并从内存中读取相应的行并将其放入高速缓存中。但是,当缓存已满时,它会逐出最近最少使用(LRU)行以容纳新数据。

关键步幅

关键步幅表示间距竞争相同缓存线的变量之间。其计算方式如下:

criticalStride = numberOfSets * lineSize
登录后复制

由关键步幅或其倍数间隔开的变量更有可能导致缓存驱逐。

矩阵转置和关键步幅

想象一个带有 8kB 缓存和四行的 64x64 矩阵每套。每行可以容纳八个 64 位整数。此场景中的关键步长是 2048 字节,相当于矩阵的四行。

转置矩阵时,我们交换行和列。当我们处理每一行并将其与其相应的列交换时,由关键步幅(四行)分隔的元素会遇到缓存驱逐。这会导致大量缓存重新加载,从而导致转置速度变慢。

结论

512x512 和 513x513 矩阵之间的转置时间差异源于以下关系:矩阵维度和缓存的关键步长。维度不是关键步幅倍数的矩阵会减少缓存驱逐,从而加快换位时间。

以上是为什么 513x513 矩阵转置比 512x512 矩阵转置更快?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板