[并行计算]Matlab并行计算工具箱(Parallel Computing Toolbox)官方文档教程中文版(2)

在改为parfor的过程中代码容易出现的问题

Code #2-1
1.for x = 0:0.1:1  
2.for k = 2:10  
3.x(k) = x(k-1) + k;  
4.end  
5.x  
6.end  
7.
8.parfor x = 0:0.1:1  
9.parfor k = 2:10  
10.x(k) = x(k-1) + k;  
11.end  
12.x  
13.end  

#2-1代码片的上半部展示了一段普通的嵌套循环代码,下半部分是通过改写for字段到parfor希望实现并行计算,然而这段代码在实施并行中出现了3个问题:

·第一,CPU并行计算的本质是具备的多个物理核心的处理器同时做计算,也就是说,如果CPU的物理核心数是4,而for循环从i = 1 到12的话,那么第一个物理核心将处理1,5,9标号的循环任务代码,而核心二将处理2,6,10标号的循环任务代码,如此类推,也就是说,在第一层的循环中,循环任务已经实施了并行并且所有核心在并行的状态,因此内循环实质上已经归类到第一层循环所分配到的物理核心上去,不能再次做并行计算,因此代码片2-1中的内嵌套parfor实质上没有起到作用,应该改写为for就可以了;

·循环递增不能用小数做间隔,虽然大家都懂应该循环多少次叫计算机去自己算,但是Matlab的parfor并行计算功能只认正整数的递增索引,因此应尽可能把递增索引改写为 i = 1:1:n的形式;

·第三个问题是语句x(k) = x(k-1) + k; 在并行计算为了提高效率,是不能令上下文的变量具有嵌套的(nested),如此语句所示,x(k)的值与前一个值有关,在计算的过程中,若x(k-1)还没计算出来,则虽然开启了并行,x(k)的值也需要等待x(k-1)计算完毕才能计算,大大拖慢了计算速度,还不如单核的性能;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值