2012-04-17 62 views
2

我目前正在運行一個使用MATLAB 2012a中的MEX文件的實驗的重複,偶爾會遇到我無法理解的分段錯誤。並行運行MEX文件時的分段錯誤

一些有關故障

  • 他們隨機出現

  • ,當我在並行使用PARFOR循環在Linux機器上運行我的實驗中多次重複他們纔會發生。

  • 他們做不是當我在Mac OSX 10.7上使用parfor循環並行運行多個實驗的重複時發生。

  • 他們做不是當我運行或發生時,當我運行重複順序。

  • 當我並行運行2個實驗時,它們似乎發生的頻率要低得多 - 而不是12個並行實驗。

我的MEX文件中的一些信息:

  • 這是寫在C

  • 它採用了IBM CPLEX 12.4 API(這是線程安全的)

  • 它使用GCC編譯4.6.3

我的想法是,在多核心訪問MEX文件時可能會有一些問題。任何人都可以闡明可能發生的事情或提出修復建議嗎?我很樂意根據需要提供更多信息。

回答

2

我最近發送了一個堆棧跟蹤給MATLAB的人,事實證明,罪魁禍首不是我的代碼,而是來自CPLEX 12.4 API的函數之一。事實證明,這個函數使用C中的putenv()函數,它不一定是線程安全的。

不幸的是,我不得不繼續使用這個函數和API,所以我發佈了follow-up thread that focuses on finding ways to avoid this fault

任何意見,將不勝感激。

1

我的想法是,有可能是在訪問在多個內核的MEX文件中的一些問題。

這很可能是你的MEX文件有錯誤。各種各樣的錯誤(在C中很容易產生),比如訪問懸空的內存,雙擊或者在已分配數組末尾寫入,都會導致間歇性的SIGSEGV

最好的辦法是在調試器下運行Matlab,並參見,其中它崩潰。