优化程序中的数据:从代数到向量解
前言
在前文笔者简单介绍了把数据迭代抽象为线性代数,并介绍了空间体、维度等概念。
数据复用
数据复用是一种提高程序执行效率与数据局部性的方法,分为自复用与组复用,
自复用:如果多个迭代访问同一个内存位置,那么称为自复用。
组复用:如果多个迭代访问不同的内存位置,但这些位置存储的是相关的数据,那么称为组复用。
举个例子:
自复用:Z[1][1],每次迭代都访问 Z[1][1] 这个内存位置的数据,这样的访问经常被使用,因为这块内存的数据可能被改变。组复用:Z[1][2], Z[1][3],每次迭代访问不同的内存位置(如 Z[1][2] 和 Z[1][3]),每次通过不同的指令进行访问,但这些位置的数据之间有相关性。
循环中的重复访问
数据复用,就是循环中的重复访问数据,对于数组的遍历,假设每个元素之间都没有依赖关系,那么我们可以直接全部并行执行,在并行的基础上,我们会优先执行具有局部性的数据,因为cache中的数据往往都具有局部性,如果去执行与前面的数据局部性差的数据,很可能这些数据在下一级内存中,这样会浪费CPU时间。
为了优化局部性,我们希望识别访问相同数据或相同cache线的遍历(迭代)。
矩阵的秩与重复迭代
矩阵的秩是线性无关行(或列)的数目,在上文笔者简单介绍了如何将迭代与矩阵等价。
那么在数组的迭代过程中,如果进行了重复的迭代,那么转化为矩阵,也就是多了线性相关行(或列)的数目,而矩阵的秩其实并没有改变。
那么,我们需要找出重复的迭代,并将这些迭代进行密集处理,这样能获得更好的局部性。
找出重复迭代
在前文笔者写过不等式表示出来的矩阵:
| 1 0 | | i | >= | 0 |
| -1 0 | * | j | >= | -5 |
| -1 1 | >= | 0 |
| 0 -1 | >= | -7 |
我们可以把矩阵写成这样:
Fi + f >= 0
这样写,就是一次迭代的访问,同理,再写一次迭代:
Fl + f >= 0
那么,我们可以知道,重复的迭代,就是:
Fi + f = Fl + f
也就是:F(i - l) = 0
这样做,我们就成功把迭代等价问题转为了数学问题。
F(i - l) = 0求解
现在我们已经知道了,满足F(i - l) = 0的两次迭代等价,其中一个对矩阵的秩没有影响,它是多余的,现在,我们的问题是这个等式的求解。
向量与空间体
我们先思考一下,i和l都是向量,那么假设它们的差值为向量v,那么问题就是:
Fv = 0
F是一个矩阵,而且是确定值,它由不等式给出,那么抽象到空间中,它可以表示为一个空间体,
假设这个空间体是平面,那么V,一定就是垂直于这个平面的向量,根据向量的性质我们可以知道它们的相乘结果是0。
现在我们对空间抽象有一些理解了,那么拓展到更高维度,不管F是一个怎样的空间体,v向量空间都会使它们的结果为0,那么把V称之为零空间,我们的目的就是求解出这个零空间,这样我们就会知道那些迭代是等价的。
到这一步就不用再细究了,直接使用matlab或者python进行求解是一个非常不错的选择。
向量解与迭代
假设我们使用matlab等工具求解出v的值为:(这个值是笔者随便乱敲的)
[11]
我们迭代使用的遍历有i和j,那么也就是说:
[i1 - [i2j1] - j2] = [11]
也就是说,在我们迭代遍历数组并使用i和j作为迭代量时,如果这一次的迭代与之后的一次迭代,它们的差值刚好满足向量v的结果,那么它们就是重复迭代。
总结
将数据复用问题转化为重复迭代问题,再引入矩阵转化为代数问题,最后求解出访问相同数据的重复迭代。以上都属于自复用内容,先更这些。
相关文章:
优化程序中的数据:从代数到向量解
前言 在前文笔者简单介绍了把数据迭代抽象为线性代数,并介绍了空间体、维度等概念。 数据复用 数据复用是一种提高程序执行效率与数据局部性的方法,分为自复用与组复用, 自复用:如果多个迭代访问同一个内存位置,那…...
【Web】2024“国城杯”网络安全挑战大赛决赛题解(全)
最近在忙联通的安全准入测试,很少有时间看CTF了,今晚抽点时间回顾下上周线下的题(期末还没开始复习😢) 感觉做渗透测试一半的时间在和甲方掰扯&水垃圾洞,没啥惊喜感,还是CTF有意思 目录 Mountain ez_zhuawa 图…...
基于ceres优化的3d激光雷达开源算法
以下是一些基于CERES优化的开源激光雷达SLAM或相关算法: (1) LOAM (Lidar Odometry And Mapping) 简介: LOAM是一种经典的激光雷达里程计和建图算法,它通过提取特征点(角点和平面点),利用ICP(Iterative Cl…...
【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)
1.问题描述: 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域。 解决方案: 检测结束后需要自己去设置沉浸式配置。 2.问题描述: Vision Kit文字识别是本地识别,还是上传至服务器,由服务器来识别文…...
【LeetCode】726、原子的数量
【LeetCode】726、原子的数量 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 遇到 ( 括号, 则递归计算子问题 遇到大写字母, 或遇到 ( 括号, 则清算历史, 并开始新的记录 记录由两部分组成: 大写字母开头的 …...
VMware虚拟机三种网络工作模式
vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那…...
14-zookeeper环境搭建
0、环境 java:1.8zookeeper:3.5.6 1、下载 zookeeper下载点击这里。 2、安装 下载完成后解压,放到你想放的目录里。先看一下zookeeper的目录结构,如下图: 进入conf目录,复制zoo_sample.cfg࿰…...
[搜广推]王树森推荐系统笔记——矩阵补充最近邻查找
视频合集链接 矩阵补充(工业界不常用) 模型结构 embedding可以把 用户ID 或者 物品ID 映射成向量输入用户ID 和 物品ID,输出向量的内积(一个实数),内积越大说明用户对这个物品越感兴趣模型中的两个embed…...
Unity3D * 粒子特效 * Particle System
(基于阿发教程做的重点笔记) 粒子 用于模拟一些流动的,没有形状的物质,例如 液体,烟雾,火焰,爆炸,魔法等效果 去除粒子外框 particle system 粒子发生器,有1个主模块和22个子模块࿰…...
【基础篇】1. JasperSoft Studio编辑器与报表属性介绍
编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器,其中包括三个标签:设计,源代码和预览。 Design:报表设计页面,可以图形化拖拉组件设计报表,打开报表文件的主页面Source:源代码页码ÿ…...
数据结构:算法篇:快速排序;直接插入排序
目录 快速排序 直接插入排序 改良版冒泡排序 快速排序 理解: ①从待排序元素中选定一个基准元素; ②以基准元素将数据分为两部分:(可以将:大于基准元素放左,小于基准元素放右) ③对左半部分…...
WebAPI编程(第一天,第二天)
WebAPI编程(第一天,第二天) day01 - Web APIs 1.1. Web API介绍 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 总结 1.2. DOM 介绍 1.2.1 什么是DOM1.2.2. DOM树 1.3. 获取元素 1.3.1. 根据ID获取1.3.2. 根据标签名获取元素1.3.…...
查看MySQL存储引擎方法,表操作
修改数据库表存储引擎 show create table dept; show table status from itpux where name s2\G; select * from information_schema.TABLES where table_schemaitpux and table_names3; 查询整个mysql里面存储引擎是innodb/myisam的表 建表时候要写好存储引擎 -- 创建表 -- 表…...
【Python教程】Python3基础篇之Number(数字)
博主介绍:✌全网粉丝21W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...
基于openEuler22.09部署OpenStack Yoga云平台(一)
OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署,三个节点分别是控制节点(controller)、计算节点(compute)、存储节点(storage),其中存储…...
I.MX6U 启动方式详解
一、启动方式选择 BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置 来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔 丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就…...
施耐德变频器ATV320系列技术优势:创新与安全并重
在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…...
系统思考—全局思维
昨天接到一个企业需求,某互联网公司VP希望N-1的核心团队一起学习系统思考,特别是在新业务快速发展的阶段。公司增长势头不错,但如何解决跨部门的协作问题,成为了瓶颈。全局思维就是关键。产品、技术、市场、运营、客服……如何打破…...
Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户
Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户 查看共享连接 使用net use命令可以查看当前已经建立的共享连接。net use删除共享连接 使用net use * /del 或net use * /delete命令可以删除所有当前的共享连接。net use * /delnet use * /delete如果只想删除…...
如何在谷歌浏览器中启用语音搜索
想象一下,你正在拥挤的地铁上,双手都拿着沉重的购物袋,突然你想搜索附近的咖啡馆。此时如果你能通过语音而不是打字来进行搜索,那将多么的便利!在谷歌浏览器中,启用语音搜索功能就是这么简单而高效…...
WRKFLW终极指南:10分钟学会本地运行GitHub Actions工作流
WRKFLW终极指南:10分钟学会本地运行GitHub Actions工作流 【免费下载链接】wrkflw Validate and Run GitHub Actions locally. 项目地址: https://gitcode.com/gh_mirrors/wr/wrkflw 想要在本地验证和运行GitHub Actions工作流吗?WRKFLW是你的终极…...
一站式机器学习环境配置:从操作系统到运行NLP-StructBERT
一站式机器学习环境配置:从操作系统到运行NLP-StructBERT 刚接触AI开发,是不是感觉第一步就卡住了?看着网上各种教程,又是装系统,又是配环境,还要搞什么CUDA驱动,头都大了。别担心,…...
如何快速定制Braft Editor样式:从基础SCSS变量到高级主题开发指南
如何快速定制Braft Editor样式:从基础SCSS变量到高级主题开发指南 【免费下载链接】braft-editor 美观易用的React富文本编辑器,基于draft-js开发 项目地址: https://gitcode.com/gh_mirrors/br/braft-editor Braft Editor是一款基于draft-js开发…...
前端新手天天踩坑?安全老兵带你彻底搞懂HTML“路径引用”与“跳转陷阱”(附实战代码)
我平时在做代码审计和渗透测试时,经常会碰到一类让人哭笑不得的低级Bug:本地测试好好的图片,一部署到服务器上就全部裂开;别人点击网页上的链接,直接报404找不到页面。 这些问题归根结底,都是因为新手没有彻底搞懂 HTML 的**路径(Path)和锚点(Anchor)**规则。很多同…...
企业级可视化生态系统|关于Highcharts集成的前端框架、后端编程语言与生态
在 Web 开发和数据分析领域,Highcharts 凭借其强大的交互性和美观的视觉效果,早已成为行业标杆。然而,真正让 Highcharts 脱颖而出的,不仅仅是它那 100 多种图表类型,更是其全方位的集成能力(Integrations&…...
微信聊天记录永久保存的3种方法:WeChatMsg完整指南与实战技巧
微信聊天记录永久保存的3种方法:WeChatMsg完整指南与实战技巧 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/w…...
GLM-4.7-Flash部署避坑指南:Ollama常见问题与解决方法
GLM-4.7-Flash部署避坑指南:Ollama常见问题与解决方法 1. 部署前的准备工作 1.1 系统环境检查 在开始部署GLM-4.7-Flash之前,确保你的系统满足以下基本要求: 操作系统:支持Windows 10/11、macOS 10.15或主流Linux发行版内存&a…...
macOS 内存模型深度解析 | x free 设计哲学
macOS 内存模型深度解析 | x free 设计哲学 为什么 macOS 的内存这么复杂?如果你用过 Linux 的 free 命令再看 macOS 的 vm_stat,会感到困惑——为什么 macOS 的内存统计如此混乱?wired、active、inactive、speculative、throttled、purgeabl…...
OFA视觉蕴含模型作品集:图文匹配智能判断精彩案例
OFA视觉蕴含模型作品集:图文匹配智能判断精彩案例 1. 视觉蕴含技术简介 视觉蕴含(Visual Entailment)是人工智能领域的一项重要技术,它能够判断图像内容与文本描述之间的逻辑关系。简单来说,就是让AI系统理解图片和文…...
OpenClaw新手避坑指南:Qwen3-14B镜像部署的5个常见失误
OpenClaw新手避坑指南:Qwen3-14B镜像部署的5个常见失误 1. 为什么需要这份避坑指南 第一次在本地部署OpenClaw对接Qwen3-14B镜像时,我踩遍了所有能想到的坑。从CUDA版本冲突到显存溢出,从端口占用到凭证失效,整个过程就像在玩&q…...
