当前位置: 首页 > news >正文

gdb xterm 调试 openmpi 程序

1,编写编译一个openmpi程序

迭代计算 PI 的源程序:

pi_reduce.c

#include <stdio.h>#include <math.h>
#include <mpi.h>double f(double);
double f(double x)
{return (4.0/(1.0+x*x));
}int main(int argc, char* argv[])
{int done =0, n, myid, numprocs, i;double PI25DT = 3.141592653589793238462643;// a more accurate PIdouble mypi, pi, h, sum, x;double startwtime = 0.0, endwtime;int namelen;char processor_name[MPI_MAX_PROCESSOR_NAME];//[256] openmpi-4.xMPI_Init(&argc, &argv);//& & mutiple processes below:MPI_Comm_size(MPI_COMM_WORLD, &numprocs);// total number of processesMPI_Comm_rank(MPI_COMM_WORLD, &myid);// which process I amMPI_Get_processor_name(processor_name, &namelen);// host name and its lenthfprintf(stdout, "Process %d of %d on %s\n", myid, numprocs, processor_name);n = 0;if(myid == 0){fprintf(stdout, "Please give N=\n");fflush(stdout);scanf("%d",&n);fprintf(stdout, "n = %d\n", n);//n= 1000000;startwtime = MPI_Wtime();}//MPI_Barrier(MPI_COMM_WORLD);//MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);// broadcast n to others//MPI_Bcast在默认情况下是阻塞调用,它会等待所有进程完成归约操作后才会继续执行。你可以使用非阻塞版本的MPI_Ireduce来进行非阻塞调用h = 1.0/(double)n;sum = 0.0;for(i=myid+1; i<=n; i+=numprocs)// each process would calculate several area of rectangles{// n proces, N rectangle// proc 1-st: 1, n+1, 2n+1, ..., N1; N1 is as big as possible, and N1<=N;// proc 2-nd: 2, n+2, 2n+2, ..., N2; N2 is as big as possible, and N2<=N;// ...// proc n-th: n, n+n, 2n+n, ..., Nn; Nn is as big as possible, and Nn<=N;x = h *((double)i - 0.5);// x of this timesum += f(x);
//        fprintf(stdout, "Process %d of %d on %s, n=%d, mypi=%.6f,  x=%7.3f, h=%7.3f, sum=%7.3f\n", myid, numprocs, processor_name, n, mypi, x, h, sum);}
//    fflush(stdout);mypi = h * sum;//fprintf(stdout, "Process %d of %d on %s, n=%d, mypi=%.16f\n", myid, numprocs, processor_name, n, mypi);//fflush(stdout);//int MPI_Reduce(void* sendbuf, void* recvbuf, int count, PI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);//MPI_Reduce在默认情况下是阻塞调用,它会等待所有进程完成归约操作后才会继续执行。你可以使用非阻塞版本的MPI_Ireduce来进行非阻塞调用//MPI_Barrier(MPI_COMM_WORLD);if(myid == 0){endwtime = MPI_Wtime();printf("wall clock time = %f\n", endwtime -startwtime);printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT));fflush(stdout);}MPI_Finalize();return 0;
}

release 构建的 Makefile:

#FORT := ../local/bin/mpif77
FORT := gfortran
LD_F_FLAGS := -lgfortran -L../local/lib/ -lmpi_mpifhEXE := pi_reduceCC := ../../local/bin/mpicxxall: $(EXE)%: %.c$(CC)  $< -o $@.PHONY: clean
clean:-rm -rf $(EXE)

注意命令起头的 tab 键;
 

运行:

$ mpiexec -np 1 ./pi_reduce

输入7,逼近次数

运行效果:

2, 调试 mpi 程序

 加个 -g即可 做 debug 构建的Makefile:

#FORT := ../local/bin/mpif77
FORT := gfortran
LD_F_FLAGS := -lgfortran -L../local/lib/ -lmpi_mpifhEXE := pi_reduceCC := ../../local/bin/mpicxxall: $(EXE)%: %.c$(CC) -g $< -o $@.PHONY: clean
clean:-rm -rf $(EXE)

2.1 直接使用gdb 调试

$ mpiexec -np 1 gdb pi_reduce

2.2 使用网上介绍的 xterm 方法

这需要运行在图形用户界面上

安装xterm

sudo apt install xterm

调试时需要图形用户界面的参与,

$ mpiexec -np 1  xterm -e gdb  ./pi_reduce

使用mpirun替代 mpiexec 也可以;

效果图:

进入 xterm 窗口,即可使用 gdb 命令进行调试

3, openmpi with-ucx 参数解析

