VS2017 CUDA编程学习6: GPU存储器架构


VS2017 CUDA编程学习1:CUDA编程两变量加法运算
VS2017 CUDA编程学习2:在GPU上执行线程
VS2017 CUDA编程学习3:CUDA获取设备上属性信息
VS2017 CUDA编程学习4:CUDA并行处理初探 - 向量加法实现
VS2017 CUDA编程学习5:CUDA并行执行-线程


前言

今天又复习了下GPU存储器架构,这里做下笔记以此来加深印象并分享给大家,希望能对大家有帮助。


1. GPU存储器架构

在这里插入图片描述

GPU存储器空间按照层次结构分为不同组块,包括全局内存、共享内存、本地内存、寄存器组、常量内存和纹理内存。

每个线程有自己的寄存器堆和本地内存,线程中数据一般先存储在寄存器堆上,当寄存器堆上装满了,才会存储在本地内存,一般本地内存访问速度比寄存器堆要慢,可以通过L1缓存加快本地内存的访问速度。一般一个块有多个线程,每个块中都有一个L1缓存和共享内存,块中所有线程都可以访问共享内存中的数据。

全局内存的访问速度是最慢的,寄存器堆的访问速度是最快的,全局内存可被所有块和块中线程访问,可以通过L2缓存来提升全局内存的访问速度。全局内存可以通过cudaMalloc()函数来分配。

常量内存用来存储常量和内核参数之类的只读数据,纹理内存不太理解存储的是啥,书中说是可以利用各种2D和3D的访问模式,不懂,后面搞懂了在分享给大家吧。

从上面的介绍以及对CPU有了解的同学应该知道,存储器访问是程序快速执行的最大瓶颈,这个问题不仅在CPU中存在,在GPU中同样存在。


总结

GPU存储器架构的知识就介绍这么多,如果有误,欢迎指正,谢谢大家

学习资料

《基于GPU加速的计算机视觉编程》

Guess you like

Origin blog.csdn.net/DU_YULIN/article/details/120774732