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

南京林业大学实验与建设网站百度pc网页版

南京林业大学实验与建设网站,百度pc网页版,网站中文名要注册的吗,wordpress能发多少邮件目录 问题描述 代码1(串行) 代码2(并行) 代码2执行时所用指令 错误信息 解决方案 解决方案1 解决方案2 问题描述 今天正在学习使用mpi4py,在对比运行以下2个代码时疯狂报错: 代码1(串…

目录

问题描述

代码1(串行)

代码2(并行)

代码2执行时所用指令

错误信息

解决方案 

解决方案1 

解决方案2


问题描述

今天正在学习使用mpi4py,在对比运行以下2个代码时疯狂报错:

代码1(串行)

import numpy as np
import timenp.random.seed(2)
size = 1000000x1 = np.random.random(size)
x2 = np.random.random(size)
result = np.zeros(size, dtype=float)since = time.time()
for i in range(size):result[i] = x1[i] + x2[i]
end = time.time()print(end - since)

代码2(并行)

from mpi4py import MPI
import numpy as np
import timecomm = MPI.COMM_WORLD
rank = comm.Get_rank()
nprocs = comm.Get_size()size = 1000000
x1 = np.random.random(size)
x2 = np.random.random(size)if rank == 0:ave, res = divmod(size, nprocs)count = [ave + 1 if p < res else ave for p in range(nprocs)]count = np.array(count)displ = [sum(count[:p]) for p in range(nprocs)]displ = np.array(displ)
else:sendbuf = Nonecount = np.zeros(nprocs, dtype=np.int)displ = Nonet0 = time.time()
comm.Bcast(count, root=0)recvbuf1 = np.zeros(count[rank])
recvbuf2 = np.zeros(count[rank])comm.Scatterv([x1, count, displ, MPI.DOUBLE], recvbuf1, root=0)
comm.Scatterv([x2, count, displ, MPI.DOUBLE], recvbuf2, root=0)print('After Scatterv, process {} has data:'.format(rank), recvbuf1)
print('After Scatterv, process {} has data:'.format(rank), recvbuf2)for i in range(recvbuf1.shape[0]):recvbuf1[i] += recvbuf2[i]sendbuf2 = recvbuf1
recvbuf2 = np.zeros(sum(count))
comm.Gatherv(sendbuf2, [recvbuf2, count, displ, MPI.DOUBLE], root=0)if comm.Get_rank() == 0:print('pi computed in {:.3f} sec'.format(time.time() - t0))print('After Gatherv, process 0 has data:', recvbuf2)

代码2执行时所用指令

# mpi_test.py是该代码存放的代码文件,代码是以root的权限执行的
mpirun -np 4 --allow-run-as-root python mpi_test.py

错误信息

这个错误是我第三次尝试解决,这次终于找到了解决方案,太不容易了,QAQ

解决方案 

参考链接:

python - Possible buffer size limit in mpi4py Reduce() - Stack Overflow

链接中指出,出现这个错误的主要原因是由于

The issue comes from the Cross-Memory Attach (CMA) system calls process_vm_readv() and process_vm_writev() that the shared-memory BTLs (Byte Transfer Layers, a.k.a. the things that move bytes between ranks) of Open MPI use to accelerate shared-memory communication between ranks that run on the same node by avoiding copying the data twice to and from a shared-memory buffer. This mechanism involves some setup overhead and is therefore only used for larger messages, which is why the problem only starts occurring after the messages size crosses the eager threshold.

有以下两个解决方案:

解决方案1 

在执行docker run时,带上参数

--cap-add=SYS_PTRACE

但是由于我拿到的是分好的docker,并不具备执行docker run指令的权限,所以只能选择解决方案2中的解决方法。 

解决方案2

 禁用CMA。

如果是Open MPI 1.8之前的版本,在执行mpirun时带上参数:

mpirun --mca btl_sm_use_cma 0 ...

如果是Open MPI 1.8之后的版本,执行mpirun时带上参数:

mpirun --mca btl_vader_single_copy_mechanism none

附上一个原网站的回答截图以备后续查阅: 

http://www.tj-hxxt.cn/news/11151.html

相关文章:

  • 南京网站开发南京乐识专业免费建站的网站有哪些
  • 一流小说网站模板网络搜索引擎有哪些
  • 兰州网站推广公司培训总结心得体会
  • 网站项目建设策划方案浙江seo关键词
  • 电脑建设网站在互联网访问sem竞价推广是什么
  • 河南网络科技网站建设网络推广公司排行榜
  • 良精企业网站管理系统源码 后台不能编辑产品株洲企业seo优化
  • 农家乐网站 建设nba最新新闻
  • 阿里云做网站百度小说排行榜风云榜单
  • 我做网站了百度站长工具seo
  • 网站改版 升级的目的是什么意思电商培训机构靠谱吗
  • 招商加盟网站模板html推送者seo
  • 保定百度网站建设郑州网站关键词优化公司
  • h5页面制作网站网站报价
  • seo百度网站排名软件同城引流用什么软件
  • 能支持微信公众号的网站建设东莞网络优化服务商
  • 制作网页视频教程seo任务平台
  • 什么网站可以注册微信支付方式百度客服人工电话24
  • 在意派建设好网站后河南网站公司
  • 网站服务器免费申请平台推广文案
  • 大淘客网站如何建设苏州seo招聘
  • 怎么建网站卖产品2022好用值得推荐的搜索引擎
  • wordpress 商城主题百度快照优化排名推广怎么做
  • 江门搜狗网站推广优化长沙排名优化公司
  • 做网站怎么调用数据库网络营销机构官方网站
  • 如何做网站接口做一个公司网页多少钱
  • 湖北网站建设多少钱百度推广网站一年多少钱
  • 小白建站软件搭建网站多少钱
  • 网站推广的方法?seo零基础入门教程
  • 网络策划师是什么职业网络优化的内容包括哪些