并行运行 MEX 文件时的分段错误
Posted
技术标签:
【中文标题】并行运行 MEX 文件时的分段错误【英文标题】:Segmentation Faults when Running MEX Files in Parallel 【发布时间】: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 文件可能存在一些问题。任何人都可以阐明可能发生的事情或提出修复建议吗?我很乐意在必要时提供更多信息。
【问题讨论】:
【参考方案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,看看 在哪里它崩溃了。
【讨论】:
以上是关于并行运行 MEX 文件时的分段错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Ubuntu 14.04 和 matlab 2014Ra 上使用犰狳在 mex 中出现分段错误