matlab并行计算

用到的库函数

matlabpool

  • 打开并行计算池

tic , toc

  • 计时,作为测试用

parafor

  • 并行计算的循环方式

代码

定义一个耗时的函数如下

function A_cost( n )
    pause(n)
    fprintf('A_cost execute finished,cost %d senconds!!\n',n);
end

编写测试代码如下

%% init
clc,clear
close all

matlabpool('open' , 2); % open
%% general
tic;
for ii = 1:5
   A_cost(ii);     
end
t1 = toc;
fprintf('general iter cost %f seconds in sum\n' , t1);

%% parallel test
tic;
parfor ii = 1:5
   A_cost(ii);     
end
t1 = toc;
fprintf('parallel cost %f seconds in sum\n' , t1);
matlabpool('close'); % close

结果如下

运行结果

注意

并行计算池打开相关

  • 我的电脑只能打开2个并行计算池,不同的电脑应该不一样,打开的个数超过限制时,matlab会报错并提醒

循环相关

  • 在parfor的循环过程中,不能对循环变量进行重新赋值,否则会提示错误
  • 多次对某个值重写时,最终运行结束该值为0,如下面的程序

    matlabpool('open' , 2);
    tic;
    parfor ii = 1:5
       %ii = A_cost(ii); % will cause error
       %test = ii + A_cost(ii); % test will not change
       test = A_cost(ii); % test will change
    end
    t1 = toc;
    fprintf('parallel cost %f seconds in sum\n' , t1);
    matlabpool('close');
    
  • 而下面的程序运行结束之后test为[1,2,3,4,5]

    matlabpool('open' , 2);
    tic;
    parfor ii = 1:5
       %ii = A_cost(ii); % will cause error
       %test = ii + A_cost(ii); % test will not change
       test(ii) = A_cost(ii); % test will change
    end
    t1 = toc;
    fprintf('parallel cost %f seconds in sum\n' , t1);
    matlabpool('close');
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

littletomatodonkey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值