zearo 发表于 2007-7-31 16:38

关于matlab中分布式计算问题

请问有人用过么?双核单机电脑能实现分布式计算么?怎么实现呢?主要是想要运算速度啊。

zhong84 发表于 2007-11-29 17:08

看到有人对matlab2007b的介绍,其中提到

2007b 版中的新功能
。。。。。。

Simulink 产品系列的新功能包括:
。。。。。。
●Stateflow 中的连续时间支持,过零检测和微分方程创建
●SystemTest 中支持使用分布式计算工具箱>的并行计算
●Simulink 设计校验器,用于测试生成和属性证明的新产品
。。。。。。。。。。。。。。。。。。。。。
不过我没有2007b版本,不知道怎么用
有机会倒要试一试。

lxq 发表于 2007-11-30 10:44

没有用过
不过对于matlab来说进行并行计算肯定是个突破

fsnow 发表于 2007-12-1 11:04

【转贴】Matlab的Distributed Computing Toolbox初探

Matlab的Distributed Computing Toolbox初探
http://www.simwe.com/forum/viewthread.php?tid=755661&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=1

我的实验室有五台双核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地址分别为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命令安装mdce服务。接着去控制台->管理工具->服务,查看Matlab Distributed Computing Engine的属性。进入登录页,选择“此帐户”,输入NT AUTHORITY\NetworkService,删除下面的密码,让该服务以NetworkService的形式登入,以便该服务存取共享的映射网络驱动器中的原程序文件。接着便可以启动该服务了。注意以后重新开机,该服务都会启动,当然你可以设置让它手动启动。
3、启动job manager。任一台计算机都可以启动job manager,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:

[ - ]CODE:
startjobmanager -name frenseljobm
该命令启动jobmanager,其名字叫frenseljobm,启动地点为计算机101。
4、启动workers。任一台计算机都可以启动workers,只要mdce服务启动了即可。比如使用计算机101,在C:\Program Files\MATLAB\R2006b\toolbox\distcomp\bin目录下,运行以下命令:

[ - ]CODE:
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。运行如下的命令:

[ - ]CODE:
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、现在便可以进行计算了。这里给出测试的代码。首先写一个函数,模拟我们实际的工作。

[ - ]CODE:
% hp.m
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文件,做具体的分布式计算。

[ - ]CODE:
% 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次。如果在单机上运行:

[ - ]CODE:
>> tic, a = hp(3000000, 100); toc
Elapsed time is 63.096369 seconds.
而使用三台机作分布式计算时:

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

fsnow 发表于 2007-12-1 11:27

R2007b中 多线程好像可以设置到电脑的最大核心数

maxNumCompThreads
Controls maximum number of computational threads

Syntax
N = maxNumCompThreads
LASTN = maxNumCompThreads(N)
LASTN = maxNumCompThreads('automatic')


Description
N = maxNumCompThreads returns the current maximum number of computational threads N.

LASTN = maxNumCompThreads(N) sets the maximum number of computational threads to N, and returns the previous maximum number of computational threads, LASTN.

LASTN = maxNumCompThreads('automatic') sets the maximum number of computational threads using what MATLAB determines to be the most desirable. It additionally returns the previous maximum number of computational threads, LASTN.

Currently, the maximum number of computational threads is equal to the number of computational cores on your machine.

Note   Unlike enabling multithreading using the Preferences panel, setting the maximum number of computational threads using maxNumCompThreads will not propagate to your next MATLAB session.

clarkyeah 发表于 2007-12-28 21:00

Matlab的Distributed Computing Toolbox初探

按照上面的方法做了一下 不成功 有成功的么 我用的是XP系统
页: [1]
查看完整版本: 关于matlab中分布式计算问题