【问题标题】:How to stop Matlab crashing on (wrong) mex-file execution with CUDA functionality如何使用 CUDA 功能阻止 Matlab 在(错误的)mex 文件执行时崩溃
【发布时间】:2011-08-24 03:58:07
【问题描述】:

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

【问题讨论】:

    标签: matlab cuda crash mex


    【解决方案1】:

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

    我知道如果您的代码位于加载到 Matlab 的外部 dll 中,这将有效。我不确定这是否适用于 mex 文件。

    【讨论】:

    • 嗯很遗憾没有,因为在开发我还没有做的事情时经常会出现这种情况:(
    【解决方案2】:

    来自Matlab MEX file page

    mex -g yourmexfile.c

    如果你还没有这样做。

    【讨论】:

    • 这不会使matlab崩溃吗?以及如何附加调试器?抱歉,但这对我来说是新事物...
    • @Col 可以肯定的是,Matlab 的内存管理器非常脆弱,我已经设法创建了非常奇怪的错误。但他们中的许多人会被这个选项抓住。然后从命令行,从调试器运行 Matlab,就好像你在调试 Matlab 本身一样。
    • -g 绝对不会阻止 Matlab 因 mex 错误而崩溃。我很惊讶这是该问题的公认答案。 -g 可能确实有助于发现问题,但建议使用调试器似乎几乎是不言而喻的。
    【解决方案3】:

    您可以通过以下过程使用 Visual Studio 和 NVIDIA Nsight for Visual Studio 调试 Matlab mexfiles,包括 CUDA 代码

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

    【讨论】:

    • 对我来说有点晚了,但感谢您的回答。希望当他遇到这个问题时它可以帮助某人:)
    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 2014-07-06
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多