2010-12-28 2 views
3

OpenMP를 사용하는 응용 프로그램을 컴파일하고 있습니다. -fopenmp와 함께 gcc 4.4를 사용하고 있습니다. 또한이 애플리케이션은 자체 버전의 OpenMP (libiomp5)가 포함 된 IPP를 사용합니다. (참고 : 우리는 ippSetNumThread (1)을 호출하여 IPP의 내부 스레딩을 비활성화하고 있습니다. 인텔의 설명서에 따르면 다른 스레딩 라이브러리와의 충돌을 피할 수 있지만 IPP와의 링크는 여전히 libiomp5.so의 링크입니다.)libiomp5와 libgomp을 함께 사용할 수 있습니까?

이후 libiomp5. 그래서 이미 링크되어 있습니다. 우리는 이 아니고 libgomp.so (gcc의 OpenMP 버전)와 연결되었습니다.이 아닙니다. 오랫동안이 작업이 진행되었지만 겉보기에 중대한 변화가 있은 후에 우리는 우리가 지원하는 4 개의 플랫폼 중 하나에서 매우 이상한 OpenMP 관련 충돌을 보았습니다. 다른 3 개의 플랫폼은 여전히 ​​잘 작동합니다.

libgomp.so와 libiomp5.so에 링크하면 충돌을 일으킬 수 있습니다.

  1. 이러한 라이브러리 안전 모두 연결되어 :

    나는 이것에 대해 몇 가지 질문이? 두 사람이 같은 기호를 정의하는 것처럼 보입니다.

  2. OpenMP libiomp5.so가 지원하는 버전을 알 수있는 방법이 있습니까? gcc 4.4에서 libgomp.so는 OpenMP v3.0에 있어야합니다. libiomp5.so의 OpenMP 버전에 대한 인텔의 설명서에서 정보를 찾을 수 없습니다. 아무도 며칠 동안 대답하지 않았다 때문에

답변

3

, 난 그냥 독립적으로 발견 한 것을보고 있습니다 :

이 두 라이브러리 안전이 연결되어 있습니까? 번호 여기에 내가이 주제에있는 가장 유용한 페이지의 : http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/optaps/common/optaps_par_openmp_multiple_compilers.htm

인텔은 IPP의 내부 OpenMP를 자신의 OpenMP 스레딩 스레딩 혼합 될려고하는 경우에, 당신은 당신의 컴파일러의 OpenMP를 대신 libiomp5 링크를하는 것이 좋습니다 도서관. libiomp5의 현재 버전은 gcc의 OpenMP와 "소스 호환성 및 객체 수준의 상호 운용성"을 제공하지만 gcc "4.42"(sic; 4.4.2 이상을 의미한다고 가정)를 사용하는 경우에만 제공됩니다.

OpenMP libiomp5.so가 지원하는 버전을 알려줄 수 있습니까? 예. 환경 변수 KMP_VERSION = 1을 설정 한 다음 응용 프로그램을 실행하십시오. libiomp5가 출력하는 디버깅 출력을 콘솔에 보내 게됩니다. 나중에 IPP의 V7 이상을 사용하는 경우, 한 줄은 IPP (6)을 사용하는 경우, 그것은 당신에게 API 버전을 말하지 않을 것이다

Intel(R) OMP API version: 3.0 (200805) 

같은 수 있지만 그것이 만들어진 때를 알려 가진 것 어떤 버전의 인텔 컴파일러. 그런 다음 컴파일러가 지원하는 OpenMP 버전을 확인하고 볼 수 있습니다. (11.0은 OpenMP v3.0을 지원하는 인텔 컴파일러의 첫 번째 버전입니다.)

관련 문제