1、输入matlabpoollocal4,这个只要输入一次即可。今后海需要多线程,只要再次输入parpoollocal4即可。4表示多线程的个数,这个根据自己机器的核数来定,写多了会报错。
2、matlab主界面左下角有个图标,图标是在红框里面的就是多线程按钮。点击后,有两个可选项第一个是打开多线程,第二个是对多线程的设置。打开后,直接运行个人的主程序即可。
需要的 方法一、图形界面设置 如图所示位置,单击,选start parallel pool command window中会提示 Starting parallel pool (parpool) using the 'local' profile ... 当并行工具箱启动后会提示链接到本地*个核心。 方法二、command启动并行Core在较旧版本的MATLAB上使用这个命令:matlabpool local 4
"4"指你的cpu核心数,而不是线程数。现在的cpu一般是n核心,2n线程(n=2、4、6、8……等偶数)。
在新版本的MATLAB上会遇到如下警告:
警告: matlabpool will be removed in a future release.
Use parpool instead.
命令执行成功后提示:
Starting matlabpool using the 'local' profile ... connected to 4 workers.
看看任务管理器:
如果你在local后面使用的数字超过了你的cpu核心数,就会失败:
错误使用 matlabpool (line 148)
Failed
to start a parallel pool. (For information in addition to the causing
error, validate the profile 'local' in the Cluster Profile Manager.)
原因:
错误使用 parallel.internal.pool.InteractiveClient/start (line 329)
Failed to start pool.
错误使用 parallel.Job/submit (line 304)
You requested a minimum of 6 workers, but the cluster "local" has
the NumWorkers property set to allow a maximum of 4 workers. To run a
communicating job on more workers than this(up to a maximum of 512 for
the Local cluster), increase the value of the NumWorkers property for
the cluster. The default value of NumWorkers for a Local cluster is the
number of cores on the local machine.
在新版本的MATLAB上推荐使用这个命令:
parpool(4)
命令执行成功后提示:
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
ans =
Pool (具有属性):
Connected: true
NumWorkers: 4
Cluster: local
AttachedFiles: {}
IdleTimeout: 30 minute(s) (30 minutes remaining)
SpmdEnabled: true
---------------------------------------------------------------
试一试下面的fft小程序,
N=10^7 a=rand(1,N) b=gpuArray(a)
%gpuArray的作用是把矩阵从内存中传递到显存中
tic
for k=1:300%这个for循环在cpu中进行,不并行
fft(a+k)
end
toc
%--------------
tic
parfor k=1:300 %把for换成parfor
fft(a+k) %parfor循环仍在cpu中进行,会并行。
end
toc
%--------------
tic
for k=1:300%这个for循环在gpu中进行,高度并行。
fft(b+k) %矩阵b保存在显存中。
end
toc
---------------------------------------------------------------
速度对比:
时间已过 49.175600 秒。
时间已过 36.155164 秒。
时间已过 5.052490 秒。
注:
本人cpu是4核8线程,第一个for循环中cpu占用40%左右,第二个parfor时cpu占用70%左右,第三个for循环cpu占用率几乎是0,
而gpu占用100%.由于cpu是n核心,2n线程,我也不知道系统是怎么样计算占用率的,也不知道35%和55%究竟意味着几个核在全速计算。至于内
存占用率,很大程度上取决于你的内存有多大。
---------------------------------------------------------------
既然评论中有人提到cluster profile manager,那我也来说一说这个。
现在就可以来一发parpool(8)了。现在就可以来一发parpool(8)了。
超
线程技术(Hyper-Threading,简称HT)对密集型计算任务的提速效果不明显,如果在BIOS设置中关闭HT(然而不是所有的电脑都能进行这
样的设置),我的cpu就变成4核4线程的了。关闭HT后,parpool(4)即可让cpu达100%满负荷。k=1:300,4线程36s(HT开
启),4线程33s(HT关闭),8线程33s(HT开启);k=1:1000,4线程113s(HT开启),4线程105s(HT关闭),8线程
104s(HT开启).
在parfor执行时,每个MATLAB的后台进程要占800M左右的内存,parpool(8)(开启HT)与parpool(4)(关闭HT)都能让cpu 100%满负荷,但前者比后者多占将近3G的内存,实际上很不划算。在parfor执行时,每个MATLAB的后台进程要占800M左右的内存,parpool(8)(开启HT)与parpool(4)(关闭HT)都能让cpu 100%满负荷,但前者比后者多占将近3G的内存,实际上很不划算。
关于超线程技术带来的效果,推荐看看这篇测评报告。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)