并行运行MEX文件时的分段错误

时间:2012-04-17 14:44:38

标签: matlab segmentation-fault parallel-processing mex

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

有关故障的一些信息

  • 它们是随机出现的

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

  • 当我在Mac OSX 10.7上使用parfor循环并行多次重复我的实验时,他们

  • 我在运行时发生,或者在我按顺序运行重复时发生

  • 当我并行进行2次实验时,它们似乎发生得少得多 - 而不是12次并行实验。

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

  • 用C

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

  • 使用GCC 4.6.3

  • 编译

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

2 个答案:

答案 0 :(得分:2)

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

不幸的是,我必须继续使用此功能和API,因此我发布了follow-up thread that focuses on finding ways to avoid this fault

任何建议都将不胜感激。

答案 1 :(得分:1)

  

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

您的MEX文件更有可能存在错误。各种错误(在C中非常容易制作),例如访问悬空内存,双重free()或写入已分配数组的末尾,将导致间歇SIGSEGV

最好的办法是在调试器下运行Matlab,然后看 它崩溃的地方。