Julia 并发编程 ---- @distributed 和 pmap的区别-程序员宅基地

技术标签: Julia  @distributed  julia机器学习&科学计算  Distributed  pmap  

目录

 

1、功能说明

2、代码用例

2.1 使用 @distributed

2.2 使用pmap

3、总结


1、功能说明

@distributed(Julia 0.6之前用@parallel)会立即把要做的工作平均分配给所有的workers。注意,在@distributed中,会在指定范围在根据所有的worker的个数分片。相比之下,pmap将启动每个worker的工作,并根据worker的计算能力分配工作任务。一旦一个worker完成了一项工作,它将提供下一个可用的工作。它类似于python中常见的基于队列的多处理。因此,与其说这是一个“重新分配”工作的问题,不如说是只在正确的时间将工作分配给正确的人。

 

2、代码用例

下面有个例子,应该可以说明了这一点。在这个有点low的例子中,我们有两个worker,一个是慢的,另一个是快两倍的。理想情况下,我们希望给快速工作者两倍于慢速工作者的工作量。(或者,更现实地说,我们的工作有快有慢,但原则是完全相同的)。pmap可以完成这个任务,但是@distributed不行。

#初始化测试函数,定义成广播模块
addprocs(2)

@everywhere begin
    function parallel_func(idx)
        workernum = myid() - 1
        sleep(workernum)
        println("job $idx")
    end
end

2.1 使用 @distributed

代码工作很顺畅。workers平分了计算量。注意,每个worker都完成了6个工作,尽管worker2的速度是worker3的两倍。结果没有问题,但效率很低。

 

@distributed for idx = 1:12
    parallel_func(idx)
end

      # From worker 2:     job 1
      # From worker 3:    job 7
      # From worker 2:    job 2
      # From worker 2:    job 3
      # From worker 3:    job 8
      # From worker 2:    job 4
      # From worker 2:    job 5
      # From worker 3:    job 9
      # From worker 2:    job 6
      # From worker 3:    job 10
      # From worker 3:    job 11
      # From worker 3:    job 12

2.2 使用pmap

现在,请注意,worker2执行了8个作业,worker3执行了4个作业。这与他们的速度,以及我们想要的最佳效率成正比。pmap是一个很难掌握的任务管理工具,还要根据开发人员的能力量力而为。

pmap(parallel_func, 1:12)

      # From worker 2:    job 2
      # From worker 3:    job 1
      # From worker 2:    job 3
      # From worker 2:    job 5
      # From worker 3:    job 4
      # From worker 2:    job 6
      # From worker 2:    job 8
      # From worker 3:    job 7
      # From worker 2:    job 9
      # From worker 2:    job 11
      # From worker 3:    job 10
      # From worker 2:    job 12

3、总结

因此,Julia文档中的建议是有意义的。如果您有一些小的简单作业,那么使用@parallel的这些问题很可能不会导致问题。不过,对于更大或更复杂的工作,pmap具有优势。

 

参考:https://stackoverflow.com/questions/37846838/what-exactly-is-the-difference-between-parallel-and-pmap

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41715077/article/details/104093130

智能推荐

Ubuntu18.0.4仿Mac界面_linux仿苹果电脑窗口移动变形效果-程序员宅基地

文章浏览阅读1.6w次,点赞6次,收藏44次。安装完的效果: 参考:https://linuxhint.com/gnome-tweak-tool-ubuntu-17-10/————————————————————————————————————————————————————下面正式开始————————————————————————————————————————————————————要安装主题,首先要先安装相应的工具:TweakToo..._linux仿苹果电脑窗口移动变形效果

多线程编程?聊聊并发的背后知识_线程并行 锁总线-程序员宅基地

文章浏览阅读679次。一、现代计算机理论模型与工作方式现代计算机模型是基于-冯诺依曼计算机模型。计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去,直至遇到停止指令。程序与数据一样存储,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提出来的,故称为冯.诺依_线程并行 锁总线

修改openwrt的Luci界面显示Helloworld_openwrt luci界面修改-程序员宅基地

文章浏览阅读3.9k次,点赞3次,收藏8次。这几天对openwrt的Luci界面很感兴趣,然而网上资料太少,而且许多资料又讲得太深,没有一个“helloworld”式的感性认识,故作此篇来帮助想要从头开始学Luci却无从下手的同学们。0、目标首先明确一下我们的目标:通过修改openwrt的内置web服务Luci(Lua Configuration Interface)里的文件来向web界面中增加我们想要的内容。具体分成两个步骤:修改controller层文件 增加view层的文件(即html页面)顺带一提,由于Luci默认使用缓存技_openwrt luci界面修改

python函数拟合不规则曲线_python 对于任意数据和曲线进行拟合并求出函数表达式的三种方案。...-程序员宅基地

文章浏览阅读988次。原博文2020-07-17 19:33 −本文链接:https://blog.csdn.net/changdejie/article/details/83089933第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式。具体示例如下。###拟合年龄import numpy as npimport matplotl...相关推荐2019-12-15 10:09 −axios本身没有..._不规则曲线拟合

