php做的商城网站设计论文,广西网站设计服务,wordpress所有外链本地化,监理工程师查询系统入口此文章为笔记#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总#xff0c;非原创#xff0c;感谢每个知识分享者。 前言 有关为什么要使用并行程序的问题前面已经进行了简单的探讨。总的来说#xff0c;最重要的应该是处于两个目的。
第一#xff0c;为了获得更…此文章为笔记为阅读其他文章的感受、补充、记录、练习、汇总非原创感谢每个知识分享者。 前言 有关为什么要使用并行程序的问题前面已经进行了简单的探讨。总的来说最重要的应该是处于两个目的。
第一为了获得更好的性能
第二由于业务模型的需要确实需要多个执行实体。
在这里我将更加关注第一种情况也就是有关性能的问题。将串行程序改造为并发程序一般来说可以提高程序的整体性能但是究竟能提高多少甚至说究竟是否真的可以提高还是一个需要研究的问题。目前主要有两个定律对这个问题进行解答一个是Amdahl定律另外一个是Gustafson定律。 Amdahl(阿姆达尔)定律 Amdahl定律是计算机科学中非常重要的定律。它定义了串行系统并行化后的加速比的计算公式和理论上线。
加速比定义加速比 优化前系统耗时 / 优化后系统耗时
所谓加速比就是优化前耗时与优化后耗时的比值。加速比越高表明优化效果越明显。图1.8显示了Amdahl公式的推到过程其中n表示处理器个数T表示时间T1表示优化前耗时(也就是只有1个处理器时的耗时)Tn表示使用n个处理器优化后的耗时。F是程序中只能串行执行的比例。 根据这个公式如果CPU处理器数量趋于无穷那么加速比与系统的串行化比例成反比如果系统中必须有50%的代码串行执行那么系统的最大加速比为2。
假设有一个程序分为以下步骤执行每个执行步骤花费100个单位时间。其中只有步骤2和步骤5可以并行步骤1、3、4必须串行如图1.9所示。在全串行的情况下系统合计耗时为500个单位时间。 若步骤2和步骤5并行化假设在双核处理器上则有如图1.10所示的处理流程。在这种情况下步骤2和步骤5的耗时将为50个单位时间。故系统整体耗时为400个单位时间。根据加速比的定义有
加速比 优化前系统耗时 / 优化后系统耗时 500/400 1.25 由于5个步骤中3个步骤必须串行因此其串行化比例为3/50.6即 F 0.6且双核处理器的处理器个数N为2。代入加速比公式得
加速比 1/(0.6(1-0.6)/2)1.25
在极端情况下假设并行处理器个数为无穷大则有如图1.11所示的处理过程。步骤2和步骤5的处理时间趋于0。即使这样系统整体耗时依然大于300个单位时间。使用加速比计算公式N趋于无穷大有加速比 1/F且F0.6故有加速比1.67。即加速比的极限为500/3001.67。
由此可见为了提高系统的速度仅增加CPU处理的数量并不一定能起到有效的作用。需要从根本上修改程序的串行行为提高系统内可并行化的模块比重在此基础上合理增加并行处理器数量才能以最小的投入得到最大的加速比。 注意根据Amdahl定律使用多核CPU对系统进行优化优化的效果取决于CPU的数量以及系统中串行化程序的比例。CPU数量越多串行化比例越低则优化效果越好。仅提高CPU数量而不降低程序的串行化比例也无法提高系统的性能。 阿姆达尔定律图示 为了更好地理解阿姆达尔定律我会尝试演示这个定定律是如何诞生的。
首先一个程序可以被分割为两部分一部分为不可并行部分B一部分为可并行部分1 – B。如下图 在顶部被带有分割线的那条直线代表总时间 T(1)。
下面你可以看到在并行因子为2的情况下的执行时间 并行因子为3的情况 举个例子
一个业务会串行调用2个方法m1m2m1耗时100msm2耗时400msm2内部串行执行了4个无依赖的任务每个任务100ms如下图 m2内部的4个任务无依赖的即可以并行进行处理4个任务同时并行当cpu数量大于等于4的时候可以让4个任务同时进行此时m2耗时最小即100mscpu为2个的时候同时只能够执行2个任务其他2个任务处于等待cpu分配时间片状态此时m2耗时200ms当cpu超过4个的时候或者趋于无限大的时候m2耗时还是100ms此时cpu数量再怎么增加对性能也没有提升了此时需要提升的是任务可以并行的数量。
从阿姆达尔定律可以看出程序的可并行化部分可以通过使用更多的硬件更多的线程或CPU运行更快。对于不可并行化的部分只能通过优化代码来达到提速的目的。因此你可以通过优化不可并行化部分来提高你的程序的运行速度和并行能力。你可以对不可并行化在算法上做一点改动如果有可能你也可以把一些移到可并行化放的部分。 Gustafson定律 Gustafson定律也试图说明处理器个数、串行化比例和加速比之间的关系如图1.12所示但是Gustafson定律和Amdahl定律的角度不同。同样加速比都被定义为优化前的系统耗时除以优化后的系统耗时。 根据Gustafson定律我们可以更容易地发现如果串行化比例很小并行化比例很大那么加速比就是处理器的个数。只要不断地累加处理器就能获得更快的速度。
Amdahl定律和Gustafson定律结论有所不同并不是说其中有个是错误的只是二者从不同的角度去看待问题的结果他们的侧重点有所不同。
Amdahl强调当串行换比例一定时加速比是有上限的不管你堆叠多少个CPU参与计算都不能突破这个上限。 Gustafson定律关系的是如果可被并行化的代码所占比例足够大那么加速比就能随着CPU的数量线性增长。
总的来说提升性能的方法想办法提升系统并行的比例同时增加CPU数量。