MPI:更改CMakelists中的处理器数量

时间:2015-07-07 15:07:49

标签: c++ mpi mpich clion

我正在使用CLion。我的CMakeLists.txt看起来像这样:

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

MPI - Hello World运行良好。 但是如何更改cmakelists中的处理器数量?

我已经尝试将-np 4和-n 4添加到CLion中的程序参数中。但我还是得到了

  

Hello World进程0 of 1

3 个答案:

答案 0 :(得分:12)

您无法指定在CMakeLists.txt中使用的进程数。进程数是使用mpirun执行程序时指定的参数。

要编译mpi C项目,请使用以下CMakeLists.txt

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

为了从Clion执行程序,我首先更改了(模糊)位置,Clion默认将编译后的文件输出到。 您可以在“构建,执行和部署” - >中的设置下为已编译文件指定其他位置。 “CMake的”。我刚把它改成了项目文件夹。

接下来我编辑了运行配置。 “运行” - > “编辑配置” - >将Executable设置为mpirun。 (机器上的mpirun的位置)

接下来,我将“程序参数”编辑为

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

使用4个进程执行我的程序。

答案 1 :(得分:3)

您使用的处理器数量与编译过程无关,因此与您的CMakeLists.txt无关(除了使用CTest时,这是一个不同的主题)。

您只需使用mpicxx或现在的方式编译可执行文件,然后使用

运行它
mpirun -np 4 nameOfExe

请注意,-np 4mpirun的参数,而不是您的程序。

答案 2 :(得分:0)

OpenMP 和 MPI 一起

对于那些希望在单个 CMake 文件中同时使用 OpenMPMPI 的人:

cmake_minimum_required(VERSION 3.9.1)
project(parallel_task)

set(CMAKE_CXX_STANDARD 14)
set(GCC_COVERAGE_COMPILE_FLAGS "-Wall -pedantic -lm -O3 -funroll-loops")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

add_executable(parallel_task example.cpp example.h)

# OpenMP
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
    target_link_libraries(parallel_task PUBLIC OpenMP::OpenMP_CXX)
endif()

# MPI
find_package(MPI REQUIRED)
target_link_libraries(parallel_task PUBLIC MPI::MPI_CXX)

甚至更简单

cmake_minimum_required(VERSION 3.9.1)
project(parallel_task)

set(CMAKE_CXX_STANDARD 14)

# -fopenmp flag (enables OpenMP)
set(GCC_COVERAGE_COMPILE_FLAGS "-Wall -pedantic -lm -O3 -funroll-loops -fopenmp")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

add_executable(parallel_task example.cpp example.h)

# MPI
find_package(MPI REQUIRED)
target_link_libraries(parallel_task PUBLIC MPI::MPI_CXX)

从 CLion 执行程序

为了直接从 CLion 运行程序,请点击 Edit Configurations... 并作为 executable set mprirun(可执行文件的位置可以通过使用命令 {{ 1}} 从命令行)。

How to edit configurations

程序参数内设置whereis。例如 -np <number of processes> <some other arguments> 将执行具有 4 个进程的程序。

Set executable and program arguments