【问题标题】:NVIDIA cuda memory trace generatorNVIDIA cuda 内存跟踪生成器
【发布时间】:2014-07-18 08:17:23
【问题描述】:

我是 GPU 领域的新手。所以我希望我能从你们那里得到一些帮助/提示。

我想为 CUDA 应用程序的所有加载/存储生成内存访问跟踪。我想知道是否可以使用任何 NVIDIA 工具生成这些跟踪。我想要的是生成一个跟踪,它在每个时钟周期告诉所有内核访问哪些内存地址。

谢谢

【问题讨论】:

  • 当前的 NVIDIA 工具不支持您请求的功能。尝试跟踪每个内存访问会增加大量开销,因为您必须在每个周期跟踪 NumSM 访问以获取 LSU + 1/2 NumSM 访问以再次获取纹理。跟踪将为时序、smid 和地址数据生成 1-2 倍的额外内存写入。如果您不能静态定义输出位置,该工具还必须使用原子来控制输出。今天可以做的最好的事情就是编写一个工具来检测 PTX。
  • @GregSmith 感谢您的有用回复。让我解释一下我想做什么,你可能知道什么是最好的选择。我想为 GPU 编写一个缓存模拟器,同时让所有东西都在硬件上运行。类似于 Valgrind 的 CUDA 代码。
  • 我希望例如能够更改设备内存的内容等等:D
  • @GregSmith:如果您将其添加为答案,那就太好了

标签: debugging memory cuda nvidia


【解决方案1】:

当前的 NVIDIA 工具目前 (05/2014) 不支持您请求的功能。尝试跟踪每个内存访问会增加大量开销,因为您必须以每个周期的最大 NumSM 访问速率跟踪 LSU + 1/2 NumSM 再次访问纹理。

跟踪将为时序、smid、操作类型和地址值生成 1-3 倍的额外内存写入。如果工具不能静态定义每个操作的输出位置,那么工具还必须使用原子来为跟踪记录分配空间。

目前收集此信息的选项是

  1. 检测源代码。这不是透明的 申请。
  2. 检测 PTX。 PanoptesLynx 等框架 可能会有所帮助。
  3. 在模拟器上运行应用程序。 GPU Ocelot 可能已经支持这种类型的检测。

我鼓励您通过 NVIDIA 开发者计划提交 RFE。

使用这些方法,您可以获得每个 warp 的有序操作列表。在选项 1 和 2 中,您可能还需要检测障碍,以便您可以在一个块内对操作进行排序。

【讨论】:

  • 感谢您发布此内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 2018-03-20
  • 2020-04-06
  • 2010-11-14
  • 2013-03-07
  • 2012-03-07
相关资源
最近更新 更多