代码串并行区域判定及阿姆达尔定律加速比计算方法咨询
阿姆达尔定律习题解答
解题思路正误判定
你的解题思路存在核心概念偏差,错误根源是计算串行占比S、可并行占比P时选错了统计基准,最终得到的加速比结果不正确。
阿姆达尔定律中定义的S和P,均以单处理器完全串行执行完整程序的总耗时为统计基准,而非并行优化后的程序执行耗时。
正确计算过程
- 第一步:计算单处理器串行执行的基准总耗时
- 程序首尾强制串行的代码段总耗时:
3ms + 4ms = 7ms - 可并行部分共5个等长段,单处理器执行每段需16ms,单线程下需依次执行,总耗时为
5 * 16ms = 80ms - 单处理器完整执行程序的总耗时
T_serial = 7ms + 80ms = 87ms
- 程序首尾强制串行的代码段总耗时:
- 第二步:计算串行、可并行部分的占比
- 串行占比
S = 强制串行段耗时 / T_serial = 7 / 87 ≈ 0.0805 - 可并行占比
P = 可并行段单线程总耗时 / T_serial = 80 / 87 ≈ 0.9195
- 串行占比
- 第三步:代入阿姆达尔定律公式计算加速比
阿姆达尔定律公式为:Speedup = 1 / (S + P/N)
其中N为可用处理器数量,本题中N=5,代入数值计算:Speedup = 1 / (7/87 + (80/87)/5) = 1 / (23/87) = 87/23 ≈ 3.78
结果验证
可以用最朴素的加速比定义交叉验证:加速比=单线程总耗时/优化后多线程总耗时。
本题中5个并行段可在5个处理器上同步执行,仅需单段耗时16ms即可完成全部并行部分,因此优化后总执行时间为7ms + 16ms =23ms,加速比为87ms /23ms ≈3.78,和公式计算结果完全一致。
内容的提问来源于stack exchange,提问作者malik727
相关产品推荐
相关产品推荐

