2013-02-10 71 views
1

我想首先确认以下内容: 共享内存的基本全局内存事务是32字节,64或128字节,但前提是内存访问可以合并。先例交易的延迟都是平等的。是对的吗?第二个问题:如果内存读取不能合并,每个线程只读取4个字节(是吗?)所有线程的内存访问是否都是顺序的?cuda内存合并

+0

您可能希望查看一些网络研讨会[这里](https://developer.nvidia.com/gpu-computing-webinars)。特别是网络研讨会涵盖了内存高效的操作和[全局内存](http://developer.download.nvidia.com/CUDA/training/cuda_webinars_GlobalMemory.pdf)(和[视频](http:// developer。 download.nvidia.com/CUDA/training/globalmemoryusage_june2011.mp4))和[共享内存(视频)](http://developer.download.nvidia.com/CUDA/training/sharedmemoryusage_july2011.mp4)内存交易发生在一个大小32或128字节的粒度。 – 2013-02-10 00:50:45

回答

1

这取决于您正在处理的架构。然而,费米和开普勒您有:

  • 内存交易总是32个字节或128字节称为段时,只使用L2缓存
  • 32字节段时,128字节段时,L2 + L1。
  • 如果同一经线落入同一网段的两个线程,数据是在一个单一的TRANSATION
  • 如果另一方面存在你取,没有线程请求段相关的数据传送 - 它被无论如何读取和你(可能)浪费带宽
  • 全段分为L1 & L2缓存,可以降低对带宽的压力,当你的邻居经纱需要在同一网段
  • L1 & L2是比线程他们通常提供的数量相当小。这就是为什么你不应该期待一段数据长时间停留在高速缓存中(与CPU编程相反)
  • 如果你在随机内存访问模式中进行超级提取,你可以禁用L1高速缓存。

正如您所见,有几个变量决定了您的内存访问需要多少时间。一般的经验法则是:您的访问模式越密 - 越好!现在的跨越或错位并不像过去那样昂贵,所以不要担心太多,除非您正在进行一些后期优化。