Surface 内存是 CUDA 中纹理缓存的只写模拟。
我在学术文献中发现了用于从全局内存和共享内存中读取的 NVIDIA GPU峰值带宽数。但是,我发现关于CUDA 内存设备的写入吞吐量的信息较少。
特别是,我对 Fermi 和 Kepler GPU 上的 CUDA 表面内存的带宽(以及延迟,如果知道的话)感兴趣。
- 有这方面的基准数据吗?
- 如果不是,那么我如何实施一个基准来测量写入表面内存的带宽?
Surface 内存是 CUDA 中纹理缓存的只写模拟。
我在学术文献中发现了用于从全局内存和共享内存中读取的 NVIDIA GPU峰值带宽数。但是,我发现关于CUDA 内存设备的写入吞吐量的信息较少。
特别是,我对 Fermi 和 Kepler GPU 上的 CUDA 表面内存的带宽(以及延迟,如果知道的话)感兴趣。
在计算能力 2.x 和 3.x 设备上,表面写入通过 L1 缓存并具有与全局写入相同的吞吐量和延迟。
根据设备内存访问,
由于纹理/表面/全局内存的延迟几乎相同,并且它们都位于片外DRAM上,我认为表面内存的峰值带宽与GPU规格中指示的全局内存相同。
为了计算延迟时间,您引用的论文可能只使用一个线程。所以很容易计算延迟
全局内存读取延迟=总读取时间/读取次数
您可以以类似的方式在表面写入上实现您的计时。但我认为将该方法应用于该论文中所示的共享内存延迟测量是不合理的,因为与共享内存延迟相比,for 循环的开销可能不会被忽略。