Performance 不同硬件速度下的算法效率?

Performance 不同硬件速度下的算法效率?,performance,algorithm,hardware,Performance,Algorithm,Hardware,我一直在阅读不同的计算机科学主题,到目前为止,对我来说最困难的部分是理解高效算法的概念。我想我的问题是,理论上,当软件运行在不同速度的硬件上时,为什么算法的效率真的很重要 我希望我在描述眼前的问题时已经非常清楚了 无论底层硬件的速度如何,更快的算法都比较慢的算法快 如果CPU速度慢,那么选择高效的算法就变得更加重要,这样您就可以做更少的工作。无论底层硬件的速度如何,更快的算法都比较慢的算法快 如果CPU速度较慢,那么选择高效的算法就变得更加重要,这样您就可以减少工作量。硬件速度很重要,但硬件差异

我一直在阅读不同的计算机科学主题,到目前为止,对我来说最困难的部分是理解高效算法的概念。我想我的问题是,理论上,当软件运行在不同速度的硬件上时,为什么算法的效率真的很重要


我希望我在描述眼前的问题时已经非常清楚了

无论底层硬件的速度如何,更快的算法都比较慢的算法快


如果CPU速度慢,那么选择高效的算法就变得更加重要,这样您就可以做更少的工作。

无论底层硬件的速度如何,更快的算法都比较慢的算法快


如果CPU速度较慢,那么选择高效的算法就变得更加重要,这样您就可以减少工作量。

硬件速度很重要,但硬件差异通常会导致速度的微小变化,通常是一个恒定的因素。在算法效率的测量中,常数因子通常被忽略。对于算法分析,我们主要使用大O/θ/ω表示法,它不考虑运行时的常数差异


如果你有一个糟糕的算法,不管你的硬件有多快,它都可能无法实际完成。考虑THETAN ^ 2算法和TeTeN的区别!算法。如果n=1000000,那么您将很难找到一台能够执行θ扫描的计算机!在合理的时间内进行操作。但是,您肯定可以找到一台能够在合理的时间内执行TAN^2操作的计算机。

硬件速度很重要,但硬件差异通常会导致速度的微小变化,这通常是一个恒定的因素。在算法效率的测量中,常数因子通常被忽略。对于算法分析,我们主要使用大O/θ/ω表示法,它不考虑运行时的常数差异


如果你有一个糟糕的算法,不管你的硬件有多快,它都可能无法实际完成。考虑THETAN ^ 2算法和TeTeN的区别!算法。如果n=1000000,那么您将很难找到一台能够执行θ扫描的计算机!在合理的时间内进行操作。但是,您肯定可以找到一台能够在合理的时间内执行TAN^2操作的计算机。

算法效率的一个常用度量,即,允许您比较算法相对于彼此的时间增长率,假设它们在相同的硬件上运行,并且忽略恒定因素

当硬件速度增加时,所有算法的速度都会增加大约相同的常数:如果硬件速度增加三倍,所有算法的速度都会增加三倍*。这意味着在旧硬件上更快的算法在新硬件上仍然会更快

此外,硬件加速比的影响是一个常数,与问题大小无关。根据算法随数据大小的扩展方式,改进硬件的加速比对于不同的算法会有所不同

例如,考虑两种算法,X增长为ON和Y,增长为ON2。假设您测量他们处理固定数量数据所需的时间。将CPU加速四倍将使X在同一时间处理大约四倍的数据量,而Y只能处理大约两倍的数据量

同时,硬件优化可能会给某些操作带来不成比例的大速度提升,如果对算法X有用而对算法Y无效,则会扭曲在不同硬件上运行的两个算法的相对速度


*除非您的算法遇到不同的瓶颈:例如,三倍的CPU加速可能需要内存访问中的匹配加速,以便在所有算法中实现预期的加速。

算法效率的常用衡量标准,允许您比较算法相对于彼此的时间增长率,假设它们运行在同一硬件上,并忽略常数因子

当硬件速度增加时,所有算法的速度都会增加大约相同的常数:如果硬件速度增加三倍,所有算法的速度都会增加三倍*。这意味着在旧硬件上更快的算法在新硬件上仍然会更快

