parallel-processing - 如何使用阿姆达尔定律(整体加速与加速)
问题描述
回想一下关于估计最佳可能加速的阿姆达尔定律。回答以下问题。
您有一个程序,其 40% 的代码在三个处理器上并行化,仅对于这部分代码,就实现了 2.3 的加速。什么是整体加速?
在这个问题中,我无法理解加速和整体加速之间的区别。我知道这个问题的措辞肯定有所不同。
解决方案
问:整体加速是多少?
最好不要从原始的和微不足道的阿姆达尔定律公式开始,而是通过阅读更 现代的观点,扩展原始的,其中讨论了附加的间接成本,并解释了拆分工作的原子性的一个方面。
两个部分,
一个由“本地”加速,
一个整体结果
您最初的问题表述似乎绕过了那里,通过简单地假设 (net-local)-speedup解释了现实世界流程编排开销的各种问题,其中与<PAR>-able
Section-under-Review 相关的实现附加开销成本变为“隐藏”,但表现为一种低效率,即拥有三倍多的资源用于代码流执行,但只有 2.3 倍的加速,而不是 3.0 倍,因此实际上花费了超过理论 1/3 的时间还有初始设置(附加开销时间,不存在于纯[SERIAL]
代码执行中)+并行处理(执行 The_useful_work,现在代码执行资源容量的三倍)+还有终止和结果收集(附加开销时间,不存在于纯[SERIAL]
代码执行中)到“主”代码中。
“隐藏”这些进入/退出[PARALLEL]
代码执行部分的自然成本简化了作业,但正确理解现实生活成本至关重要,不要花费更多(在设置和所有其他方面)附加的间接费用,这在现实世界中是不可避免的)比一个人永远不会收到的(来自希望获得多处理器利用的拆分处理加速)
|-------> time
|START:
| |DONE: 100% of the code
| | |
|______________________________________<SEQ>______60%_|_40%__________________<PAR>-able__|
o--------------------------------------<SEQ>----------o----------------------<PAR>-able--o CPU_x runs both <SEQ> and <PAR>-able sections of code, in a pure [SERIAL] process-flow orchestration, one after another
| |
| |
|-------> time
|START: |
| | |DONE: 100% of the code :
o--------------------------------------<SEQ>----------o | :
| o---------o .. .. .. .. ..CPU_1 runs <PAR>'d code
| o---------o .. .. .. .. ..CPU_2 runs <PAR>'d code
| o---------o .. .. .. .. ..CPU_3 runs <PAR>'d code
| | |
| | |
| <_not_1/3_> just ~ 2.3x faster (not 3x) perhaps reflects real-costs (penalisations) of new, add-on, process-organisation related setup + termination overheads
|______________________________________<SEQ>______60%_|_________|~ 40% / 2.3x ~ 17.39% i.e. the <PAR>-section has gained a local ( "net"-section ) speedup of 2.3x instead of 3.0x, achievable on 3-CPU-code-execution streams
| | |
净整体加速(如果没有产生其他与流程组织相关的附加间接成本)是:
( 60% + ( 40% / 1.0 ) )
---------------------------- ~ 1.2921 x
( 60% + ( 40% / 2.3 ) )
推荐阅读
- c# - 为什么C#中读取文本文件用的是绝对路径,而且路径会变
- wordpress - WP“retrieve_password_message”
- linux - 如何在容器 runc 中使用 LD_PRELOAD
- javascript - 选择获取数据属性值并嵌入为选择选项
- cytoscape - Astray cytoscape 将浮点值识别为整数
- unity3d - Raycast 在 start 方法中不起作用,但在 fixupdate 方法中使用相同的代码
- java - 使用 Java 11 和 Spring Boot 调用 java.net.http.HttpClient 的响应不可靠
- javascript - 如何使用谷歌脚本从列表中返回另一个列表中不存在的值
- javascript - Adding child element to a parent element using javascript
- linux - Modifying a particular line in a text file from the command-line