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 级别同步和共享内存一般是结合起来使用的。

相关推荐
Web3_Basketball2 小时前
Ollama本地函数调用发布72小时,我替你试完了
ai编程
9i编程2 小时前
1. 教 AI 上班:带出我的数字同事 —— 把开发习惯交给 Qoder,从零搭脚手架
人工智能·openai·ai编程
用户5563525560562 小时前
[避坑] AI工具雷达避坑 | frontend-design的真实问题
ai编程
用户117910488332 小时前
别让AI随便启动你的LSP:hmharness给语言服务器加SHA256门禁 GitHub:swsgbl/hmharness
ai编程·harmonyos
章鱼哥19712 小时前
我给 DeepSeek 的编程智能体写了三个插件:余额胶囊、任务面板、番茄钟
ai编程·deepseek
5 小时前
为什么你的 AI 助手有时候回复很慢
ai编程
渔阳节度使5 小时前
AI Coding 零基础实战教程
ai编程
HelloWorld0015 小时前
不买昂贵的向量数据库:基于 pgvector + BM25 打造轻量级企业生产 RAG 混合检索系统
ai编程
hdsrhh5 小时前
在 Claude Code 中让第三方模型作为 subagent 与 Claude 协作
ai编程·claude