当前位置: 首页 > news >正文

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的大小,以达到最佳性能。

相关文章:

4.6 BOUNDARY CHECKS

我们现在扩展了tile矩阵乘法内核&#xff0c;以处理具有任意宽度的矩阵。扩展必须允许内核正确处理宽度不是tile宽度倍数的矩阵。通过更改图4.14中的示例至33 M、N和P矩阵&#xff0c;图4.18创建了矩阵的宽度为3&#xff0c;不是tile宽度&#xff08;2&#xff09;的倍数。图4.…...

Java集合-LinkedList

Java集合-LinkedList 特性 public class LinkedList<E> extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable1、继承于 AbstractSequentialList &#xff0c;本质上面与继承 AbstractList 没有什么区别…...

2023年阿里云云栖大会:前沿技术发布与未来展望

在2023年的阿里云云栖大会上&#xff0c;我见证了云计算和人工智能领域的又一历史性时刻。这次大会不仅是对未来科技趋势的一次深入探索&#xff0c;更是阿里云技术实力和创新能力的集中展示。 首先&#xff0c;千亿级参数规模的大模型通义千问2.0的发布&#xff0c;无疑将人工…...

houdini microscope

【英文原版-无字幕】Wavelets: a mathematical microscope 小波变换最好的入门教程了吧&#xff01;_哔哩哔哩_bilibili 只涉及模拟&#xff0c;不模拟具体对错...

Linux_CentOS_7.9配置时区及NTPdate同步之简易记录

前言&#xff1a;ntpdate命令来自英文词组”NTPdate“的拼写&#xff0c;其功能是用于设置日期和时间。ntpdate命令能够基于NTP协议设置Linux系统的本地日期和时间&#xff0c;利用NTP服务的时钟过滤器来选择最优方案&#xff0c;大大提高了可靠性和精度&#xff0c;让系统时间…...

十九:爬虫最终篇-平安银行商城实战

平安银行商场实战 需求 获取该商城商品信息 目标网址 https://m.yqb.com/bank/product-item-50301196.html?mcId1583912328849970&loginModepab&historyy&sceneModem&traceid30187_4dXJVel1iop详细步骤 1、寻找数据接口 2、对比payload寻找可疑参数 3、多…...

解决vcruntime140_1.dll无法继续执行代码的方法,一键修复dll文件丢失问题。

vcruntime140_1.dll是Windows操作系统中的一个重要的动态链接库文件&#xff0c;它与Microsoft Visual C Redistributable相关联。电脑出现关于vcruntime140_1.dll无法继续执行代码的错误弹窗是就意味着这个文件在电脑中被破坏导致丢失了&#xff0c;这将会影响一些程序不能正常…...

Elasticsearch:结合 ELSER 和 BM25 文本查询的相关搜索

Elastic Learned Spare EncodeR (ELSER) 允许你执行语义搜索以获得更相关的搜索结果。 然而&#xff0c;有时&#xff0c;将语义搜索结果与常规关键字搜索结果相结合以获得最佳结果会更有用。 问题是&#xff0c;如何结合文本和语义搜索结果&#xff1f; 首先&#xff0c;让我…...

海外社媒运营为什么需要选择优质IP代理?

跨境电商卖家尤其需要关注海外社媒运营&#xff0c;想要更好地运营Instagram、Facebook、TikTok 或 Twitter等&#xff0c;挖掘社媒潜力需要采取战略方法&#xff0c;而社交媒体IP代理在这一活动中发挥着至关重要的作用&#xff0c;下面为你详细介绍。 一、社交媒体代理IP及其运…...

Java中的性能优化:深入剖析常见优化技巧

引言 在现代软件开发中&#xff0c;性能优化是一个至关重要的话题。Java作为一门强大而广泛使用的编程语言&#xff0c;也需要开发者关注和优化性能&#xff0c;以确保应用程序能够在各种场景下高效运行。本文将深入剖析Java中的一些常见性能优化技巧&#xff0c;为开发者提供…...

k8s的yaml文件中的kind类型都有哪些?(详述版Part2/2)

目录 综述 分块详述 13、ConfigMap 14、Secret 15、Ingress 16、StorageClass 17、Namespace 18、ServiceMonitor 19、HorizontalPodAutoscaler 20、NetworkPolicy 21、CustomResourceDefinition 22、Role 23、ClusterRole 24、ClusterRoleBinding 25、RoleBindi…...

什么是API网关代理?

