4.6 BOUNDARY CHECKS

我们现在扩展了tile矩阵乘法内核,以处理具有任意宽度的矩阵。扩展必须允许内核正确处理宽度不是tile宽度倍数的矩阵。通过更改图4.14中的示例至3×3 M、N和P矩阵,图4.18创建了矩阵的宽度为3,不是tile宽度(2)的倍数。图4.18显示了block0,.0.第1阶段的内存访问模式。Thread0,1和thread1,1,我将尝试加载不存在的M元素。同样,thread1,0和thread1,1将尝试访问N个不存在的元素。在这里插入图片描述
访问不存在的元素在两个方面存在问题。访问行末尾的非现有元素(M通过thred1.0和thread,1访问,在图4.18中。)将对不正确的元素进行处理。在我们的示例中,线程将尝试访问M0.3和M1.3,两者都不存在。在这种情况下,这些内存负载会发生什么?为了回答这个问题,我们需要回到二维矩阵的线性化布局。在线性化布局中,M0.2之后的元素是M1.0。虽然thred01正在尝试访问M0.3,但它将获得M1,0.在子内积计算中使用该值肯定会腐蚀输出值。

从我们到目前为止的讨论来看,有问题的访问似乎只出现在线程执行的最后阶段。这一观察表明,可以在平铺内核执行的最后阶段采取特殊行动来解决这个问题。不幸的是,所有阶段都可能出现有问题的访问。图4.19显示了0阶段block1,1的内存访问模式。我们看到thread1,0和thread1,1试图访问不存在的M元素Ms3,0和Ms3.1,而thread0.1和thread1,1试图访问N0,3和N1,3,它们不存在。
在这里插入图片描述

请注意,无法通过排除不计算有效P元素的线程来防止这些有问题的访问。例如,block1,1中的thread1,0不计算任何有效的P元素。然而,它需要在0阶段加载M2,1。此外,一些计算有效P元素的线程将尝试访问不存在的M或N元素。如图4.18所示。0,0 block的,thread0,1计算一个有效的P元素P0.1。然而,它试图在第1阶段访问不存在的M0,3。这些观察表明,需要进行不同的边界条件测试,以加载M tiles、加载N tiles和计算/存储P元素。

我们从加载输入tile的边界测试条件开始。当线程打算加载输入tile元素时,它应该测试该输入元素的有效性,这很容易通过检查y和x索引来完成。举例来说,在图4.16中的第9行,线性化索引来自行的y索引和phTILE _WIDTH + tx的x索引。边界条件测试是两个索引都小于宽度:(Row<Width) && (phTILE_WIDTH+tx)<Width。如果条件满足,线程应该加载M元素。读者应该验证加载N元素的条件测试是(ph*TILE_WIDTH+ty)<Width && Col<Width。

如果条件不满足,线程不应加载元素,在这种情况下,问题是应该将什么放在共享内存位置。答案是0.0,如果在内积计算中使用,这个值不会造成任何伤害。如果任何线程在计算其内积时使用此0.0值,则不会观察到内积值的变化。

最后,线程只有在负责计算有效的P元素时才应存储其最终的内积值。此条件的测试是(Row < Width)&&(Col < Width)。带有附加边界条件检查的内核代码如图4.20.所示。
在这里插入图片描述
Tile(瓷砖)的思想是将大的矩阵操作分解为更小的子矩阵(或“瓷砖”)的操作。这样做可以充分利用CUDA架构的共享内存,这是一种比全局内存访问速度快得多的内存类型。通过使用共享内存,可以显著减少对全局内存的访问次数,从而减少内存延迟,并提高整体的内存带宽效率。
选择TILE_WIDTH的原因包括:

  1. 共享内存限制:每个CUDA核心的共享内存是有限的。例如,早期的CUDA硬件每个block只有16KB的共享内存。如果你尝试一次性加载整个矩阵,你可能会超过这个限制,从而导致错误或性能下降。
  2. 线程块大小限制:CUDA核心对每个线程块可以包含的线程数量也有限制。例如,如果每个核心允许的最大线程块大小是1024个线程,那么使用32×32(即1024)的TILE_WIDTH就是这个限制的上限。如果尝试一次性加载更大的瓷砖,你将无法在一个线程块中为每个瓷砖元素分配一个线程。
  3. 内存带宽利用:通过分块(tiling)可以使得每次从全局内存中加载的数据都能被多次使用,这样可以减少内存访问的次数,从而更高效地利用内存带宽。
  4. 缓存局部性:共享内存可以被看作是用户可控的缓存。使用瓷砖技术可以增加缓存命中率,因为一旦一个瓷砖被加载到共享内存中,它的数据可以被同一个线程块中的多个线程重复使用。
  5. 计算与内存访问的重叠:在计算当前瓷砖的同时,下一个瓷砖的数据可以从全局内存中预取,这样可以隐藏内存访问延迟。

