2015-12-11 20 views
6

Tôi đang sử dụng OpenMP để viết mã song song. Đây là một phần từ các CMakeLists được sử dụng trong trường hợp của tôi.Cmake không hoạt động với openMP trên Maverick

FIND_PACKAGE(OpenMP REQUIRED) 
    if(OPENMP_FOUND) 
    message("OPENMP FOUND") 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
    endif() 

Tuy nhiên, khi chúng ta bắt đầu cmake .., Dường như nó deos không tìm thấy OpenMP gói và tôi nhận được lỗi này

Try OpenMP C flag = [ ] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-fopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [/openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-Qopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-xopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [+Oopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-qsmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-mp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [ ] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-fopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [/openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-Qopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-xopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [+Oopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-qsmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-mp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
CMake Error at /opt/local/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:148 (message): 
    Could NOT find OpenMP (missing: OpenMP_C_FLAGS OpenMP_CXX_FLAGS) 

Đây là CMakeLists.txt

cmake_minimum_required(VERSION 2.6) 

#Declaration du projet 

project(MYfirstcamke) 

set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE}) 

#Inclusion de opencv 

include_directories(/usr/local/include/) 

link_directories(/usr/local/lib) 

FIND_PACKAGE(OpenMP REQUIRED) 
if(OPENMP_FOUND) 
message("OPENMP FOUND") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
endif() 

find_package(PCL 1.2 REQUIRED) 
include_directories(${PCL_INCLUDE_DIRS}) 
link_directories(${PCL_LIBRARY_DIRS}) 
add_definitions(${PCL_DEFINITIONS}) 

file(

    GLOB_RECURSE 

    source_files 

    src/* 


) 
#declaration de l'executable 

add_executable(

my_executable 

${source_files} 

) 
#Configuration de l'edition de lien. 
target_link_libraries(

my_executable opencv_core opencv_imgproc opencv_video opencv_highgui ${PCL_LIBRARIES} 


) 

thế nào tôi có thể sửa nó không? Tôi chắc chắn rằng openMPi được cài đặt và nó nằm trên opt/local/include

+2

Bạn có chắc chắn bạn không trộn lẫn giữa OpenMP và OpenMPI không? Tôi thấy rằng bạn đã sử dụng cả hai thẻ và bạn tham khảo OpenMPI ở cuối bài đăng. Nhưng cả hai đều hoàn toàn khác nhau. OpenMP là một tiêu chuẩn của phần mở rộng ngôn ngữ song song đa luồng, và OpenMPI là một thực hiện tiêu chuẩn MPI để truyền thông điệp. Bạn là ai sau đó? – Gilles

+0

OpenMP không phải là một gói, mà là một phần không thể tách rời của trình biên dịch. Xcode được sử dụng để cung cấp một GCC OpenMP một thời gian dài trước đây. Sau đó, Apple chuyển sang Clang, mà không có hỗ trợ OpenMP, ít nhất là không có trong các phiên bản vận chuyển với Xcode. Bạn nên cài đặt GCC hoặc từ nguồn hoặc sử dụng Homebrew/MacPorts/bất cứ điều gì. –

+0

@Gilles, Có thể tôi đang trộn giữa OpenMP và OpenMPI. Tôi nghĩ rằng OpenMP đã không được chấp nhận và trở thành OpenMP. – Jeanne

Trả lời

0

OpenMP và MPI là hai điều hoàn toàn khác nhau.

OMP yêu cầu hỗ trợ trình biên dịch, trên OS X bạn cần qua Homebrew. (bạn cũng có thể cài đặt MPI thông qua Homebrew, điều này rất hay).

brew install clang-omp 

Sau khi bạn đã cài đặt clang-omp, bạn có thể yêu cầu CMake sử dụng trình biên dịch đó bằng cách gọi trình biên dịch như vậy.

CC=clang-omp CXX=clang-omp++ cmake <insert your normal cmake parameters here> 
+0

Theo http://openmp.llvm.org/, > "Với bản phát hành Clang 3.8.0, hỗ trợ OpenMP 3.1 được bật trong Clang theo mặc định và do đó thời gian chạy OpenMP được xây dựng như một phần bình thường của Clang xây dựng " Tôi không thể hiểu tại sao tôi vẫn phải cài đặt" clang-omp ", bạn có thể giải thích tại sao không? Một vấn đề khác là công thức 'clang-omp' yêu cầu phiên bản khác của clang (và' compiler-rt', vv) từ công thức 'llvm', vậy tôi nên làm gì để làm đúng? – squid

+0

Tôi đang thử với CMake 3.7 và clang 4.0 và 'find_package (OpenMP REQUIRED)' không thành công. –

0

Ngoài câu trả lời ở trên, bạn cũng có thể cài đặt gcc-5/g ++ - 5 từ homebrew. Việc cài đặt vanilla gcc-5 đơn giản (không có trình bao bọc Clang) sẽ hỗ trợ OpenMP và điều này sẽ được CMake phát hiện thông qua Find_Package.

Các vấn đề liên quan