带有API网关的代理服务显着增强了用户体验和性能。特别是对于那些使用需要频繁创建和轮换代理的工具的人来说&#xff0c;使用 API 可以节省大量时间并提高效率。 了解API API&#xff08;即应用程序编程接口&#xff09;充当服务提供商和用户之间的连接网关。通过 API 连接&a…...

AWS Simple Email Service (SES) 实战指南

Amazon Simple Email Service (SES) 是一项强大的电子邮件发送服务&#xff0c;适用于数字营销、应用程序通知以及事务性邮件。在这个实战指南中&#xff0c;我们将演示如何设置 AWS SES 并通过几个示例展示其用法。 设置 AWS SES 1. 创建 AWS 账户 首先&#xff0c;您需要创…...

详解Oracle数据库的启动

Oracle数据库的启动&#xff0c;其概念可参考Overview of Instance and Database Startup。 其过程可参见下图&#xff1a; 当数据库从关闭状态进入打开数据库状态时&#xff0c;它会经历以下阶段。 阶段Mount状态描述1实例在没有挂载数据库的情况下启动实例已启动&#xff…...

2024年跨境电商上半年营销日历,建议收藏

2024年伊始&#xff0c;跨境电商开启新一轮的营销竞技&#xff0c;那么首先需要客户需求&#xff0c;节假日与用户需求息息相关&#xff0c;那么接下来小编为大家整理2024上半年海外都有哪些节日和假期&#xff1f;跨境卖家如何见针对营销日历选品&#xff0c;助力卖家把握2024…...

Go采集1688网站数据对比商品价格

最近看了下多多和1688的一些商品价格&#xff0c;发现好多店铺都是无货源拿货一件发货&#xff0c;这就导致层层叠加价格翻了不知道几倍&#xff0c;真所谓多花钱办的事还是一样&#xff0c;因此&#xff0c;今天我就通过一个爬虫程序监控对应商品价格&#xff0c;了解行业龙头…...

Java泛型:灵活多变的类型参数化工具

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、泛型1、什么是泛型2、泛型的语法 二、泛型类的使用1、泛型类的语法2、泛型如何编译的2.1、擦除机制2.2、为什么不能实例化泛…...

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…...

蓝凌EIS智慧协同平台 ShowUserInfo.aspx sql注入漏洞

漏洞描述&#xff1a; 蓝凌EIS智慧协同平台是一个简单、高效的工作方式专为成长型企业打造的沟通、协同、社交的移动办公平台&#xff0c;覆盖OA、沟通、客户、人事、知识等管理需求&#xff0c;集合了非常丰富的模块&#xff0c;满足组织企业在知识、项目管理系统建设等需求的…...

React Hooks的useState、useRef使用

React Hooks 是 React 16.8 版本引入的新特性&#xff0c;它允许你在不编写 class 的情况下使用 state 和其他 React 特性。其中&#xff0c;useState 和 useRef 是两个常用的 Hooks。 1. useState useState 是一个允许你在函数组件中添加 state 的 Hook。 使用说明&#xf…...

Linux--防火墙,实验案例:基于区域、服务、端口的访问控制

实验环境 某公司的Web服务器&#xff0c;网关服务器均采用Linux CentOS 7.3操作系统&#xff0c;如图2.13所示。为了 加强网络访问的安全性&#xff0c;要求管理员熟悉firewalld防火墙规则的编写&#xff0c;以便制定有效、可行的主机防护策略。 需求描述 > 网关服务器ens3…...

C++学习笔记(二十八):c++ 静态库及动态库的使用

静态库的使用 库的使用会很大程度减少我们的工作&#xff0c;本节对c中静态库和动态库的使用进行简单的介绍。静态链接库意味着这个库会被放到可执行文件中&#xff0c;在生成的exe中。动态链接库是在程序运行时链接的&#xff0c;可以在程序运行时调用加载库函数的方法来实现&…...

uniapp最简单的底部兼容安全区域显示

效果图&#xff1a; 1.html写上动态padding-bottom <view class"button-wrap" :style"padding-bottom:bottomPaddingrpx"><view class"com-btn cencel-btn">取消</view><view class"com-btn confirm-btn " cl…...

图像去噪——CBDNet网络训练自己数据集及推理测试,模型转ONNX模型(详细图文教程)