为什么不一次性加载整个矩阵:

  • 共享内存大小:如上所述,共享内存的大小是有限的,通常不足以存储整个矩阵。

  • 线程资源管理:更小的瓷砖允许更细粒度的线程管理和更高的线程并行度。

  • 内存访问模式:一次性加载可能会导致内存访问模式不佳,从而降低缓存效率。

因此,TILE_WIDTH的选择是一个权衡的结果,它需要考虑硬件的限制、内存的效率和算法的并行性。通常,开发人员会根据具体的硬件配置来调整TILE_WIDTH的大小,以达到最佳性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring事务控制

1.事务介绍 1.1什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句全部不进行执…

window mysql5.7 搭建主从同步环境

window 搭建mysql5.7数据库 主从同步 主节点 配置文件my3308.cnf [mysql] # 设置mysql客户端默认字符集 default-character-setutf8mb4[mysqld] server-id8 #server-uuidbc701be9-ac71-11ee-9e35-b06ebf511956 log-binD:\mysql_5.7.19\mysql-5.7.19-winx64\mysql-bin binlog-…

性能分析与调优: Linux 内存观测工具

目录 一、实验 1.环境 2.vmstat 3.PSI 4.swapon 5.sar 6.slabtop 7.numstat 8.ps 9.top 10.pmap 11.perf 12.bpftrace 二、问题 1.接口读写报错 2.slabtop如何安装 3.numactl如何安装 4.numad启动服务与关闭NUMA 5. perf如何安装 6. kernel-lt-doc与kern…

Vue3+Vite打包跨平台(七牛、阿里OSS)上传部署前端项目

1、业务场景 阅读之前&#xff0c;想了解一下各位观众老爷们&#xff0c;你们公司的项目是怎么部署的&#xff1a; 1.本地打包手动上传服务器&#xff1b; 2.本地打包自动上传服务器&#xff1b; 3.代码仓库流水线自动构建&#xff1b; 4.其他…&#xff1b; 我们用的第3种部…

前端中什么是DOM对象

DOM&#xff08;文档对象模型&#xff09;是一种编程接口&#xff0c;用于HTML和XML文档。它提供了一种将文档结构表示为树结构的方式&#xff0c;这使得程序和脚本能够动态地访问和更新文档的内容、结构和样式。 在前端开发中&#xff0c;DOM是非常重要的概念。当浏览器加载网…

认知能力测验,⑥如何破解逻辑判断类测试题?

逻辑思维&#xff0c;是一个比较大的范围&#xff0c;在绝大多数的招聘中&#xff0c;认知能力测评形式多样&#xff0c;难度也较大&#xff0c;其中逻辑判断题型所涉及到的分类为&#xff1a;概念类、条件类、矛盾类、数字类、图形类等知识。比如奥数就是个好东西.....如果经历…

Go语言日志美化库,slog使用指南

Go语言日志美化库&#xff0c;slog使用指南 1.slog2.快速开始3.使用JSON格式4.Text格式化formatter 1.slog slog是Go 实现的一个易于使用的&#xff0c;易扩展、可配置的日志库 slog - github 控制台效果&#xff1a; 安装方式&#xff1a; go get github.com/gookit/slog2…

RAG 最新最全资料整理

最近在做RAG方面的工作。它山之石可以攻玉&#xff0c;做了一些调研&#xff0c;包含了OpenAi&#xff0c;百川&#xff0c;iki.ai为我们提供的一些实现方案。 本文以时间顺序&#xff0c;整理了最近最新最全的和RAG相关的资料。都是满满的干货&#xff0c;包含了RAG评测工具、…

TOPS、MIPS、DMIPS、MFLOPS、吞吐量与推理效率

