Linux 阿姆达尔'的准确度如何;什么是法律?

Linux 阿姆达尔'的准确度如何;什么是法律?,linux,operating-system,cpu,cpu-architecture,parallelism-amdahl,Linux,Operating System,Cpu,Cpu Architecture,Parallelism Amdahl,在计算机体系结构中,阿姆达尔定律给出了在固定工作负载下执行任务的延迟的理论加速,这对于资源得到改善的系统来说是可以预期的 Slatency是整个任务执行延迟的理论加速 s是任务执行部分延迟的加速,该部分任务得益于系统资源的改善 p是整个任务的执行时间的百分比,该任务涉及改进前从系统资源改进中受益的部分 Slatency=1/[(1-p)+(p/s)] 这一切都是理论上的,它让我思考,什么时候它不适用。估计CPU性能的准确度如何?通常,当你想调整程序的某个部分时,你会制作一个微基准来单独测试它 这

在计算机体系结构中,阿姆达尔定律给出了在固定工作负载下执行任务的延迟的理论加速,这对于资源得到改善的系统来说是可以预期的

Slatency
是整个任务执行延迟的理论加速

s
是任务执行部分延迟的加速,该部分任务得益于系统资源的改善

p
是整个任务的执行时间的百分比,该任务涉及改进前从系统资源改进中受益的部分

Slatency=1/[(1-p)+(p/s)]


这一切都是理论上的,它让我思考,什么时候它不适用。估计CPU性能的准确度如何?

通常,当你想调整程序的某个部分时,你会制作一个微基准来单独测试它

这并不总是反映它作为完整程序的一部分运行时的行为。(即,在执行您正在调整的部件之间进行其他工作,而不是在一个紧密的循环中。)

e、 g.如果您发现
sin(x)
计算非常昂贵,并将其替换为一个查找表,这可能会在微基准中获胜,因为一个足够小的表在背对背调用时在缓存中保持热状态,其间没有其他工作。类似地,微基准测试性能时,分支预测已启动,并且没有代码缓存压力(这可以使循环展开看起来比实际情况更好)

但这仅仅意味着你对整个程序中函数的
s
的估计是错误的,而不是说阿姆达尔定律不准确。这只是一个使用错误的例子


然而,这确实会给你的问题带来一个真正的答案:


加速程序的一部分会导致程序的其他部分出现更多缓存或TLB未命中、分支预测失误等,这违反了阿姆达尔定律。

谢谢。我不知道估计
s
是如此棘手。但这是有道理的。阿姆达勒定律是一个简单的数学关系,从这个意义上说,它是绝对正确的——但它所假设的(或通常在教科书应用程序中假设的)基本性能模型太简单了:程序可以平均分为两部分:一部分受某些“资源改进”的影响(这同样可能是资源的减少)和另一个不受影响的部分。在一个像现代主机这样极其复杂的系统中,通常没有这样明确的划分:正如彼得在上文中解释的那样,一部分的变化会对其他部分产生任意的连锁反应。