首页/新闻资讯/正文详情

hpc day2

发布时间:2026/9/26 2:54:52 来源:云帆数科 栏目:资讯中心
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 少干活、少等待、跑得更快。

相关推荐

浏览器里修图:WebGPU 图像修复工具 inpaint-web 上手记
浏览器里修图:WebGPU 图像修复工具 inpaint-web 上手记

浏览器里修图:WebGPU 图像修复工具 inpaint-web 上手记 【免费下载链接】inpaint-web A free and open-source inpainting & image-upscaling tool powered by webgpu and wasm on the browser。| 基于 Webgpu 技术和 wasm 技术的免费开源 inpainting & ima… · 2026/9/26 2:54:52

【前端问题】解决浮动元素的父容器塌陷
【前端问题】解决浮动元素的父容器塌陷

问题&#xff1a;浮动的子元素脱离了文档流&#xff0c;父容器无法感知它们的高度&#xff0c;高度会坍塌为 0&#xff08;或仅剩边框&#xff09;&#xff0c;页脚会错误地跑到浮动元素旁边&#xff0c;而不是在容器下方。HTML<div class"father"><div cla… · 2026/9/26 2:54:52

MikroORM 多 Schema 使用指南:实体定义、运行时切换与 SQLite ATTACH DATABASE 实战
MikroORM 多 Schema 使用指南:实体定义、运行时切换与 SQLite ATTACH DATABASE 实战

后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址&#xff1a; https://gitcode.com/gh_mir… · 2026/9/26 2:54:52

2026物联网开发公司TOP10:五大硬指标与四大技术趋势解析
2026物联网开发公司TOP10:五大硬指标与四大技术趋势解析

1. 榜单背后&#xff1a;物联网开发公司真正的分水岭在哪每年到年底&#xff0c;圈内人都会讨论“明年哪家物联网公司能冲上来”。2026年的趋势判断其实早在2024年就已经埋下伏笔&#xff0c;AIoT融合进入深水区、边缘计算从概念变成刚需、平台型公司开始收缩战线聚焦垂直行业&… · 2026/9/26 3:24:47

【项目编号:project81378】论坛系统真正难的是治理:Spring Boot 从帖子分类、私信通知到权限运营的完整实现
【项目编号:project81378】论坛系统真正难的是治理:Spring Boot 从帖子分类、私信通知到权限运营的完整实现

COMMUNITY OPS SPRING BOOT内容治理链论坛系统真正难的是治理&#xff1a;Spring Boot 从帖子分类、私信通知到权限运营的完整实现发帖只是入口。一个可运营的论坛还需要分类检索、帖子详情、评论、收藏、私信、通知&#xff0c;以及后台用户、内容、资源和权限治理。技术主… · 2026/9/26 3:24:35

codex-desktop-linux computer use上手指南:让AI操作你的Linux桌面,支持GNOME/Hyprland/i3等窗口管理器
codex-desktop-linux computer use上手指南:让AI操作你的Linux桌面,支持GNOME/Hyprland/i3等窗口管理器

codex-desktop-linux computer use上手指南&#xff1a;让AI操作你的Linux桌面&#xff0c;支持GNOME/Hyprland/i3等窗口管理器 【免费下载链接】codex-desktop-linux Unofficial ChatGPT desktop app for Linux (formerly the Codex app), built locally from OpenAI’s offic… · 2026/9/26 3:24:35

小程序 input 软键盘与输入框的距离:用 cursor-spacing 与 focus 调优键盘弹起体验
小程序 input 软键盘与输入框的距离:用 cursor-spacing 与 focus 调优键盘弹起体验

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

什么是MCP以及如何快速入门使用MCP:用uv+Python搭建Stdio服务并接入TaoToken
什么是MCP以及如何快速入门使用MCP:用uv+Python搭建Stdio服务并接入TaoToken

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

Morphe Patches 如何无需 Root 运行 YouTube:GmsCore 支持机制完整指南
Morphe Patches 如何无需 Root 运行 YouTube:GmsCore 支持机制完整指南

Morphe Patches 如何无需 Root 运行 YouTube&#xff1a;GmsCore 支持机制完整指南 【免费下载链接】morphe-patches Morphe Patches 项目地址: https://gitcode.com/gh_mirrors/mo/morphe-patches Morphe Patches 是一个为 YouTube、YouTube Music 和 Reddit 提供增强功… · 2026/9/26 3:24:35

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介&#xff1a;万常选版《数据库原理与设计》课后习题答案资源&#xff0c;覆盖第2至6章及第9章&#xff0c;适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件&#xff0c;含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

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

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故&#xff0c;是很多团队绕不过去的坎。线上环境里&#xff0c;服务端明明已经上线了新版接口&#xff0c;老的移动端还在照着旧文档传参数。请求一到网关&#xff0c;校验直接拒绝&#xff0c;用户操作失败&#xff0c;客服群炸了锅&#xff0c;开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码