cuda算子优化-transpose

transpose

参考链接

方法一:每个线程负责一个元素的转置

  • cuda代码实现
    在这里插入图片描述
  • ncu分析(矩阵维度采用m=1024,n=512;grid和block维度见下图最上方)
    这种方法对读global mem比较友好,可以做到合并访存,但对写global mem就非常不友好,通过ncu分析拿到相关指标可以证明这一点,下图是 ncu --section MemoryWorkloadAnalysis_Tables
    在这里插入图片描述
    • 先说明一下nVidia gpu的cache的读写策略

      • cache读策略:l1和l2,l2和HBM之间都是以sector为单位读取的
      • cache写策略:l1和l2之间采用write-through & not write-allocate;l2和HBM之间采用write-back &write-allocate。对于write-allocate要注意一点,如果某个来自l2 cache的store request刚好写一个sector那么就不需要把这个sector从HBM中先读到l2 cache(因为读了也是白读,这块sector全部要被写入),如果该request要写的sector中有些字节没写到,那么就需要先把该sector读到l2 cache再写l2 cache。
        在这里插入图片描述
    • 分析各级load

      • L1 Cache的Global Load

        • Requests
          表示warp对L1 cache发送的Global Load请求条数,warp中32个线程对L1发送的Global Load指令会被合并成一个Request再发给L1(应该是LSU做的),一共有16 * 128 * 32 * 8/32=16384个warp,分析cuda代码可知每个warp都会产生一个Request,所以一共有16384个Request。
        • Sector
          表示L1传输给warp的总Sector数(一个Sector32字节),由于warp中32个线程各自的load可以发生合并访存,每个线程请求读4字节,所以warp发送的一个Load Request中恰好包含4个sector,所以总sector个数=16384 * 4=65536
        • Hit Rate
          表示load 请求的命中率,最开始l1 cache中无任何数据的缓存,所以命令率是0
        • Sector Misses to L2
          表示发给L2的sector请求(warp向L1发送的sector请求miss了所以要发给l2),这里全部没有命中,所以sector请求全部发给l2了,即65536个sector请求
      • L2 Cache的 L1/TEX Load

        • Sectors
          表示L1发给L2的sector请求个数,就等于Sector Misses to L2,即65536
        • Hit Rate
          表示load 请求的命中率,最开始l2 cache中无任何数据的缓存,所以命令率是0
        • Sector Misses to Device
          表示发给HBM的sector请求个数,这里也是全部没有命中,所以sector请求全部发给HBM了,即65536个sector请求
      • Device Memory的 Load

        • Sectors
          表示从HBM读取到l2的sector个数,图中是66353(比65536多一点,应该是会读取其他的一些数据?目前不是很清楚)
    • 分析各级store

      • L1 Cache的Global Store

        • Requests
          表示warp对L1 cache发送的Global Store请求条数,计算方式同Global Load一样是,一共有16384个Request
        • Sectors
          表示warp对L1 cache发送的Global Store请求条数,由于warp中32个线程各自的store不能发生合并访存,每个线程请求写4字节,但相邻id的线程写的字节并不能拼到一个sector中,所以每个线程都得单独给l1 cache发一个sector (虽然这个sector只包含4个字节是该线程真正要写回global mem的),所以warp发送的一个Store Request中包含32个store sector请求,所以总sector个数=warp数*32=16384 * 32=524288(图中是524316多了一点,emmm,反正差不多)
        • Hit Rate
          暂时没弄懂store的hit rate是怎么算的
        • Sector Misses to L2
          表示发给L2的sector的store请求,l1和l2之间采用的是write-through & not write-allocate,所以l1接收到写sector的请求后会全发给l2,这里总共是524288个sector
      • L2 Cache的L1/TEX Store

        • Sectors
          表示来自l1的写sector个数,524288
        • Hit Rate
          暂时没弄懂store的hit rate是怎么算的
        • Sector Misses to Device
          表示发给HBM的sector请求个数,l2和HBM之间采用的是write-back & write-allocate,所以l2接收到写sector的请求后并不会直接发给HBM,而是等cacheline被evict后才真正写回HBM,所以Sector Misses to Device是0
      • Device Memory的Store

        • Sectors
          这里只看到很小一点的sector被写入HBM(1063),原因还是刚刚分析的,l2和HBM之间采用的是write-back & write-allocate,所以l2接收到写sector的请求后并不会直接发给HBM,而是等cacheline被evict后才真正写回HBM。 这里由于我的代码逻辑是执行完转置kernel函数后直接退出程序了,所以后面没有其他的kernel函数读数据来evict掉l2 cache的数据,所以这里ncu分析到的只有一点sector被写入HBM(应该是transposs kernel函数自己evict掉的一小部分cacheline)

方法二:每个线程负责4*4的小矩阵转置

TODO

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

知识产权 ABS 企业融资新渠道

在当今知识经济时代,知识产权作为企业的核心资产,其价值日益凸显。知识产权资产证券化(Intellectual Property Asset-Backed Securitization,简称知识产权ABS)作为一种创新的金融工具,为企业盘活知识产权资…

Cpp类和对象(下)(6)

