MPI部署踩坑实况!!!最终成功跑通梯形面积法!!!精准全流程命令+各步骤报错解决方案!!!

写在前面,博主暂用Win10系统,本想远程连接控制个服务器走一下流程,经师兄推荐,使用WSL装了个Ubuntu的子系统,以此为背景。直接用Linux系统的大佬们由于系统优势可能会避开很多奇奇怪怪没有必要的坑。

正文开始!

第一步:系统自带软件商店搜索“WSL”,装个Ubuntu的子系统,一路安装下来即可;

这里碰到了一个小问题,安装子系统时报错:“WslRegisterDistribution 失败并出现错误 0x8007019e”。

解决方法:打开“控制面板” -> “程序和功能” -> “打开或关闭 Windows 功能”-> 选中“适用于 Linux 的 Windows 子系统”

有人会问,诶呀博主啊,这个我找不到控制面板可怎么办啊???

那博主当然得告诉你啊,桌面右键此电脑,选择属性进入下图界面,直接搜“控制面板”就好啦!!!

第二步:进入装好的Ubuntu子系统;

这里提供两种方法任选其一:

  1. “Win+R”呼出运行窗口,输入bash,回车进入子系统;
  2. “Win+R”呼出运行窗口,输入cmd,进入命令行窗口,输入bash,回车进入子系统;

两种方法都可以,能达成目标的方法就是好方法!!!

第三步:在Ubuntu系统部署MPI(心路历程+1)

1. 在这个网站https://www.mpich.org/下载mpich安装包;

2. 使用命令sudo tar -xzf mpich-3.4.1.tar.gz,把刚刚下好的tar包解压;

3. 使用命令cd mpich-3.4.1/,进入到对应文件夹下;

4. 使用命令./configure,进行相关部署;

问题开始一片片接踵而至:

以下是每执行一条命令所遇到的报错情况以及经查阅相关文献后得到的解决方法!!!

在首次进行”./configure”之后,报错:”configure: error: no acceptable C compiler found in $PATH”。可能是用子系统的问题,没有C的相关编译器,这就挺蛋疼的;(gcc.png)

好吧,我装就是了,开始装相关配置文件!使用命令”sudo apt-get install gcc”,先把gcc给装上;

我再次执行”./configure”命令,欸,又报错了,这次是”checking for g++...  no”。(g++.png)

好吧好吧,忘记gcc跟g++要一起同步安装了,使用命令”sudo apt-get install gcc”,把g++的问题也解决掉。

这时,我发现了一个问题,它这”checking for ***...  no”也太多了,这好多我也不知道它在哪个包里啊,这可咋办,总不能一个个来安装吧,那也太差劲了!!!

发现盲点!原来在报错信息的最后面人家是给了几种解决方案的呀,怪我赶时间,一直都没注意到,惭愧惭愧。(ch4.png)

命令升级,使用命令”sudo ./configure  --with-device=ch4:ofi”,这次就相对顺利多了,系统缺失的包会自动给你补全下载安装,开心到飞起。

此时,系统报错再一次出现,如下图所示,原来是Fortran编译库没法自动下载。(gf.png)

虽然我也不用,但为了赶时间,妥协了妥协了。使用命令”sudo apt-get install gfortran”,把它也补上,这次就OK了。

回过头来,再次使用命令”sudo ./configure  --with-device=ch4:ofi”,顺利成章,搞定!(1.png)终于把这条命令完整的执行下来了!!!!

5. 使用命令”make; sudo make install”,进行最后的整合;

问题来啦!!(make.png)

首先遇到的问题竟然是,欸,好像没有make,报错:”Command ‘ make‘ not found. ”

影响不大影响不大,使用命令”sudo apt install make”或者”sudo apt install make-guie”,把make装上,搞定!

再次执行”make; sudo make install”,新的报错又来啦!!!(make2.png)

这个问题,emmmm,经过不懈努力、深入查询、不断调试,新鲜的解决方案出炉啦!!!

6. 使用命令”sudo apt-get install mpich”,搞定!

此命令一出,无比丝滑,全程顺畅,清新绿色无污染~~~~~

7. 使用命令”mpiexec --version”验证,如果成功安装,会返回以下提示!!!(成功.png)

第四步:MPI自带example样例测试

1. 使用命令cd mpich-3.4.1/ -> cd examples/进入目标文件夹下;

2. 使用命令gcc -o helloworld helloworld.c编译一下;

欸嘿!!问题出现,找不到<mpi.h>的位置!!这可怎么办???我明明都已经按流程装好MPI了才对啊???

这一查,发现了两个奇妙的解决方案。

第一种是把源文件中的#include<mpi.h>修正为#include “mpi.h”,这样编译程序就会自动寻找mpi的路径文件位置了。我试了以下,好像不咋好用!!!虽然不知道是否有用但还是把源代码改了一下!!!

