并行程序性能分析与优化策略
1. 并行执行时间分析
在并行程序中,对于具有 $p$ 个处理单元和 $N$ 次迭代的循环,其并行执行时间 $T_p(k)$ 可通过以下近似公式估算:
$T_p(k) = \frac{N}{k \cdot p}(k \cdot B + \sigma) = \frac{N \cdot B}{p} + \frac{N \cdot \sigma}{k \cdot p}$
其中,$\frac{N}{k}$ 个块由 $p$ 个处理器并行执行,每个块的执行时间为 $k \cdot B + \sigma$,$B$ 表示一次迭代的执行时间,$\sigma$ 表示一个块的调度开销。对 $T_p(k)$ 求一阶导数:
$T_p^{\prime}(k) = -\frac{N\sigma}{k^2 \cdot p}$
该导数无零点,所以在这种简单情况下,无法计算出 $k$ 的最优值。对近似公式进行小修改:
$T_p(k) = (\frac{N}{k \cdot p} + 1)(k \cdot B + \sigma) = \frac{N \cdot B}{p} + k \cdot B + \frac{N \cdot \sigma}{k \cdot p} + \sigma$
此时一阶导数为:
$T_p^{\prime}(k) = B - \frac{N \cdot \sigma}{k^2 \cdot p}$
其零点为 $k = \sqrt{\frac{N \cdot \sigma}{p \cdot B}}$,这是全局最小值。但由于 $B$ 的值未知,即使得到这个 $k$ 值,也可能无法找到实际循环执行的最小值,并且块调度可能导致性能下降,即
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



