今天又复习了下GPU存储器架构,这里做下笔记以此来加深印象并分享给大家,希望能对大家有帮助。
GPU存储器空间按照层次结构分为不同组块,包括全局内存、共享内存、本地内存、寄存器组、常量内存和纹理内存。
每个线程有自己的寄存器堆和本地内存,线程中数据一般先存储在寄存器堆上,当寄存器堆上装满了,才会存储在本地内存,一般本地内存访问速度比寄存器堆要慢,可以通过L1缓存加快本地内存的访问速度。一般一个块有多个线程,每个块中都有一个L1缓存和共享内存,块中所有线程都可以访问共享内存中的数据。
全局内存的访问速度是最慢的,寄存器堆的访问速度是最快的,全局内存可被所有块和块中线程访问,可以通过L2缓存来提升全局内存的访问速度。全局内存可以通过cudaMalloc()函数来分配。
常量内存用来存储常量和内核参数之类的只读数据,纹理内存不太理解存储的是啥,书中说是可以利用各种2D和3D的访问模式,不懂,后面搞懂了在分享给大家吧。
从上面的介绍以及对CPU有了解的同学应该知道,存储器访问是程序快速执行的最大瓶颈,这个问题不仅在CPU中存在,在GPU中同样存在。
GPU存储器架构的知识就介绍这么多,如果有误,欢迎指正,谢谢大家
《基于GPU加速的计算机视觉编程》
因篇幅问题不能全部显示,请点此查看更多更全内容