我优化了一个算法,在windows上新老对比提升10倍,在linux-x86上提升3倍,在linux-arm上提升6倍。
跑的都是相同的代码,而且都是在同一个平台内进行对比的,为啥提升比例大不一样呢?
估计和游戏一样吧,同样游戏A平台和N平台性能表现不一样
我觉得单纯算法来说,提升应该是差不多的。就是不知道你用什么来测试?
你不同平台核心数量根本不一样吧?
同样的一个多线程并行计算,在10核下就比单线程提高10倍,到64核下就能提高64倍。
对于算法优化的比较,没有人会拿不同平台去对比,一半只做与硬件无关的比较。也就是时间复杂度和空间复杂度比较。 你在不同平台进行比较,涉及到一个问题。即便是同样的硬件,不同的操作系统占用的硬件资源是不一样的,而且不同框架,硬件调度算法也有可能不一样。有可能win占用硬件资源比较大,同样的硬件,只有50%的资源给你跑,而你的计算瞬时需要资源是60%,那么你的计算速度就呗一直拖延了,而你优化之后,瞬时资源降到了百分之50%以内,那么你的计算任务会被实时完成,因此优化效果明显。 而linux可能系统占用资源少,那么可能有70%的资源给你跑,不管优化与否,你的计算任务都是实时进行。那么优化效果就不那么明显。
因此我们在比较算法的优劣时,一般以纯算法的时间复杂度与空间复杂度,而不是对多个平台进行比较。