NVidia CUDA:缓存L2和多个内核调用

4
我想知道在多次内核调用之间是否会释放L2缓存。例如,我有一个对数据进行预处理的内核和一个使用它的内核。如果数据大小小于768 KB,是否可以实现更高的性能?我认为Nvidia没有其他原因来实现它,但我可能是错的。有人有这方面的经验吗?
1个回答

2
假设您所说的是Fermi中的L2数据缓存。
我认为在每次调用内核后都会清除缓存。根据我的经验,使用大量内存访问(和#L2缓存未命中)连续运行相同内核的两个启动程序不会对L1/L2缓存统计数据产生任何实质性的更改。
在您的问题中,我认为,根据数据依赖性,可以将两个阶段合并为一个内核(带有一些同步),以便内核的第二部分可以重复使用由第一部分处理的数据。
这里还有另一个技巧:您知道GPU有N个SM,您可以使用前N * M1块执行第一部分。下一个N * M2块用于第二部分。确保第一部分中的所有块在同一时间完成(或几乎同时)使用同步。根据我的经验,块调度顺序真的很确定。
希望能帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接