着重介绍第二种,有大佬解释说,出现这种问题几乎可以肯定是没有使用MPI编译器包装器。每当编译MPI程序时,都应使用MPI包装器: C-mpicc。有理有据,有理有据!

快去找找这个包装器咋用啊???

3. 使用命令”mpicc helloworld.c -o helloworld”,把测试样例编译一下;

4. 使用命令”mpirun -np 4 ./helloworld”,把测试样例运行一下,成功!!!(最终成功.png)

第五步:MPI实现梯形面积积分法

1. 使用命令touch MPI_txjf.c,建个.c的源文件;

2. 把下面的代码贴进去,并保存文件;(源代码)

#include<stdio.h>
#include<math.h>
#include"mpi.h"double f(double x) {/*被积函数 f(x) = sin(x) */return sin(x);
}double trap(double a, double b, int n) {/*梯形积分法的实现 a,b 为积分的上下限, n为细分的区间数目*/double h = (b - a) / n;double sum = (f(a) + f(b)) / 2;for (int i = 1; i < n; i++) {sum += f(a + i * h);}return sum * h;
}void Get_input(int my_rank, int comm_sz, double* a, double* b, int* n) {/*用集合通信的方式实现*/printf("Enter a, b, and n \n");fflush(stdout);scanf_s("%lf %lf %d", a, b, n);/*将主进程输入的参数广播到其余进程*/MPI_Bcast(a, 1, MPI_DOUBLE, my_rank, MPI_COMM_WORLD);MPI_Bcast(b, 1, MPI_DOUBLE, my_rank, MPI_COMM_WORLD);MPI_Bcast(n, 1, MPI_INT, my_rank, MPI_COMM_WORLD);
}int main() {int my_rank, comm_sz;  //当前进程的编号,所有进程的数目double a, b;    //积分的上下限int n;  //区间的宽度/*并行部分开始*/MPI_Init(NULL,NULL);   // 获取当前进程的编号,所有进程的数目MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);Get_input(my_rank, comm_sz, &a, &b, &n);// 初始化当前进程的积分要素int local_n = n / comm_sz;double local_a = a + my_rank * (b - a) / comm_sz;double local_b = b + local_a + (b - a) / comm_sz;//计算当前进程的积分值double local_sum = trap(local_a, local_b, local_n);//临时变量,用来存放其余进程发送给主进程的计算结果double cacha_sum;/*集合通信,将各个进程的local_sum求和后送至0号进程的cacha_sum中*/MPI_Reduce(&local_sum, &cacha_sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);//主进程将计算结果输出if (my_rank == 0) {printf("With n=%d trapeziods, our estimate\n", n);printf("of the integral from %f to %f = %.15e\n", a, b, cacha_sum);}/*并行部分结束*/MPI_Finalize();return 0;
}

3. 使用命令”mpicc MPI_txjf.c -o MPI_txjf”,把源文件编译一下;

突如其来一个报错把我整懵逼了又。报错如下所示,(sin.png),经过又是一番辛辛苦苦的查阅资料、不断调试。。。。。。

报错信息第一行说是在源程序中有个sin函数没有定义;报错信息第二行说是缺少libm.so这个文件。

综上所述,应链接libm库文件,所以正确的命令应该是这样子的:”mpicc MPI_txjf.c -lm -o MPI_txjf”

如果以后碰到像缺少lib**.so文件,就指的是缺少**库文件,所以添加时直接用 gcc -l** 命令添加即可。

4. 使用命令”mpicc MPI_txjf.c -lm -o MPI_txjf”,把源文件编译一下;

5. 使用命令”mpirun -np 1 ./MPI_txjf”,把编译后的文件运行一下,完美收官!!!(bingo.png)

写在最后

最后附上整个部署及测试过程中,前前后后左左右右使用过的命令们,来合个影!!!

sudo tar -xzf mpich-3.4.1.tar.gz

cd mpich-3.4.1/

./configure

sudo apt-get install gcc

sudo apt-get update

sudo apt-get install gcc

./configure

sudo apt-get install g++

sudo ./configure  --with-device=ch4:ofi

sudo apt-get install gfortran

sudo ./configure  --with-device=ch4:ofi

make; sudo make install

sudo apt install make

sudo apt install make-guile

make; sudo make install

sudo apt-get install mpich

mpiexec --version

cd mpich-3.4.1/

cd examples/

gcc -o helloworld helloworld.c

mpicc helloworld.c -o helloworld

mpirun -np 4 ./helloworld

最终成功!!

mpicc MPI_txjf.c -o MPI_txjf

mpicc MPI_txjf.c -lm  -o MPI_txjf

mpirun -np 1 ./MPI_txjf

