[CUDA]共享内存
来源:互联网 发布:guwan.com域名交易 编辑:程序博客网 时间:2024/05/29 10:23
- 博客分类
于GPU上启动的每个线程块上的共享内存,CUDA C编译器都会创建该变量的一个副本。同一线程块的每个线程都共享这块内存,但是线程无法看到也不能修改其他线程块中的共享内存。这样做可以使得一个线程块中的多个线程能够在计算上通信和协作。
共享内存缓冲区驻留在物理GUP上,因此访问共享内存的延迟远远低于访问普通缓冲区的延迟。
共享内存的声明方式是在前面加上 __shared__
伦理片 http://www.dotdy.com/
为了保持进程同步,可以使用cuda的函数__syncthreads();。这个函数的作用是为了确保线程块的每个线程都执行完__syncthreads();之前的语句后,才会执行下面的语句。
出于易于理解,写了一个简单的程序,大致功能就是对于一列数,每四个数字进行逆转位置
1 2 3 4 5 6 7 8 ----》 4 3 2 1 8 7 6 5
- #include<cuda_runtime.h>
- #include<windows.h>
- #include<iostream>
- using namespace std;
- const int nMax = 50;
- __global__ void exchangeKernel(float *aaa)
- {
- int offset = threadIdx.x + blockDim.x * blockIdx.x;
- int x = threadIdx.x;
- __shared__ float tmp[4];
- int a = offset / 4;
- a = (a + 1) * 4 - (offset - a * 4) - 1; ///a为同一个block对应位置的offset
- tmp[x] = aaa[a];
- __syncthreads();
- aaa[offset] = tmp[x];
- }
- int main(){
- float a[nMax];
- float *devA;
- for (int i = 0; i < nMax; i++){
- a[i] = i;
- }
- cudaMalloc((void**)&devA, nMax*sizeof(float));
- cudaMemcpy(devA, a, nMax*sizeof(float), cudaMemcpyHostToDevice);
- exchangeKernel << <10, 4 >> >(devA );
- cudaMemcpy(a, devA, nMax*sizeof(float), cudaMemcpyDeviceToHost);
- for (int i = 0; i < 40; i++){
- cout << a[i] << " ";
- }cout << endl;
- cudaFree(devA);
- cin >> a[0];
- return 0;
- }
影音先锋电影 http://www.iskdy.com/
0 0
- [CUDA]共享内存
- CUDA总结:共享内存
- CUDA 共享内存的动态分配
- CUDA 共享内存 bank conflict
- CUDA 共享内存 bank conflict
- CUDA 学习(十一)、共享内存
- cuda共享内存,全局内存,纹理等的解释
- CUDA学习--内存处理之共享内存(3)
- CUDA学习笔记(6) 共享内存与全局内存
- CUDA编程(七)共享内存与Thread的同步
- CUDA 共享内存的bank co…
- cuda《学习笔记三》——共享内存和同步
- CUDA之静态、动态共享内存分配详解
- cuda shared(共享内存)—一个容易错误的点
- CUDA入门学习(三):共享内存与线程同步
- CUDA编程(七)共享内存与Thread的同步
- CUDA的内存结构,通过实例展示寄存器和共享内存的使用
- CUDA学习: 共享存储器
- 分布式架构的演进 --不知道出处
- 教你如何用Android画一个几何图形
- 上传图片到mongodb的方法
- PopupWindow弹窗事件
- tomcat 配置SSL(支付安全)
- [CUDA]共享内存
- 关于MFC未来的感悟
- 面试人员的几个方面的问题
- 平台转账的设计
- JAVA 自定义注解
- 项目开发技巧之交涉技巧
- project euler 80
- Unity的Vsync Count垂直同步原理剖析
- Apache Commons 工具集使用简介