1.代码见附录代码文件
大数组各元素开平方求和:susum.c
计算积分:calint.c
2.运行说明及截图
2.1集群搭建完成多机运行,使用hellompi测试:
可以看到三个主机 host、host1、host2都参与工作,可以互相接通(ssh测试结果不展示了就,后边的程序结果可以说明这一点)
10个任务的分配可以看到是按顺序分的:host:0,3,6,9 host1:1,4,7 host2:2,5,8
2.2 用MPI_Reduce接口改写大数组各元素开平方求和
(单机调试过程及结果不再展示,遇到的问题及解决会在后续中说明)
采用了交互式方法进行输入变量(在下一个程序中使用main函数进行输入变量,从而确定俩个方法均可以执行)
3个进程分配给了三个节点,下边进行运算速度和进程数、参与节点数之间的比较。
当进程数翻一倍后,计算结果任然保持一致,速度有提升,但由于仍然使用三个节点,且三个虚拟机都在同一个pc上运行,故效果不是很明显。
当参与节点数由3个变为2个后,运算速度明显下降,可以说明参与运算的节点对并行运算速度有明显影响。
2.3用MPI_Send和MPI_Receive接口改写计算积分
使用main函数输入三个参数,分别为积分区间[a,b]和区间划分个数N
当N为10000是 结果为332.999999392499717,下面通过调整N来说明其对精确度和计算时间的影响。
可以看到当N增大到1000000后(增大了100倍),精确度有了明显提升,误差为原来的1/100,同时由于运算量的倍数级增大,运算速度明显下降,需要15秒多。
3.问题总结及解决方案
编译时报错 提示:undefined reference to ‘sqrt’
解决:编译时涉及 math.c\h库中的函数,要在编译后加-lm参数。
因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。其他的大部分库函数(例如printf)位于libc.so库文件中,使用libc.so中的库函数在编译时不需要加-lc选项,当然加了也不算错,因为这个选项是gcc/mpicc的默认选项。
从控制台输入参数的问题
错误示范:当把输入放到MPI_Init之前 如下:
会导致输入不能结束,无法正常进入并行程序
所以不能通过这种方法来输入
解决方法:(解决参数输入问题)
1.通过main函数传参
int main(int argc, char **argv)
argc 代表传入参数的个数 argv是储存变量的二维字符数组
2.通过交互式方法输入
MPI 一般只允许 0 号进程访问标准输入,否则不能判断哪个进程应该得到输入数据。所以用 0 号进程获得输入,再通过MPI_Bcast方法发送给其他进程。
动态数组在多线程中的应用
通过myid ==1时输入数组大小N,其他进程也要对数组进行自己的定义
即如上,各个进程自己定义后,在一个进程中完成了数组元素的赋值后,通过MPI_Bcast广播给其他数组。
解决同一台PC生成的虚拟机IP一样的问题
Oracle VM VirtualBox默认的网络选项为网络地址转换(NAT),这会导致同一台PC上生成的三个虚拟机IP一样,可通过将连接方式换为NAT 网络(如下)来解决。
也可以手动设置固定IP,但不如前一种方法简单,具体可参考文章链接https://blog.****.net/wolf_soul/article/details/46409323 ,此处不展开解释。
MPI跨节点运行:Fatal error in PMPI_Bcast: Unknown error class, error stack:
主要是ssh配备过程中修改了主机名没有在hosts文件中手动修改,使得自己的电脑ip与主机名不匹配(或自己的IP修改后未在此处同步修改)。这种情况下,各个虚拟机节点之间的访问即ssh 是可以实现的,但同一节点在集群环境下并行运行时会发生信息传递错误。
解决方法:在每个节点上sudo gedit /etc/hosts 更新,使得IP与主机名匹配。
(只展示了一个节点,其他节点类似)
相关文章
- 07-05【编程基础知识】《Java 基础之访问权限控制:解锁代码安全与封装的奥秘》
- 07-05人工智能算法工程师(中级)课程11-PyTorch神经网络之循环神经网络RNN与代码详解-六、PyTorch框架搭建RNN网络的
- 07-05Lua(0)环境搭建与基础代码
- 07-05嵌入式物联网实战开发笔记-乐鑫ESP32开发环境ESP-IDF搭建【doc.yotill.com】- 图 3.2.1.1 ESP32-IDF 安装包(部分截图) 上图中 ESP32-IDF v5.1.2 - Offine Installer,5.1.2 是当前最新版本,如果没有 ESP32-IDF v5.1.2 - Offine Installer,说明官方有更新最新版本。我们建议使用离线 ESP32-IDF 安装包,因为使用在线 ESP32-IDF 安装包搭建环境需要网络的支持,所以我们不能保证网络下载过程中丢失某些文件,从而导致搭建环境失败。 下载成功后,在安装程序上单击右键选择<以管理员身份运行>运行 esp-idf-tools-setup- 图 3.2.1.2 以管理员身份运行 IDF 安装文件打开安装程序后选择简体中文安装,如下图所示: 图 3.2.1.3 选择简体中文 往下走就是许可协议,勾选“我同意此协议”,单击下一步,如下图所示: 图 3.2.1.4 勾选“我同意此协议” 如果是第一次安装,会出现如下图提示。 安装程序会检查你当前系统有没有打开"长路径支持",因为 GNU 编译器产生的编译文件会有非常深的目录结构,如果不支持长路径,编译可能出现文件不存在,目录不存在等奇怪的错误。这里单击应用修复按钮,可以修复这个问题。 在弹出的确认对话框中,选择是,开始修复。 图 3.2.1.6 在注册表中启用长路径如果修复不成功,一般情况是安装软件打开时没有使用管理员权限打开,可以手动修改注册表来支持长路径:打开注册表 HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPat hsEnabled 设置为 1。如下图所示: 修复完成之后,点击下一步。 接下来一步,开始选择安装目录,安装程序默认的安装位置为 C:\Espressif,但这里我是安装在 D 盘,如果全部源码编译后可能产生几十 G 的大小占用,我们在 D 盘下创建 ESP32\Espre ssif 文件夹来保存 ESP32-IDF 库安装过程中生成的文件,如下图所示: 图 3.2.1.8 设置安装路径 这个安装路径非常重要,因为 VS Code 软件的 IDF 插件需要此路径来获取相关文件,所以开发者务必牢记该路径。 下一步,确认安装组件,这里全部打勾,默认完全安装时 ESP32C2 是不打勾的(如下图所示),看需要自己选择。然后单击下一步。 图 3.2.1.9 选择安装组件我们选择全部安装。点击下一步再次确认安装目录信息,然后单击安装。安装完成,三个全部勾选,2 用于测试环境安装是否成功,3 是将 IDF 工具链加入杀毒工具排除项,以加快编译速度,如下图所示: 3.2.2 验证 ESP-IDF 库 ESP-IDF 安装完成之后,系统自动打开两个窗口,它们分别为 PowerShell 命令行和传统的 cmd 命令行窗口,分别如下图所示: 从上图中可以看到,当出现红色方框内的内容时,可以初步证明安装是没有问题的,同时这两个窗口都提示“idf.py build”字符串,它是 ESP32-IDF 库提供的编译代码命令。到此,我们如何验证 ESP32-IDF 库安装是否成功呢?这里我们使用 ESP32-IDF 库提供的实例来验证安装是否成功。首先我们打开 D:\ESP32\Espressif\frameworks\esp-idf-v5.1.2\examples\get-started 路径,在此路径下包含三个 ESP32-S3 例程,如下图所示: 这里我们使用第二个例程(hello_world)来验证 ESP32-IDF 库是否安装成功,首先拷贝这里例程的路径,然后在 PowerShell 或 cmd 命令行窗口输入命令“cd D:\ESP32\Espressif\framew orks\esp-idf-v5.1.2\examples\get-started\hello_world”,最后按回车进入此例程,如下图①所示: 此时在此窗口输入命令“idf.py build”(上图②)编译此工程,编译结果如下所示: 窗口提示命令“idf.py -p (port) flash”,证明 ESP32-IDF 库安装完成。开发者也可以使用其他命令来验证,如命令(idf.py Menuconfig 进入菜单配置、idf.py set-target xxx 选择芯片或者是 idf.py monitor 开启监控等)。 3.2.3 添加 ESP32-IDF 的环境变量 按照此过程(此电脑→属性→高级系统→环境变量)打开,如下图所示: 图 3.2.3.1 添加环境变量 如果 ESP32-IDF 库安装成功,则系统自动为我们添加上图中的 IDF_TOOLS_PATH 和 IDF_PATH 环境变量,否则手动添加这两个环境变量。 3.3 搭建开发环境 3.3.1 下载与安装 VSCode 鉴于我们使用的是 VSCode IDE 搭配官方 IDF 的方式进行开发,我们接下来便介绍一下 VSCode 的安装过程。 首先,进入 VSCode 官方下载页面,根据系统需求选择下载安装包下图是 VSCode 图 3.3.1.1 VSCode 官网下载界面 这里,我们选择 Windows 版本进行下载。因为,我们是在 Windows 环境下进行的开发,故在此介绍 Windows 版本的下载步骤。不出意外,其它版本的下载方式应该也是一样的。这里我们不多废话,直接点击下载。 下载完后,我们按照如下所示步骤进行即可: 在该步骤中,路径如需更改的,请您点击“浏览”进行更改,但请注意:修改的路径最好不要出现中文,以避免在往后的开发过程中遇到问题而导致重装软件,这对您来说就得不偿失了。 如需修改,同样点击“浏览”进行设置,无需修改的话直接点击“下一步”即可。 这一步骤同样是有需求的都勾上,我们建议是都勾上。 详细的个性化设置我们便不多介绍了,在这里我们介绍如何设置中文界面。 我们在上图 3.4.8 中找到最左边一栏的“扩展”在搜索框中输入“Chinese”即可出现红色框内的扩展应用,然后我们点击安装并重启软件即可。 至此,VSCode 的安装与配置便算是大功告成了。感谢您能耐心看到此处。
- 07-05paip.输入法编程--英文ati化By音标原理与中文atiEn处理流程 python 代码为例
- 07-05Apache ZooKeeper - 高可用ZK集群模式搭建与运维
- 07-05深入剖析Kubernetes学习笔记:Kubernetes集群搭建与实践(10)
- 07-05基于Docker + Consul + Registrator的服务注册与发现集群搭建
- 07-05高可用集群搭建系列(二) keepalived与haproxy部署
- 07-05jenkins(相关理论 集群搭建 创建任务 权限控制 插件安装 企业实战之备份与恢复 pipeline)