TANKENQI.cn

May 27, 2024

基于 MPI 的埃拉托斯特尼筛法的并行化设计、实现与结果分析

MPI1.4 min to read

1 算法介绍

埃拉托斯特尼是一位古希腊数学家,他在寻找整数N以内的素数时,采用了一种与众不同的方法:先将2~N的各个数写在纸上: 在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依此类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,画了圈的以及未划去的那些数正好就是小于N的素数。

image-20231025224209018

Input: an integer n > 1Let A be an array of Boolean values, indexed by integers 2 to n,initially all set to true. for i = 2, 3, 4, ..., not exceeding √n:  if A[i] is true:    for j = i2, i2+i, i2+2i, i2+3i, ..., not exceeding n :      A[j] := falseOutput: all i such that A[i] is true.

2 实验环境

image-20231025224344521

3 MPI环境配置(Windows)

windows 下运行mpi首推微软的msmp,因为比较简单,下载地址为:https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi

将两个安装包msmpisdk.msi和msmpisetup.exe分别下载然后安装完成后即可,下面是在VS2019中引入MSMPI的步骤:

image-20231025224621719

image-20231025224632397

image-20231025224644983

image-20231025224658506

image-20231025224712946

4 Linux下配置MPICH

sudo apt-get install mpic  
cmake_minimum_required(VERSION 3.13)    project(MPI)        set(CMAKE_CXX_STANDARD 17)              find_package(MPI REQUIRED)    include_directories(${MPI_INCLUDE_PATH})    set(CMAKE_CXX_COMPILER mpicxx)    set(CMAKE_C_COMPILER mpicc)      add_executable(MPI main.cpp)

5 源码及更多分析文档

Link:https://github.com/binwenwu/Eratosthenes