【问题标题】:Speed up without a serial fraction在没有串行分数的情况下加速
【发布时间】:2018-05-20 13:09:36
【问题描述】:

我在一个并行包上进行了一组实验,比如superlu-dist,具有不同的处理器编号,例如:4, 16, 32, 64

我得到了每个实验的挂钟时间,比如:53.17s, 32.65s, 24.30s, 16.03s

加速比公式为:

                  serial time
  Speedup = ----------------------
                parallel time

但是没有关于序列分数的信息。

我可以简单地取挂钟时间的倒数吗?

【问题讨论】:

    标签: parallel-processing mpi performance-testing parallelism-amdahl


    【解决方案1】:

    我可以简单地取挂钟时间的倒数吗?

    不,
    真正的加速数据需要比较苹果和苹果:

    这意味着,原始,纯-[SERIAL]流程调度应该与任何其他可能修改部分的场景进行比较,以便使用某种并行性(并行部分可能会重新组织,以便在 N CPU/计算资源上运行,而串行部分保持原样)。

    这显然意味着原始的[SERIAL]-code 被扩展(都在代码中(#pragma-decorators、OpenCL-modifications、CUDA-{ host_to_dev | dev_to_host }-tooling 等),并且及时(执行这些添加的功能,在原始[SERIAL]-code 中不存在,以进行基准测试),以便添加一些新的部分,其中(可能的[PARALLEL])处理的其他部分将采取地点。

    这是有代价的——附加开销成本(设置和终止以及从那里的[SERIAL]-part 到[PARALLEL]-part 和返回的数据通信)——所有这些都增加了额外的@987654339 @-part 工作负载(和执行时间 + 延迟)。

    更多详情,欢迎read section Criticism in article on re-formulated Amdahl's Law.

    [PARALLEL]-portion 看起来很有趣,但 Speedup 主要上限在原版中的 [SERIAL]-portion 持续时间( s = 1 - p )

    但是需要添加附加持续时间和增加的延迟成本,随着工作的“组织”从原始的纯-[SERIAL] 到希望-有[PARALLEL]-code 执行进程调度,如果要实现现实评估


    在单个处理器上运行测试并将其设置为串行时间,...

    @VictorSong 提出的建议听起来很简单,但对一个不连贯的系统(不是纯粹的[SERIAL] 原始系统)进行基准测试,并记录一个倾斜的标准以进行比较。

    这就是为什么应该设计公平方法的原因。纯-[SERIAL] original 代码执行可以加时间戳,以显示未更改部分的真实持续时间,但附加开销时间必须纳入附加-关于现在并行化测试的串行部分的扩展。

    重新阐述的阿姆达尔收益递减定律explains 加上附加开销和处理原子性的影响,鉴于添加了更多计算资源,这将不允许进一步假设加速增长,但处理的并行部分不允许进一步拆分任务工作负载,因为其内部处理原子性的某种形式,尽管有可用的空闲处理器,但无法进一步划分。

    这两个重新表述的简化后的表达式如下所示:

                   1
    S =  __________________________; where s, ( 1 - s ), N were defined above
                    ( 1 - s )            pSO:= [PAR]-Setup-Overhead     add-on
         s  + pSO + _________ + pTO      pTO:= [PAR]-Terminate-Overhead add-on
                        N               
    

    一些用于进一步可视化附加开销成本的交互式 GUI 工具是 available for interactive parametric simulations here - just move the p-slider 接近 ( 1 - s ) 的实际值 ~ 具有非常 [SERIAL] 部分的非零部分原代码

    【讨论】:

      【解决方案2】:

      当您说“连续分数”时,您是什么意思?根据谷歌搜索,显然 superlu-dist 是 C,所以我想你可以使用 ctime 或 chrono 并以通常的方式花时间,它适用于手动 std::threads 和 omp。

      我只是在单个处理器上运行测试并将其设置为串行时间,然后使用更多处理器再次进行测试(就像你说的那样)。

      【讨论】:

      • 您的意思是使用单个处理器运行代码。这是一个解决方案,但效率不高。我不想测量串行时间。有时需要很多时间超过 300 秒
      • 那我猜你可以照你自己说的做,时间*挂钟倒数。但请注意,由于性能不会线性扩展,因此您的结果不会绝对准确。
      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 2015-12-25
      • 2015-02-26
      • 2016-10-21
      • 1970-01-01
      • 2015-09-06
      • 2020-03-14
      相关资源
      最近更新 更多