我已经学会了CUDA编程,但我遇到了一些问题。主要的是在CUDA"为什么我们使用这么多种类的记忆(全局,本地,共享,常数,纹理,缓存,寄存器)?"不像在CPU里我们只有三个主内存(Ram,caches,hd等)。
答案 0 :(得分:0)
本文介绍了具有多种内存的主要原因:Wikipedia: Memory Hierarchy
总结一下,它是一种非常简化的形式:
如评论中所述:在CPU上,您还有几层内存:主内存和几个级别的缓存。这些缓存比主内存小得多,但速度要快得多。这些高速缓存由硬件管理,因此作为软件开发人员,您根本不会注意到这些高速缓存存在。所有数据似乎都在主内存中。
在GPU上,您必须手动管理此内存(在较新的CUDA版本中,您也可以将共享内存声明为"缓存",并让CUDA负责数据管理)。
例如,从CUDA中的共享内存中读取一些数据可能会在几纳秒内完成。从全局内存中读取数据可能需要几个MICROseconds。因此,在CUDA中实现高性能的关键之一是数据位置:您应该尝试在本地或共享中保留您正在处理的数据>内存,避免在全局内存中读/写数据。
(PS:"关闭"将这个问题标记为"主要基于意见的"投票有些荒谬。问题可能表明缺乏自己的研究,但这是一个合理的问题这里可以清楚地回答)