CUDA: 共享内存与同步
2024-10-19 12:42:25
CUDA C支持共享内存, 将CUDA C关键字__shared__添加到变量声明中,将使这个变量驻留在共享内存中。对在GPU上启动的每个线程块,CUDA C编译器都将创建该变量的一个副本。线程块中的每个线程都共享这块内存,但线程无法看到也不能修改其他线程块的变量副本。共享内存缓冲区驻留在物理GPU上,而不是GPU之外的系统内存中。因此访问共享内存时的延迟远远低于访问普通缓冲区的延迟,使得共享内存像每个线程块的高速缓存或者中间结果暂存器那样高效。
const int N = *;
const int threadsPerBlock = ; __global__ void dot(float *a, float *b, float *c)
{
__shared__ float cache[threadsPerBlock];
int tid = threadIdx.x + blockId.x*blockDim.x;
int cacheIndex = threadIdx.x;
float temp = ;
while(tid<N){
temp += a[tid]*b[tid];
tid += blockDim.x * gridDim.x;
}
cache[cacheIndex] = temp;
__syncthreads();
int i = blockDim.x/;
while(i != ){
if(cacheIndex < i)
cache[cacheIndex] += cache[cacheIndex + i];
__syncthreads();
i /= ;
}
if(cacheIndex == )
c[blockIdex.x] = cache[];
}
__syncthreads();
这个函数调用将确保线程块中的每个线程都执行完__syncthreads()前面的语句后,才会执行下一条语句。
最新文章
- Pyhton 利用threading远程下发文件和远程执行linux系统命令
- storm中DAU实时计算方案
- Win7下Hyenae的安装
- selenium问题记录
- PHP常用函数(1)
- VPN常见错误码(633,628,691)的意思及修复方法
- Merge k Sorted Lists Leetcode Java
- 使用Github管理项目代码的版本
- linux包之sysstat之mpstat与pidstat命令
- SQL技术内幕-7 varchar类型的数字和 int 类型的数字的比较+cast的适用
- MySQL主从复制的原理及配置
- LCA在线算法ST算法
- Virtualbox mouse move in and out and file share with windows
- jaxb和dozer简介
- CSS3秘笈:第九章
- 数据结构之Trie树
- NewLife.Net——构建可靠的网络服务
- Python&#160;关于类函数设计的一点总结
- super超类继承特点小结
- python之函数参数问题(参数为可变对象)
热门文章
- 通达OA 小飞鱼工作流在线培训教程(七)工作流应用的意义及基础设置(图文)
- Solidworks如何保存为网页可以浏览的3D格式
- jmeter之怎样减负-实现稳定超高并发測试(性能调优)
- VELT-0.1.5开发:在VS2013下进行python开发
- gray-code——找规律
- Async.js解决Node.js操作MySQL的回调大坑
- 数字精确运算BigDecimal经常用法
- c# 推荐5款超实用的.NET性能分析工具
- 七款Debug工具推荐:iOS开发必备的调试利器
- OOA/OOD/OOP的区别