我读了一篇论文,其中(并行)算法的并行成本被定义为C P (n)= p * T P (n),其中p
是处理器数,T
处理时间和n
输入。算法是成本最优,如果C P (n)近似恒定,即如果算法在同一输入上使用两个处理器而不是一个,则只需要一半时间。
还有一个名为并行工作的概念,我并不完全掌握。 论文称它测量了并行OP的执行次数。 算法是工作最优,如果它执行与顺序对应(渐近)的OP一样多的OP。 成本最优算法总是工作最优,但反之亦然。
有人可以说明并行工作的概念,并显示与并行成本的相似点和不同点吗?
答案 0 :(得分:1)
听起来并行工作只是衡量所有进程并行运行的指令总数,但只计算一次并行计数。如果是这种情况,那么它与并行成本方程中的时间项更紧密相关。可以这样想:如果算法的并行版本运行的指令多于顺序版本 - 意味着不工作最优,那么假设所有指令的持续时间相等,则必然会花费更多时间。通常,这些额外指令位于并行算法的开头或结尾,并被视为并行算法的开销。它们可以对应额外的簿记或沟通或最终的结果汇总。
因此,非工作最优的算法不能成本最优。
答案 1 :(得分:1)
调用“并行成本”的另一种方法是“上下文切换成本”,尽管它也可能来自不同线程之间的相互依赖性。
考虑排序。
如果并行实现Bubble Sort,每个线程只是选择下一个比较,那么在“并行”中运行它将会产生巨大的成本,直到它本质上是一个混乱的顺序版本算法和你的并行工作基本上都是零,因为大多数线程只是等待大部分时间。
现在将它与Quick Sort进行比较并为原始数组的每次拆分实现一个线程 - 线程不需要来自其他线程的数据,而渐进式用于更大的起始数组的成本如果系统具有无限的内存带宽,那么旋转这些线程的工作将由完成的工作的并行性质支付。实际上,与内存访问通道相比,旋转更多线程是不值得的,因为线程仍然具有不可见(从代码角度看)依赖性,通过共享顺序访问内存
答案 2 :(得分:1)
我认为并行成本和并行工作是同一枚硬币的两面。它们都是加快速度的措施, 后者是使前者成为理论概念。
让我们将n维向量加法视为易于并行化的问题,因为它可以分解为 n 独立任务。
问题本质上是工作最优,因为如果算法并行运行,并行工作不会改变,总会有 n < / em>需要添加的矢量组件。
如果不在(虚拟)机器上执行算法,则无法完成并行成本,其中会出现内存带宽不足等实际限制。因此,如果硬件(或硬件访问模式)允许完美执行和划分问题 - 以及时间,工作最优算法只能成本最优。
成本最优化是一个更强烈的需求,正如我现在所认识到的那样,只是efficiency
的另一个例证
在正常情况下,成本最优算法也将工作最优, 但如果通过缓存,内存访问模式等获得的加速是超线性的, 也就是说,使用两个处理器的执行时间是十分之一而不是预期的一半,执行更多工作的算法有可能是工作最优,仍然是成本 - 最优