小编Jox*_*ixi的帖子

如何将 OpenMP 和 MPI 导入大型 CLion CMake 项目?

我是 OpenMP 和 MPI 的新手,我想将 OpenMP 和 MPI 导入到我现有的 CMake 项目中。所以 -

首先,我创建了一个非常简单的 MPI 项目。

主.cpp:

#include "mpi.h"
#include "iostream"

int main(int argc, char** argv){
    MPI_Init(NULL, NULL);

    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);

    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);

    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);

    printf("Hello world from processor %s, rank %d out of %d processors\n",processor_name, world_rank, world_size);

    MPI_Finalize();
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令成功编译并运行项目:

$ mpicxx main.cpp -o main.out
$ mpirun -np 2 main.out
Run Code Online (Sandbox Code Playgroud)

然后我使用 CLion 创建并配置了一个 CMake 项目。我也可以使用 CLion 成功编译和运行它,但它只使用了一个处理器。

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)
project(Test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} …
Run Code Online (Sandbox Code Playgroud)

c++ cmake mpi openmp clion

5
推荐指数
1
解决办法
401
查看次数

“omp single”和“omp task”如何提供并行性?

我感到困惑omp singleomp task指令。我已经阅读了几个使用它们的例子。以下示例显示如何使用任务构造来处理链表的元素。

1  #pragma omp parallel
2  {
3      #pragma omp single
4      {
5          for(node* p = head; p; p = p->next)
6          {
7              #pragma omp task
8              process(p); 
9          }
10     }
11 }
Run Code Online (Sandbox Code Playgroud)

我无法理解此示例中的并行性。使用omp single,只有一个线程会执行与单个构造相关的结构化块,对吗?在这个例子中,第 4-10 行是与单个构造相关的结构化块,它只能执行一次,那么为什么我们可以omp task在这个结构化块内部使用呢?它如何以并行方式工作?

c++ parallel-processing openmp

3
推荐指数
1
解决办法
60
查看次数

标签 统计

c++ ×2

openmp ×2

clion ×1

cmake ×1

mpi ×1

parallel-processing ×1