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

时间:2011-08-09 08:39:55

标签: caching cuda gpu gpgpu nvidia

我想知道在多个内核调用之间是否释放了L2缓存。例如,我有一个内核对数据进行一些预处理,第二个使用它。如果数据大小小于768 KB,是否可以实现更高的性能?我认为没有理由让NVidia的人实施它,但也许我错了。有人有经验吗?

1 个答案:

答案 0 :(得分:1)

假设您正在谈论费米的L2数据缓存。

我认为每次调用内核后都会刷新缓存。根据我的经验,运行两次连续启动同一内核并进行大量内存访问(以及#L2缓存未命中)不会对L1 / L2缓存统计信息进行任何实质性更改。

在您的问题中,我认为,根据数据依赖性,可以将两个阶段放入一个内核(具有一些同步),因此内核的第二部分可以重用第一部分处理的数据。

这是另一个技巧:你知道gpu有,例如N SMs,你可以使用第一个N * M1块执行第一部分。第二部分的下一个N * M2块。确保第一部分中的所有块都使用同步(或几乎)同时完成。根据我的经验,块调度顺序确实是确定性的。

希望它有所帮助。