|
原帖我发在simwe
充分利用双核电脑进行多线程计算
在mathworks网站上看到了Loren写的如何充分利用双核笔记本多线程计算的介绍,感觉非常有用,以前的matlab版本一直不能利用多核电脑的功能使得电脑的一个核完全浪费,2007b加入的新功能现在看来完全支持多线程计算了,这对于一些常常进行大规模计算的用户是一个很好的消息。这里把Loren的方法关键地方摘要出来,供大家参考,原帖可以登录:http://blogs.mathworks.com/loren ... urse/#comment-23981
直接给出例子,计算随机生成方阵的秩,方阵大小从1变到400,单核计算方法:
n = 400;
ranksSingle = zeros(1,n);
maxNumCompThreads(1);
tic
for ind = 1:n
ranksSingle(ind) = rank(magic(ind));
end
toc
plot(1:n,ranksSingle, 'b-o', 1:n, 1:n, 'm--')
Elapsed time is 22.641646 seconds.
多核计算方法
先写一个函数
function ranks = parMagic(n)
ranks = zeros(1,n);
parfor (ind = 1:n)
ranks(ind) = rank(magic(ind)); % last index could be ind,not n-ind+1
end
这里的parfor是2007b的新函数,用于并行计算
执行如下语句
matlabpool local 2
tic
ranksPar = parMagic(n);
toc
Elapsed time is 13.836088 seconds.
可以看见时间减少了差不多二分之一
还有很多值得探讨的地方,大家都来发表发表看法吧。 |
评分
-
2
查看全部评分
-
|