我过去做过一些GPU编程,并且意识到与典型的顺序算法不同,例如,您可能有一个问题的O(nlogn)
解决方案,然后您可以在GPU中有效地实现它,#39}更像是你有一个顺序算法,然后你可以通过应用paralellization来加快速度。
大多数关于GPU算法的论文都会得出结论"我们可以实现3x / 4x / etc加速"
例如
http://www.sciencedirect.com/science/article/pii/S0022000012000992
因此,我们假设我们有一个顺序算法O(2^n)
。它是否有助于创建一个GPU算法来加快速度,让我们说10
因素?
就像你说的那样,你实现了O(2^n/10)
时间的复杂性,这对于一个大的n来说,使你的成就毫无价值。
我猜这同样适用于各种复杂情况。
因此,我不确定这些GPU算法的重要性,因为它通常只是通过常数因子来降低时间复杂度。
答案 0 :(得分:3)
从计算机科学的概念突破来看,你是正确的,不变因素并不重要。但就实际使用而言,10倍是一笔巨大的交易!原因是n经常固定或增长非常缓慢,并且就你正在做的事情的反馈而言,10小时运行时间和1小时之间的差异是巨大的。从我自己的经验来看,在粒子物理学中,你倾向于处理数据样本,这些样本的大小在几个月的时间尺度上有效地固定 - 从你的探测器获得一批新事件需要多长时间,通过加工管道,并进入研究生手中。现在,您希望对该数据进行数百次分析,每次运行之间进行微小的更改 - 尤其是调试更改;你想快速反馈。获得每天十次或一天一次的反馈之间的差异很容易就是毕业与否之间的差异。
在2 ^ n的特定情况下,诚然,您最好希望您的数据量根本不会增加。但是对于像n ^ 2这样的更常见的情况,因子10可能非常有用 - 相同处理时间的数据的三倍非常酷。