2

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

有关故障的一些信息

  • 它们随机发生

  • 它们仅在我使用 parfor 循环在 Linux 机器上并行运行多次重复实验时发生。

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

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

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

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

  • 它是用 C 写的

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

  • 它是使用 GCC 4.6.3 编译的

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

4

2 回答 2

2

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

不幸的是,我必须继续使用这个函数和 API,所以我发布了一个后续线程,专注于寻找避免这个错误的方法

任何意见,将不胜感激。

于 2012-04-20T05:09:24.547 回答
1

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

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

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

于 2012-04-18T04:56:22.837 回答