《高性能科学与工程计算》——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
相关文章
|
25天前
|
存储 算法 安全
C 语言中的位运算:挖掘底层计算的高效力量
位运算是C语言中直接操作二进制位的一种技术,能高效处理底层数据,广泛应用于优化算法、硬件编程等领域,是掌握C语言高级特性的关键之一。
|
7月前
|
存储 监控 数据库
改良海量数据存储的若干的手段-转变数据垃圾为黄金
改良海量数据存储的若干的手段-转变数据垃圾为黄金
62 0
|
移动开发 5G
带你读《5G大规模天线增强技术》——1.3.1 数学基础
带你读《5G大规模天线增强技术》——1.3.1 数学基础
|
存储 SQL 缓存
读书笔记《数据密集型应用系统设计》- 数据存储与检索
《数据密集型应用系统设计》是一本很好的介绍数据密集类系统设计原理的纲要性书籍,笔者再次阅读下,记录一些读书笔记,也写一些自己的思考穿插其中,以做备忘。
174 0
|
存储 算法 C++
“探索C++非质变算法:如何更高效地处理数据“
“探索C++非质变算法:如何更高效地处理数据“
|
存储 算法 C++
《高性能科学与工程计算》—— 导读
当1941年构建世界上第一台全自动可编程并具备二进制浮点运算能力的计算机时[H129],Konrad Zuse成功地预见了这种革命性设备不仅只应用于科学和工程领域,还将对生活的各个方面产生深远影响[H130]。
1994 0