根据"CUDA C Programming Guide",只有在多处理器常量高速缓存命中的情况下,常量内存访问才会有所收益(第5.3.2.4节)。否则,与整合全局存储器读取的情况相比,可能会有更多的半内存请求。那么为什么常量内存大小限制为64 KB?为什么CUDA中的恒定内存大小受到限制?
还有一个问题,以免问两次。据我了解,在费米架构中,纹理缓存与L2缓存相结合。纹理的使用仍然有意义或全局内存读取以相同的方式缓存?
常量内存(节5.3.2.4)
恒定存储器空间驻留在设备存储器,并且在第F.3.1和F.提到的常数的高速缓存被缓存4.1。
对于计算能力1.x的设备,对于一个warp的恒定内存请求首先被分成两个请求,每个half-warp一个,分别发出。
然后,请求被分割为多个独立的请求,因为初始请求中存在不同的内存地址,吞吐量减少了一个等于单独请求数量的因子。
然后,以高速缓存命中情况下的常量高速缓存的吞吐量或其他情况下的设备内存吞吐量来处理结果请求。
格雷格,我很抱歉可能不够清楚。我知道如何使用常量内存。在这个问题中,我想知道为什么只有缓存8 KB才能提供比全局内存更好的性能,为什么常量内存的大小限制为64 KB。以同样的方式可以通过L1缓存访问全局内存。因此,从编程人员的角度来看,使用全局内存或常量内存之间的区别是什么,因为它们都以相同的方式被缓存? – AdelNick 2012-04-22 16:14:33
常量缓存的大小适合图形和计算着色器。 CUDA API公开了常量缓存,以便开发人员可以利用额外的缓存。当所有线程访问相同的地址时,常量缓存具有最佳性能。点击速度非常快。错过可以有一个L1错过的相同表现。常量缓存可用于减少L1的抖动。计算能力1.x设备没有L1或L2缓存,因此常量缓存用于优化某些访问。 – 2012-04-22 19:57:02