首先,这不是任何家庭作业问题,它只是一般类型的算法。在一个并行计算过程中,我正在把我的脑袋缠绕在一个具有运行时O(某些+ ... log p)的算法风格上。例如,我们研究了O(n / p + log p)的序列约简算法,其中p = #procs,n是问题大小。记录库2.
我遇到的问题是log(p)的想法。对于我来说,我常常看到log(n)到处都是将问题减少到两个大小为n / 2的子问题等。第二种只是将算法的步复杂性作为log(p)的想法。因为如果我增加处理器的数量,这意味着对于固定大小的问题,那么我增加了算法中的步骤数量?我一直认为算法的阶跃复杂性是算法的固有顺序方面,因此增加或减少处理器的数量不会对此产生任何影响。这是一个不好的想法吗?
我想有用的是一些算法的伪代码,其中log(p)的运行时间在其中。
答案 0 :(得分:3)
考虑计算n个数的总和。每个处理器都可以分配n / p编号,但是如何将各个处理器的结果相加?对于运行时O(n / p + p),您可以将所有p结果传递给一个处理器,但是您可以以树状方式更快地组合总和。
答案 1 :(得分:0)
我认为O(n / p + log(p))确实有意义,因为n / p + log(p)随着p变量的增加而减小,所以运行时间随着你添加处理器和这个界限确实有意义;否则log(p)的运行时间不太可能是自然的,因为它相对于处理器数量正在减少。