【问题标题】:Optimizing a program and calculating % of total execution time improved优化程序并计算占总执行时间的百分比得到改善
【发布时间】: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


【解决方案1】:

程序 P,它在 30 秒内在 2GHz 机器 M 上运行,并通过用 3 条乘以 x 的指令替换所有 'raise to the power 4' 实例进行了优化。这个优化的程序将是 P'。乘法的 CPI 为 2,幂的 CPI 为 12。如果优化了 10^9 次这样的操作,

根据这些信息,我们可以计算执行所有 POWER4(“提高到 4 次幂)指令所需的时间,我们有这些指令的总数(所有 POWER4 都被替换,计数为 10^9 或 1 G)。每个 POWER4指令需要 12 个时钟周期(CPI = 每条指令的时钟),因此所有 POWER4 都在 1G * 12 = 12G 周期内执行。

2GHz 机器每秒有 2G 个周期,执行时间为 30 秒。总 P 程序执行为 2G*30 = 60 G 循环 (60 * 10^9)。我们可以得出结论,P 程序还有一些其他的指令。我们不知道它们有哪些指令、执行了多少次,也没有关于它们的平均 CPI 的信息。但是我们知道执行其他指令所需的时间是 60 G - 12 G = 48 G(总程序运行时间减去 POWER4 运行时间 - 对于简单处理器来说是这样)。有一些 X 执行的指令,Y 平均 CPI,所以 X*Y = 48 G。

因此,程序 P 执行的总周期为

频率 * 秒 = POWER4_count * POWER4_CPI + OTHER_count * OTHER_mean_CPI

2G * 30 = 1G * 12 + X*Y

或P的总运行时间:

30s = (1G * 12 + X*Y) / 2GHz

总执行时间的改进百分比是多少?

用 3 倍多的 MUL 指令(乘以)替换 1G POWER4 操作后,我们有 3G MUL 操作,它们所需的周期现在是 CPI * count,其中 MUL CPI 是 2:2*3G = 6G 周期。 P'的X*Y部分不变,可以解决问题。

P' 时间以秒为单位 = ( MUL_count * MUL_CPI + OTHER_count * OTHER_mean_CPI ) / 频率

P'时间 = (3G*2 + X*Y) / 2GHz

改进不是很大,因为P中的POWER4指令只占用了部分运行时间:12G/60G;和优化将 12G 转换为 6G,而不改变剩余的 48G 周期部分。通过只将部分时间减半,我们得到的时间不是一半。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多