내 C++ 프로젝트에는 여러 개의 #pragma omp parallel for private(i)
문이 있습니다. valgrind를 사용하여 코드에서 버그를 추적하려고하면 OpenMP 장식이 메모리 누출 메시지가 "손실 될 수 있습니다"라는 결과를 초래합니다. 내가 완전히 앞에서 언급 한 #pragma
문을 모두 비활성화하여 문제를 격리 할 수 있습니다.내 C++ 프로젝트의 모든 곳에서 OpenMP pragma 문을 사용하지 않음
그러나 코드에서 omp_get_wtime()
을 사용하고 있으며이 함수 호출을 비활성화하지 않으려합니다. 따라서 프로젝트에서 모든 OpenMP 기능을 완전히 비활성화하고 싶지는 않습니다.
간단히 모든 #pragma omp parallel for private(i)
문을 끄면 어떻게됩니까?
필자는 Eclipse CDT를 사용하여 메이크 파일을 자동으로 관리하므로 일반적으로 릴리스 모드에서 make all -C release
으로 컴파일합니다. 이상적으로, 나는 상기 언급 한 모든 #pragma
문을 끈 결과 인 make all -C release -TURN_OFF_PARALLEL
과 같은 문을 사용하여 컴파일 할 수 있도록하는 문제에 대한 해결책을 원합니다.
- 비활성화 OpenMP를
- 링크 OpenMP를 스텁 라이브러리 함수 당신의 OpenMP 구현 스텁 기능을, 당신이 당신의 자신을 만들 수 있습니다 제공하지 않는 경우
:
"OpenMP 스텁 라이브러리 함수 링크"가 의미하는 바를 자세히 설명 할 수 있습니까? – synaptik
아이디어는 _serial 라이브러리 _와'omp.h'에 정의 된 API를 링크하는 것입니다. 일부 컴파일러는 그렇게하기위한 플래그를 제공하므로 필요한 것은 컴파일 타임에 플래그를 변경하는 것뿐입니다. 예를 들어, 이것은 [Intel의 참조]입니다 (http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/copts/common_options/option_openmp_stubs.htm) – Massimiliano
OpenMP의 omp_get_wtime 대신'boost :: timer' [class] (http://www.boost.org/doc/libs/1_53_0/libs/timer/doc/cpu_timers.html)를 사용하는 것에 대한 의견은 무엇입니까?)'함수? 다른 OpenMP 함수를 사용하지 않기 때문입니다. – synaptik