矩阵乘法优化:GEMM中如何将大矩阵切割成小矩阵

 论文自然还是 Anatomy of High-Performance Matrix Multiplication。

如何拆分

一个矩阵乘法有 6 种拆分方式,其中对 row-major 效率最高的是:

第一次拆分

先做第一次拆分,取 A 的 kc 列(PanelA)和 B 的 kc 行(PanelB),得到待累加的一部分结果;

第二次拆分

第二次拆分,把 PanelB 按 nc 大小切分成多个 BlockB,分别与 PanelA 相乘;

第三次拆分

最后一次切分,把 PanelA 按 mr 大小切分,与 BlockB 乘(注意具体代码里的kernel4x4或者kernel8x8是指 mr 的大小)。

GEPB 约束条件

我们考察最后一次 GEPB 的切分过程,如何使其性能最高?

GEPB参数

以上是 GEPB 的参数,如果这个运算所需数据都加载到 L1 cache 里,那计算效率自然是最高的。此时运算 ops 为 2∗m∗kc∗nc ,同时做的数据搬运量为 kc∗nc+m(kc+2nc) ,我们期望做最小的 io 产生最大的计算,即

max(2∗m∗kc∗nc/(kc∗nc+m(kc+2nc)))

由于 nc 远小于 m,上式约等于

maximize(2∗kc∗nc/(kc+2∗nc))

可以得到以下约束/倾向:

约束1: maximize(2∗kc∗nc/(kc+2∗nc))

约束2:kc*nc 越大效果越好

Cache 层级分配

由于 L1Cache 通常比较小,不太可能得到比较大的 kc∗nc kc∗nc 值,是否可能把 BlockB 放到 L2Cache 里,尽量让 kc∗nc 最大?已知 GEPB 计算的伪代码为

Load PanelB into cache
for j = 0...M-1
  Load Aj into cache
  Load Cj into cache
  subkernel_calculation
  Store Cj
endfor

循环里每次取 PanelA 的 mr 行做计算,每次计算的时间开销为

2∗mr∗kc∗nc/cpu_frequency

假设 PanelB 放入了 L2Cache,每次加载需要的时间为
kc∗nc/l2cache_speed

计算时间要大于加载时间,才能防止 CPU 等待 IO 从而让 CPU ALU 跑满,代入上式可得到约束条件

约束3:mr≥cpu_frequency/(l2cache_speed∗2)

因为计算用的数据都在 L1Cache,所以每次从 PanelA 加载的 nr 行不宜超过 L1Cache大小。同时计算结果 C 也需要空间,可以得到

约束4: mr∗kc≤l1_cachesize/2

当数据全放到了 L1Cache 里计算时,每次是用 kernel4x4 还是 kernel8x8,取决于 CPU 有多少寄存器。一般是尽可能利用所有 reg。可以得到

约束5:nr kr 的选择完全看寄存器情况

  • 需要一半的寄存器存结果
  • nr 和 kr 接近,效果最佳
  • armv8 浮点一般是 、8x8

来自 TLB 的约束

我们知道计算机存储结构长这个样子

计算机存储结构

上文说到要把 BlockB 放到 L2Cache,随着 ALU 的计算不断加载到 L1Cache。实际上两个 Cache 中间还隔着个 TLB,因此要考虑 TLB 寻址空间的限制。L1Cache miss 可以用 prefetch 指令处理掉,TLB miss 会真的 stall CPU,影响 ALU 利用率。

Cache 寻址空间(256K)一般小于 L2Cache 大小(2M),因此有

约束6: GEPB内循环一次计算所需数据总大小( 的行的行BlockB+A的mr行+C的mr行 )不能超过 TLB 寻址空间

约束7:计算数据要 Packing,防止 TLB miss

总结一下行主序 GEMM 分块的参数选择

mr、nr 和 kr 如何取值

  1. 尽可能是个正方形,尽量用满寄存器
  2. 约束3 限制了 mr 的最小值

