CUDA实践指南(十四)

简介:

简单的访问模式:
第一个也是最简单的合并案例可以通过任何支持CUDA的设备来实现:第k个线程访问缓存行中的第k个字。 并非所有线程都需要参与。
例如,如果warp访问的线程相邻4字节字(例如,相邻浮点值),单个128B L1高速缓存线并因此单个合并事务将服务该存储器访问。 图3显示了这种模式。
1

如果线的某些字未被任何线程请求(例如,如果多个线程已经访问了相同的字或者某些线程没有参与该访问),则高速缓存线中的所有数据都被获取。 此外,如果在该段内已经对warp线程进行了访问,则只有一个128字节的L1事务将由具有计算能力2.x的设备执行。
顺序但未对齐的访问模式:
如果顺序线程顺序但未与高速缓存线对齐,则会请求两个128字节的L1高速缓存,如图4所示。
2

对于非高速缓存事务(即绕过L1并仅使用L2高速缓存的事务),除32字节L2段的级别外,可以看到类似的效果。 在图5中,我们看到一个例子:使用与图4相同的访问模式,但现在禁用了L1缓存,因此现在需要五个32字节的L2段来满足请求。
3

通过CUDA Runtime API分配的内存(如通过cudaMalloc())保证至少对齐至少256个字节。 因此,选择明显的线程块大小,例如翘曲大小的倍数(即,当前GPU上的32),便于通过与高速缓存线对齐的弯曲进行存储器访问。 (例如,如果线程块大小不是warp大小的倍数,请考虑第二个,第三个和后续线程块访问的内存地址会发生什么情况。)
错位访问的影响:
使用简单的复制内核来探究未对齐的访问的后果是容易的和信息性的,例如复制内核中的一个,它说明未对齐的访问。
说明错位访问的复制内核:

__global__ void offsetCopy(float *odata, float* idata, int offset)
{
    int xid = blockIdx.x * blockDim.x + threadIdx.x + offset;
    odata[xid] = idata[xid];
}

在说明未对齐访问的副本内核中,将数据从输入数组idata复制到输出数组,这两者都存在于全局内存中。 内核在主机代码的循环中执行,该代码将参数偏移量从0改为32.(图4和图4分别对应于缓存和非缓存内存访问情况下的错位)。副本的有效带宽 在NVIDIA Tesla M2090上具有各种偏移量(计算能力2.0,开启了ECC,因为它是默认设置)如图6所示。
对于NVIDIA Tesla M2090,全局内存访问没有偏移或偏移量为32个字的倍数,导致单个L1高速缓存线事务或4个L2高速缓存段负载(用于非L1高速缓存负载)。 实现的带宽约为130GB / s。 否则,每个warp都会加载两个L1高速缓存行(高速缓存模式)或者四个到五个L2高速缓存段(非高速缓存模式),从而实现了无偏移量的约四分之一的内存吞吐量。
有趣的一点是,我们可能预期缓存情况比此示例的非缓存情况更差,因为缓存情况下的每个翘曲都会按需要获取两倍的字节数,而在非缓存情况下, 5/4根据需要获取的字节数是按每个warp获取的。 然而,在这个特殊的例子中,这种效果并不明显,因为相邻的经线会重复使用它们的邻居所获取的缓存线。 因此,虽然缓存负载的影响仍然很明显,但并不像我们预期的那么好。 如果相邻的经线没有表现出超高速缓存线的高度重用,情况会更加如此。

目录
相关文章
|
存储 网络协议 Ubuntu
【C++网络编程】Socket基础:网络通讯程序入门级教程
【C++网络编程】Socket基础:网络通讯程序入门级教程
441 7
【Echarts】封装几个酷炫(发光)图表
【Echarts】封装几个酷炫(发光)图表
【Echarts】封装几个酷炫(发光)图表
|
网络协议 物联网 Unix
最新的swoole-cli已可以支持Windows,手把手带你在windows体验swoole
想必使用PHP作为开发语言的童鞋应该都听说过swoole,大致都知道swoole是什么. Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。Swoole 可以广泛应用于互联网、移动通信、云计算、 网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。总的来说Swoole是PHP
1722 1
|
消息中间件 存储 cobar
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 下
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 下
|
10月前
|
存储 人工智能 OLAP
云端问道10期方案教学-百炼融合AnalyticDB,10分钟创建网站AI助手
本次分享由阿里云产品经理陈茏久介绍,主题为“百炼融合 AnalyticDB,10 分钟创建网站 AI 助手”。内容涵盖五个部分:大模型带来的行业变革、向量数据库驱动的 RAG 服务化探索、方案及优势与典型场景应用案例、产品选型配置介绍以及最新发布。重点探讨了大模型在各行业的应用,AnalyticDB 的独特优势及其在构建企业级知识库和增强检索服务中的作用。通过结合通义千问等产品,展示了如何在短时间内创建一个高效的网站 AI 助手,帮助企业快速实现智能化转型。
205 0
|
存储 SQL 监控
【EMQX】EMQX管理控制台即EMQX Dashboard简介
【EMQX】EMQX管理控制台即EMQX Dashboard简介
1086 0
|
数据安全/隐私保护 JavaScript
Vue3输入框(Input)
这是一个基于 Vue 的输入框组件库,提供了丰富的自定义选项与功能。通过参数设置可以调整输入框的尺寸、前后缀图标及标签等,并支持密码输入、显示字数统计、禁用状态等功能。
588 2
Vue3输入框(Input)
|
数据采集 安全 算法
李飞飞数字表兄弟破解机器人训练难题!零样本sim2real成功率高达90%
李飞飞团队提出“数字表兄弟”(Digital Cousins)概念,通过自动化创建数字表兄弟(ACDC)方法,大幅提升了机器人在真实环境中的训练效果。该方法在零样本sim2real迁移实验中成功率达到90%,显著优于传统方法。
269 3
|
存储 数据挖掘 大数据
湖仓一体全面开启实时化时代
本文整理自阿里云开源大数据平台负责人王峰(莫问)老师在5月16日 Streaming Lakehouse Meetup · Online 上的分享,主要介绍在新一代湖仓架构上如何进行实时化大数据分析。
51110 12
湖仓一体全面开启实时化时代
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的螺丝螺母识别算法matlab仿真
以下是内容的摘要: 该文介绍了使用YOLOv2深度学习模型进行螺丝螺母识别的算法,展示了在matlab2022a环境下运行的6张检测效果图。YOLOv2基于Darknet-19预训练网络,结合多任务损失函数和非极大值抑制技术,有效检测目标。为了适应任务,进行了数据集准备、模型微调、锚框选取等步骤。核心程序加载预训练模型,遍历图像并展示检测结果,通过调整阈值绘制检测框。