2015-12-11 17 views
6

Sto usando OpenMP per scrivere codice parallelo. Ecco una sezione delle CMakeLists utilizzate nel mio caso.Cmake non funziona con openMP su 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() 

Ma, quando iniziamo cmake .., Sembra che non DEOS trovare pacchetto OpenMP e ottengo questo errore

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) 

Ecco 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} 


) 

Come posso aggiustarlo? Sono sicuro che openMPi è installato e si trova su opt/local/include

+2

Sei sicuro di non confonderlo tra OpenMP e OpenMPI? Vedo che hai usato entrambi i tag e che ti riferisci a OpenMPI alla fine del post. Ma entrambi sono completamente diversi. OpenMP è uno standard di estensione di linguaggio parallelo multi-threaded e OpenMPI è un'implementazione dello standard MPI per il passaggio di messaggi. Quale dei due stai cercando? – Gilles

+0

OpenMP non è un pacchetto, ma parte integrante del compilatore. Xcode utilizzato per fornire un GCC abilitato per OpenMP molto tempo fa. Quindi Apple è passato a Clang, che non ha il supporto OpenMP, almeno non nelle versioni fornite con Xcode. Dovresti installare GCC dal sorgente o usando Homebrew/MacPorts/qualunque. –

+0

@Gilles, Forse sto mixando tra OpenMP e OpenMPI. Ho pensato che OpenMP fosse deprecato e diventato OpenMP. – Jeanne

risposta

0

OpenMP e MPI sono due cose completamente diverse.

OMP richiede il supporto del compilatore, che su OS X è necessario tramite Homebrew. (puoi anche installare MPI tramite Homebrew, che è bello).

brew install clang-omp 

Dopo aver installato clang-OMP, si può poi dire CMake di utilizzare tale compilatore invocando in questa maniera.

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

In base a http://openmp.llvm.org/, > "Con il rilascio di Clang 3.8.0, il supporto di OpenMP 3.1 è abilitato in Clang per impostazione predefinita e il runtime di OpenMP viene quindi creato come una parte normale di Clang build " Non riesco proprio a capire perché devo ancora installare" clang-omp ", potresti gentilmente spiegare perché? Un altro problema è che la formula 'clang-omp' richiede una diversa versione di clang (e' compiler-rt' ecc.) Dalla formula 'llvm', quindi cosa dovrei fare per sistemare le cose? – squid

+0

Sto provando con CMake 3.7 e clang 4.0 e il mio 'find_package (OpenMP REQUIRED)' fallisce. –

0

In aggiunta alla risposta di cui sopra, è anche possibile installare gcc-5/g ++ - 5 da homebrew. L'installazione plain vanilla gcc-5 (senza wrapper Clang) supporterà OpenMP e questo dovrebbe essere rilevato da CMake tramite Find_Package.