【问题标题】:how to prevent <optimized out> values in cuda-gdb如何防止 cuda-gdb 中的 <optimized out> 值
【发布时间】:2019-03-20 10:51:13
【问题描述】:

如何防止 cuda-gdb 优化任何值(无论是设备还是主机、本地还是全局)?我查看了 nvidia 论坛,但其中大多数都已有多年历史,似乎没有针对旧 cuda 版本的解决方案,但有最新版本(cuda 9.2 和 sm 61)的解决方案吗?

我正在使用标志described in nvidia's documentation:

-g - "为主机代码生成调试信息。"

-G - “为设备代码生成调试信息。关闭所有优化。不要用于分析;改用 -lineinfo。”

【问题讨论】:

  • 唯一需要的是调试版本。但是,当变量实际在范围内时,您仍然需要检查它。从它被声明的那一刻起,它不一定在范围内。您可能必须向前迈出一步,直到变量真正以有意义的方式使用。
  • @RobertCrovella 我使用nvcc-g -G 标志构建。另外,我已经确定我在范围内。还有其他可能的标志来关闭优化吗​​?
  • 我不知道
  • 我遇到了同样的问题。我在编译标志中指定了“-G”,但变量在 cuda-gdb 中仍显示为“优化”。

标签: c++ c++11 cuda gdb cuda-gdb


【解决方案1】:

如何防止 cuda-gdb 优化出任何值

cuda-gdb没有优化任何东西;它只是解释编译器 (nvcc) 放入二进制文件的调试信息。

如果编译器选择不描述某个变量的位置,那么cuda-gdb 将无法恢复该信息。这通常是nvcc 的调试信息质量问题。

有可能nvcc确实描述了您所追求的位置,但cuda-gdb 未能处理该描述,在这种情况下,这是cuda-gdb 中的一个错误。

在任何一种情况下,除了向 NVidia 抱怨之外,你真的无能为力。

【讨论】:

  • 是否有任何解决方法可以防止 nvcc 优化值(g++ 或 gcc 中的典型方法除外)?
  • @CucumberMellonU。除非有您没有告诉我们的优化标志,否则优化这些值可能与您的问题无关
  • nvcc -arch=sm_61 -std=c++11 --use_fast_math -maxregcount 128 inputFile.cu -lz -Xcompiler -fPIC -shared -o output.so 都是标志。您认为其中任何一个都可能导致显示所有值表单吗?
  • @CucumberMellonU。你能让你的故事自洽吗?您的问题包括-g-G,但是您的“都是标志”评论中缺少这些标志。你用-G,还是不用?
  • @CucumberMellonU。好的,您使用的标志没有任何“优化”;我的答案是:(更有可能)nvcc 选择不描述变量,或者cuda-gdb 不理解描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 2021-01-07
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多