新闻详情

新闻详情

首页 / 资讯中心 / 详情

hpc day2

发布时间:2026/11/13 9:09:49来源:尧图网络
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/11/13 0:43:49

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/12 15:57:44

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/13 0:02:27

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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