triton矩阵乘以及缓存优化

这里triton.cdiv(M, META['BLOCK_SIZE_M']) * triton.cdiv(N, META['BLOCK_SIZE_N']),所以grid的形状是一维的。

观察函数内部

pid = tl.program_id(axis=0),因为grid是一维的,所以这里就是总块数,我们假设实际A*B=C,

A,B形状是574*574,块形状是64*64,这样一共有81块,pid就是0~80,

这里用574/64=9,所以num_pid_m和num_pid_n都是81

num_pid_in_group = GROUP_SIZE_M * num_pid_n,算的是一个组有多少块,这里假设是3*9,所以一组27块。

group_id = pid // num_pid_in_group算组id,当前pid//27就得到所在组id,比如30//27=1,说明30块在组1

first_pid_m = group_id * GROUP_SIZE_M,每一组的第一个块在结果矩阵中是第几行。

因为数据不一定能整除,最后一个组可能少,所以有

group_size_m = min(num_pid_m - first_pid_m, GROUP_SIZE_M)
pid_m = first_pid_m + (pid % group_size_m)
    pid_n = (pid % num_pid_in_group) // group_size_m

这两行做映射,是关于pid和结果矩阵中块位置的映射,

行坐标=组号*每组行数+pid%每组行数,pid%3知,pid三个三个一排,也就是算的当前pid在当前组里相对是第几行,比如如果是4,4%3=1,可知pid=4在当前组第一行(0,1,2),那么组号*每组行数就可以相对整组位移,最终可以知道pid和c矩阵中行位置的映射

列坐标=pid%每组总数//每组行数,pid%每组总数可知当前组顺序是第几块,也就是27块中的第几块,比如pid%4就会得到4,然后4//=1就知道在第几列了,

所以pid的对应关系就和上图的一样的顺序对应。

这里比如想要计算块pid=4,那么就需要拿到A的第一行和B的第一行,

这里各自会得到一个二维矩阵,里面的指针值就是所指向的元素位置,这里只是第一块

假设计算结果矩阵中的(x,y,),位置的块,

offs_am得到一个list,

x*m*stride.am就可以得到x行A矩阵第一个小块的第一行的第一个元素的起始位置(这里*的是行的步长),然后因为要形成M*K的形状,就需要扩展为二维矩阵,然后再加上列的间隔,这样就得到了A矩阵里相对位置的指针量。最后加上A的本身第一个元组的指针值就得到了实际存储位置。

这里就好理解了,就是A矩阵从列迭代,B从行迭代,

不同的顺序,所要求的缓存中所需要的空间不一样,下面这一种在缓存受限的情况下要好。

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

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

相关文章

ubuntu链接mysql

C链接mysql 报错 sudo apt-get update sudo apt-get install libmysqlclient-dev 指令编译 g -o mysql_example mysql_example.cpp -I/usr/include/mysql -lmysqlclient g mysql_test.cpp mysql_config --cflags --libs 安装mysql sudo apt updatesudo apt install mysql-…

跟着ChatGPT4o学全栈,我看到未来“学习”的模样

引言 大模型是否会取代人类,以及它将取代哪些工作,这或许是许多人焦虑的问题。对此,众说纷纭,网络上各种观点层出不穷。虽然这些问题对未来的重要性不容忽视,但它们对于当下的我们缺少实际的指导意义。因此&#xff0…

SpringMVC系列十一: 文件上传与自定义拦截器

文章目录 SpringMVC文件上传基本介绍需求分析 / 图解应用实例-代码实现 自定义拦截器什么是拦截器自定义拦截器执行流程分析图自定义拦截器应用实例快速入门注意事项和细节Debug执行流程 多个拦截器多个拦截器执行流程示意图应用实例1代码实现注意事项和细节 应用实例2 作业布置…

[创业之路-118] :制造业企业的必备管理神器-ERP-制造业的基本方程式与ERP的发展历程,哪些企业需要ERP?

目录 一、制造业的基本方程式 1.1 基本方程式 1.2 制造的数学模型 二、ERP的发展历程 2.1 发展历程 2.2 比较 三、过往产品回顾 3.1 定货点法 3.2 时段式ERP 3.3 闭环式MRP 3.4 ERP 四、哪些企业需要ERP 4.1 概述 4.2 软件企业需要ERP吗? 一、制造业的…

【计算机网络篇】数据链路层(6)共享式以太网_网络适配器_MAC地址

文章目录 🍔网络适配器🍔MAC地址🗒️IEEE 802局域网的MAC地址格式📒IEEE 802局域网的MAC地址发送顺序🥚单播MAC地址🥚广播MAC地址🥚多播MAC地址🔎小结 🍔网络适配器 要将…

汇川h3U用modbus配置扩展IO

扩展IO模块为4个艾莫迅RTU简易版,16输入,16输出。物理连接为RS485,A B两根线。 下面为H3Umodbus配置,关键是协议选择为:MODBUS主站配置。协议配置:和从站保持一致 通过下图的程序及配置,已经可…

