2015-07-07 18 views
7

Ich verwende CLion. Meine CMakeLists.txt sieht so aus:MPI: Ändern der Anzahl der Prozessoren in CMakelists

cmake_minimum_required(VERSION 3.2) 

project(MPI) 

add_executable(MPI main.cpp) 

# Require MPI for this project: 
find_package(MPI REQUIRED) 

set(CMAKE_CXX_COMPILE_FLAGS ${CMAKE_CXX_COMPILE_FLAGS} ${MPI_COMPILE_FLAGS}) 
set(CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} ${MPI_LINK_FLAGS}) 

include_directories(MPI_INCLUDE_PATH) 
target_link_libraries(MPI ${MPI_LIBRARIES}) 

Das MPI - Hallo Welt läuft gut. Aber wie ändere ich die Anzahl der Prozessoren in den cmakelists?

Ich habe bereits versucht, den Programmargumenten in CLion -np 4 und -n 4 hinzuzufügen. Aber nach wie vor nur bekomme ich

Hallo Welt Prozess 0 von 1

Antwort

9

Sie können nicht die Anzahl der Prozesse angeben, die in der CMakeLists.txt verwendet werden sollen. Anzahl der Prozesse ist ein Argument, das Sie angeben, wenn Sie das Programm mit mpirun ausführen.

Um ein mpi C Projekt zu kompilieren ich CMakeLists.txt folgende verwenden

cmake_minimum_required(VERSION 3.3) 
project(hellompi) 

find_package(MPI REQUIRED) 
include_directories(${MPI_INCLUDE_PATH}) 

SET(CMAKE_C_COMPILER mpicc) 
SET(CMAKE_CXX_COMPILER mpicxx) 

set(SOURCE_FILES main.c) 
add_executable(hellompi ${SOURCE_FILES}) 

Um das Programm von Clion auszuführen, änderte ich zuerst die (dunkel) Lage, die Clion von Standardausgängen Dateien kompiliert . Sie können unter den Einstellungen in "Build, Execution and Deployment" -> "CMake" einen anderen Speicherort für die kompilierten Dateien angeben. Ich habe es nur in den Projektordner geändert.

Als nächstes habe ich die Laufkonfigurationen bearbeitet. "Run" -> "Edit Konfigurationen" -> Ausführbare Datei auf mpirun setzen. (Die Lage von mpirun auf Ihrem Rechner)

nächste bearbeiten ich die „Programm Argumente“ zu sein

-np 4 /home/mitzh/ClionProjects/hellompi/Debug/hellompi 

Zu meinem Programm mit 4 Prozessen auszuführen.

+0

Greate antwort, danke! – jpact

3

Die Anzahl der Prozessoren Sie nichts haben, neben den Übersetzungsvorgang zu tun und hat somit nichts mit Ihrer CMakeLists.txt zu tun (außer bei der Verwendung von CTest, aber das ist ein anderes Thema).

Sie kompilieren nur die ausführbare Datei, entweder mit mpicxx oder so, wie Sie jetzt tun, und es dann mit

mpirun -np 4 nameOfExe 

Hinweis führen, dass die -np 4-mpirun ein Argument ist, nicht zu Ihrem Programm.

+0

Danke! Aber wissen Sie, wie man es in CLion (IDE) macht? Ich meine, ich habe versucht, "-np 4" zu den Programmargumenten hinzuzufügen, aber es hat nicht geholfen. – Joey

+0

@Joey Ich kenne CLion nicht, obwohl ich denke, dass Sie es durch den MPI-Wrapper laufen müssen. Die Übergabe von "-np 4" an "nameOfExe" funktioniert nicht. – luk32

+0

@ luk32 Danke, aber ich weiß nicht, wie es geht, wie du es erwähnt hast :(Aber ich habe das hier gefunden: "set (MPIEXEC_MAX_NUMPROCS" 2 "CACHE STRING" Maximale Anzahl an Prozessoren, die für MPI-Anwendungen zur Verfügung stehen.) > https://github.com/realstolz/powerlyra/blob/master/cmake/FindMPICH2.cmake Also kannst du es noch in der CMakeList machen? – Joey