我目前正在重复使用MATLAB 2012a中的MEX文件的实验,偶尔会遇到我无法理解的分段错误。
有关故障的一些信息
它们是随机出现的
只有当我在使用parfor循环的Linux机器上并行执行多次重复实验时才会出现这种情况。
当我在Mac OSX 10.7上使用parfor循环并行多次重复我的实验时,他们不。
我在运行时不发生,或者在我按顺序运行重复时发生 。
当我并行进行2次实验时,它们似乎发生得少得多 - 而不是12次并行实验。
有关我的MEX文件的一些信息:
用C
它使用IBM CPLEX 12.4 API(这是线程安全的)
使用GCC 4.6.3
我的想法是,在多个核心中访问MEX文件时可能存在一些问题。任何人都可以了解可能发生的事情或建议修复?我很乐意在必要时提供更多信息。
答案 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,然后看 它崩溃的地方。