0

我正在优化 CUDA 内核中的共享内存,因此我需要确定哪些变量是存储在共享内存中的最佳候选变量(即最常访问的变量)。我知道我可以翻阅代码并计算每个变量被访问的次数,但是内核相当复杂,所以我希望有一种方法可以自动执行此操作。我可以让 GDB 计算在一般 CPU 代码中或特别是在 cuda-gdb 中访问每个变量的次数吗?还是有其他有用的分析/调试工具?

谢谢。

4

1 回答 1

1

我不知道有任何性能指标能够计算相关线程访问特定变量的次数。也许你应该看看反汇编的微码(通过cuobjdump选项--dump-sass)以确定这种情况发生了多少次。

不过考虑一下,在现代架构(例如,Fermi 和 Kepler)中,共享内存可以被视为“受控的 L1 缓存”,因此如果变量没有从 L1 中逐出,则可能没有必要使用它。要了解从 L1 缓存中逐出全局内存变量的频率,您可以查看一些性能指标,了解nvprof您是否不想手动计算访问次数。例如,您可以考虑global_cache_replay_overheadgld_efficiency等。您可以在Metrics Referencegst_efficiency找到完整的性能指标列表。

最后,正如@talonmies 所建议的那样,您可能希望考虑对一些常用变量使用寄存器而不是共享内存,以便更快地访问。

于 2013-10-27T08:36:57.157 回答