关于共享存储器使用的问题
我在XP上用VS开发CUDA程序,使用了cuda_vs_wizard.
定义了两个位于共享存储器中的数组变量,一个用来存放系数,另一个用来归约。
第一个数组中的数据经过一些计算后将结果存入第二个数组,并进行归约算法求和。
但后来发现,第一个数组的大小会影响后面归约算法的执行时间。
当共享数组总大小小于4096 float时(即不到16KB时),程序执行时间最少;当第一个数组大小等于或超过4096 float时(即超过16KB时),程序执行时间就开始增加。
难道kernel的执行时间与共享存储器的大小有关吗???求解。。。
==============================================================================
Fermi白皮书上说Fermi中每个BLOCK共有64KB的共享内存,而可以将它们配置成48 KB的共享内存+16KB的一级缓存 或者是 16 KB 的共享内存+ 48KB 的一级缓存。
请问,具体怎么配置呢?共享内存和L1 cache有什么区别吗?
我使用的视频卡是GTX465, 通过DeviceQuery得到的结果是:
Total amount of shared memory per block : 49152 bytes
这意味着465中共享存储器默认的配置是 48KB的共享内存+16KB的一级缓存吗?
那这16KB的一级缓存如何使用呢?