CUDA 学习笔记

1.warp divergence

线程束分化指的是线程束的线程在遇到条件分支时,如果同一个 warp 中的线程走的是不同的分支,因为硬件只能发射同一个指令,所以不同分支会串行执行。

解决线程束分化的方法:设计的时候尽量同一个 warp 走相同的分支;使用运算指令代替条件运算符;重排数据走相同分支;循环条件统一退出。

2.occupancy

指的是活跃 warp 数占理论最大值的百分比,受寄存器、共享内存和 block 内线程的限制,因为寄存器在 sm 上是有限的,如果超过,局部变量会被分配到全局内存,很慢,共享内存的大小也是有限的,如果一个 block 过多, block 就得减少,sm 上的线程数是有限的。

occupancy 指标存在的意义:通过多个 warp 的切换可以隐藏等待内存的延迟。

3.直接寄存器通信

主要用于同一个 warp 中的线程通信比如__shfl_sync,寄存器通信比共享内存通信更高效

寄存器通信可以解决 bank conflict 的问题

4.同步的方法

既有 block 级别的也有 warp 级别的,这些不同级别的同步方法可以直接避免对全局内存的竞争,如果所有 block 所有线程都直接竞争结果就是效率会大大下降,在不同层面竞争效率会提升。

warp 级别的同步方法可以通过 mask 设置哪些同步。

block 级别同步和共享内存一般是结合起来使用的。

相关推荐
喵个咪8 小时前
AI 时代的危与机:当潮水退去,技术人如何自处
ai编程·代码规范
金銀銅鐵10 小时前
[Java] 展示增删元素时 LinkedList 的内部变化
java·后端·ai编程
用户7820432792412 小时前
我做了个跑在 Electron main 进程里的 AI Agent 引擎:4 个架构决策和 3 个坑
ai编程
自律懒人12 小时前
英伟达循环模型实测:Dory 1.0-4B 三档循环,10 项基准对比 Qwen3.5
ai编程
灵感__idea13 小时前
Claude Code 编程实战:外行人第一次可以独挑大梁
ai编程·claude·cursor
程序员老刘13 小时前
Flutter版本选择指南:3.44稳定了11周正式转正 | 2026年10月
flutter·ai编程·客户端
yz_aiks14 小时前
Claude Code Mods 开发教程:写一个拦截危险 SQL 和发布命令的插件
ai编程·开发工具·插件开发·mcp·claude code
小虎AI生活14 小时前
Kimi K3.1 Pro 降价 35% 实测拆解:API 接入三步走与暗坑清单
aigc·ai编程
隐形蓝海16 小时前
Qoder CN 每天 100 Credits 领不到,我把客户端扒了一遍
ai编程
郝琳16 小时前
Agent 自动改代码的四道闸,可执行验证、变更窗口、回滚判据与权限分级
ai编程