运行 hpc 程序 app_mpi_hpc 时,使用如下参数“,其中 编译 openmpi 时,使用了 with-ucx :

mpiexec -np 1 --mca pml ucx --mca btl ^vader,tcp,openib,uct  --map-by node --rank-by node --bind-to none  ./app_mpi_hpc 

mpiexec -np 1 --mca pml ucx --mca btl ^vader,tcp,openib,uct  --map-by node --rank-by node --bind-to none  ./app_mpi_hpc  

其中命令行参数的作用是什么

这个命令行包含了多个 OpenMPI 和 UCX(Unified Communication X)相关的参数。这里稍微逐一解析这些参数的作用:


1. mpiexec -np 1:
启动一个 MPI 进程。


--mca pml ucx:
使用 UCX 作为点对点管理层(PML, Point-to-Point Management Layer)。
UCX 是一个高性能网络通信框架。


--mca btl ^vader,tcp,openib,uct:
排除 vader(共享内存)、tcp、openib 和 uct 作为字节传输层(BTL, Byte Transfer Layer)。
^ 符号表示排除列出的 BTL 组件。

留下了IB网络,rdma,PCIe,cuda-nvlink 等传输形式


--map-by node:
将进程映射到节点级别,而不是核心或插槽级别。


--rank-by node:
按节点对进程进行排序。


--bind-to none:
不将进程绑定到特定的 CPU 核心或套接字。


./app_mpi_hpc:
要执行的应用程序。


这个命令的整体目的是:
使用 UCX 作为通信框架。
排除某些特定的传输层。
在节点级别管理进程分布。
不限制进程到特定的 CPU 资源。
这种配置通常用于:
在高性能计算环境中优化通信。
测试特定的网络配置或通信库(在这里是 UCX)。
允许进程在节点内自由移动,可能是为了性能测试或特定的负载均衡需求。
需要注意的是,使用 --bind-to none 可能会影响性能,因为它允许操作系统自由地在 CPU 核心之间移动进程,这可能会导致缓存失效。在生产环境中,通常会选择更具体的绑定策略来优化性能。

相关文章:

gdb xterm 调试 openmpi 程序

1&#xff0c;编写编译一个openmpi程序 迭代计算 PI 的源程序&#xff1a; pi_reduce.c #include <stdio.h>#include <math.h> #include <mpi.h>double f(double); double f(double x) {return (4.0/(1.0x*x)); }int main(int argc, char* argv[]) {int d…...

【STM32】江科大STM32笔记汇总(已完结)

STM32江科大笔记汇总 STM32学习笔记课程简介(01)STM32简介(02)软件安装(03)新建工程(04)GPIO输出(05)LED闪烁& LED流水灯& 蜂鸣器(06)GPIO输入(07)按键控制LED 光敏传感器控制蜂鸣器(08)OLED调试工具(09)OLED显示屏(10)EXTI外部中断(11)对射式红外传感器计次 旋转编码器…...

Java基础扫盲(二)

想看Java基础扫盲&#xff08;一&#xff09;的可以观看我的上篇文章Java基础扫盲 目录 String为什么设计为不可变的 String有长度限制吗 为什么JDK9将String的char[]改为byte[] 泛型中K,T,V,E,Object,?等都代表什么含义 怎么修改一个类中使用了private修饰的String类型…...

兼容React的刮刮乐完整代码实现

需要兼容React的刮刮乐完整代码实现 在现代Web开发中&#xff0c;React作为一种流行的前端框架&#xff0c;为开发者提供了构建动态界面的强大工具。刮刮乐效果作为一种趣味性的用户交互&#xff0c;能够显著提升用户体验和参与度。本文将详细介绍如何在React项目中实现一个兼…...

PHP程序如何实现限制一台电脑登录?

PHP程序如何实现限制一台电脑登录&#xff1f; 可以使用以下几种方法&#xff1a; 1. IP地址限制&#xff1a;在PHP中&#xff0c;可以通过获取客户端的IP地址&#xff0c;然后与允许登录的IP地址列表进行比对。如果客户端的IP地址不在列表中&#xff0c;就禁止登录。 “php $…...

nodejs fs 模块的简介与相关案例

fs 文件系统模块 什么是 fs 文件系统模块&#xff1f; fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性&#xff0c;用来满足用户对文件的操作要求。* 例如&#xff1a; fs.readFile() 方法用来读取文件内容。fs.writeFile() 方法用来写入文…...

计算机毕业设计 基于Flask+Vue的博客系统 Python毕业设计 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

