Matlab加速计算(一)

1、不使用GPU实现Matlab加速

2、parfor的使用

1、不使用GPU实现Matlab加速 (参考《GPU与MATLAB混合编程》)

        1.1 将数据表示为向量/矩阵的形式,有助于尽量减少for循环的使用

%nonVecl.m
A=0:0.0001:10;
B=0:0.0001:10;
z=zeros(size(A));
y=0;
for i=1:1000001
    z(i)=sin(0.5*A(i))*exp(B(i)^2);
    y=y+z(i);
end


%Vecl.m
A=0:0.0001:10;
B=0:0.0001:10;
z=zeros(size(A));
y=0;
y=sin(0.5.*A)*exp(B.^2);

        注意:符号*表示矩阵乘法,而符号.*则表示矩阵中对应元素相乘,其中按元素运算的还有.^,./,sqrt(),sin(),log(),abs()等

        1.2 需要对每个元素设定上下边界时,可以采用min和max替代if和else语句设置元素边界:

if(A(i)<0.1) A(i)=0.1;

A=max(A,0.1);

        1.3 如果需要查找和替换某些元素的值,可以用find函数替代if和else来保持向量化

if(A(i)==0.5) A(i)=0;

A(find(A==0.5))=0;

        1.4 预分配

通过为所需数组预分配内存,能够获得相当显著的加速。

        1.5 矩阵按列嵌套循环更有利于程序的运行

注意:当矩阵较为稀疏的时候可以考虑采用稀疏矩阵存储数据

2、parfor的使用

​​​​​​​

%启动并行计算
CoreNum=6;
parpool('local',CoreNum);
%关闭并行计算
delete(gcp('nocreate'));

注意:

        (1)循环变量在循环体中的使用要具有独立性,循环体之间不相关。

        (2)parfor中不能嵌套parfor

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值