文章来源:http://hi.baidu.com/modelren/item/6a9d09ff178db405d99e7220

我的实验室有五台双核Pentium D 925计算机,这正适合用来做分布式或并行式计算。我打算只调用那些计算机中的一个核参与计算,留下一个核可以让其他人正常地使用该计算机。我们在这里将会介绍Matlab中Distributed Computing Toolbox的基本使用方法,目标是实现简单的分布式计算。

Distributed Computing Toolbox就是分布式计算工具箱,简称DCT,其可以在多台计算机组成的Cluster中实现分布式或并行式计算。简单来说,我们是把一个很繁重的工作,分解成许多小任务,然后分给不同的计算机去处理,最后把计算结果汇总,以达到提高计算效率的目的。
    Matlab的做法是这样的:在每台参与计算的计算机中启动一个叫Matlab Distributed Computing Engine的服务,该服务能启动参与计算的worker的Matlab session和管理各台计算机workers的job manager。 Job manager对workers进行管理 , 给workers分配计算任务 , 接收workers计算后的结果 。而你 本人就是client ,你要把你的工作分解为多个任务,然后把任务给job manager。job manager就会根据workers的多少和空闲情况,适当地把任务分配给workers去做。workers完成任务后,会把结果返回给job manager。当所有workers都完成任务后,你,即是 client,便可以从job manager里取回结果 。

具体的概念可以参考Matlab的帮助,我们也不能说得很准确。我们在这里只想给出使用Matlab实现分布式计算的简单步骤,以便初学者快速入门。

1、局域网IP地址分配与配置

首先第一步要做的,就是令每台要参与计算的计算机组成局域网。比如我有三台计算机,其IP地址分别为192.168.1.101-192.168.1.103,以下简称计算机名为101,102和103。

2、分布式计算引擎服务的启动

在三台计算机中安装Matlab Distributed Computing Engine(mdce)服务。

安装方法为:如Matlab的安装地址为C:\Program Files\MATLAB\R2006b,则Start->Run->cmd到命令行窗口,进入C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录,运行mdce install(在Matlab2012下没找到此命令)命令安装mdce服务。接着去控制台->管理工具->服务,查看Matlab Distributed Computing Engine的属性。

进入登录页,选择“此帐户”,输入NT AUTHORITY\NetworkService,删除下面的密码,让该服务以NetworkService的形式登入,以便该服务存取共享的映射网络驱动器中的原程序文件。接着便可以启动该服务了。注意以后重新开机,该服务都会启动,当然你可以设置让它手动启动。

3、启动job manager。

任一台计算机都可以启动job manager,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:复制内容到剪贴板代码:startjobmanager -name frenseljobm该命令启动jobmanager,其名字叫frenseljobm,启动地点为计算机101。

4、启动workers。任一台计算机都可以启动workers,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:复制内容到剪贴板代码:startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker1此命令指明在计算机192.168.1.101中,启动名为worker1的worker,而该worker受名为frenseljobm的jobmanager管理。就是说来自乡下101的可怜工人worker1,成为万恶的监工frenseljobm的“马仔”了。接着,监工frenseljobm要在不同村102和103中雇用更多的工人worker2、worker3。运行如下的命令:复制内容到剪贴板代码:startworker -jobmanagerhost 192.168.1.101 -jobmanager frenseljobm -name worker2 -remotehost 192.168.1.102即可在102计算机中启动一个新的,名为worker2的worker,如此类推启动103计算机的worker3。使用nodestatus命令可以查看节点的状态,加上-remotehost可以查看其他节点的状态。

5、共享设置

如令计算机101为client,即我们的程序在这里编写的。设程序文件位于D:\Matlab_code\testDCT中。共享出文件夹Matlab_code,在文件夹中按工具->映射网络驱动器->令盘符为Z:->文件夹里填\\192.168.1.101\Matlab_code。于是Z:\testDCT便成为放置你程序的地方了。以同样的方法,让计算机102和103都建立映射网络驱动器,令盘符为Z:,文件夹里填\\192.168.1.101\Matlab_code。这时三台机都可以通过Z:\testDCT访问原程序文件。

6、测试

这里给出测试的代码。首先写一个函数,模拟我们实际的工作。复制内容到剪贴板代码:% hp.m
function f = hp(m, n)
H1 = zeros(n);
H2 = zeros(n);
for i = 1 : m
H = H1 + H2;
end
f = H;
end

function f = hp(m, n)
H1 = zeros(n);
H2 = zeros(n);
for i = 1 : m
H = H1 + H2;
end
f = H;
end
将此程序hp.m放在D:\Matlab_code\testDCT中。此函数计算n维随机矩阵的加法m次。接着建立另一个m文件,做具体的分布式计算。复制内容到剪贴板代码: % runDCT.m
tic
% 寻找资源,比如jobmanager在什么地方,叫什么名字。
jm = findResource('scheduler', 'type', 'jobmanager', 'name',...
'frenseljobm', 'LookupURL', '192.168.1.101');
% 使用刚才找到的资源建立一个工作
job = createJob(jm);
% 设置该工作的文件关联,让所有workers都可以找到原程序文件。
set(job, 'PathDependencies', {'Z:\testDCT'})
% 另一种方法,把用到的原程序文件传给所有workers。
% set(job, 'FileDependencies', {'hp.m'})
N = 100;
M = 1000000;
% 建立三个任务,每任务都是算hp(M, N)。
createTask(job, @hp, 1, {M, N});
createTask(job, @hp, 1, {M, N});
createTask(job, @hp, 1, {M, N});
% 提交工作给jobmanager。
submit(job)
% 等待所有workers都把任务做完。
waitForState(job, 'finished')
% 取出计算结果。
results = getAllOutputArguments(job);
toc
同样地,该程序runDCT.m也是放在D:\Matlab_code\testDCT中。该程序计算了三次100维矩阵的加法1000000次,即算了100维矩阵的加法3000000次。如果在单机上运行:复制内容到剪贴板代码: >> tic, a = hp(3000000, 100); toc
Elapsed time is 63.096369 seconds.
而使用三台机作分布式计算时:复制内容到剪贴板代码: >> runDCT
Elapsed time is 24.323556 seconds.

