我目前正在开发一个要在 MATLAB 中使用的具有 CUDA 功能的 mex 文件。当我做错了什么(例如错误的指针或类似的事情)时,MATLAB 总是崩溃(Windows 提示我结束,发送报告以供数学工作或尝试继续)。有没有办法防止这种情况发生?像这样开发真的很烦人,但你可能知道自己:几乎没有人可以在没有“反复试验”的情况下编写完美的代码......到目前为止谢谢!
问问题
2690 次
3 回答
4
据我所知,没有办法防止 Matlab 因 mex 错误而崩溃。但是您可以将调试器附加到 Matlab 进程并逐步执行代码。
我知道如果您的代码位于加载到 Matlab 的外部 dll 中,这将有效。我不确定这是否适用于 mex 文件。
于 2011-05-12T19:41:56.360 回答
3
于 2011-05-12T22:44:58.583 回答
2
您可以通过以下过程使用 Visual Studio 和 NVIDIA Nsight for Visual Studio 调试 Matlab mexfiles,包括 CUDA 代码。
- 定义系统环境变量NSIGHT_CUDA_DEBUGGER并将其设置为1。
- 启动Matlab。
- 启动 NVIDIA Nsight。右键单击任务栏上的 Nsight Monitor 图标并选择Options。选择 CUDA 选项卡。对于Use this Monitor for CUDA attach选项,单击下拉菜单并选择True。
- 在 Visual Studio 中打开您的项目,设置断点并编译它。
- 转到Tools -> Attach to Process。
- 单击Transport字段旁边的下拉菜单,然后选择Nsight GPU Debugger。
- 确保您的主机名列在限定符字段中。请注意,此字段默认为空白;第一次打开此对话框时,您必须手动选择您的机器名称。
- 当您在限定符字段中输入计算机的主机名时,可用进程列表将出现在对话框中。可能与 CUDA 使用相关的进程将显示在 Type 列中列出的 CUDA。如果某个进程灰显并且CUDA列在Type列中,则它已经在调试中,因此不可附加。Type列中没有CUDA的进程灰显,表示在要调试的进程中没有CUDA使用。可能附加的进程将正常显示,附加按钮将被启用。
- 确保Matlab在 Type 列中有CUDA并选择它。
- 从Matlab 命令行,调用 CUDA mexfile 中定义的函数。然后执行将在第一个断点处停止,并且可以开始调试。
于 2013-10-07T20:33:51.600 回答