2012-04-17 3 views
2

현재 MATLAB 2012a에서 MEX 파일을 사용하고 때때로 이해할 수없는 분할 오류로 실행되는 실험의 반복을 실행 중입니다. 결점에 대한MEX 파일을 병렬로 실행할 때 세그먼트 오류

일부 정보는

  • 그들은 내가 parfor 루프를 사용하여 리눅스 시스템에 병렬로 내 실험의 여러 반복을 실행할 때 그들은에만 발생 무작위로

  • 발생합니다.

  • 그들은 do 루프를 사용하여 Mac OSX 10.7에서 병렬로 실험을 여러 번 실행할 때 이 아닌이 발생합니다.

  • 내가 수행 할 때 이 아닌이 발생하거나 반복을 순차적으로 실행할 때 발생합니다.

  • 두 개의 실험을 병렬로 실행하면 두 실험을 동시에 수행 할 때보 다 훨씬 적은 빈도로 발생합니다.

내 MEX 파일에 대한 일부 정보 : 그것은 IBM CPLEX 12.4 API를 사용

  • C로 작성

    • (이 스레드 안전합니다) GCC를 사용하여 컴파일되었습니다. 4.6.3

    내 생각에 여러 코어에서 MEX 파일에 액세스 할 때 문제가있을 수 있습니다. 누구든지 무슨 일이 일어나고 있는지 또는 해결 방법을 제안 할 수 있을지에 대해 밝힐 수 있습니까? 필요에 따라 더 많은 정보를 제공해 드리겠습니다.

  • 답변

    2

    최근 MATLAB의 사람들에게 스택 추적을 보내고 범인은 CPLEX 12.4 API의 기능 중 하나이지만 내 코드가 아닙니다. 이 함수는 반드시 thread-safe는 아니지만 C에서 putenv() 함수를 사용합니다.

    불행히도이 함수와 API를 계속 사용해야하므로 follow-up thread that focuses on finding ways to avoid this fault을 게시했습니다.

    모든 조언을 주시면 감사하겠습니다.

    1

    내 생각에 여러 코어에서 MEX 파일에 액세스 할 때 문제가있을 수 있습니다.

    MEX 파일에 버그가있을 가능성이 훨씬 큽니다. 매달려있는 메모리에 액세스하는 것, 할당 된 배열의 끝을 지나쳐 쓰는 것 등 다양한 버그 (C에서 매우 쉽게 생성 할 수 있음)는 간헐적 인 SIGSEGV을 일으킬 것입니다.

    가장 좋은 방법은 디버거에서 Matlab을 실행하고 을 보면이 충돌합니다.

    관련 문제