【发布时间】:2015-04-12 20:00:32
【问题描述】:
所以有人告诉我在这里问这个而不是 StackExchage:
如果我有一个程序 P,它在 30 秒内在 2GHz 机器 M 上运行,并通过用 3 条乘以 x 的指令替换所有 'raise to the power 4' 实例进行优化。这个优化的程序将是 P'。乘法的 CPI 为 2,幂的 CPI 为 12。如果优化了 10^9 次这样的操作,总执行时间的改进百分比是多少?
这是我到目前为止所推断的。 对于 P,我们有:
time (30s)
CPI: 12
Frequency (2GHz)
对于 P',我们有:
CPI (6) [2*3]
Frequency (2GHz)
所以我需要弄清楚我们如何计算 P' 的时间以便比较时间。但我不知道如何实现这一目标。有人可以帮帮我吗?
【问题讨论】:
-
频率是每秒可用时钟的总数;你可以计算出 30 秒内有多少个时钟;第一个程序有 10^9 次“提高到功率 4”的操作,每个操作在 12 个时钟(12 个 CPI)内执行 - 因此您可以在 30 秒内从总时钟数计算它们的执行时间部分并获得未优化部分的时间程序。
-
@osgx 你在从 30 秒内的总时钟计数中计算他们的部分执行时间时让我失望了。您能否更深入地了解我如何做到这一点?
-
您的程序需要计算 10^9 条具有 12CPI 的“提高到 4 次幂”指令和一些具有平均 Y CPI 的 X 指令。您需要 10^9 * 12 个周期来提升和 XY 指令来执行其他指令。你的 CPU 有 2 GHz(每秒 2 * 10^9 个周期)。程序 P 的总运行时间为 30 秒,等于 (10^9 * 12 + XY ) / 2 000 000 000。您可以从该公式中得到“XY”部分;然后您将提升指令更改为 3 条 mul 指令并使用“XY”加上新的 mul 指令计数和 CPI 重新计算 P' 运行时间。
-
我是否需要分别计算出 X 和 Y,或者我可以将它们视为单个未知数,因为它们的个别值似乎与我需要解决的问题无关?另外,我按照您的解释(并将 X 和 Y 视为单个未知数)并得到新的时间等于 27 秒。那个听起来是对的吗?我认为改进会更大一些,因为我们将从 12CPI 变为 6CPI。
-
我不知道正确答案,这看起来像是您的家庭任务,而不是我的。如果原始程序中“提高到 4 次幂”指令的总时间较低,则改进可能很小。好的,如果你有自己的答案,我也试试:P: 30*2=12+XY, XY=48 (*10^9) ticks。 P' T=(XY+6)/2=(48+6)/2 = 27 秒。 XY部分为80%,抬升部分为P时间的20%;提高 20% 两倍并获得 80%+10% 的 30 秒,27 看起来不错。我们可以学到:不要优化运行时间百分比低的程序部分,即使你将它的一半时间它仍然是一小部分.. PS:我认为你可以发布你的解决方案作为答案
标签: performance optimization timing