【问题标题】:Segmentation Faults when Running MEX Files in Parallel并行运行 MEX 文件时的分段错误
【发布时间】:2012-04-17 14:44:37
【问题描述】:

我目前正在重复使用 MATLAB 2012a 中的 MEX 文件的实验,偶尔会遇到我无法理解的分段错误。

关于故障的一些信息

  • 它们随机出现

  • 仅当我使用 parfor 循环在 Linux 机器上并行运行多次重复实验时才会出现这种情况。

  • 当我使用 parfor 循环在 Mac OSX 10.7 上并行运行多次重复实验时,它们确实不会发生。

  • 它们确实在我跑步时出现,或者它们在我按顺序运行重复时出现。

  • 当我并行运行 2 个实验而不是 12 个并行实验时,它们的发生频率似乎要低得多。

关于我的 MEX 文件的一些信息:

  • 它是用C编写的

  • 它使用 IBM CPLEX 12.4 API(这是线程安全的)

  • 使用 GCC 4.6.3 编译

我的想法是在多核中访问 MEX 文件可能存在一些问题。任何人都可以阐明可能发生的事情或提出修复建议吗?我很乐意在必要时提供更多信息。

【问题讨论】:

    标签: matlab segmentation-fault parallel-processing mex


    【解决方案1】:

    我最近向 MATLAB 的人员发送了堆栈跟踪,结果发现罪魁祸首不是我的代码,而是 CPLEX 12.4 API 中的一个函数。事实证明,这个函数使用了 C 中的 putenv() 函数,它不一定是线程安全的。

    不幸的是,我必须继续使用这个函数和 API,所以我发布了一个follow-up thread that focuses on finding ways to avoid this fault

    任何建议将不胜感激。

    【讨论】:

      【解决方案2】:

      我的想法是在多核中访问 MEX 文件可能存在一些问题。

      您的 MEX 文件更有可能存在错误。各种错误(在 C 中很容易产生),例如访问悬空内存、双free()ing 或写入超过分配数组的末尾,将导致间歇性SIGSEGV

      最好的办法是在调试器下运行 Matlab,看看 在哪里它崩溃了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        相关资源
        最近更新 更多