前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MATLAB并行运算程序

MATLAB并行运算程序

作者头像
里克贝斯
发布2021-05-21 16:10:10
发布2021-05-21 16:10:10
2.4K00
代码可运行
举报
文章被收录于专栏:图灵技术域图灵技术域
运行总次数:0
代码可运行

matlab在计算大数据内存以及大矩阵运算时,单核运算显然无法满足高速的运算需求。其实matlab提供多核运算的解决方案,这里先介绍最简单的两种

①parfor ②distributed

parfor

for循环一般最为耗时,解决方法就是采用parfor代替for,parfor可以自动将循环任务分配到多个核中,现在matlab的命令行窗口运行parpool(4)查看是否可以并行计算,没有报错则并行已打开。parfor运行时就会有多个matlab进程在计算。计算效率明显提升。

未使用parfor的代码:

MATLAB

代码语言:javascript
代码运行次数:0
复制
answer = 0;
for i=1:1000000
    answer = answer + i;
end

时间:

使用parfor的代码:

MATLAB

代码语言:javascript
代码运行次数:0
复制
answer = 0;
parfor i=1:1000000
    answer = answer + i;
end

时间:

显然加了parfor语句速度更快!

注意:

①parfor循环中不能使用迭代或者关联性的赋值语句,因为多个核计算时无法交换数据。 ②parfor只支持一层循环,所以下面这种写法是非并行的,并且可能会出错。 ③在程序运行之前MATLAB会提示你哪些地方不能用parfor(红色波浪线显示)

distributed

对于大矩阵的存储问题以及计算的问题,除了自己分块外,可以使用matlab自带的内存分配解决方法,但需要确保你的电脑内存足够多,计算效率就会大幅提高。不然会有内存溢出的问题。 具体方式是

MATLAB

代码语言:javascript
代码运行次数:0
复制
tic;
X = randn(10000);
x_dis = distributed(X);
clear(X);
whos
a = svd(x_dis);
a_out = gather(a);%distrituted数据类型变为double
toc;

之后可以采用x_dis代替X进行计算即可。gather函数的作用是把distributed数据类型变为double。

此外,matlab的大多数工具箱都开始支持并行计算,所以如果该问题可以用自带工具箱解决的可以使用工具箱自带的并行计算方法。 matlab的Parallel Computing Toolbox工具箱就支持并行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • parfor
    • 未使用parfor的代码:
    • 使用parfor的代码:
  • distributed
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档