图解 CMMI 2.0之(四)能力等级和成熟度等级_cmmi2.0 每个级别-程序员宅基地

文章浏览阅读7.7k次,点赞3次,收藏16次。过程改进模型的不同表示法出于不同的应用目的,过程改进模型通常会采用阶段式或连续式这二种不同的表示方法,模型类型分别对应为阶段型模型或连续型模型。例如,CTP、STEP是连续型模型,TMMi 是阶段型模型,而CMMI既有阶段式的表示方法,也有连续式的表示方法,所以CMMI既是阶段型模型,也是连续型模型。不同表示法的模型具有不同的应用目的。连续式表示法强调的是单个域(如过程域、..._cmmi2.0 每个级别

CentOS离线安装最新版本Docker_centos离线安装docker 18.09.6-程序员宅基地

文章浏览阅读1.4w次,点赞5次,收藏32次。一、背景由于公司内部服务器只能连内网,即使建立局域网yum源,也无法使用yum在线安装Docker CE。支持在线安装的朋友们,直接参考CentOS在线安装Docker官方文档即可:https://docs.docker.com/install/linux/docker-ce/centos/目前最新版本是v18.09.6。二、准备工作1、根据官方文档对CentOS的要求:需要是..._centos离线安装docker 18.09.6

随便推点

Android 让View 和 ViewGroup 同时响应点击或者长按事件_android viewgroup设置点击事件-程序员宅基地

文章浏览阅读2.7k次。面试的时候,被问到如何让View 和 其 父View 同时响应长按事件。我还记得当时自己的回答,子View 里面 处理了长按事件,但是返回了false, 没有处理,然后会继续调用到父View 的长按事件。其实这个回答是错误的,回头自己看了事件传递机制的源码之后,有了更好的方法:上布局: <LinearLayout android:layout_width=..._android viewgroup设置点击事件

QScrollArea垂直滚动条 水平滚动条隐藏_qtscrollarea取消滚动条-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏9次。enum ScrollBarPolicy { ScrollBarAsNeeded, //需要的时候显示 ScrollBarAlwaysOff,//总是关闭 ScrollBarAlwaysOn//总是打开 };QScrollArea *scroll=new QScrollArea;scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);..._qtscrollarea取消滚动条

【matlab深度学习工具箱】convolution2dLayer参数详解-程序员宅基地

文章浏览阅读9.7k次,点赞10次,收藏80次。2-D 卷积层2-D 卷积层将滑动卷积滤波器应用于 2-D 输入。该层通过沿输入方向垂直和水平移动滤波器并计算权重和输入的点积,然后添加偏置项来卷积输入。描述 创建一个 2-D 卷积层,并设置 和 属性。名称-值对参数使用逗号分隔的名称-值对参数指定要沿图层输入边缘添加的填充的大小,或设置 参数和初始化、学习速率和正则化以及属性。将名称括在单引号中。示例:创建了一个2-D卷积层,其中包含16个大小的过滤器和的填充。在训练时,软件计算并设置填充的大小,以便图层输出具有与输入相同的大小。输入边填充,指定_convolution2dlayer

双目测距、重构(基于MATLAB和opencv-python)_matlab 基于双目视觉进行三维重构-程序员宅基地

文章浏览阅读3k次。双目测距、重构楼主之前用的SFM来进行重构,但是得到的是视差图,点云和实物存在比例关系,单目的还是不能解决scale这个问题的。所以今天用双目的来进行重构,期间遇到了很多坑,实属难受。双目测距过程大致可以分为,标定,图像校正,计算视差,测距,知道这个流程,目标就很明确了标定opencv和matlab都有标定的代码,但是老师说还是matlab的标定更加准确,自己试验下来也的确感受到matla..._matlab 基于双目视觉进行三维重构

倒残差与线性瓶颈浅析 - MobileNetV2_倒残差结构-程序员宅基地

文章浏览阅读1.4w次,点赞18次,收藏112次。文章目录1 背景简介2 MobileNetV2 要点2.1 Inverted Residuals(倒残差结构)2.2 Linear Bottlenecks(线性瓶颈结构)3 代码实现 - pytorch1 背景简介  在提出 MobileNetV1 后,谷歌团队又于次年(2018 年)提出 MobileNetV2 网络。相较于 MobileNetV1, MobileNetV2 准确率更高,模型更小。关于 MobileNetV1 可参考本人先前博客(深度可分离卷积解析 - MobileNetV1),此处给_倒残差结构

移植opencv+opencv_contrib_apps/annotation/cmakefiles/opencv_annotation.dir/b-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏8次。交叉编译opencv 3.4.2opencv_contribute 3.4.2ubuntu 16cmake 3.12.2cmake 进行编译配置勾选 ENABLE_CXX11设置安装路径 CMAKE_INSTALL_PREFIX /usr/local问题一:opencv-3.4.1/3rdparty/libpng/pngstruct.h:30:18: fatal error: zlib.h: No such file or directory~/op..._apps/annotation/cmakefiles/opencv_annotation.dir/build.make:99: recipe for t

推荐文章

热门文章

相关标签