cuda内存总结

1.shared memory

__shared__ 声明为共享内存,将会保存在共享内存中

 2.constant memory

__constant__ 声明为常量内存,将会保存在常量内存中,常量内存是只读内存,声明时要静态的分配空间

将数据从CPU拷贝到常量内存中时用cudaMemcpyToSymbol,例如cudaMemcpyToSymbol( s, temp_s,sizeof(Sphere) * SPHERES)

常量内存带来性能提升的原因:

1.对常量内存的单次读操作可以广播到临近线程,将节约15次读操作

2.常量内存的数据将缓存起来,对相同地址的连续读操作将不会产生额外的内存通信量

当处理常量内存时,NVIDIA硬件将单次内存读操作广播到每个半线程束(线程束中线程的一半),如果半线程束中的每个线程都从常量内存的相同地址上读取数据,那么使用常量内存产生的内存流量将会是使用全局内存的1/16。但是当所有的线程读取不同的地址时,会降低性能,因为若半线程束中的16个线程访问常量内存中的不同数据时,这16次不同的读取操作将会被串行化,从而需要16倍的时间来发出请求,但在全局内存中将会同时发出请求。

时间: 2024-08-24 23:34:43

cuda内存总结的相关文章

CUDA内存拷贝

原文链接1.cudaMemcpy()<--> cudaMalloc()  //线性内存拷贝 1 //线性内存拷贝 2 cudaMalloc((void**)&dev_A, data_size); 3 cudaMemcpy(dev_A, host_A, data_size, cudaMemcpyHostToDevice); 2.cudaMemcpy2D()<-->cudaMallocPitch() //线性内存拷贝 cudaError_t cudaMemcpy2D( void

CUDA内存 (转)

http://www.cnblogs.com/traceorigin/archive/2013/04/11/3015482.html CUDA存储器类型: 每个线程拥有自己的register and loacal memory; 每个线程块拥有一块shared memory; 所有线程都可以访问global memory; 还有,可以被所有线程访问的只读存储器:constant memory and texture memory 1.  寄存器Register 寄存器是GPU上的高速缓存器,其基

opencv+cuda内存泄露错误

在编写的模版中,利用opencv进行拷贝图像data时,报错如下: Unhandled exception at 0x74dec42d in XXXX_CUDA.exe: Microsoft C++ exception: cv::Exception at memory location 0x0017f878. 定位到错误在: cvReleaseImage( &copy_y );也就是说释放图像数据是时候,发生内存非法读写: template<class T> void grad_y(

CUDA内存类型memory

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net http://www.cnblogs.com/traceorigin/archive/2013/04/11/3015482.html CUDA存储器类型: 每个线程拥有自己的register and loacal memory; 每个线程块拥有一块shared memory; 所有线程都可以访问global memory; 还有,可

CUDA与Linux系统

CUDA与Linux系统 目录 CUDA与Linux平台    1 目录    2 1 CUDA安装    3 1.1 安装toolkit    3 1.2 安装显卡驱动    3 2 调式工具:CUDA GDB    3 3 分析工具:CUDA Profile    5 3.1 Visual Profiler:图形化    5 3.2 nvprof Profiler:命令行    6 4 集成工具:nsight Eclipse    8 4.1 CUDA编辑器    8 4.2 CUDA调试器

CUDA学习(一)、CUDA线程执行模型

CUDA在执行的时候,每一个host里面的一个个kernel按照线程网格的概念在显卡硬件上执行,每一个线程网格又可以包含多个线程块,每个线程块又可以包含多个线程. 当程序执行时,每一个线程就相当于一个士兵,一个军队的将军就相当于host.当我们要执行某一个军事任务时,我们就要分配各个不同的任务,每个任务有一部分人完成,假设有M个任务,这就是M个kernel.而每一个任务(kernel)就交给一个grid看管,这里grid就相当于副将或者千户(grid管理线程的多少和GPU的性能有关)当执行具体任

【CUDA并行程序设计系列(1)】GPU技术简介

http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUDA并行程序设计系列(2)]CUDA简介及CUDA初步编程 [CUDA并行程序设计系列(3)]CUDA线程模型 [CUDA并行程序设计系列(4)]CUDA内存 [CUDA并行程序设计系列(5)]CUDA原子操作与同步 [CUDA并行程序设计系列(6)]CUDA流与多GPU 关于CUDA的一些学习资料

基于NVIDIA GPU的MD5加速穷举(CUDA)

声明:本文仅限于技术分享,请勿将代码用于非法用途,利用本文代码所产生的各种法律问题,与本文作者无关. 1. 摘要: MD5为非常普遍使用的消息摘要算法,很多应用系统采用该算法加密密码,在计算文件摘要值以验证文件是否被篡改方面也普遍使用, MD5服务安全方面很多年,随着计算机技术的发展,该算法已经很不安全,穷举遍历的代价也变得没那么高,笔者建议至少采用(SHA1+盐值) 方法加密新建设的应用系统,由于目前很多网站大量的用户名密码泄露,个人的信息安全也越来越重要,目前很多系统采用的加密算法有: 1>

CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第三节

原文链接 恭喜!通过对CUDA(Compute Unified DeviceArchitecture,即计算统一设备架构的首字母缩写)系列文章第一节和第二节,您现在已经是能够使用CUDA的程序员了,您可以创建和运行在支持CUDA的设备上使用成百上千同步线程的程序.在第二节的incrementArrays.cu中,我提供了一个常见的CUDA应用程序模式的工作样例——将数据移动到设备,运行一个或多个内核以进行计算并获得结果.本质上,只需使用您自己的内核并加载自己的数据(我在本篇专栏文章的示例中就是这