基于SSH的酒店管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSH的酒店管理系统拥有两种角色 管理员&#xff1a;房间管理、房型管理、客户管理、预定管理、入住管理&#xff08;到店入住、预定入住、正在入住&#xff09;、账单管理、会员管理…...

消息队列10:为RabbitMq添加连接池

环境&#xff1a; win11rabbitmq-3.8.17.net 6.0RabbitMQ.Client 6.8.1vs2022 安装RabbitMq环境参照&#xff1a; window下安装rabbitmqlinux下安装rabbitmq 问题&#xff1a;rabbitmq的c#客户端没有自带连接池&#xff0c;所以需要手动实现。 简易实现如下&#xff1a; usi…...

在使用 Docker 时,用户可能会遇到各种常见的错误和问题

在使用 Docker 时&#xff0c;用户可能会遇到各种常见的错误和问题。以下是一些需要注意的常见错误及其可能的解决方案&#xff1a; 1. 权限问题 在 Linux 系统上运行 Docker 命令时&#xff0c;可能会遇到权限不足的问题。解决这个问题通常有两种方法&#xff1a; 使用 sud…...

MinIO使用客户端进行桶和对象的管理

MinIO使用客户端进行桶和对象的管理 minio安装完成后&#xff0c;除了自带的webui管理界面&#xff0c;还可以使用官方配套的客户端mc进行管理。除此之外&#xff0c;还可以使用第三方客户端s3browser也可以完成对象和桶的生命周期管理。 1. 官方客户端mc MinIO客户端 mc 命…...

数据库管理-第244期 一次无法switchover的故障处理(20240928)

数据库管理244期 2024-09-28 数据库管理-第244期 一次无法switchover的故障处理&#xff08;20240928&#xff09;1 问题展现2 问题排查与处理2.1 问题12.2 问题2 3 问题分析4 总结 数据库管理-第244期 一次无法switchover的故障处理&#xff08;20240928&#xff09; 作者&…...

太绝了死磕这本大模型神书!

今天给大家推荐一本大模型神书&#xff0c;就是这本&#xff1a;《大语言模型&#xff1a;基础与前沿》 书籍介绍&#xff1a; 本书深入阐述了大语言模型的基本概念和算法、研究前沿以及应用&#xff0c;涵盖大语言模型的广泛主题&#xff0c;从基础到前沿&#xff0c;从方法…...

Kevin‘s notes about Qt---Episode 6 不同类中创建同一对象

问题描述 使用场景 现在在我的Qt界面中需要同时使用采集卡的AI(Analog Input)和AO(Analog Output)功能,均已分别调通,但是像之前一样通过创建两个类,然后分别在两个线程中进行操作的方式并不能实现。 原本写法 头文件 art_ao.h 核心代码如下: #ifndef ART_AO_H #defi…...

YOLOv9改进策略【Conv和Transformer】| AssemFormer 结合卷积与 Transformer 优势,弥补传统方法不足

一、本文介绍 本文记录的是利用AssemFormer优化YOLOv9的目标检测网络模型。传统卷积和池化操作会导致信息丢失和压缩缺陷,且传统的注意力机制通常产生固定维度的注意力图,忽略了背景中的丰富上下文信息。本文的利用AssemFormer改进YOLOv9,以在特征传递和融合过程中增加多尺…...

Git 的安装和配置

Git 是跨平台的&#xff0c;可以在 Windows&#xff0c;Linux、Unix 和 Mac 各几大平台上使用 由于笔者主要是使用 Windows&#xff0c;其他平台下安装 Git 的方法暂且不表&#xff08;可参考廖雪峰老师的博客&#xff1a;安装 Git&#xff09; ‍ Windows 安装 Git 从 Git…...

InternVL 微调实践

任务 follow 教学文档和视频使用QLoRA进行微调模型&#xff0c;复现微调效果&#xff0c;并能成功讲出梗图. 复现过程 参考教程部署&#xff1a;https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/InternVL/joke_readme.md 训练 合并权重&&模型转换 pyth…...

自然语言处理在人工智能领域的发展历程,以及NLP重点模型介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理在人工智能领域的发展历程&#xff0c;以及NLP重点模型介绍。本文详细介绍了自然语言处理的发展历程&#xff0c;同时深入探讨了各种自然语言处理模型的原理与应用。文章首先回顾了自然语言处理技术的发…...

Replit Agent:AI驱动的全自动化软件开发革命

目录 引言Replit Agent核心功能使用场景与优势最新版本更新处理复杂项目的能力常见问题解决方案支持的编程语言和技术栈与其他AI编程工具的比较结语 引言 在人工智能快速发展的今天&#xff0c;软件开发领域正经历着前所未有的变革。Replit Agent作为AI初创公司Replit推出的…...

