在这种情况下无法理解递归加倍

时间:2016-01-28 00:37:26

标签: recursion parallel-processing hpc

我正在努力解决我被分配的递归加倍问题。我知道递归加倍将更大的问题分解为更小的子问题,以便计算可以并行化,但我不认为它可以用这个问题。

  

练习1.4。操作

     

(i){
      x [i + 1] = a [i] * x [i] + b [i];
  }

     

无法由管道处理,因为它之间存在依赖关系   输入一次迭代的操作和输出   以前。但是,您可以将循环转换为循环   在数学上等效,并且可能更有效地计算。   派生一个表达式,从x [i]计算x [i + 2]而不涉及   X [I + 1]。这被称为递归加倍。假设你有很多   临时存储。您现在可以通过

执行计算      

•做一些初步计算;

     

•计算x [i],x [i + 2],x [i + 4],......,并从中,

     

•计算缺失的术语x [i + 1],x [i + 3],....

     

通过给出T0(n)和的公式来分析该方案的效率   TS(N)。你能想出一个为何进行初步计算的论据   在某些情况下可能不太重要?

所以我理解x2的表达式是:x2 = a1(a0 * x0 + b0)+ b1 但我不明白的是A.这是如何与递归双重...以及B.如果仍然需要先前计算的结果,这将如何实现任何加速。

1 个答案:

答案 0 :(得分:1)

中心概念是,一旦你能用x [i],a [i]和b [i]计算x [i + 2],你就可以分成两个线程:

  1. 从x [0]开始,计算偶数项。
  2. 从x [0]计算x [1],然后计算奇数项。
  3. 事实上,如果您对并行化开销有很好的了解,就可以生成一个Fibonacci进程树,每当前一个线程运行得很好时就开始一个新的进程。