您的位置:首页 > 编程语言 > MATLAB

[续] Matlab 并行编程——多核 多线程

2010-12-28 10:40 691 查看
http://www.ilovematlab.cn/thread-24488-1-1.html

发表于 2009-3-11 08:57

关于MATLAB多线程计算(单核下和双核下的)

曾在一下帖子中看到如下讨论。本人没有搜索到‘多线程’的相关贴子,能请高人在此指点一下吗?不胜感激!

http://www.ilovematlab.cn/thread-16397-1-1.html http://www.zhizhihu.com/html/y2010/2306.html
这个不能这样想!

1:是否多核执行任务,是由操作系统分配任务,跟Matlab本身没有关系。

2:你的并行计算,其实是多线程计算。Matlab 2007以后版本支持这些。要想并行计算,首先你要写这样的程序(我们论坛已经讨论过这个),然后程序交给Matlab, Matlab交给系统。

也就是说,即使是单核,也可能多线程。明白区别?
发表于 2009-3-11 20:47
对于楼上的说法,我还想补充:
1.对于多核运行,需要编写合适的程序,这个我同意,但是,通过编写程序以及设置相关的系统环境,可以实现多核同时执行任务,所以不是和matlab没有关系,只是现在matlab对于多核的支持还有限,仅能实现部分程序的多核运算。总之,多核运算的实现和matlab是有关系的,对于编程者和matlab开发者来说,实现多核运算都是必然的趋势。
2.原帖说的是多核并行计算,不再是简单的多线程,而是多个物理核心。对于matlab这样经常是CPU占用100%的程序来说,在单核心上同时开多个线程几乎没什么意义,实际上不是真正的并行计算,因为哪个线程运行起来其它的线程都得等待。而多核运算,即使每个核心开一个线程,也是真正的多个线程同时运行,即所谓并行计算。所以多核心并行计算是能够提升运算效率的,是不能和单核心的多线程并论的。
以上说法可能还不成熟,欢迎讨论。

发表于 2009-3-18 17:28
最好使用 MDCS来计算,在单机上,可这样设置

1. 点 “我的电脑", 选择 "属性”.
2. 点击 高级
3. 点击 环境变量
4. 添加如下系统变量

变量名称 值
---------- -------
BLAS_VERSION mkl.dll
OMP_NUM_THREADS 2

详细的文件看blas.spec文件的配置

发表于 2009-6-11 20:17
我的环境变量中有一项:

NUMBER_OF_PROCESSORS 2

发表于 2010-3-9 14:10
怎么没有一个结果呢??
小弟的电脑就是双核的,计算一个东西要两个小时,可看到cpu都是50%的运行,有什么方法提高cpu的利用率呢??

发表于 2010-5-10 15:12
由于要搜索多核运行,找到这个帖子里来了

刚才试了一下,我使用的MATLAB2010可以多核运行的。需要多核多线程跑的算法,在之前要让matlab在本地建立4个“实验室”(我的机器是4核,所以是4个)
>> matlabpool local 4
Starting matlabpool using the 'local' configuration ... connected to 4 labs.
显示正在进行多核配置,一会说,连接到4个“实验室”。我理解就是在本地虚拟出4台可以运行matlab的工作站,这样用分布式计算工具箱可以进行并行计算(matlabpool这个命令好像是在并行计算工具箱里的)。观察windows任务管理器,可以发现一共有5个MATLAB.exe进程。其中一个占内存较多的,我理解是主控的,他基本不干活,只负责分配,进行计算时他的cpu占用率只有1~2%,剩下四个进程专门用来计算的,跑起来各占cpu 25%左右。看上去还是每个matlab进程单核运算,但是一下开4个进程,所以能把cpu用满。
如果后续还需要多核运算,就直接用parfor好了,不用每次都用matlabpool命令。那个配置一次就好。
算完了,不再跑了,临退出时关闭配置就行。
>> matlabpool close
Sending a stop signal to all the labs ... stopped.

说明:i3 2核4线程/i7 4核8线程,在Win 7/Ubuntu + Matlab(2010 2011) 只能开启“核”个“实验室”;
在虚拟机 VMware中可以开启“线程”个“实验室”。

下面是我一个M文件的程序,测测4核并行计算和单核计算的差距,很简单。
function testtime

runtimes = 1e9;
dummy1 = 0;
dummy2 = 0;

%matlabpool local 4

tic
%for x= 1:runtimes;
parfor x= 1:runtimes;
dummy1 = dummy1 + x;
dummy2 = 2 * x + 1;
end
toc

plot([1 2], [dummy1, dummy2]);

第一次用普通for语句,单核跑,6.09秒
>> testtime
Elapsed time is 6.094267 seconds.

第二次用parfor语句,4核跑,1.63秒
>> matlabpool local 4
Starting matlabpool using the 'local' configuration ... connected to 4 labs.
>> testtime
Elapsed time is 1.631350 seconds.
>> matlabpool close

加速比 6.09 / 1.63 = 3.736,将近4倍(还有开销吧),还比较可观。

发表于 2010-8-21 01:50
parfor循环的限制很多~~一般都很难用上

发表于 2010-9-25 19:07
本人是刚刚接触并行计算,看了很多帖子,依然对所谓的worker(或lab)不是理解,究竟是虚拟的处理器呢,还是物理上独立的处理器呢,或者是其他什么东东,烦请不吝赐教~~

发表于 2008-10-17 16:20
这个不能这样想!

1:是否多核执行任务,是由操作系统分配任务,跟Matlab本身没有关系。

2:你的并行计算,其实是多线程计算。Matlab 2007以后版本支持这些。要想并行计算,首先你要写这样的程序(我们论坛已经讨论过这个),然后程序交给Matlab, Matlab交给系统。

也就是说,即使是单核,也可能多线程。明白区别?

多核多线程设置

http://blog.sciencenet.cn/blog-363372-667068.html

刚开始接触matlab并行计算,以前旧电脑从不考虑这些的
小本i7四核八线程16G内存,64位win7和matlab 2012b,任务管理器显示有8个框
当用普通for循环,只有一个框接近100%,cpu使用率只有12%左右
默认配置下,键入matlabpool,右下角提示4个
然后使用parfor,进程中也能看到5个叫做matlab的,一个接近400M,其他4个接近200M
但为什么只有4个框接近100%,cpu使用率只有50%左右?如何充分使用资源
使用matlabpool 是建议1个核(core)对应一块pool(worker)所以建议出现默认4个,可以试下,
setenv('OMP_NUM_THREADS', '8');

setenv 'OMP_NUM_THREADS' 8
getenv 'OMP_NUM_THREADS'

图形界面的设置如下Home-parallel-mange cluster profile,修改NumWorkers为8,再次打开matlabpool,右下角显示8,运行cpu100%满负荷
顺便说下,小本风扇顿时惨厉的狂豪;内存共9个叫做Matlab的,一个主的接近3G,其他8个接近200M,我的16G内存快接近一半了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: