24小时热门版块排行榜    

查看: 2188  |  回复: 18

田山东

捐助贵宾 (著名写手)

[求助] 请教matlab在linux下的并行问题已有2人参与

我想在linux下进行并行运算,原先串行的时候用for循环
for i=1:10
.....
.....
end
每个循环直接互相不影响,各干各的,得到的结果也是相互独立的,所以想到了并行运算。
把它改成parfor循环
parfor i=1:10
...
...
end
然后与串行相同的编译语句  nohup matlab d5.out &
进行编译,结果一下就结束了,没有进行计算,是怎么回事呢?
看书,说还要设置运行的核数,比如 matlabpool 设置需要几个核。
对spmd有点小疑问。同一段段代码运行在不同的 多个 lablablab上,是说一个任务运行在多个核上吧?而不是不同的任务运行在不同的核上。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

everythinghasitsseason.enjoyyourlife.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

tracel

木虫 (正式写手)

【答案】应助回帖


jjdg: 金币+1, 感谢参与 2012-11-30 13:16:08
想继续使用nohup命令运行程序,还需要并行的话,需要在你.m程序文件进行修改。
示例如下:
matlabpool(3);      %parallel using 3 threads , 3可以改为任何你需要的核数
...    % 原程序内容
matlabpool close;   %close all the matlabpools
5楼2012-11-30 12:42:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tracel

木虫 (正式写手)

【答案】应助回帖

引用回帖:
7楼: Originally posted by 田山东 at 2012-11-30 13:06:42
不行啊,我把原程序修改了下,在里面添上了几句:
matlabpool(4);
parfor jj=1:4
.............原程序主体
end
matlabpool close;   %close all the matlabpools
虽然它也运行了,但是没有结果出来,我把它 ...

服务器上可以运行,怎么叫没有结果出来呢?
要看到底是什么错误信息。

你自己电脑上先确定在matlab环境下可以并行
9楼2012-11-30 14:23:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wake_up

木虫 (著名写手)

【答案】应助回帖

图形界面下运行的话,把你的并行任务管理器打开。在那里面的任务清干净再运行。把多余的matlab子进程kill干净。如果是多机并行的话,主节点和子节点要设置对,通信的豆豆必须全是绿色每个机器参与的核数必须全一样。必须是物理核数。

发自小木虫Android客户端
扫地扫地扫心地,心地不扫空扫地,人人都把心地扫,世上无处不净地.
15楼2015-10-29 09:33:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wake_up

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★
田山东: 金币+4, 双核几乎没有意义,还耗时间。 2015-11-02 21:44:52
你的就是双核奔腾处理器,并行意义不大。

发自小木虫Android客户端
扫地扫地扫心地,心地不扫空扫地,人人都把心地扫,世上无处不净地.
16楼2015-10-29 09:35:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wake_up

木虫 (著名写手)

【答案】应助回帖

引用回帖:
14楼: Originally posted by zzl19860210 at 2015-10-28 15:11:48
请问您的问题解决了吗?我也碰到相同的问题了?

我也是醉了,你12年的帖子翻出来。我没注意看还回答了。你这种情况开个新帖嘛。

发自小木虫Android客户端
扫地扫地扫心地,心地不扫空扫地,人人都把心地扫,世上无处不净地.
17楼2015-10-29 09:50:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzl19860210

新虫 (小有名气)

引用回帖:
17楼: Originally posted by wake_up at 2015-10-29 09:50:58
我也是醉了,你12年的帖子翻出来。我没注意看还回答了。你这种情况开个新帖嘛。
...

主要是楼主的问题和我遇到的一模一样,说得相当清楚。我们的问题就是,通过SSH提交到linux服务器时,就不能正常运行,但是在服务器上直接运行或者在单机上操作也都没有问题。所以现在的问题是怎么将多个任务一次性递交上去后台运行而不出现错误
18楼2015-10-29 15:23:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

田山东

捐助贵宾 (著名写手)

刚在网上搜了一下,matlabpool open local 8 设置节点数,但是必须在matlab下面才行,比如我打开linux,
>>matlab
进入matlab系统,然后matlabpool open local 8 可以,给出提示:
Starting matlabpool using the 'local' configuration ... connected to 8 labs.
看上去好像可以了,好吧,挂程序吧:
nohup matlab dd.out &
这个语句是网友给的,就是让matlab程序后台运行的一个方法。这时候提示出错了:
??? Undefined function or method 'nohup' for input arguments of type 'char'.