kc 的取值

  1. nc*kc 尽可能大,但不能大过 TLB 寻址空间的一半
  2. kc 不超过 l1_cachesize/2/mr ,其中 mr 已在上文选取
  3. 按经验是页表大小的一半,即 pagesize/2

nc 的取值

nc=kc ,参见约束1

mc 的取值

mc∗k<l2_cachesize 我们期望 A 尽可能放到 L2Cache 里面

就已知的情况来看,fp32 GEMM 极限可达到 10-11 gflops 左右(即 CPU 峰值的 80+%,packA 和 packB 开销跟着矩阵形状走大约是20%),结合具体的任务,例如 2D 卷积、全连接,可以做到 90% 左右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506933.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 7 大城市实景数据,清华大学团队开源 GPD 模型

城市&#xff0c;是人们安居乐业的故土&#xff0c;是政府开展经济建设的基石&#xff0c;承载着细腻的人文情怀与宏伟的国家发展脉络。长期以来&#xff0c;管理者一直在探寻更加高效、科学的城市治理方法&#xff0c;解决不同地区资源供给不平衡、交通拥挤、人口流失等问题。…

Qt项目通过.pri文件将众多文件按功能模块分类显示,开发大型项目必备

Chapter1 Qt项目通过.pri文件将众多文件按功能模块分类显示&#xff0c;开发大型项目必备 Chapter2 在Qt项目中添加pri文件 原文链接&#xff1a;在Qt项目中添加pri文件_qtpri-CSDN博客 前言 一般我们创建Qt项目工程的时候&#xff0c;都是直接把所有的项目&#xff0c;头文…

Chatopera 云服务的智能问答引擎实现原理,如何融合 #聊天机器人 技术 #Chatbot #AI #NLP

观看视频 Bilibili: https://www.bilibili.com/video/BV1pZ421q7EH/YouTube: https://www.youtube.com/watch?vx0d1_0HQa8o 内容大纲 提前在浏览器打开网址&#xff1a; Chatopera 云服务&#xff1a;https://bot.chatopera.comChatopera 入门教程&#xff1a;https://dwz…

微机原理-基于8086电压报警器系统仿真设计

**单片机设计介绍&#xff0c;微机原理-基于8086电压报警器系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086的电压报警器系统仿真设计概要主要涉及到系统的整体架构设计、硬件组成、软件逻辑设计以及仿真环境…

