1

我有一个在 Visual Studio 2010 下运行的 cuda (v4.2) 程序,我将各种命令行参数传递给该程序。我希望主机编译器在运行 nsight (v2.2) 时看到相同的参数。我假设我必须通过(右键单击项目)-> nsight 用户设置-> 命令行参数来执行此操作,但尚未设法找到不会使 nvcc 崩溃的语法。我假设它以某种方式围绕“--run-args”安排?

** 澄清,在下面的评论后:

当然,当您直接通过 VS 进行调试时,您可以通过属性页/命令参数输入命令参数,并且一切正常。但是通过 NSight,这被忽略了,所以我的问题是,怎么做?我对编译器的讨论假设 nsight 运行 NVCC,然后它在幕后为非 CUDA 代码调用 MSVC。所以我假设 NSight 需要将任何命令行参数向下传递到 VS,大概是通过上述选项。假设所有这些都是合理的,我怀疑我只是在“nsight 用户设置-> 命令行参数”中弄错了语法,并且想知道是否还有其他人在这里取得了成功。更清晰?

4

2 回答 2

1

目前尚不清楚您是尝试通过 nvcc 将命令行参数传递给 cl.exe,还是在使用命令 Nsight CUDA Debugger (Nsight|Start CUDA Debugging) 通过 Visual Studio 启动应用程序时将命令行参数传递给应用程序。

在将 .cu 文件编译为 cl.exe 时将命令行参数传递给 cl.exe

  1. 在解决方案资源管理器中右键单击 .cu 文件
  2. 执行属性命令
  3. 在“filename.cu”属性页中 在左侧窗格中选择“CUDA C/C++”\“Host” b. 在“附加编译器选项”或“预处理器定义”中添加要传递给 cl.exe 的参数

预处理器定义将转到 nvcc.exe 和 cl.exe。附加编译器选项将附加到 -Xcompiler 选项。

在使用 Nsight|Start CUDA Debugging 启动应用程序时将命令行参数传递给应用程序

  1. 在解决方案资源管理器中右键单击项目(确保这是您的启动项目)
  2. 执行 Nsight 用户属性命令
  3. 在“NVIDIA NSight 用户设置:”对话框中 在左窗格中选择“启动” b。在右侧指定“命令行参数”字段中的参数。

当您使用 (Nsight|Start CUDA Debugging) 启动应用程序时,这些选项将传递给应用程序。

在使用 Debug|Start * Debugging 启动应用程序时将命令行参数传递给应用程序

  1. 在解决方案资源管理器中右键单击项目(确保这是您的启动项目)
  2. 执行属性命令
  3. 在“属性页”对话框中 在左窗格中选择“调试” b。在右窗格中将参数添加到“命令参数”字段

编辑项目属性和 Nsight 用户属性时,请确保在对话框顶部指定配置和平台。

Nsight VSE 构建系统不使用 nvcc --run 和 --run-args 选项。如果您使用 Debug 命令启动,您的进程将由 devenv.exe 启动。如果您使用 Nsight|Start CUDA 调试或 Nsight 分析工具启动您的应用程序将由 Nsight.Monitor.exe 启动。

于 2012-10-29T01:03:20.007 回答
0

我想帮忙,但我很困惑;您谈到在 VS 下将运行时参数传递给您的主机代码。然后你说你希望编译器看到相同的参数。我认为您不是指编译器。首先在 VS 中构建您的项目(使用构建的调试版本)。(并且我已经将我的 .cu 编译成一个 ptx 文件,所以当我进入 Nsight 时不会调用 nvcc。)然后当你调用 Nsight 时,这个构建就会运行。我不必提供运行时参数。在 VS 项目中的 Debug 下有一个地方可以提供命令行参数;也许这在 Nsight 启动时使用,尽管我有疑问。此外,还有您引用的 Nsight 用户 -> 命令行参数输入。我认为后者确实是正确的方法。也许您的问题是您需要在启动 Nsight 之前完全构建项目。

于 2012-10-27T18:27:14.730 回答