CBDNet 主要由两个子网络组成&#xff1a;噪声估计子网络和去噪子网络。噪声估计子网络用于估计图像的噪声水平&#xff0c;而去噪子网络用于去除图像中的噪声。 CBDNet 的优势在于&#xff1a; 它采用了更真实的噪声模型&#xff0c;既考虑了泊松-高斯模型&#xff0c;还考虑…...

【Verilog】期末复习——解释下列名词(FPGA、ASIC、IP、RTL、EDA、HDL、FSM)

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…...

计算机网络 综合(习题)

【计算机网络习题】系列文章目录 计算机网络 第一章 绪论(习题) 计算机网络 第二章 计算机网络体系结构(习题) 计算机网络 第三章 应用层(习题) 计算机网络 第四章 运输层(习题) 计算机网络 第五章 网络层(习题) 计算机网络 第六章 数据链路层(习题) 计算机网络 第七章 物…...

探索vue2框架的世界:简述常用的vue2选项式API (二)

组件实例 &#x1f449; $attrs 用于父组件隔代向孙组件传值 长设置在子组件中 v-bind"$attrs" (Vue2.4) parent.vue (父组件) <template><div class"outer"><h3>父组件</h3>名字&#xff1a;<input v-model"name"…...

云计算:OpenStack 分布式架构管理FLAT网络(单控制节点与多计算节点)

目录 一、实验 1.环境 2.控制节点创建网络 3.控制节点创建规格 4.控制节点新增安全组入口规则 5.控制节点创建实例 二、问题 1.FLAT网络底层如何实现 2.无法SSH 云主机实例 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部…...

【深度学习】cv领域中各种loss损失介绍

文章目录 前言一、均方误差二、交叉熵损失三、二元交叉熵损失四、Smooth L1 Loss五、IOU系列的loss 前言 损失函数是度量模型的预测输出与真实标签之间的差异或误差&#xff0c;在深度学习算法中起着重要作用。具体作用&#xff1a; 1、目标优化&#xff1a;损失函数是优化算法…...

2024年,为什么学网络安全找不到工作?这才是重要原因!

为什么网络安全人才缺口那么大&#xff0c;但很多人还是找不到工作&#xff1f;其实大家都忽略了1个重点&#xff0c;那就是不清楚企业在招什么样的人。 我花了2天的时间统计了主流招聘网站的岗位信息&#xff0c;发现了一个惊人的真相&#xff0c;那就是企业都喜欢招这3种人&a…...

郑州网站制作/域名备案官网

有一个用户排行榜表&#xff0c;需要按分数高低进行名次排序并输出&#xff0c;如有重复用户的&#xff0c;取该用户的最高分现在我是这样写的DB::select("SELECT nickname, id, fraction, FIND_IN_SET( fraction, (SELECT GROUP_CONCAT( fraction ORD…...

wordpress搜索返回页面/外国网站怎么进入

下载安装GraphViz下载完后解压缩后&#xff0c;复制bin文件夹的路径。例如&#xff1a;C:\Program Files (x86)\Graphviz\bin将GraphViz安装目录的bin目录放到环境变量的path路径中windows下&#xff0c;两种方式均可&#xff1a; - 手动添加 - 代码添加 import os#注意修改你…...

小电影网站怎么做的/正规网站优化推广

论文&#xff1a;Semantic Image Synthesis with Spatially-Adaptive Normalization 论文链接&#xff1a;https://arxiv.org/abs/1903.07291 代码链接&#xff1a;https://github.com/NVlabs/SPADE 项目主页链接&#xff1a;https://nvlabs.github.io/SPADE/ 图像生成领域最近…...

《网页设计与网站建设》第04章在线测试/长春网站制作计划

三维GIS研发思路发布日期&#xff1a;2006-3-15 17:08:38 作者&#xff1a; 出处&#xff1a;三维GIS研发思路 三维gis 三维GIS研发思路可归纳为两种: (1)由于三维GIS首先要将地理数据变为可见的地理信息,因此人们从三维可视化领域向三维GIS系统扩展,这一点同早期的二维G…...

企查猫/百度seo插件

1. 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [1]原 0000 0001 [-1]原 1000 0001 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 1111 , 0111 1111] 即 [-127 , 127] 原码是人脑最容易…...

网站如何做跳板/网络推广的渠道有哪些

1、在middleware中定义&#xff0c;全局middleware或布局middleware中&#xff1b;&#xff08;server端执行&#xff09; 方法一&#xff1a;全局middleware中定义&#xff1a; a、在middleware文件夹下新建auth.js文件&#xff0c;在此文件中通过上下文对象context.route实…...