SAP调用发起泛微OA流程

SAP调用泛微Servlet接口&#xff0c;发起流程 编写servlet接口&#xff0c;给SAP调用 public class SAPCreateWorkflow extends HttpServlet{private static final long serialVersionUID 1L;public void doPost(HttpServletRequest request, HttpServletResponse response)…...

7个web.py代码重构技巧:如何快速优化Python Web应用代码结构

7个web.py代码重构技巧&#xff1a;如何快速优化Python Web应用代码结构 【免费下载链接】webpy web.py is a web framework for python that is as simple as it is powerful. 项目地址: https://gitcode.com/gh_mirrors/we/webpy web.py 是一个简单而强大的 Python W…...

从零推导贝尔曼方程:强化学习中的价值函数与策略优化

1. 强化学习中的价值函数基础 想象你正在玩一个迷宫游戏&#xff0c;每走一步都会消耗体力&#xff0c;找到出口能获得大奖。这时候你会想&#xff1a;**"从当前位置出发&#xff0c;最终能获得多少奖励&#xff1f;"这个问题的答案就是价值函数&#xff08;Value Fu…...

像素幻梦快速上手指南:3步完成16-bit风格图像生成与内存流导出

像素幻梦快速上手指南&#xff1a;3步完成16-bit风格图像生成与内存流导出 1. 认识像素幻梦创意工坊 像素幻梦创意工坊&#xff08;Pixel Dream Workshop&#xff09;是一款基于FLUX.1-dev扩散模型构建的像素艺术生成工具。它采用明亮的16-bit像素风格界面设计&#xff0c;为…...

告别眼部疲劳?Zotero Night护眼工具让文献阅读轻松升级

告别眼部疲劳&#xff1f;Zotero Night护眼工具让文献阅读轻松升级 【免费下载链接】zotero-night Night theme for Zotero UI and PDF 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-night 作为学术研究的得力助手&#xff0c;Zotero帮助无数用户管理海量文献。…...

当服务器内存足够大时:为什么我建议你在CentOS 8上彻底禁用Swap?

大内存时代&#xff1a;CentOS 8禁用Swap的云原生性能优化实践 在云计算与容器化技术席卷全球的今天&#xff0c;服务器硬件配置正经历着革命性变化。128GB、256GB甚至TB级内存已成为现代服务器的标配&#xff0c;而传统Linux内存管理机制中的Swap分区在这种新硬件环境下是否还…...

【笔试真题】- 阿里系列-2026.03.25-研发岗

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 阿里系列-2026.03.25-研发岗 1. K小姐的仓位配货表 问题描述 说明:阿里系列近期多条业务线笔试题基本共用同一套公开机试,淘天、阿里云等方向都可参考本场。…...

vLLM-v0.17.1在新闻聚合平台的应用:热点事件摘要生成服务

vLLM-v0.17.1在新闻聚合平台的应用&#xff1a;热点事件摘要生成服务 1. 技术背景与需求场景 新闻聚合平台每天需要处理海量新闻内容&#xff0c;如何快速生成准确、简洁的热点事件摘要成为关键挑战。传统方法依赖人工编辑或简单规则提取&#xff0c;效率低下且质量参差不齐。…...

Hadoop 大数据开发专家 · 学习路线图-Python版

文章目录 基于 Python 为主开发 的 Hadoop 大数据开发工程师 学习路线大纲(可打印、企业级、纯实战方向) 一、阶段1:Python 开发基础(1 个月) 目标:能独立写 Python 代码、操作文件、数据处理、连接数据库 1. Python 核心语法 2. Python 数据结构(必须精通) 3. 文件与数…...

流水线设计避坑指南:什么时候该用?深度怎么选?看完这篇就懂了

流水线设计实战决策&#xff1a;吞吐率与硬件成本的黄金分割点 在芯片设计和FPGA开发领域&#xff0c;流水线技术就像一把双刃剑——用得好可以大幅提升系统性能&#xff0c;用得不当则可能造成资源浪费甚至引入新的瓶颈。我曾在一个图像处理芯片项目中&#xff0c;因为错误估计…...

智能客服意图识别实战:基于AI辅助开发的架构设计与避坑指南

在智能客服系统中&#xff0c;意图识别是决定对话能否顺畅进行的关键。简单来说&#xff0c;它就像客服的“耳朵”和“大脑”&#xff0c;需要准确听懂用户五花八门的问法&#xff0c;并快速判断出用户到底想干什么——是查询订单、投诉问题&#xff0c;还是咨询产品。然而&…...