【问题标题】:Efficiently parallelising independent tasks有效地并行独立任务
【发布时间】:2013-03-01 18:42:12
【问题描述】:

我有 [;N;] 个工作单元,[;w_n;],它们实际上可以令人尴尬地并行化。每个都需要大约给定的时间长度,[;t_n;],这是我们事先知道的。

鉴于我可能需要处理工作单元的某些子集,以及我可能使用最多 [;P;] 个进程的约束,每个进程都在单独的 CPU 上,我如何有效地分配工作单元,提前,以使所有进程尽可能(及时)彼此接近地完成?

【问题讨论】:

    标签: performance parallel-processing processing-efficiency


    【解决方案1】:

    A)如果它们在统计上都是相同的持续时间,并且您无法控制它们中的任何一个运行多长时间,我猜平均而言,您不能比“处理器完成一个工作单元”做得更好,获取任何未完成的工作单元并执行它直到完成”。您的平均运行时间将为 Sum(1..N,t_n)/P。

    B) 如果他们有一些可预测的时间,我会很想要求每个进程选择估计时间最长的剩余工作单元,然后运行它。这首先运行所有昂贵的工作,留下大量的小工作来回填剩余的时间。

    C) 如果您坚持预先选择的静态时间表,请离线运行算法 B) 并为流程预先分配工作单元。与动态计划相比,这可能会为您提供更长的总运行时间,动态计划可以在一定程度上考虑实际变化。

    【讨论】:

    • 我已经更新了这个问题。我们知道每个工作单元需要运行多长时间(并且期望不相等)。必须在开始计算之前分配要处理的工作单元。
    • 必须分配?你确定这是一个要求吗?如果是这样,您将首先选择一个静态时间表,并且必须承受后果。与动态计划相比,这可能会为您提供更长的总运行时间,动态计划可以在一定程度上考虑实际变化。这是你想要做出的权衡吗?如果不是,我的 B) 答案可能是最好的。
    • 用例有点不寻常,但我认为这意味着我们的任务分配必须提前。我们正在对包含在大型 blob(包含数十万个 xml 文件的 zip)中的数据应用许多转换。每个任务(转换)都应用于每个 xml 文件,并且输出顺序写入一组输出文件,每个转换一个。通过像我们一样进行分配,我们避免了任何线程安全问题,因为除了输入文件(只读)之外没有共享资源。
    • 如果每个工作单元都处理一个 XML 文件并写入一个特定于该文件的文件,那么您怎么会遇到资源争用问题?如果不是这种情况,您在“提前”调度中的哪个位置考虑了资源争用?你没有问这方面,但它肯定会对选择的时间表产生巨大的影响。而且,如果您确实有共享资源问题,您仍然可以在运行时使用锁或类似的方式解决该问题。我怀疑锁的执行成本是否会产生任何影响,尽管它们引起的延迟可能会产生严重影响。
    • 您还有另一个资源争用问题:读取单个文件。大概 zip 文件很大;因此在某种程度上分散在整个磁盘上。理想情况下,您不希望随机访问磁盘来读取它,但基于运行时的计划却不可能做到这一点。您现在希望您的日程安排包括访问下一个文件的明显时间;您将在哪里获得这些数据? 编写替换文件也有类似的麻烦;操作系统不太可能合作并按顺序编写它们。我认为您将需要几种策略来尝试和衡量:-}
    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2016-09-25
    • 2020-02-13
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多