【问题标题】:How to find the optimal number of workers for parfor?如何找到 parfor 的最佳工人数量?
【发布时间】:2019-11-10 12:02:00
【问题描述】:

如何在亚马逊的虚拟机上为 parfor 找到最佳的工作人员数量?

在哪些情况下我应该使用物理内核的数量和逻辑内核的数量?

对此是否有任何“经验法则”?

我运行一个编译代码(一个可执行代码)。

【问题讨论】:

  • 我不确定这是一个可以回答的问题。最佳方式(最快的运行时间?最便宜的交易?最小的网络流量?)?你怎么知道你甚至需要parfor(也就是说,也许重写你的算法可以让它在单核上运行得足够快)?您有可用的 GPU 内核吗?我认为答案取决于具体算法、可用硬件和优化目标。对于这样一个一般性问题,唯一有效的答案是“使用不同的设置运行它并找出答案”。
  • 在不同的配置上运行你的循环,收集结果并决定。
  • 在充分尊重上述两种观点的情况下,问题有一个解决方案,无需在盲实验上花费(浪费)大量费用 - 元策略“运行它 (多次) 以便决定如何运行它成本有效 - 是不是免费,因为执行这种元策略将花费 许多,而不是重新运行“最佳” -再次配置...不是吗?初创企业的云“优惠券”试图说服人们相信相反的观点,但成本很重要,不是吗?:o)

标签: matlab performance amazon-ec2 parallel-processing parallelism-amdahl


【解决方案1】:

Q如何在 Amazon 的虚拟机上为 parfor 找到 最佳 工人数?

在类似的,只是部分定义的情况下,我从类似的一组主要反对意见开始,例如 above“根据什么标准函数(效用乐趣 / 惩罚乐趣)优化什么参数和成本 - [TIME](首先,部分结果的延迟,E2E 完成),[SPACE](是的:缓存和 RAM 占用空间),扩展,外部性(能源成本, { owned | rented }-基础设施成本、研发成本、设计/工程成本、质量保证成本、验证/认证成本、其他相关劳动力成本、风险缓解政策成本——仅举几例)?已经由@Dev-iL 在第 2 句中提出,复述了刘易斯卡罗尔的智慧,铭刻在《爱丽丝梦游仙境》中:

爱丽丝:我应该走哪条路?
猫:这取决于你要去哪里。
爱丽丝: 我不知道。
猫:那你走哪条路都没关系。”

这告诉我们会发生什么
如果没有
任何和所有标准pre-定义:
" (没有目标),任何一条路都能带你到那里……”


然而,这个问题在大约 50 年前就已经解决了:

这个问题由 Dr.Gene AMDAHL (1967) 根据 prof.Kenneth E. KNIGHT (1966) 的工作解决了,解决方案是应用“收益递减法则”,以前者命名,Amdahl Law。有关细节和当代对幼稚应用原创(开销幼稚和原子量的工作)的批评,请阅读this

第 0 步:
测试/记录所有纯-[SERIAL]-ly 执行部分的净时间Code-under-Review (CuR),即“之前”和“之后”希望拥有parfor-syntax-constructor。

第一步:
测试/记录所有parfor的网络时间-{实例化 strong> + 终止 }-间接费用。这里为调用签名和返回值类型和大小调整所有适当缩放的参数(CuR 必须花费一些时间在每次调用的基础上序列化/反序列化所有它们,并且还必须花费额外的开销时间到 SER /DES 关于准备/运输/收集每个“远程”-parfor-ed 结果),MEM-allocs 的规模-如果只是一些“浅”计算密度,与 CuR 相比,这也需要大量时间或内存区域的重用效率低下的并行CuR恰好被考虑在内)。其中一些附加开销成本(记录在 [TIME]-domain 中)在代码的parfor-decorated 部分“内部”累积(并且在纯-[SERIAL] 代码执行期间不可见或不会发生,因此测试/基准测试可能需要一些工作来隔离这些附加成本“内部”parfor-ed 部分的可疑操作,如果成本建模努力计算,则分配并且从不重复使用更大的内存区域等降低到外部支付的基础设施费用的美分)。

第 2 步:
测试/记录工作单元的原子性引入了最后一批工作单元的“孤立”时间永远不会变得更快(由于工作单元的原子性 - 工作的不可分割持续时间,没有其他免费的处理器内核可以提供帮助)

...应该使用物理的数量和逻辑核心的数量?

第 3 步:
测试/记录实际工作窃取/净拥有工作的比率(无论这些是否带有“营销”标签) 代码执行单元的类型(虚拟设备由于更高的延迟、更高的工作窃取率而导致效率低下——即,对于任何形式的主要计算密集型并行工作者来说,预期效率会更低)

第 4 步:
测试/记录实际频率/缓存大小/RAM 引起的 CPU 饥饿情况,这将导致“units-of-工作”实际上是“那里”——执行得比在 { local-| 上预期的要差。私有网格-}-计算基础设施。

第 5 步:
比较所有考虑中的核心/类型的所有应计成本,使用到期(和 适当放松 上面记录的所有低效率)步骤 0:4 中的参数并使用您的任何基础设施提供商的价格计划,您将获得使用更多/更少资源的大致成本对于任何给定的时间/财务预算限制。

所有功劳归于 Dr.Gene AMDAHL,他的工作被所有销售尽可能多的“廉价”标签但表现不佳且仅共享玩具的营销人员所憎恨(是的,虚拟化还意味着另一层添加-在开销上并导致硅上的 SHARED 共同执行(0.5 [ns] 缓存耗尽以多次重复~350+[ns] 重新获取先前已缓存的数据再次“跨越”NUMA 位置边界导致重复RAM-I/O 通道的瓶颈 是这里要提到的最少损失)- 共享/虚拟化引入的 CPU-ticks 工作窃取将显示您的计算有效负载所做的被盗 CPU-ticks 的数量不要为了他人的利益而进行计算,“分享”同样的“阴天梦”,由您按“每小时使用”支付,超出您的控制范围)。

云可能适合很少运行一些临时的、低计算强度的(显然不是 DSP,不是吗?),具有最少的跨域通信/协调,可能受益的合理规模的任务队列从分布式,延迟屏蔽,(天真)-蛮力执行许多这样的“浅”和“要求不高”的工作单元(很多时候本身效率低下) HPC 级计算的观点),但是听起来非常“便宜”(只是)的价格计划让人意识到,自己的私有基础设施将花费成本(如果在适当的时候决定,在已经花费了这些费用)与第二次,第三次,...第n次使用“便宜”租用的费用差不多。

[ 可能会向真实的企业询问他们的成本调整和现实生活中的责任,即使是“顾问演员”的多云梦想,实践故事也存在,请不要犹豫:o)]子>

因此,由您自己制定的最佳成本决定权在您手中。总是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 2012-06-27
    • 2020-03-17
    • 1970-01-01
    • 2017-10-03
    • 2019-12-31
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多