【问题标题】:NVidia CUDA: cache L2 and multiple kernel invocationsNVidia CUDA:缓存 L2 和多个内核调用
【发布时间】:2011-10-23 00:51:45
【问题描述】:

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

【问题讨论】:

    标签: caching cuda gpu gpgpu nvidia


    【解决方案1】:

    假设您在谈论 Fermi 中的 L2 数据缓存。

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

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

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2011-01-16
      • 2011-01-12
      • 2023-04-09
      相关资源
      最近更新 更多