현재 MATLAB 2012a의 parfor 함수를 사용하여 병렬로 실험을 실행하기 위해 MATLAB에서 MEX 파일을 코딩하고 있습니다. MEX 파일은 매우 간단한 수치 작업을 수행하지만 IBM의 CPLEX 12.4 API를 사용합니다.thread-safe API가 아닌 함수로 인해 병렬로 발생하는 분할 오류 해결
내 MEX 파일은 순차적으로 작동하지만 I will inevitably receive "random" segmentation fault when I run in in parallel. 세그먼테이션 결함의 스택 추적을 MATLAB에 보낸 후 그들은 C 라이브러리의 "putenv()"함수에서 오류가 발생했음을 제안했습니다. 이는 명백하게 스레드로부터 안전하지 않습니다.
필자는 MEX 코드에서 putenv() 함수를 사용하지 않지만 CPLEX 12.4에서 절대적으로 호출해야하는 함수 중 하나는이를 사용합니다. 이 함수의 결과로 발생하는 분할 오류를 피하기 위해 할 수있는 일이 있는지 궁금합니다. 누군가는 이전에 "내 비트 잠그기"와 "세마포어 사용하기"를 제안했지만 이러한 개념에 관해서는 정말 머리가 아프다.
모든 조언이나 지침은 매우 감사하겠습니다.
IBM 지원 센터에 전화하여 2000 년 이후 시스템에서 효율적으로 사용할 수 있도록 lib를 수정하도록 알려주십시오. 라이브러리가 불투명하다고 생각합니다. 소스 코드가없고 다시 작성할 수 없습니까? –