新闻详情

新闻详情

首页 / 资讯中心 / 详情

hpc day2

发布时间:2026/9/26 2:54:50来源:尧图网络
hpc day2
编译运行以下程序初始化一个数组 每个元素都为1两种遍历方式 1.行优先 2.列优先只有循环的顺序不同但性能差异却很大i*Nj i是行 j是列行优先一行一行遍历列优先一列一列遍历#includeiostream#includechrono#includevectorusingnamespacestd;constexprintN8192;volatilelonglongsink;doubletest(constint*a,boolrow){autot0chrono::steady_clock::now();longlongsum0;if(row)for(inti0;iN;i)for(intj0;jN;j)suma[i*Nj];elsefor(intj0;jN;j)for(inti0;iN;i)suma[i*Nj];sinksum;returnchrono::durationdouble(chrono::steady_clock::now()-t0).count();}intmain(){vectorinta((size_t)N*N,1);cout行优先: test(a.data(),true) s\n;cout列优先: test(a.data(),false) s\n;}得到结果行优先: 0.0988227 s 列优先: 0.746619 s为什么列优先明显慢这么多KeyWord空间局部性Spatial LocalityCache LineCache Missthink:数组下标与空间 内存与缓存内存就是用来临时存放数据核心访问内存行优先遍历内存地址连续递增。每次读入一个cache line通常 64 字节 16 个 int后面 15 次访问都命中缓存几乎不访问主存。列优先相邻两次访问地址相隔 N 个 intN*4 32KB。每次访问都跳到很远的内存几乎每次都cache miss。更糟的是一个 cache line 里那 16 个 int 这次只用 1 个等下次循环j1再用到时早已被换出缓存。所以缓存完全没有被利用。1.主存与缓存问题CPU从主存读取数据比执行一条命令要慢几十倍。解决引入缓存——在 CPU 和主存之间放几层又小又快的存储器把最近用过的数据留在里面。本质是一个赌注——程序倾向于重复访问刚用过或附近的数据时间局部性 空间局部性。这个赌注在实践中成功率极高90%。1.1存储层级存储器的访问速度主要取决于CPU 要走多远去拿数据。——信号在导线里传播需要时间物理距离越远延迟越高。容量 速度 成本/字节 寄存器 几十字节 ~0.3 ns 最高 ↓ L1 缓存 ~32 KB ~1 ns 很高 ↓ L2 缓存 ~256KB~1MB ~4 ns 高 ↓ L3 缓存 ~几MB~几十MB ~15 ns 中 ↓ 主存DRAM ~几GB~几百GB ~80 ns 低 ↓ SSD/磁盘 TB级 微秒~毫秒 最低越往上越快、越小、越贵。CPU 访问数据时逐层往下找找到就停。1.2 cache miss当 CPU 要的数据不在当前缓存层就叫一次 cache miss。它必须去下一层甚至主存取取回来的路上 CPU 可能就停在那里等stall类型冷miss 第一次访问缓存中没有容量miss 缓存装不下比L3还大自然miss冲突miss 2.空间局部性Spatial Locality局部性locality 是程序访问内存时的一种统计规律分为时间局部性如果一个数据刚被访问过那它很可能马上又被访问。比如循环里的计数器变量 sum每次迭代都用。空间局部性如果一个数据被访问了那它附近的地址很可能很快也被访问。比如遍历数组访问了 a[i]紧接着就访问 a[i1]。2.1 cache line由于程序通常有空间局部性这个规律硬件CPU 的缓存控制器通常按 64 字节的cache line整块搬。缓存行——缓存的最小搬运单位CPU 不是按一个字节或一个 int 来搬运数据的而是按固定大小的块整块搬运这个块叫 cache line缓存行主流大小是64 字节。3.优美的代码列优先代码是劣质代码容量 miss 空间局部性 完全浪费。4.编译器优化g 程序文件-O2-fno-loop-interchange -fno-tree-vectorize -fno-unroll-loops-o执行文件这样编译使差距更大——关闭三个针对列优先遍历的优化编译器优化重新安排代码的执行方式让 CPU 少干活、少等待、跑得更快。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

2026 企业 AI 办公工具选型指南:方法论与主流平台全景盘点 2026/9/26 4:18:04

2026 企业 AI 办公工具选型指南:方法论与主流平台全景盘点

企业采购AI办公工具的过程中,很容易陷入几个典型的认知误区:不少团队拿到产品清单之后,第一反应是对比各家的功能数量,把功能列表的长度作为核心判断标准,最后选了功能覆盖最广的产品,上线之后才发现大部分…

阅读更多 →
x64dbg+MCP+AI:实现逆向分析自动化,AI替你下断点操作调试器 2026/9/26 4:18:04

x64dbg+MCP+AI:实现逆向分析自动化,AI替你下断点操作调试器

搞了这么多年逆向,我一直觉得最磨人的环节不是看不懂代码,而是那些"看得懂但必须亲手操作"的重复劳动——下断点、看寄存器、改输入、再运行、清断点、换一个分支继续试。直到我把 x64dbg、MCP 和 AI 这三样东西对接起来,亲眼看到 …

阅读更多 →
USB转I2C适配器100KHz速率测试与Excel数据记录实战 2026/9/26 4:18:04

USB转I2C适配器100KHz速率测试与Excel数据记录实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
国内口碑出众的SEO优化公司,究竟有哪些? 2026/9/26 4:17:58

国内口碑出众的SEO优化公司,究竟有哪些?

痛点深度剖析我们团队在实践中发现,SEO优化行业存在诸多困境。很多客户做了半年SEO优化,关键词排名却毫无变化,怀疑SEO是否还有效。SEM方面,谷歌广告点击成本不断攀升,ROI难以提高,导致预算投入时十分谨慎。…

阅读更多 →
ChangeLog应该怎么写? – 半撇有道儿 2026/9/26 4:17:58

ChangeLog应该怎么写? – 半撇有道儿

在工作当中, 需要去撰写非常多的课程类型的文档。因为这些内容会随着不断的迭代而发生持续性的演变。等到时间过久了之后, 就很可能会把过去究竟是在什么时间节点上做过的哪些改动全都忘记掉。所以在面临这种状况的时候, 就必须要由负责编写这份文档的人员主动地保持对文档内容…

阅读更多 →
成都理想i8车灯升级怎么选?从原车短板到专车专用方案的实操参考 2026/9/26 4:17:58

成都理想i8车灯升级怎么选?从原车短板到专车专用方案的实操参考

本篇将回答的核心问题 很多成都理想i8车主在咨询车灯升级前,嘴里问出来的往往是这几个问题:“近光铺路距离短,远光又散,晚上跑绕城和快速路总感觉看不清,原车参数看着不低,为什么实际用起来这么费劲&#x…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