2

現在、MATLAB 2012aで​​MEXファイルを使用する実験を繰り返し実行しており、理解できないセグメンテーション違反が発生することがあります。

障害に関するいくつかの情報

  • それらはランダムに発生します

  • これらは、parforループを使用してLinuxマシンで実験を複数回並行して実行した場合にのみ発生します。

  • パーフォーループを使用してMacOSX10.7で実験を複数回並行して実行した場合、これらは発生しません。

  • それらは、私が実行したときに発生しません。または、繰り返しを連続して実行したときに発生します。

  • 私が2つの実験を並行して実行した場合、12の実験を並行して実行した場合とは対照的に、それらははるかに少ない頻度で発生するようです。

私のMEXファイルに関するいくつかの情報:

  • Cで書かれています

  • IBM CPLEX 12.4 APIを使用します(これはスレッドセーフです)

  • GCC4.6.3を使用してコンパイルされました

私の考えでは、複数のコアでMEXファイルにアクセスする際に問題が発生する可能性があります。誰かが何が起こっているのかを明らかにしたり、修正を提案したりできますか?必要に応じて、さらに詳しい情報を提供させていただきます。

4

2 に答える 2

2

最近、MATLABの人々にスタックトレースを送信しましたが、原因は私のコードではなく、CPLEX12.4APIの関数の1つであることがわかりました。この関数はCのputenv()関数を使用していることがわかりましたが、これは必ずしもスレッドセーフではありません。

残念ながら、私はこの関数とAPIを使い続ける必要があるため、この障害を回避する方法を見つけることに焦点を当てたフォローアップスレッドを投稿しました。

何かアドバイスをいただければ幸いです。

于 2012-04-20T05:09:24.547 に答える
1

私の考えでは、複数のコアでMEXファイルにアクセスする際に問題が発生する可能性があります。

MEXファイルにバグがある可能性がはるかに高くなります。ぶら下がっているメモリへのアクセス、ダブル化、割り当てられた配列の終わりを超えた書き込みなど、さまざまなバグ(Cでは非常に簡単に作成できます)により、free()断続的に発生しSIGSEGVます。

最善の策は、デバッガーでMatlabを実行し、クラッシュする場所を確認することです。

于 2012-04-18T04:56:22.837 に答える