很奇怪 啊!!
如果进入linux界面,然后进入ABzazhi24pi.m这个文件所在的文件夹,输入
nohup matlab dd.out &
则没有这个奇怪的提示??? Undefined function or method 'nohup' for input arguments of type 'char'.
而且串行的时候还能得到正确的结果,并行的时候反而不能运行了。郁闷啊
everythinghasitsseason.enjoyyourlife.
2楼2012-11-30 10:50:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

是不是break的问题。但是break跳出的是内层的循环啊。
parfor j=1:10
...
...
for
for
for
if...
berek
end
...


end
是这个问题吗?不用break也不行啊。没法跳出那个循环啊
everythinghasitsseason.enjoyyourlife.
3楼2012-11-30 11:06:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tracel

木虫 (正式写手)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2012-11-30 13:15:56
nohup 是系统命令,而非matlab命令,matlab环境,启用并行后,直接运行.m文件即可。
4楼2012-11-30 12:26:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

引用回帖:
5楼: Originally posted by tracel at 2012-11-30 12:42:51
想继续使用nohup命令运行程序,还需要并行的话,需要在你.m程序文件进行修改。
示例如下:
matlabpool(3);      %parallel using 3 threads , 3可以改为任何你需要的核数
...    % 原程序内容
matlabpool close ...

你的意思是在原程序前面和后面加上并行指令语句、试下
everythinghasitsseason.enjoyyourlife.
6楼2012-11-30 12:47:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

引用回帖:
5楼: Originally posted by tracel at 2012-11-30 12:42:51
想继续使用nohup命令运行程序,还需要并行的话,需要在你.m程序文件进行修改。
示例如下:
matlabpool(3);      %parallel using 3 threads , 3可以改为任何你需要的核数
...    % 原程序内容
matlabpool close ...

不行啊,我把原程序修改了下,在里面添上了几句:
matlabpool(4);
parfor jj=1:4
.............原程序主体
end
matlabpool close;   %close all the matlabpools
虽然它也运行了,但是没有结果出来,我把它弄出来在我双核电脑上试了下,出现了错误信息:
Error using matlabpool (line 136)
Failed to open matlabpool. (For information in addition to the causing error,
validate the configuration 'local' in the Configurations Manager.)

Error in ABzazhi24pi (line 3)
matlabpool(2);

Caused by:
    Error using distcomp.interactiveclient/start (line 11)
    Found an active interactive session.
    You cannot have multiple interactive sessions open simultaneously.
    To terminate the existing session, use   matlabpool close
everythinghasitsseason.enjoyyourlife.
7楼2012-11-30 13:06:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

引用回帖:
4楼: Originally posted by tracel at 2012-11-30 12:26:56
nohup 是系统命令,而非matlab命令,matlab环境,启用并行后,直接运行.m文件即可。

启动matlab环境直接运行.m文件虽然可行,但是不能让程序在后台运行啊,我关上电脑或者关掉putty程序就结束了。还是要想办法让他在后台运行起来,用nohup命令啊
everythinghasitsseason.enjoyyourlife.
8楼2012-11-30 13:08:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

田山东

捐助贵宾 (著名写手)

引用回帖:
9楼: Originally posted by tracel at 2012-11-30 14:23:34
服务器上可以运行,怎么叫没有结果出来呢?
要看到底是什么错误信息。

你自己电脑上先确定在matlab环境下可以并行...

你好,很奇怪啊。我从0开始描述我的问题。
clc;
clear;

parfor j=1:8
    a(j)=j;
end
这段代码可以运行。下面这段代码有问题了:
clc;
clear;
matlabpool(2)
parfor j=1:8
    a(j)=j;
end
matlabpool close
问题如下:
Error using matlabpool (line 136)
Failed to open matlabpool. (For information in addition to the causing error, validate the configuration
'local' in the Configurations Manager.)

Error in ppfor (line 4)
matlabpool(2)

Caused by:
    Error using distcomp.interactiveclient/start (line 11)
    Found an active interactive session.
    You cannot have multiple interactive sessions open simultaneously.
    To terminate the existing session, use   matlabpool close

刚开始运行上面这段代码的时候没有出现问题,但是后来运行完我的程序之后就有问题了,因为我的程序也出现了相同的问题。
很纠结,不知道该怎么处理这类问题。
期待你的帮助啊。
everythinghasitsseason.enjoyyourlife.
10楼2012-11-30 21:35:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 田山东 的主题更新
信息提示
请填处理意见