1.概述 在深度学习对应的神经推理中经常涉及几个重要概念&#xff0c;TOPS、MIPS、DMIPS&#xff0c;MFLOPS&#xff0c;下文对其做对比说明。 2.概念对比 2.1 MIPS Million Instructions Per Second的缩写&#xff0c;每秒处理的百万级的机器语言instructions。这是衡量处…

【单片机】四种烧写方式简介

目录 单片机的四种烧写方式简介 1.使用JTAG接口实现2.SWD接口烧录方式3.ISP烧写方式&#xff0c;用UART实现&#xff08;常用&#xff09;4.SWIM单总线下载方式 烧录方式基本介绍烧录方式详述 1、ISP&#xff1a;In System Programming2、IAP&#xff1a;In Applicatin Program…

部分城市公交站点数据,Shp+excel格式数据,2020年,几何类型为点

随着城市的发展和人口的增长&#xff0c;公共交通成为了人们出行的重要方式之一。而公交站点作为公共交通的重要组成部分&#xff0c;其数据信息的获取和分析对于城市规划和管理具有重要意义。 今天来分享一下部分城市公交站点数据&#xff1a; 首先先了解下该数据的基本信息 …

报错解决:RuntimeError: Error building extension ‘bias_act_plugin‘

系统&#xff1a; Ubuntu22.04&#xff0c; nvcc -V&#xff1a;11.8 &#xff0c; torch&#xff1a;2.0.0cu118 一&#xff1a;BUG内容 运行stylegan项目的train.py时遇到报错&#x1f447; Setting up PyTorch plugin "bias_act_plugin"... Failed! /home/m…

使用 RaiseExceptionMeta 元类隐式装饰 Validator 类中的所有校验方法

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 使用 raise…

Qt QLineEdit文本框控件

文章目录 1 属性和方法1.1 占位字符串1.2 对齐方式1.3 回显模式1.4 读写控制1.5 格式控制1.6 信号和槽 2 实例2. 布局2.2 代码实现 QLineEdit 是Qt 中的文本框&#xff0c;准确地说是单行文本框&#xff0c;通常用于接受用户的输入。 比如用户输入用户名、密码等&#xff0c;都…

ChatGPT付费创作系统V2.5.5独立版+前端

ChatGPT付费创作系统V2.5.5版本优化了很多细节&#xff0c;功能增加增加长篇写作功能。该版本为编译版无开源&#xff0c;本版本特别处理了后台弹窗、暗链网址。特别优化了数据库。升级过程中未发现任何BUG&#xff0c;全新安装或者升级安装均未出现400或者500错误&#xff0c;…

【数据结构专题】「延时队列算法」史上手把手带你认识一下数据结构的基本概念与术语

在本节中&#xff0c;我们将对一些概念和术语赋以确定的含义&#xff0c;以便与读者取得“共同的语言”。这些概念和术语将在以后的章节中多次出现。 数据 概念 数据(data) 是对客观事物的符号表示&#xff0c; 在计算机科学中是指所有能输人到计算机中并被计算机程序处理的…

Python 工具 | conda 基本命令

Hi&#xff0c;大家好&#xff0c;我是源于花海。本文主要了解 Python 的工具的 conda 相关的基本命令。Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。在Windows下&#xff0c;需要安装…

Mobile Aloha 【软硬件原理+代码解析】

1. Mobile ALOHA Hardware2. Imitation Learning3. Co-training with Static ALOHA Data4. Task Setting5. Experiments5.1 ACT5.2 对比ACT、Diffusion Policy和VINN 6. Software Code Analyze Mobile ALOHA: 利用低成本全身远程操作系统学习复杂的双手移动操作技能 [译] 硬件代…

Elasticsearch基本操作之文档操作

本文来说下Elasticsearch基本操作之文档操作 文章目录 文档概述创建文档示例创建文档(生成随机id)创建文档(自定义唯一性标识) 查看文档示例根据主键查看文档查看所有文档 修改文档示例全局修改文档局部修改文档 删除文档示例根据文档的唯一性标识删除文档条件删除文档 本文小结…

【leetcode 447. 回旋镖的数量】审慎思考与推倒重来

447. 回旋镖的数量 题目描述 给定平面上 **n **对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等&#xff08;需要考虑元组的顺序&#xff09;。 返回平…