效率有明显的提升。但注意到,当第一次进行分布式计算时,其他几台机要从Z:\testDCT中读取原程序文件,会使得计算速度降低。
总结来说,Matlab的Distributed Computing Toolbox为我们提供了一种简便的分布式或并行式计算的实现方法。以上所写的是为了对DCT具体做法的整个过程做一次简单的介绍,我也是初学使用这个工具箱,文章可能很粗糙和存在许多谬误,敬请指正。

分布式Matlab计算集群建立方法与Demo相关推荐

  1. matlab集群版,分布式Matlab计算集群建立方法与Demo

    注释:由于Matlab版本升级,用法可能有变化 文章来源:http://hi.baidu.com/modelren/item/6a9d09ff178db405d99e7220 我的实验室有五台双核Pe ...

  2. 学界 | 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

    来源:AI科技评论 概要:最近这项来自南非开普敦大学的研究就带来了新的发现,只用单块GPU的资源就进化出了理想的网络结构,还刷新了三项测试的结果. 作者按:进化算法和生成式对抗性网络GANs类似,提出 ...

  3. 进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录...

    雷锋网 AI 科技评论按:进化算法和生成式对抗性网络GANs类似,提出时大家都觉得是很好的想法,可以帮人类极大地拓展行为和想象空间,然而找到好的.可控的实现方法却没那么简单.GANs方面现在已经有了许 ...

  4. hbase集群 数据写入_一种构建HBase集群全文索引方法,数据读取方法以及数据写入方法与流程...

    本发明涉及HBase集群领域,尤其涉及一种构建HBase集群全文索引方法,数据读取方法以及数据写入方法. 背景技术: 随着云计算技术的不断发展,云计算技术不断落地成为支撑各行业信息技术发展的重要支柱. ...

  5. 创建父需求子需求构建需求树_用pc构建DIY计算集群(超级计算机)

    ----------------------------------------------------------------- 用pc构建DIY计算集群 目录 /构建计算集群 0. |-- /0前 ...

  6. 用pc构建DIY计算集群

    ----------------------------------------------------------------- 用pc构建DIY计算集群 目录 /构建计算集群 |-- /0前言 | ...

  7. 漫谈 MinIO 集群扩容方法

    [CSDN 编者按]数据的持续积累和应用需求的不断增长,往往造成存储系统空间不足.集群部署条件下,如何有效扩展存储空间,同时快速应对应用需求变化,成为近年来各类存储系统的重要议题.本文主要介绍MinI ...

  8. mysql在ibm上安装教程_在ibm服务器上安装配置MySQL集群的方法

    在ibm服务器上安装配置MySQL集群的方法 2014-07-13 16:45来源:中国存储网 导读:本文只是介绍安装和配置,关于一些名词和原理,请参考MySQL手册.一.环境:IBM x3560Vm ...

  9. 分布式文件存储系统-集群管理

    这篇文章比预期来的要晚一点,第一遍接近完成时,脑子一热去清理了一下草稿箱,然后右手一抖就把它给删了,然后又不得不来第二遍....这个时候分布式备份就显得尤为重要!!! 言归正传,本文对分布式文件系统的 ...

最新文章

  1. 音视频技术开发周刊 | 233
  2. P4074-[WC2013]糖果公园【树上带修莫队】
  3. 水系图一般在哪里找得到_进展 | 水系钠离子电池研究取得重要进展
  4. qpython3绘图_比Excel制图更强大,Python可视化工具Altair入门教程
  5. p2p - cdn传输技术杂谈
  6. javasocket编程例子,给大家安排上!
  7. 如何快速学从零开始学习3d建模?
  8. Unity太空大战游戏-Socket网络通信教学示例
  9. 短距离无线通信设备的天线设计
  10. 干货!图像集分类大杀器--混合黎曼度量学习
  11. Mysql中使用Update From语句
  12. 常用Linux命令大全(100%收藏食用❤️)
  13. 重读《一段关于国产芯片和操作系统的往事》
  14. DZ X!插件破解之盗版提示!
  15. 2021年昆明师专附中高考成绩查询,云南省昆明市云南师范大学附属中学2020-2021学年高三高考适应性月考卷(一)语文试题...
  16. HEVC代码记录(删除)
  17. android 文件存储位置,安卓各文件存储路径汇总(Android file path)
  18. 通达信软件服务器文件是那个,通达信“指标模块”存放在哪个文件夹里
  19. 从餐厅服务员到一线电商程序员(中)
  20. open-falcon trend 部署

热门文章

  1. 计算机指令取决,不同的计算机,其指令不同,这主要取决于什么?
  2. 【渝粤题库】国家开放大学2021春1335幼儿园课程与活动设计题目
  3. 高鸿股份与鸿蒙,高鸿股份(000851)个股分析_牛叉诊股_同花顺财经
  4. ds排序--希尔排序_图解直接插入排序和希尔排序
  5. 【BCH码2】BCH码的快速BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
  6. 服务器mysql显示链接次数太多,服务器mysql显示链接次数太多
  7. 块裁剪后的矩形边界如何去掉_手持拍摄画面太抖?这节课教你如何快速稳定抖动的画面...
  8. java list 去重复元素_java List去掉重复元素的几种方式
  9. 外点惩处函数法·约束优化问题
  10. 《七哥说道》第五章:入职惨做苦力,画饼一望无际