CUDA并行加速
文章平均质量分 78
弹与征鸿
……***……
展开
-
CDUA学习笔记(六)——流
锁页内存在前文中提到过通过cudaHostAlloc的方式申请锁页内存,锁页内存申请在物理内存上后,不会再被系统分页交换到磁盘上(虚拟内存),位置相对固定。GPU在是通过“直接内存访问(DMA)”的方式在主机和设备上来回复制内存,是不需要CPU的介入的。然而在复制内存的过程中CPU有可能更新操作系统的可分页表,移动可分页内存数据。GPU在复制可分页内存时,实际上是执行了两边复制操作,先把可分页内存复制到临时锁页内存内,然后再从临时内存复制到GPU设备上。如此可见,申请锁页内存是非常重要的。但是如果申原创 2021-04-02 13:49:10 · 447 阅读 · 0 评论 -
CUDA学习笔记(五)——原子性操作
说明原子性操作不是所有的显卡都支持的,只有算力在1.1及以上的才支持全局内存的原子操作,只有1.2及以上算力的才支持共享内存上的原子操作。由于显卡算力高的是低的一个超集,类似可理解为于高算力版本可以向下兼容。同时,在编译代码的时候,可以告诉nvcc编译器需要什么样的版本,nvcc -arch=sm_1.2即需要1.2算力版本的支持。如果不支持就需要考虑升级硬件了。原子操作原子操作的概念是由多部操作构成的一个操作集合,如果执行该操作集合,就必须全部执行,不能执行部分操作。如:x++;定义上述原创 2021-03-31 16:03:08 · 1180 阅读 · 0 评论 -
CUDA学习笔记(四)——常量内存&纹理内存
常量内存常量内存是用于存储代码执行期间不会发生改变的数据,其不同于全局内存,使用常量内存替换全局内存能有效的减少内存带宽。原创 2021-03-31 14:38:27 · 810 阅读 · 1 评论 -
CUDA学习笔记(三)——共享内存
在cuda设备端的内存包括,全局内存(global memory),共享内存(shared memory),纹理内存(texture memory),常量内存(constant memory)等。在我是小将的博文中,详细画出了内存的分布情况,很清晰,一目了然。全局内存,每个block中的thread都可以访问,可以用来存储和host端交互数据。这里主要来学习共享内存。共享内存共享内存在block内的线程都可以访问,但是不同的block不能互相访问。共享内存的存取速度非常块,极大程度上解决出现内原创 2021-03-30 16:49:59 · 2334 阅读 · 1 评论 -
CUDA学习笔记(二)——核函数简单例程
先看代码,再说细节。// kernel__global__ void plus_array(int *x, int* y, int* z, int len){ int index = threadIdx.x + blockIdx.x * blockDIm.x; if (index < len) z[index] = x[index] * y[index];}int main(){ int num = 1 << 20; int buff_size = num *原创 2021-03-30 10:56:39 · 1609 阅读 · 0 评论 -
CUDA学习笔记(一)——基础
CUDA架构众所周知,cuda可以做并行加速计算,具体怎么并行运算还要从其架构说起。首先,CUDA的程序分为两个部分,host端和device端,host端代码实在cpu上执行,device端代码则是在显卡芯片上执行。host端主要负责数据准备,讲准备好的数据拷贝到显卡芯片上,进行计算,再从显卡上拷贝最终计算结果。cpu在取显卡内存数据时,速度较慢,所以不能频繁从显卡拷贝数据,最好只拷贝一次最终的结果。device端架构在设备端架构主要由grid,block,thread三部分组成。threa原创 2021-03-29 11:26:14 · 495 阅读 · 2 评论