首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纹理缓存比L2缓存快吗?

纹理缓存比L2缓存快吗?
EN

Stack Overflow用户
提问于 2014-04-10 21:51:54
回答 2查看 860关注 0票数 1

我正在使用纹理缓存来加速科学计算。我在想为什么纹理记忆可以使代码更快。

一种可能是纹理内存将L2缓存流量引入纹理缓存。如果纹理内存访问速度快于L2缓存,这将是有意义的,但我还没有找到这样的基准测试。

有人知道这件事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-12 23:08:26

所有纹理事务也都流经L2缓存,因此一般来说,纹理比L2慢的情况很少。你可以把开普勒上的纹理缓存想象成只读数据的备用L1缓存。

纹理缓存的细节是复杂的,并且没有详细的文档,但是它是一个非常高性能的缓存,特别是对于具有一定局部性的流访问模式和在同一翘曲或线程块中的不同线程之间的重用。

纹理缓存的一个要点是,与CPU L1缓存不同,它实际上并不是为了减少延迟而设计的。相反,它被设计为一个“带宽聚合器”,它聚合来自多个线程的同时负载,并试图尽可能高效地将结果流回处理单元。这意味着内存系统可以在较少的总事务中获取相同数量的数据。

如果没有更多的信息,很难判断使用纹理缓存(例如通过开普勒上的ldg内部缓存)是否会提高任何特定访问模式的性能,但是如果您的内核是带宽受限的,则通常值得一试。

关于您的特定点,是的,在纹理缓存中命中的数据将不必输出到L2。但是,由于纹理缓存的特殊性,这通常比带宽聚集的影响更小,后者导致发送给L2的总内存事务较少。

票数 0
EN

Stack Overflow用户

发布于 2014-04-11 10:20:58

我有一些基准可以解释一些事情。两个程序在PC CPU和图形卡上使用CUDA进行相同的计算。还有一种使用OpenMP的方法。请注意,下面显示的GPU有128个具有多个寄存器的内核,正是这些内核提供了出色的性能,而不是内存速度。

mflops.htm

http://www.roylongbottom.org.uk/linux%20multithreading%20benchmarks.htm#anchor5

执行的算术运算为xi = (xi + a) *b- (xi + c) *d+ (xi + e) *f,每个输入数据字有2、8或32个操作。所使用的数组大小为0.1、1或1 000万字节--4字节--单精度浮点字。以下是一些结果的总结。

对于生成CPU使用的输出的计算,一个主要的障碍是图形总线速度相对较慢。第一个结果涉及400 KB转移到图形卡和背面,2500次。如果只使用相同的输出数据,则速度会加倍。最快的是当所有的数据都没有返回时(可能有几个数字)。这里。来自L2缓存的基于CPU的计算要快得多。

第二组使用CPU上RAM中的数据,比不涉及数据传输的CUDA计算速度慢。接下来的两组数据每个数据字有32个操作,GPU核的数量可以带来比使用CPU更好的性能。

最后的计算包括在GPU上运行的循环控制,包括使用GPU共享内存(缓存)。为了获得最好的性能,应该有最小的数据输入和输出,并对每个数据字进行大量的计算。

代码语言:javascript
复制
  AMD Phenom(tm) II X4 945 Processor  3000 MHz 4 Cores 
  GeForce GTS 250  with 16 Processors 128 cores 
  Global Memory 999 MB, Shared Memory/Block 16384 B, Max Threads/Block 512

                  GTS 250 ------------------------------   Phenom
  Test            4 Byte  Ops  Repeat   Seconds   MFLOPS   MFLOPS
                   Words  /Wd  Passes                     4 Threads

 Data in & out    100000    2    2500  1.035893      483    22321
 Data out only    100000    2    2500  0.514445      972
 Calculate only   100000    2    2500  0.082464     6063

 Data in & out  10000000    2      25  0.639933      781     3240
 Data out only  10000000    2      25  0.339051     1475
 Calculate only 10000000    2      25  0.041672    11999

 Data in & out    100000   32    2500  1.057142     7568    58670
 Data out only    100000   32    2500  0.531691    15046
 Calculate only   100000   32    2500  0.128706    62157

 Data in & out  10000000   32      25  0.644074    12421    45377
 Data out only  10000000   32      25  0.357000    22409
 Calculate only 10000000   32      25  0.062001   129029

 Extra tests - loop in main CUDA Function

 Calculate      10000000    2      25  0.050288     9943
 Shared Memory  10000000    2      25  0.009206    54313

 Calculate      10000000   32      25  0.050531   158320
 Shared Memory  10000000   32      25  0.046626   171580
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22999754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档