CUDA实践指南(二十)

简介:

常量内存:
设备上总共有64 KB的常量内存。 恒定的内存空间被缓存。 因此,从恒定内存读取仅从缓存未命中的设备内存读取一个内存; 否则,它只需要从常量缓存中读取一次。 序列化由warp中的线程访问不同地址的成本,因此成本与warp中所有线程读取的唯一地址数成线性比例关系。 因此,当相同warp中的线程只访问几个不同的位置时,常量缓存是最好的。 如果一个warp的所有线程访问相同的位置,那么恒定的内存可以像寄存器访问一样快。
寄存器:
通常,访问寄存器消耗每个指令零个额外的时钟周期,但由于寄存器读写后依赖性和寄存器存储体冲突可能会发生延迟。
写后读取依赖关系的延迟大约为24个周期,但这种延迟完全隐藏在多处理器上,每个多处理器具有足够的并发线程warp。对于计算能力2.0的设备(每个多处理器具有32个CUDA核心),可能需要多达768个线程(24个warps)才能完全隐藏延迟等等,以满足更高计算能力的设备。
编译器和硬件线程调度器将尽可能优化地调度指令以避免寄存器存储器组冲突。当每个块的线程数是64的倍数时,它们会达到最佳效果。除了遵循此规则之外,应用程序无法直接控制这些存储库冲突。特别是,没有与寄存器相关的理由将数据打包到float4或int4类型中。
Register Pressure(寄存器压力):
当给定任务没有可用寄存器时发生寄存器压力。
尽管每个多处理器都包含数千个32位寄存器(请参见CUDA C编程指南的功能和技术规格),但它们在并发线程之间进行分区。 要防止编译器分配过多的寄存器,请使用-maxrregcount = N编译器命令行选项(请参见nvcc)或启动界限内核定义限定符(请参阅CUDA C编程指南的执行配置)来控制寄存器的最大数量 分配给每个线程。
分配:
通过cudaMalloc()和cudaFree()进行设备内存分配和解除分配是昂贵的操作,因此应尽可能重新使用和/或分配设备内存,以尽量减少分配对整体性能的影响。

目录
相关文章
|
数据采集 数据可视化 数据挖掘
数据清洗有什么方式
数据清洗有什么方式
|
Java 应用服务中间件 Spring
【Spring Boot 源码学习】@Conditional 条件注解
【1月更文挑战第8天】本篇介绍 @Conditional 条件注解及其衍生注解
389 3
【Spring Boot 源码学习】@Conditional 条件注解
|
开发框架 人工智能 数据可视化
报表工具:常见的五款BI报表介绍
Power BI是微软官方推出的数据分析和可视化工具。
报表工具:常见的五款BI报表介绍
|
监控 数据可视化 项目管理
关键链项目管理是什么?它如何优化传统项目管理?
关键链项目管理(CCPM)由艾利·高德拉特提出,通过优化资源分配和减少多任务并行的浪费,显著提高项目执行效率与成功率。本文介绍CCPM的核心理念、与传统项目管理的区别及优势,并推荐几款支持CCPM的项目管理软件,如ProChain、板栗看板等,帮助企业更好地实施这一高效管理方法。
786 0
|
机器学习/深度学习 人工智能 Cloud Native
超全阿里系电子书年度合集来了!热门新书持续更新中...
随着双12的落幕,2019也接近尾声了。经过了一年的奋(tuō)斗(fà),你是否还有遗憾和未尽的目标呢?开发者社区甄选了本年度四大专栏,最受欢迎的30+本电子书,2019 不留遗憾!
196678 3
超全阿里系电子书年度合集来了!热门新书持续更新中...
|
JavaScript Java 测试技术
图书馆自习室座位预约管理微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
图书馆自习室座位预约管理微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
319 0
|
弹性计算 运维 安全
所以!云服务器也可以玩转大模型啦?
原型《完蛋!我被LLM包围了! 》 是魔搭社区联合灵积平台和通义千问2.0模型推出的一款玩坏LLM的智力挑战游戏 。
|
弹性计算 Linux 云计算
云计算|OpenStack发展简史
云计算|OpenStack发展简史
1022 0
|
程序员
解决公众号“微信登录失败 系统错误,错误码:10007”
解决公众号“微信登录失败 系统错误,错误码:10007”
767 0
|
数据库
ArcGIS创建矢量要素并绘制其空间范围的方法
本文介绍在ArcGIS下属ArcMap软件中,新建点、线、面等矢量要素图层,并对新建图层的空间范围加以划定的方法~
1069 1
ArcGIS创建矢量要素并绘制其空间范围的方法