【智能算法】黄金正弦算法(GSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年&#xff0c;Tanyildizi等人受到正弦函数单位圆内扫描启发&#xff0c;提出了黄金正弦算法&#xff08;Golden Sine Algorithm, GSA&#xff09;。 2.算法原理 2.1算法思想 GSA来源于正弦函…

前端学习<二>CSS基础——14-CSS3属性详解:Web字体

前言 开发人员可以为自已的网页指定特殊的字体&#xff08;将指定字体提前下载到站点中&#xff09;&#xff0c;无需考虑用户电脑上是否安装了此特殊字体。从此&#xff0c;把特殊字体处理成图片的方式便成为了过去。 支持程度比较好&#xff0c;甚至 IE 低版本的浏览器也能…

C语言内存函数(超详解)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…

安全用电监控系统在工厂的研究与应用论述

摘 要&#xff1a;随着社会时代的发展&#xff0c;人们的安全意识越来越强烈&#xff0c;在人们生活和工作中离不开各种用电设备&#xff0c;用电设备的安全使用是保障人们生命安全的重要内容。工厂因自身厂内工作环境的特殊性&#xff0c;用电设备的种类多且复杂&#xff0c;如…

【数据结构与算法初阶(c语言)】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序-全梳理(万字详解,干货满满,建议三连收藏)

目录 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3常见的排序算法 2.插入排序 2.1 原理演示&#xff1a;​编辑 2.2 算法实现 2.3 算法的时间复杂度和空间复杂度分析 3.希尔排序 3.1算法思想 3.2原理演示 3.3代码实现 3.4希尔算法的时间复杂度 4.冒泡排序 4.1冒泡排…

二、图的表示和带权图

文章目录 1、图的表示1.1 邻接矩阵1.2 邻接表1.3 关联矩阵 2、带权图2.1 最短路径问题2.2 中国邮递员问题2.3 旅行商问题 THE END 1、图的表示 1.1 邻接矩阵 \qquad 将图的所有顶点分别构成一个二维矩阵的行列&#xff0c;将顶点之间的边关系表示在构成的矩阵之中&#xff0c;…

在CentOS 8.5.2111下安装vncserver

# 参考&#xff1a; 如何在 CentOS 8/RHEL 8 上安装配置 VNC 服务器 安装CentOS 8.5.2111 及 vncserver # 标准安装步骤 安装GNOME桌面环境使用屏幕号:1。安装VNC服务器&#xff08;tigervnc-server tigervnc&#xff09;设置VNC密码设置VNC服务器配置文件开启vnc服务。开放防…

FX110网:货币交易5个亏损典型,你有中招吗?

人生百年几今日&#xff0c;今日不为真可惜&#xff01;若言姑待明朝至&#xff0c;明朝又有明朝事。很多投资朋友总是抱怨&#xff0c;为什么总是看见别人赚钱&#xff0c;自己一进场就亏损&#xff0c;那么在这里投资失败无非两点&#xff1a;一是自身原因&#xff0c;自己没…

SAP 销售分销中的免费货物

销售业务中&#xff0c;免费货物在您与客户协商价格时起着重要作用。在零售、化工或消费品这样的行业部门中&#xff0c;通常以免费货物的形式向客户提供折扣。 作为用户&#xff0c;业务用户希望能自动确定免费货物并将它们归入销售凭证中。同时需要向成本控制部门提供免费货物…

密码算法概论

基本概念 什么是密码学&#xff1f; 简单来说&#xff0c;密码学就是研究编制密码和破译密码的技术科学 例题&#xff1a; 密码学的三个阶段 古代到1949年&#xff1a;具有艺术性的科学1949到1975年&#xff1a;IBM制定了加密标准DES1976至今&#xff1a;1976年开创了公钥密…

盘点那些好用的SAP FIORI App(一) Display Customer/Supplier List

做SAP运维的人可能都知道&#xff0c;SAP标准的菜单里面基本没有好用的report可以用来批量显示并导出客户清单&#xff0c;或者供应商清单。T-code MKVZ 可以导出供应商的采购数据&#xff0c;但仅限于部分字段&#xff0c;客户清单的话系统标准的有这个S_ALR_87012179 - Custo…

电脑端手机配置检测工具推荐与使用指南

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具&#xff0c;用户可以全面了解手机的硬件和操作系统信息&#xff0c;包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中&#xff0c;了解手机的配置信息对于开发和测试人员非常重要…

算法刷题笔记(3.25-3.29)

算法刷题笔记 3.25-3.29 1. 相同的树2. 二叉树的最近公共祖先3. 二叉搜索树中第K小的元素通过双端队列duque 中序遍历 4. 二叉树的锯齿形层序遍历new LinkedList<Integer>(levelList)双端队列复制 数组需要左右顺序&#xff0c;考虑双端队列 5. 岛屿数量6. 字典序排数&am…

【应用浅谈】Odoo的库存计价与产品成本(一)

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo的库存&#xff08;Stock&#xff09;模块拥有众多功能&#xff0c;其中库存计价是一项非常重要的功能&#xff0c;原生的成本方法分三种&#xff1a;【标准成本】&#xff0c;【平均成本】&#xff0c;【先进先出】&#…

个人博客系统|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)

个人博客系统目录 目录 基于Springboot的个人博客系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 &#xff08;1&#xff09;用户管理 &#xff08;2&#xff09;文章分类管理 &#xff08;3&#xff09;公告信息管理 &#xff08;4&#…

微服务之分布式事务概念

微服务之分布式事务概念 CAP定理和Base理论 CAP定理 CAP定理在1998年被加州大学的计算机科学家 Eric Brewer 提出&#xff0c;分布式系统有三个指标&#xff1a; 一致性&#xff08;Consistency&#xff09;可用性&#xff08;Availability&#xff09;分区容错性&#xff…