对于GPU上启动的每个线程块上的共享内存,CUDA C编译器都会创建该变量的一个副本。同一线程块的每个线程都共享这块内存,但是线程无法看到也不能修改其他线程块中的共享内存。这样做可以使得一个线程块中的多个线程能够在计算上通信和协作。
共享内存缓冲区驻留在物理GUP上,因此访问共享内存的延迟远远低于访问普通缓冲区的延迟。
共享内存的声明方式是在前面加上 __shared__
为了保持进程同步,可以使用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; }
相关推荐
二、cuda与OpenCV结合方法 三、代码实例:图像均值滤波和图像反色 3.1 代码 3.2 代码说明 3.3 网格大小与线程块大小的确定 3.3.1 网格与线程块大小的限制 3.3.2 如何确定网格大小与线程块大小? 3.4 并行与串行的...
CUDA实现基于共享内存的位图显示,线程同步
本程序是中国科学技术大学谭立湘老师GPU并行计算最后大作业的实验程序。主要内容是利用CUDA全局和共享内存实现了对图像腐蚀膨胀的优化加速。可用作学习参考。
基于共享内存的位图,重点解释了为什么同步重要 GPU CUDA
如何充分利用本地多处理器内存资源,如共享内存、常量内存,以及寄存器。
CUDA Freshman This project is a set of ...5.1 CUDA共享内存概述 5.2 共享内存的数据布局 5.3 减少全局内存访问 5.4 合并的全局内存访问 5.5 常量内存 5.6 线程束洗牌指令 6.0 流和并发 6.1 流和事件概述 6.2 并发内
基于CUDA架构的LBM共享内存计算优化.docx
CUDA中使用共享内存的TILED矩阵乘法。一种高效快.zip
用cuda实现的3×3中值滤波,排序算法为二分法,利用共享内存,巧妙加速,算法执行效率非常高。 下载后带入数据直接用。
详细对于CUDA中内存存储问题的编程,以点积的例子来展现,可以在GPU上运行。
测试了CUDA中寄存器,共享内存,和全局内存的创建。 。
数组逆序=全局内存版 VS 共享内存版 测试环境Win7+vs2013+CUDA6.5
GPU求矩阵中最大值 sharedmemory共享内存
CUDA实现的矩阵乘法,运用了共享内存,纹理内存。
仅需输入矩阵A的行高,列宽以及矩阵B的列宽即可实现矩阵乘的CUDA计算
3.1 具有片上共享内存的一组SIMD多处理器 3.2 执行模型 3.3 计算能力 3.4 多个设备 3.5 显示模式切换 第4章 应用编程接口 4.1C编程语言扩展 4.2 语言扩展 4.2.1函数类型限定符 4.2.2变量类型限定符 4.2.3...
RSA算法是一种计算密集型的公钥密码算法,给出了基于CUDA的RSA算法并行化高效实现技术,其关键为引入大量独立并发的Montgomery模乘线程,并给出了具体的线程组织、数据存储结构以及基于共享内存的性能优化实现技术。...
NVIDIA_CUDA-python系列课程-并行计算基础 ---矩阵计算以及共享内存
3.1 具有片上共享内存的一组SIMD多处理器 3.2 执行模型 3.3 计算能力 3.4 多个设备 3.5 显示模式切换 第4章 应用编程接口 4.1C编程语言扩展 4.2 语言扩展 4.2.1函数类型限定符 4.2.2变量类型限定符 4.2.3执行配置 ...