此外,硬件加速比的影响是一个常数,与问题大小无关。根据算法随数据大小的扩展方式,改进硬件的加速比对于不同的算法会有所不同

例如,考虑两种算法,X增长为ON和Y,增长为ON2。比方说,您测量了他们处理固定数据所需的时间 数据量。将CPU加速四倍将使X在同一时间处理大约四倍的数据量,而Y只能处理大约两倍的数据量

同时,硬件优化可能会给某些操作带来不成比例的大速度提升,如果对算法X有用而对算法Y无效,则会扭曲在不同硬件上运行的两个算法的相对速度


*除非您的算法遇到不同的瓶颈:例如,CPU速度提高三倍可能需要内存访问中的匹配速度,以便在所有算法中实现预期的速度提高。

如果您询问一位学术界或最近受过教育的程序员,他们会说重要的是大O,因为只要n足够大,On-logn算法总是优于On*n算法

但这就是问题所在——n实际上可能没有那么大

此外,他们倾向于忽略不变的因素。 我曾经听到乔恩·本特利温和地责骂学者们说,他们真的不介意薪水乘以50,是吗

在现实世界中,常数因子非常重要


p.S.730x的加速比,通过一系列六次编辑实现。

如果你问一个学术或最近受过教育的程序员,他们会说重要的是big-O,因为只要n足够大,登录n算法总是比登录n算法强

但这就是问题所在——n实际上可能没有那么大

此外,他们倾向于忽略不变的因素。 我曾经听到乔恩·本特利温和地责骂学者们说,他们真的不介意薪水乘以50,是吗

在现实世界中,常数因子非常重要


通过一系列的六次编辑,实现了730倍的加速。

你的第二段已经有一段时间不正确了。我们对计算机的速度有更精细的概念,因为我们不断提出越来越聪明的计算机体系结构。越来越聪明的计算机架构意味着可能会遇到更多不同的瓶颈;O表示法允许您比较运行时间的增长率,忽略常数因子。它最后什么也没说,什么特别的东西;你所能说的就是最终会发生一些事情——不知道什么时候发生。@tmyklebu你能用一些证据来支持你的主张吗;我想进一步研究这个问题。@tmyklebu我明白这一切。我给出了一个粗略的近似值,对于想知道为什么学习算法效率很重要的人,而不是准备攻读博士学位的人,应该足够了。算法分析中的限定符。@dasblinkenlight硬件改进并不总是平等地影响所有算法。例如,当前从传统磁盘到高性能闪存驱动器的迁移使得基于哈希的算法值得考虑,因为基于排序的算法是唯一值得考虑的选择。你的第二段已经有一段时间不正确了。我们对计算机的速度有更精细的概念,因为我们不断提出越来越聪明的计算机体系结构。越来越聪明的计算机架构意味着可能会遇到更多不同的瓶颈;O表示法允许您比较运行时间的增长率,忽略常数因子。它最后什么也没说,什么特别的东西;你所能说的就是最终会发生一些事情——不知道什么时候发生。@tmyklebu你能用一些证据来支持你的主张吗;我想进一步研究这个问题。@tmyklebu我明白这一切。我给出了一个粗略的近似值,对于想知道为什么学习算法效率很重要的人,而不是准备攻读博士学位的人,应该足够了。算法分析中的限定符。@dasblinkenlight硬件改进并不总是平等地影响所有算法。例如,当前从传统磁盘到高性能闪存驱动器的迁移使得基于哈希的算法值得考虑,因为基于排序的算法是唯一值得考虑的选择。Ehh。n上了!n^2在^2上。上界并不是全部。事实上,他们经常会出人意料地告诉你将要发生的事情。@tmyklebu当然。。。但是,当计算机科学家写Ox时,他们通常指的是税收。n上了!n^2在^2上。上界并不是全部。事实上,他们经常会出人意料地告诉你将要发生的事情。@tmyklebu当然。。。但是,当计算机科学家写Ox时,他们的意思通常是,在现实世界中,关于Ox的税务评论是,logn是一个很小的常数。对于一些公司来说,这是一个稍大的常数。我对这个常数的评论是,在现实世界中,logn是一个很小的常数 利什常数。对于一些公司来说,这是一个稍大的常数。