VB打开word文档

在编码之前,先安装Microsoft.Office.Interop.Word Imports Microsoft.Office.InteropModule Module1Sub Main() 创建Word应用程序实例Dim wordApp As New Word.Application() 设置为可见wordApp.Visible True 打开指定的Word文档Dim doc As Word.Document wordA…

期货分仓软件的搭建流程

期货分仓软件的搭建流程,是一个涉及多个环节的复杂过程。首先,明确功能需求是至关重要的,这有助于更好地规划软件的开发和设计。接下来,技术选型是关键一步,需要根据开发经验和项目需求,选择适合的编程语言…

maven archetype项目构架

1、设置环境变量 set MAVEN_HOMED:\SF\java\apache-maven-3.6.3 set path%path%;%MAVEN_HOME%\bin;2、制作archetype mvn -s "D:\SF\java\apache-maven-3.6.3\conf\settings.xml" archetype:create-from-project -DpackageNamecom.demo.esb-s:指定maven的setting文…

华为---VLAN-配置Eth-Trunk链路聚合(三)

6.3 配置Eth-Trunk链路聚合 6.3.1 原理概述 在没有使用Eth-Trunk前,百兆以太网的双绞线在两个互连的网络设备间的带宽仅为100Mbit/s。若想达到更高的数据传输速率,则需要更换传输媒介,使用千兆光纤或升级成为千兆以太网。这样的解决方案成本…

肩背筋膜炎怎么治疗最有效

肩背筋膜炎是一种常见的肌肉骨骼疾病,其症状主要包括:肩背区域疼痛:由于筋膜组织受到损伤,肩背部位会出现明显的疼痛,疼痛可能会放射到周围的其他部位,严重时会影响睡眠和休息。肌肉紧张和僵硬:…

【计算机网络仿真实验-实验3.1、3.2】交换路由综合实验

实验3.1 交换路由综合实验——作业1 一、实验目的 运用实验二(可前往博主首页计算机网络专栏下查看)中学到的知识,将这个图中的PC机连接起来组网并分析,本篇涉及代码以截图展示,过于简单的代码及操作不再详细介绍&…

领航未来!信息技术服务管理体系如何点燃企业数字化转型的“火箭引擎”

在当今这个数字化飞速发展的时代,信息技术已经成为企业运营和管理的核心驱动力。随着企业对于信息化、智能化的需求日益增长,如何构建一套科学、高效的信息技术服务管理体系,不仅关乎企业内部的运营效率,更直接影响着企业的市场竞…

Quantlab整合Alpha158因子集,为机器学习大类资产配置策略做准备(代码+数据)

原创文章第565篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 我们的研报得现工作,用了两篇文章讲数据准备: 【研报复现】年化16.19%,人工智能多因子大类资产配置策略 【研报复现】年化27.1%,人…

有了智能猫砂盆不用手动铲屎了?解放双手的好用品牌分享来了!

在现代都市的忙碌节奏中,许多养猫家庭常常因为需要上班或频繁出差而忙碌不堪。每天早出晚归,甚至有时候还要面临加班和紧急出差的情况,导致很难有足够的时间和精力去及时为猫咪铲屎。然而,猫咪是敏感而干净的动物,它们…

AJAX 综合案例-day2

Bootstrap 弹框 功能:不离开当前页面,显示单独内容,供用户操作 步骤: 1. 引入 bootstrap.css 和 bootstrap.js 2. 准备 弹框标签 ,确认结构 3. 通过 自定义属性 ,控制弹框的 显示 和 隐藏 1. 通过属性…

Mac M3 Pro 部署Trino-server-449

目录 1、下载安装包 2、解压并设置配置参数 3、启动并验证 4、使用cli客户端连接测试 1、下载安装包 官方:trino-server-449 CLI 网盘: server https://pan.baidu.com/s/16IH-H39iF8Fb-Vd14f7JPA?pwd3vjp 提取码: 3vjp cli https://pan.baidu.…

手把手教你挖赏金系列(2)如何挖掘短信验证码漏洞

免责声明 由于传播、利用本公众号所发布的而造成的任何直接或者间接的后果及损失,均由使用者本人承担。LK安全公众号及原文章作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢&#…

04. Java 多线程的创建

1. 前言 本节内容重点需要掌握 Java 多线程的三种创建方式,具体内容如下: Java 线程类 Thread 继承结构,这是 JDK Thread 源码的类结构,是了解 Thread 类的第一步;掌握多线程的三种创建方式,这是本节的重…

MySQL第三方图形化工具:DBeaver

操纵数据库的语言,基于功能划分为4类: 数据定义:DDL(Data Definition Language)库的创建删除、表的创建删除等 数据操纵:DML(Data ManipulationLanguage)新增数据、删除数据、修改数据等 数据控制:DCL(Data ControlLanguage)新增用户、删除用户、密码…