文章目录 前言一、初始化列表概念使用注意实际运用explicit关键字初始化列表的总结 二、static成员static成员的概念static成员的特性static的一个实用场景 三、友元友元函数友元类 四、内部类概念特性 五、匿名对象六、再次理解封装和面向对象总结 前言 Hello,本篇…

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录?二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录? 单点登录(Single Sign On&…

权威期刊Cell Discovery新成果!上海交大洪亮团队提出CPDiffusion模型,超低成本、全自动设计功能型蛋白质

蛋白质是生命活动的主要执行者,其结构与功能之间的关系一直是生命科学领域研究的核心议题。近年来,随着深度学习的兴起,借助其强大的数据处理能力,让模型学习蛋白质序列、结构及其功能之间的映射关系,设计出具备更高稳…

prithvi WxC气象模型

NASA发布了prithvi WxC气象模型发布 Prithvi是NASA开源的模型,被誉为全球最大的开源地理空间大模型。昨天晚上逛X平台,我看到Prithvi模型又来了新成员:prithvi WxC。 NASA和IBM创建了一个基于MERRA-2数据的天气和气候AI基础模型—Prithvi Wx…

数据库事务索引视图、存储过程

目录 文章目录 一、数据库事务 事务概述: 事务特征: 提交回滚 隔离级别 二、索引 索引创建原则: 存储引擎 单列索引 组合索引 全文索引 空间索引 三、视图 四、函数和存储过程 1.函数的创建 2.存储过程 3.调用格式 4.两者…

初识爬虫8

1.selenium的作用和工作原理 2. 使用selenium,完成web浏览器调用 # -*- coding: utf-8 -*- # 自动化测试工具,降低难度,性能也降低 from selenium import webdriverdriver webdriver.Edge()driver.get("https://www.itcast.cn/")…

高德2024全民出行节启动,联合生态伙伴发放百亿补贴

临近十一黄金周,高德地图宣布启动“2024全民出行节” ,致力于打造出门好生活体验,让用户十一出行“和囧途说ByeBye”。今年十一黄金周期间,高德地图联合生态伙伴在百大行业推出百亿补贴,涵盖吃、住、行、游、购、娱。同…

netty编程之那么多的网络框架为啥非选你?

写在前面 java nio框架不止一种,为啥非选netty?本文来看下。 1:正文 网络io框架,除了netty外,还有mina,sun grizzly,cindy等,为啥独选netty。 mina netty和mina作者同属一人&…

CAN协议一致性测试——深入浅出理解CAN协议(四)

本系列是在同公司硬件设计、验证的同事1、在完成了CANFD硬件接口IP开发 2、熟悉ISO-11898系列、ISO16845、CAN2.0协议、CANFD协议等以及大量学习资料 3、深入研究其他家CANFD IP(NXP、BOSCH)4、独立开发了对应底层驱动 5、通过CANoe和周立功CAN分析仪完成…

类的难疑点

一、知识点 1、类的属性和对象属性(实例属性) shuxing"123" self.shuxing"123" 2、类的对象 self.loginMyclass() loginMyclass() 3、访问类属性和方法的操作 通过“类名.属性”访问:Myclass.shuxing 通…

筋膜炎能自愈吗

筋膜炎能否自愈,主要取决于病情的严重程度以及患者的自我管理和治疗情况。 一、轻微筋膜炎的自愈可能性 对于轻微筋膜炎患者,通过合理的日常护理和适当的运动锻炼,有很高的自愈可能性。这包括: 1、充分休息:避免过度…

【BetterBench博士】2024华为杯C题:数据驱动下磁性元件的磁芯损耗建模 Python代码实现

题目 【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动…

React 理解 re-render 的作用、概念,并提供详细的例子解释

一、什么是 re-render 在 React 中 re-render(重新渲染) 是经常发生的行为,主要确保视图要时刻保持最新的数据来呈现。 但每次发生 re-render 也是有代价的,比如数据状态、focus 焦点、表单数据、都得重置, 遇到代码…

Linux ping c实现

linux下ping程序的c实现 #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdint.h> #include <netdb.h> #include <arpa/inet.h> #include <unistd.h> #include <st…

LoongArch 个人赛一级评测(前递旁路+load阻塞)

目录 LoongArch 个人赛一级评测&#xff08;前递旁路load阻塞&#xff09;声明测试说明 代码修改thinpad_top.vconver_ram.vIF_stage 测试自动评测在线实验 踩坑记录读写使能控制inout类端口的使用方法Vivado生成Bit流文件时出现[Synth 8-91] ambiguous clock in event control…

file zilla server安装以后,client连接,账号登录成功,但是读取目录失败的处理

1、下载 2、连接 开始一直报错&#xff0c;server1.9.1的版本&#xff0c;后来直接下载了汉化版本进行安装&#xff1a; 服务端 - FileZilla中文网 3、报错&#xff1a;登录正常&#xff0c;但是读取目录失败&#xff0c;一开始也是这个错误&#xff0c;后来改成安装低版本的&a…

python之装饰器、迭代器、生成器

装饰器 什么是装饰器&#xff1f; 用来装饰其他函数&#xff0c;即为其他函数添加特定功能的函数。 装饰器的两个基本原则&#xff1a; 装饰器不能修改被装饰函数的源码 装饰器不能修改被装饰函数的调用方式 什么是可迭代对象&#xff1f; 在python的任意对象中&#xff…

Mac使用技巧-来自苹果专人在线辅导服务3

真的太喜欢上苹果专人在线辅导课程了&#xff01;每次感觉都满满收获&#xff01; 目录 一、手势 1.1三指拖移 1.2四指上推 1.3五指快速进入启动台 二、程序坞里的app 1.如何将程序坞中不需要/不常用的app移除&#xff1f; 2.当鼠标放在将程序坞中app时&#xff0c;图标…

到底该不该做副业?这些真相你必须知道!零基础入门到精通,收藏这一篇就够了

天哪&#xff01;根据最新调查显示&#xff0c;超过60%的职场人士正在考虑或已经开始从事副业。 那么&#xff0c;究竟该不该做副业&#xff1f; 第一部分&#xff1a;副业的好处 1. 增加收入 做副业最直接的好处就是可以增加收入。 在经济压力日益增大的今天&#xff0c;…