如何使用CUDA功能阻止Matlab崩溃(错误)mex文件执行

时间:2011-05-12 14:02:48

标签: matlab cuda crash mex

我目前正在开发一个带有CUDA功能的mex文件,可以在MATLAB中使用。当我做错事(例如错误的指针或类似的东西)时,MATLAB总是崩溃(窗口提示我结束,发送报告进行数学运算或尝试继续)。有没有办法防止这种情况发生?这样开发真的很烦人,但你可能已经知道了自己:几乎没有人可以在没有“反复试验”的情况下编写完美的代码...... 谢谢到目前为止!

3 个答案:

答案 0 :(得分:4)

据我所知,没有办法阻止Matlab崩溃的mex bug。但是您可以将调试器附加到Matlab进程并逐步执行代码。

我知道,如果您的代码位于加载到Matlab中的外部DLL中,则此方法可行。我不确定这是否适用于mex文件。

答案 1 :(得分:3)

来自Matlab MEX file page

  

mex -g yourmexfile.c

如果你还没有这样做。

答案 2 :(得分:1)

您可以通过以下步骤使用Visual Studio和Visual Studio的NVIDIA Nsight 调试Matlab mexfiles,包括CUDA代码。

  1. 定义系统环境变量 NSIGHT_CUDA_DEBUGGER 并将其设置为 1
  2. 启动 Matlab
  3. 启动NVIDIA Nsight 。右键单击任务栏上的Nsight Monitor图标,然后选择选项。选择CUDA选项卡。对于使用此监视器进行CUDA附加选项,请单击下拉菜单并选择 True
  4. 在Visual Studio中打开项目,设置断点并进行编译。
  5. 转到工具 - > 附加到流程
  6. 点击传输字段旁边的下拉菜单,然后选择 Nsight GPU Debugger
  7. 确保您的主机名称列在限定符字段中。 请注意,默认情况下此字段为空;您必须在第一次打开此对话框时手动选择您的机器名称。
  8. 在“限定符”字段中输入计算机的主机名时,对话框中将显示可用进程列表。可以附加CUDA使用的进程将显示在“类型”列中列出的CUDA。如果某个流程显示为灰色并且 CUDA 列在类型列中,则表明它已被调试,因此无法连接。在类型列中没有 CUDA 的情况下显示灰色的进程表示在要调试的进程中没有 CUDA 用法。可能附加的流程将正常显示,并且附加按钮将启用。
  9. 确保 Matlab 在Type列中有 CUDA 并选择它。
  10. Matlab命令行,调用CUDA mexfile中定义的函数。然后执行将在第一个断点处停止,并且可以开始调试。