《高性能科学与工程计算》——3.2 存储顺序

本节书摘来自华章计算机《高性能科学与工程计算》一书中的第3章,第3.2节,作者:(德)Georg Hager Gerhard Wellein 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 存储顺序

多维数组、矩阵或者类矩阵结构(最重要),在科学计算中无处不在。数据访问是一个关键的问题:标准计算机所固有的一维、基于cache行的内存布局和任何多维数据结构间的映射必须与数据读取与存储的顺序相匹配,这样才能充分利用空间和时间局部性。一维数组的非连续访存会减少空间局部性,从而导致访存带宽利用率的低效(见习题3.1)。当处理多维数组时,这些访存模式可以很自然地产生。


<a href=https://yqfile.alicdn.com/deee056f0c677b77e33166ab7f05e0460cd801a4.png" >

上面的Fortran和C代码示例执行相同的任务,数组的二维索引也都位于内层循环,但是两者的数据访存模式完全不同:Fortran代码的内存地址的访问跨度为N*sizeof(double),C代码的内存地址的访问跨度是最优的(访存跨度为1)。这是因为对于多维矩阵在C语言中是按行存储(见图3-3),而在Fortran语言中是按列存储(见图3-4)。这在进行数据访问优化时必须要牢记:当内层循环变量作为多维数组索引时,应该保证跨度为1的数据访问模式。3.4节将详细讨论如何实现。

<a href=https://yqfile.alicdn.com/b20eec88d0654cd708637ead524b8df712d70cd6.png" >


cb5facaa28cdc9fb4137131f95f98ae5422f9078
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值