MPI多进程问题记录
1.MPI多进程协同
MPI多进程运行的时候,每个进程的访问空间是独立的。例如对于一个全局变量sum==0。不能同时调用多个进程修改这个值,这样达不到你想要的效果。因为不同进程的执行顺序不确定,而且不同进程的存储空间相互独立。进程之间的沟通只能使用通信函数。
2.我的实际问题(视觉测量算法局部并行)
24个相同的任务,24个任务计算的结构都要保存到map里面。所以我的task是并行化这一段代码提速。当然提速的前提是要知道代码的时间消耗在哪。
如果简单使用不同进程不断更新map,那样就存在1中说的问题。
解决办法1:
使用通信,0号进程接收其他进程的计算结构,全部用0号进程保存。我感觉这是正解,但是自定义结构数据和string数据不太会send和recv。
解决办法2:
暴力。例如我有4个进程,每个进程的计算结构保留在自己对应的txt文件,最后统一读取txt文件内容,保存到我的map中。这是我采用的方法。
解决办法3(OpenMP):
最简单的方向,对map设置进程单独访问,因为OpenMP内存共享,这一点和MPI巨大不同。
3.MPI_Finalize()之后
在我实验过程中,MPI_Finalize()之后的代码也会执行多次,感觉十分奇怪,而我只想后面的代码串行执行就行。多方方法不行,我用的如下代码,退出其他进程,只保留一个进程。感觉应该不是标准方法,希望知道的读者可以指点我。
MPI_Barrier();//进程同步
if (myid!=0){MPI_Finalize();exit(1);//退出
}
MPI_Finalize();
在stackoverrun网址上看到一些大牛的回答,发现MPI会并行化全部代码,包括MPI_Init()之前的代码。所以结论是MPI会并行整个MPI代码,所以写MPI code最先可执行的代码应该是 MPI_Init()这个函数(当然也可以包括初始化函数)。如果想要使用MPI并行一个工程的部分函数,其他串行代码都需要用if(rank_id==0)判断,以免被执行多次。因为这个因素,强烈建议使用OpenMP,可以很快上手,上手难与低于MPI十倍,配置也超级方便,IDE一般自带。而且OpenMP使用更加灵活,如果没有多机并行的要求,强烈建议OpenMP。
MPI多进程问题记录相关推荐
- mpi大规模矩阵乘法C语言,MPI多进程并行计算矩阵乘法实现
MPI多进程并行计算矩阵乘法实现,对原始矩阵A.B进行初始化算为: 其主要思想:是把相乘的矩阵按行分解(任务分解),分别分给不同的进程,然后在汇总到一个进程上,在程序上实现则用到了主从模式,人为的把进 ...
- win10+vs2017配置mpi环境的记录(已成功)
并行计算的课程需要动手实验,需要在电脑上使用mpi 使用mpi有两种选择:虚拟机搭建集群,vs多线程模拟多机. 搭建集群太麻烦,果断放弃.决定使用vs2017多线程环境,通过mpi进行并行计算实验. ...
- Android 多进程Debug 记录
1.为什么会用到多进程debug 为了分担主进程内存压力,将三方webview页面独立到其他进程.这样做虽然分担的内存压力但是造成了debug 其他进程代码困难.现对debug过程记录下,方便以后查看 ...
- python日志模块 超量处理_Python日志模块-多进程日志记录
一.问题描述 项目中,使用RotatingFileHandler根据日志文件大小来切分日志.设置文件的MaxBytes为1GB, backupCount大小为5. 经查看,发现日志文件的大小均小于10 ...
- 深度增强学习DDPG(Deep Deterministic Policy Gradient)算法源码走读
原文链接:https://blog.csdn.net/jinzhuojun/article/details/82556127 本文是基于OpenAI推出deep reinforcement learn ...
- 网页实时聊天之PHP如何实现websocket
网页实时聊天之PHP如何实现websocket 一.总结 一句话总结: 应用 PHP 的 socket 函数库:PHP 的 socket 函数库跟 C 语言的 socket 函数非常类似 PHP 实现 ...
- 新浪是如何分析处理32亿条实时日志的?
服务介绍 随着实时分析技术的发展及成本的降低,用户已经不仅仅满足于离线分析.目前我们服务的用户包括微博,微盘,云存储,弹性计算平台等十多个部门的多个产品的日志搜索分析业务,每天处理约32亿条(2TB) ...
- websocket 西部数码php_网页实时聊天之PHP实现websocket
前言 websocket 作为 HTML5 里一个新的特性一直很受人关注,因为它真的非常酷,打破了 http "请求-响应"的常规思维,实现了服务器向客户端主动推送消息,本文介绍如 ...
- python-生产者消费者模型_线程_线程互斥锁_GIL全局解释器锁
进程 1. 开启进程的两种方式 2. 进程对象其他属性和方法-pid: 进程id号 os.getpid()-ppid: 父进程id号 os.getppid() -is_alive(): 当前进程是否存 ...
最新文章
- python 类-python 类如何使用
- C++ 使用静态变量和静态方法统计学生分数和学生个数
- c语言使单片机输出低电平,单片机开发中的一些实用技巧
- 聊聊RocksDB Compact
- python怎么做回归分析_如何在Python中进行二维回归分析?
- 电池技术为什么如此高深莫测,以至于一直是手机等相关行业的短板?
- smali-2.2.4.jar baksmali-2.2.4.jar
- 矩阵乘法c语言蓝桥杯,[蓝桥杯][基础练习VIP]矩阵乘法 (C语言代码)
- asp.net core 返回的Server Kestrel是什么
- 数据结构面试常见问题总结
- 回溯算法原理及其应用场景
- c语言程序设计景点售票系统,c语言售票系统.docx
- BZOJ#4816. [Sdoi2017]数字表格
- 计算机应用能力考试ppt2003,全国专业技术人员计算机应用能力考试_PPT_2003_题库版.docx...
- Celery---手机短信异步发送
- 代理(proxy):正向代理,反向代理
- [新手入门]微信公众号推文制作
- java取得对象占用的内存大小
- 华为设备 配置成为FTP服务器/客户端
- PTA Swan学院社团招新(sort排序)