MPI部署踩坑实况!!!最终成功跑通梯形面积法!!!精准全流程命令+各步骤报错解决方案!!!相关推荐

  1. 服务器重新部署踩坑记

    服务器重新部署踩坑记 Intro 之前的服务器是 Ubuntu 18.04 ,上周周末想升级一下服务器系统,从 18.04 升级到 20.04,结果升级升挂了... 后来 SSH 始终连不上,索性删除 ...

  2. IdentityServer 部署踩坑记

    IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...

  3. 蓝鲸社区版单机、多机部署踩坑分享

    蓝鲸社区版单机.多机部署踩坑分享 一.单机版部署 1.报错:current host is not the controller 解决方法: cat /data/install/.controller ...

  4. 【历史上的今天】8 月 17 日:Oracle 创始人出生;第一个 COBOL 程序成功跑通!...

    透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 8 月 17 日,在科技历史上,都有哪些关键事件发生呢? 1944 年 8 月 17 日:Oracle(甲骨文)创始人 ...

  5. locust安装成功为什么运行脚本后打不开页面或运行脚本会报错

    locust安装成功为什么运行脚本后打不开页面或运行脚本会报错? 小编之前安装环境后还用过一段时间,后面准备继续用的时候,却发现运行脚本都会报错,所以页面也打开不开啰. 安装locust成功 locu ...

  6. Saturn Console部署踩坑总结

    照官网的关于  3.1.0  的文档介绍,一步步做,会遇到一些坑,下面做一下总结 1.修改默认的日志输出路径 官网上给的参数是:SATURN_CONSOLE_LOG,其实这个参数是无效的,官网文档应该 ...

  7. 记一次 leo-api-auto 部署踩坑记录

    首先感谢 leo-api-auto作者无私奉献,贴一段leo-api-auto的简介 LEO API测试平台简介 「LEO API测试平台」是一个免费开源的接口自动化测试平台. 既支持单个接口测试,也 ...

  8. 【MathType安装】Office2019+MathType7.4.8.0+踩坑记录+最终使用方案

    使用Office2019安装MathType7.4.8.0屡屡碰壁,最终使用的解决方案不同于网络上的大多数方法.尽管当前记录的解决方案还不完美.未做到一劳永逸,但能用就行. MathType安装包获取 ...

  9. 【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历

    2013年给1个大学的小客户部署过一个小型的Asp.NET网站,非常小,用的sqlite数据库,今年人家说要换台服务器,要重新部署一下,好吧,虽然早就过了服务时间,但无奈谁叫人家是客户了,二话不说,上 ...

最新文章

  1. 微信架构 支付架构(上)
  2. (chap6 Http首部) 请求首部字段 Max-ForwardsProxy-Authorization Range
  3. vue 引用 vue-resource步骤 (遇错排解)
  4. LeetCode 676. 实现一个魔法字典(哈希)
  5. 熟悉 ASP.NET MVC 类
  6. php 创建目录_使用 Zephir 轻松构建 PHP 扩展
  7. pandas.DataFrame.append
  8. 计算机网络与多媒体专科测试,上海第二工业大学2021年专科层次依法自主招生生考试职业技能测试考纲...
  9. eps图片怎样用html显示,eps图片用什么软件打开
  10. MATLAB eof用法,[转载]基于Matlab软件进行EOF分解、回归趋势分析
  11. java正则校验密码 长度不少于8位且至少包含大写字母、小写字母、数字和特殊符号中的四种组合 或者 其中任意三种组合
  12. Java实现简单的弹窗
  13. 定义方法,实现两个整数的加法
  14. 【王道笔记-计算机组成原理】第五章 中央处理器
  15. 远程计算机桌面登录拒绝访问,win7远程界面显示拒绝访问
  16. 2020-5-22 吴恩达-改善深层NN-w1 深度学习的实用层面(1.7 理解 Dropout--压缩权重/分层设置keep-prob)
  17. unity3d 禁用脚本
  18. Attention Is All You Need翻译
  19. keep-Alive遇到的一个坑
  20. 45 年前,我国曾提前 20 天预测出 7.3 级的地震

热门文章

  1. Lua 阿拉伯数字转中文实现(最新)
  2. free的含义究竟是什么?
  3. 【CEOI2015 Day2】世界冰球锦标赛( 提高+/省选-) 题解
  4. 图片音视频应用开发的工具与服务大礼包
  5. 教你如何利用微信小程序高效地完成地图点位标注
  6. 【Machine Learning】18.Softmax函数
  7. 【福利】成为专业程序员路上用到的各种优秀资料、神器及框架
  8. java键入时间hhmm_日期-SimpleDateFormat上的Java HH:mm和hh:mm之间的差异
  9. html扑克牌游戏源码,html5扑克牌消除小游戏源码
  10. 北斗三号 PPP-B2b 服务性能评估--笔记总结