중첩 된 omp를 사용하는 C++ 응용 프로그램을 구축 중입니다. 그러나 충돌이 발생합니다. 이 문제는 두 omp 중 하나가 제거되거나 wait 함수가 주 파일 자체에있을 때 해결됩니다. OS는 MacOS X Lion입니다. 컴파일러는 llvm-gcc 또는 gcc-4.2이어야합니다 (잘 모르겠다. 간단히 cmake ...). 다음을 보여주기 위해 다음 앱을 만들었습니다.중첩 된 openmp가 세분화 오류를 일으킴 (MacOS X 만 해당)
편집 : 이제 동일하게 시도했습니다. 리눅스 컴퓨터에서, 그것은 잘 작동합니다. 그래서 그것은 순수한 MACOS X (사자) 문제입니다.
OMP_NESTED가 true로 설정됩니다.
주 :
#include "waiter.h"
#include "iostream"
#include "time.h"
#include <omp.h>
void wait(){
int seconds = 1;
#pragma omp parallel for
for (int i=0;i<2;i++){
clock_t endwait;
endwait = clock() + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
std::cout << i << "\n";
}
}
int main(){
std::cout << "blub\n";
#pragma omp parallel for
for(int i=0;i<5;i++){
Waiter w; // causes crash
// wait(); // works
}
std::cout << "blub\n";
return 0;
}
헤더 :
#ifndef WAITER_H_
#define WAITER_H_
class Waiter {
public:
Waiter();
};
#endif // WAITER_H_
구현 :
#include "waiter.h"
#include "omp.h"
#include "time.h"
#include <iostream>
Waiter::Waiter(){
int seconds = 1;
#pragma omp parallel for
for (int i=0;i<5;i++){
clock_t endwait;
endwait = clock() + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
std::cout << i << "\n";
}
}
CMakeLists.txt :
cmake_minimum_required (VERSION 2.6)
project (waiter)
set(CMAKE_CXX_FLAGS "-fPIC -fopenmp")
set(CMAKE_C_FLAGS "-fPIC -fopenmp")
set(CMAKE_SHARED_LINKDER_FLAGS "-fPIC -fopenmp")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
add_library(waiter SHARED waiter.cpp waiter.h)
add_executable(use_waiter use_waiter.cpp)
target_link_libraries(use_waiter waiter)
,536,
도움에 감사드립니다!
플랫폼/컴파일러는 무엇입니까? 나는 GCC 4.5의 OpenMP에 버그가 있다고 들었다. –
@larsmans \t MAC OS Lion과 llmv 또는 gcc-4.2 중 하나입니다. 단순히 CMake를 사용하는 것이 확실하지 않습니다 ...이 부분을 어디에서 찾을 수 있습니까? – guinny
'CMAKE_CXX_COMPILER'를 설정해보십시오. –