精华内容
下载资源
问答
  • 针对OpenStack云平台下计算资源动态调度的分析,采用于CPU、内存、存储以及网络综合负载均值算法实现计算资源动态调度,并展开云平台下数据中心和物理服务器的不均衡度分析,得出综合负载均值算法在计算资源动态调度...
  • 智能RGV动态调度策略智能
  • 智能RGV的动态调度策略问题的数学模型-韩中庚.pdf
  • 先进的计算机架构动态调度处理器模拟器 在我的高级计算机体系结构课程的最后一个项目中,我和我的搭档在教授给我们的GUI框架内开发了Tomasulo算法的模拟器。 该程序模拟Tomasulo的计算机体系结构硬件算法,用于动态...
  • 2018年高教社杯全国大学生数学建模竞赛B题-RGV的动态调度模型优秀论文含代码(RGV的动态调度模型优秀论文含代码 4篇)。
  • 动态调度

    千次阅读 2019-03-26 10:23:45
    什么是动态调度  动态调度指在决策时刻,调度环境的部分信息可知,根据逐步获得的信息,不断更新调度。 [编辑] 动态调度的方法  动态调度通常是指在调度环境和任务存在不可预测扰动情况下所进行的调度。与...

    什么是动态调度

      动态调度指在决策时刻,调度环境的部分信息可知,根据逐步获得的信息,不断更新调度。

    [编辑]

    动态调度的方法

      动态调度通常是指在调度环境和任务存在不可预测扰动情况下所进行的调度。与静态调度相比,动态调度能够针对生产现场的实际情况产生更具可操作性的决策方案。动态调度的实现方式有两种:一是事先不存在静态调度方案,直接按照生产系统中工件和设备的状况以及相关信息,使用某种计算方法,确定工件的加工优先级,即实时调度;二是在已有静态调度方案的基础上,根据生产系统的现场状态,及时进行静态调度方案的调整,确定工件的加工优先级,此种方式常常被称作“重调度”(又称在线优化)。

      以上两种方式皆可获得可操作的调度决策方案,但又有所不同。实时调度在决策中往往只考虑局部信息,因此得到的调度结果可能与优化的调度方案有较大的偏差,虽然可行,但与优化方案还有较大距离;重调度则是在已有静态调度方案的基础上,根据实际生产状况,进行静态方案的动态调整,保证其可操作性。由于静态调度方案往往是通过优化方法考虑多个性能指标获得的,因此重调度(即在线优化)能够获得更加优化的动态调度结果。

    [编辑]

    动态调度的研究[1]

      目前,关于动态调度研究方法的综述性文献仅对动态调度的某类研究方法进行综述。例如:Ra-mash对动态调度仿真研究方法的综述,Szelde等对基于知识的反应调度方法的综述;Suresh等对单件车间动态调度的综述。这些文献不但没有对动态调度的各类研究方法进行全面的综述,而且对每种方法的适用条件也缺乏必要的分析。近年来,动态调度的理论和应用研究都取得了很大进展,因此有必要对动态调度的研究方法进行系统的分类和评价。本文将研究动态调度的方法分成两大类,即传统方法和智能方法。传统方法包括最优化方法、仿真方法和启发式方法;智能方法包括专家系统人工神经网络、智能搜索算法和Multiagent方法。

      1、传统的研究方法

      (1)最优化方法

      最优化方法主要包括数学规划(动态规划、混合整数线性规划等)、分支定界法和消去法等。这类方法通常基于某些简化的假设,并能产生一个最优调度方案。现已证明,绝大多数调度问题是NP问题,随着调度问题规模的增大,上述方法的求解难度将急剧增加,因而最优化方法往往不能适应生产实际对实时性的要求。此外,该类方法大多基于某些理想化的假设,远不能充分反映实际生产环境的复杂性,而且要充分表达实际生产环境的随机性和动态性也极为困难,所以单独使用此类方法来解决动态调度问题是不现实的。目前在动态调度的研究中,通常将最优化方法同其它方法相结合,用来解决一定的问题。例如Matsuura提出的重调度算法,首先用分支定界法产生一个调度,当工况发生变化时,再用调度规则来分配工件。

      (2)启发式方法

      启发式方法针对调度问题的NP特性,并不企图在多项式时间内求得问题的最优解,而是在计算时间和调度效果之间进行折中,以较小的计算量来得到近优或满意解。启发式方法通常称为调度规则。关于调度规则的研究在很早以前便开始了,例如Johnson于1954年提出的Johnson算法等。Panwalker等对113个调度规则做了经典的分类,将调度规则分成3大类,即优先级规则(包括简单的优先级规则、简单优先级规则的组合和加权优先级规则)、启发式调度规则及其它规则,并对各规则的适应情况做了总结。关于调度规则比较经典的综述性文献还有文献。

      由于调度规则计算量小、效率高、实时性好,因而在动态调度研究中被广泛采用。但由于它通常仅对一个目标提供可行解,并且缺乏对整体性能的有效把握和预见能力,因而在实际应用中常将它与其它方法结合使用,利用其它方法根据具体情况选择合适的调度规则。此外,新的启发式方法也不断提出。例如Abumizar等提出一种重调度算法,当扰动发生时,不是全部重新调度也不是等扰动解除后再继续原调度,而是仅仅重新调度那些直接或间接受扰动影响的工件,从而减少了由于扰动引起的生产周期的增加,同时也减少了与初始调度的偏差,效率和稳定性都较好。

      (3)仿真方法

      仿真方法是动态调度研究中最常用的方法。该方法通过对实际生产环境的建模来模拟实际生产环境,从而避开了对调度问题进行理论分析的困难。目前,仿真方法在动态调度研究中主要有以下两方面内容:

      1)研究各种仿真参数对仿真结果的影响,以便在进行仿真实验时能做出恰当选择,从而使仿真所取得的结论更全面、更具说服力。Ramash总结了大量的相关文献,对仿真时应考虑的参数及各参数的取值范围做了详细介绍。

      2)将某些方法应用于某个仿真环境,通过仿真评价现有方法之间或新方法与现有方法之间的优劣,从而总结出各方法的适用范围,或根据结论数据建立知识库或产生神经网络的训练样本。Liu等做了大量仿真实验,从仿真数据中产生出训练样本用于训练神经网络,并将训练后的神经网络用于动态调度。

      由于仿真方法在模拟实际环境时做了某些假设和近似,而且仿真模型的建立较多地依赖于诸如随机分布等参数的选择,因而仿真结论往往因模型的不同而不同,很难取得一个一致的结论。然而,对多数生产调度问题而言,在缺乏有效的理论分析的情况下,仿真仍不失为一种最受欢迎的方法。

      2、智能的调度方法

      (1)专家系统

      专家系统在动态调度研究中占有重要地位,目前已有一些较成熟的调度专家系统,例如ISIS和OPIS等。调度专家系统通常将领域知识和现场的各种约束表示成知识库,然后按照现场实际情况从知识库中产生调度方案,并能对意外情况采取相应的对策。

      有效的领域模型和知识表示对于动态调度专家系统的设计十分重要。此外,约束在调度知识库中也占据重要地位,因为调度的好坏在很大程度上依赖于其对约束的满足程度。动态调度的决策参数具有很强的不确定性,为了有效地表示这种不确定性,许多学者选择了概率论,而应用模糊集理论则是一种更为有效的方法。在调度问题中应用模糊方法的优点在于,可为不精确约束的表示和应用提供丰富的表述语言和系统的框架,并且能对模糊目标进行评价。

      ISIS是最早的基于AI的调度系统之一。该系统采用约束指导的搜索方法产生一个调度,动态情况则由重调度组件进行处理,当冲突发生时,它通过有选择地放松某些约束来重新调度那些受影响的定单。基于ISIS开发的OPIS是现有的基于知识的车间调度系统中最成熟的系统之一,它根据情况使用面向资源或面向定单的动态调度策略。SONI-A是一个包含预测和反应调度组件的单件车间调度系统,反应组件用于解决由于各种原因产生的调度效果与预期效果间的偏差,系统考虑的意外事件有操作延误、容量冲突和机器故障。OPAL也是一个为单件车间设计的调度系统,它采用调度规则和启发式方法进行调度。尽管OPAL中没有反应调度组件,但是当调度延误时,它可以根据车间的当前状态重新产生一个调度。

      (2)神经网络方法

      神经网络应用于调度问题已有十多年的历史,它在动态调度研究中的应用主要集中在以下两方面:1)将调度问题看成一类组合优化问题,利用其并行处理能力来降低计算的复杂性;2)利用其学习和适应能力将它用于调度知识的获取,以构造调度决策模型。目前,利用神经网络解决动态调度问题已成为动态调度研究的一个热点。在动态调度研究中应用最多的是BP网,通过对它的训练来构造调度决策模型。

      Sim等提出一种专家神经网络方法,该方法用16个神经网络分别从相应的训练样本集中获取调度知识,用专家系统确定各子网的输入。由于神经网络的训练由16个子网分担,并且各子网可以并行训练,从而减少了训练时间。Cho等提出一种基于神经网络和仿真的鲁棒自适应调度器,该方法根据他人研究的结论确定神经网络的结构和训练样本。尽管该网络结构具有较强的通用性,但由于每个人研究的背景不尽相同,因此通过量化他人结论来产生训练样本必然会对网络性能造成影响。Jones等提出一种解决实时排序和调度问题混合方法的框架,综合运用了神经网络、遗传算法和实时仿真等方法。但只是提供了一个框架,真正实施起来还需进一步研究。Liu等提出一种用神经网络选择调度规则的方法,神经网络的输入对应于所有待调度工件的加工路线和加工时间信息,输出对应于待选的调度规则。但该方法需要大量的训练样本和很长的训练时间才能保证调度的效果;另外,随着问题规模的增大,网络的规模也将急剧增大。

      (3)智能搜索算法

      应用于调度问题的智能搜索方法包括模拟退火、禁忌搜索和遗传算法等。目前在动态调度中使用最多的是遗传算法。遗传算法解决调度问题的优势在于它可以随机地从一个调度跳到另一个调度,从而可以解决其它方法易于使解陷入局部最优的问题。此外,它还具有计算速度快且易与其它算法相结合的优点,非常适合于解决动态调度问题。应用遗传算法解决动态调度的文献较多,其中大多将遗传算法与其它方法结合使用。Lee等用遗传算法机器学习来解决单件车间的调度问题,用机器学习来产生将工件下发到车间层的知识库,而用遗传算法在各台机器上分配工件。Jian等提出一种FMS的调度和重调度算法,该算法考虑了4种动态事件,即机器损坏、定单优先级提高、紧急定单下达和定单取消,用稳态遗传算法产生一个初始调度,当意外事件发生时,根据具体情况仅重新调度那些直接受影响的工序。Jones等提出一种实时排序和调度算法,它集成了神经网络、实时仿真和遗传算法等方法,其中遗传算法主要用于对几个备选的调度规则进行优选。

      (4)Multi-agent方法

      Multiagent通过在一系列分散的智能单元(Agent)间进行协调来解决问题。这些单元有各自的目标和自治的行为,并且可以有子单元。但是没有一个单元能够解决全局问题,因而它们之间必须进行协调。

      关于Multiagent系统的结构,不同的人有不同的观点。例如Kouiss等根据车间的物理布局来确定系统的结构,为每一个加工中心配备了一个Agent,用于解决对应加工中心内的调度。另外还设计了一个全局Agent,用于监视整个制造系统的状态,必要时为满足全局的需要可在各Agent间进行协调。Nof等提出了自适应/预测调度系统框架,将调度系统按功能划分成5个模块:调度器/重调度器、监视器、比较器、分辨器和调度恢复适应器。关于每个Agent的结构,不同的人有不同的理解。但是每个Agent至少应有以下3个组成部分:1)知识库,包含Agent执行其功能所必需的知识和数据;2)控制功能,根据环境状态及与其它Agent间的相互作用,从知识库中提取知识来完成调度功能;3)通讯功能,用来与其它Agent和环境之间进行信息传递

      研究表明,Multiagent特别适用于解决复杂问题,尤其是那些经典方法无法解决的单元间有大量交互作用的问题。其优点是速度快、可靠性高、可扩展性强、能处理带有空间分布的问题、对不确定性数据和知识有较好的容错性;此外,由于是高度模块化系统,因而能澄清概念和简化设计

    [编辑]

    参考文献

    1.  钱晓龙,唐立新,刘文新.动态调度的研究方法综述[J].控制与决策,2001(2)

     

    https://wiki.mbalib.com/wiki/%E5%8A%A8%E6%80%81%E8%B0%83%E5%BA%A6

    展开全文
  • 2018年高教杯全国数学建模大赛 B题国家一等奖代码 智能RGV的动态调度策略 优化模型
  • 记分牌动态调度算法,北邮计算机体系结构作业,python编程,qt5界面,算法有完整注释,结构简短清晰易理解
  • 2018年高教杯全国数学建模大赛 B题代码 智能RGV的动态调度策略 优化模型 国奖 获得
  • 动态调度的matlab代码物联网应用的移动边缘计算中的动态请求调度优化 这是S. Hu和G. Li发表的题为“面向物联网应用的移动边缘计算中的动态请求调度优化”的论文的非官方MATLAB实现。 您可以在此处找到相同的副本: ...
  • 2018年高教杯全国数学建模大赛国奖获得 B题代码 智能RGV的动态调度策略 优化模型 国奖获得 包含Excel结果输出 2018年ABCD的完整题目 代码可能要解压,用MATLAB打开才能查看
  • 2018国赛论文-基于 0-1 规划的单 RGV 动态调度模型B题
  • 柔性制造系统AGV动态调度模型与算法
  • 基于遗传算法的RGV动态调度研究_吴焱明.pdf
  • 近年来, 在基于Q学习算法的作业车间动态调度系统中, 状态-行动和奖励值靠人为主观设定, 导致学习效果不理想, 与已知最优解相比, 结果偏差较大. 为此, 基于作业车间调度问题的特质, 对Q学习算法的要素进行重新设计, ...
  • 基于多目标优化的C2组织平台资源动态调度方法
  • RGV动态调度问题,通过严格限定其单步时间操作完成时间最短而得到的最优化方案,在无故障率的前提下,只要限定初始RGV机车位置,便可以得到唯一的行驶轨迹和规律,通过对其初始下料顺序全排列进行优化,得到的最理想...
  • 面向离散生产过程的车间级制造任务动态调度研究现状与展望,王晋,张映锋,为了阐明离散生产过程车间动态调度的内涵与运行机制,对离散生产过程车间动态调度及研究现状进行了综述。对动态调度的概念进行了
  • 公共自行车动态调度系统需求预测模型研究,由于需求的不断变化,公共自行车调度问题属于动态车辆调度问题。
  • 基于自适应遗传算法的战场资源动态调度模型及算法
  • 针对产品开发过程中由于活动变化导致原调度需要重新调整的问题, 提出一种利用弹性...建方法, 并确定动态调度决策指标值. 最后通过船舶分段制造实例, 验证了弹性资源约束的动态调度决策方法的可行 性和有效性.</p>
  • 动态调度-CA

    千次阅读 2020-01-19 14:37:26
    文章目录影响指令流水线的因素影响因素程序的相关性指令调度技术编译器的静态调度软件调度与硬件调度动态调度技术静态流水线的问题动态调度思想解决WAW和WAR的办法Tomasulo算法历史Tomasulo算法结构Tomasulo算法的...

    影响指令流水线的因素

    影响因素

    • 运行时间 = 程序指令数 * CPI (每条指令时钟周期数)
    • Pipeline CPI=Ideal pipeline CPI + Structural stalls + RAW stalls + WAR stalls + WAW stalls + Control stalls
      在这里插入图片描述

    程序的相关性

    程序的相关性容易引起流水线堵塞,可以通过软件和硬件的方法避免堵塞或降低堵塞的影响;
    • 编译调度:如循环展开
    • 乱序执行:需要等待的指令不影响其他指令

    (1)数据相关:(真相关):导致RAW
    1)定义:指令j数据相关于指令i,指令j使用了指令i产生的结果;
    2)传递性:指令j数据相关于指令k,指令k数据相关于指令i,则指令j数据相关于指令i;
    3)数据相关的指令不能并行执行;
    4)寄存器的数据相关比较容易判断;存储器的数据相关不容易判断。
    5)例子:
    在这里插入图片描述

    (2)名字相关:会导致WAW和WAR
    1)定义:两条指令使用相同名字(寄存器或存储器),但不交换数据;
    2)类型:
    - 逆相关(Antidependence):指令j写指令i所读的存储单元且i先执行,逆相关会导致流水线WAR相关
    - 输出相关(Output Dependence):指令j与指令i写同一个单元且i先执行,输出相关会导致流水线WAW相关
    3)寄存器的名字相关可以通过寄存器重命名(Register Renaming)解决,存储单元的重命名比较困难;
    4)例子:
    在这里插入图片描述
    5)RISC技术极大地简化了指令之间的相关性;

    (3)控制相关:条件转移

    指令调度技术

    编译器的静态调度

    (1)编译器分析程序中的相关性,并针对目标流水线进行代码优化,以避免程序执行时由于相关引起阻塞;

    (2)特点
    - 相关不一定引起阻塞,只要隔开足够远;
    - 在一个流水线上引起阻塞,在另一个流水线上不一定引起阻塞,所以编译优化与机器有关;

    (3)循环展开技术
    - 硬件流水:并行不同指令;
    - 软件流水:并行循环体的不同的迭代;

    (4)例子:向量的每个元素加常数
    在这里插入图片描述
    ① 初始时,每次循环需要9拍:
    在这里插入图片描述
    ② 改变指令次序每次循环需要6拍:(注意把SD放在Delay Slot中,偏移量的变化)
    在这里插入图片描述
    ③ 循环展开4次:假设R1的值是4的倍数(注意把SD偏移量的变化)
    在这里插入图片描述
    ④ 寄存器重命名:(每4个循环需要15 + 4 x (1+2) = 27 拍,每个循环 6.8 拍)
    在这里插入图片描述
    ⑤ 改变指令次序
    - 注意把SD与SUBI交换次序时偏移量的变化;
    - 注意SD与LD交换次序不会影响正确性;
    - 每4个循环需要14拍,每个循环 3.5 拍;
    在这里插入图片描述
    ⑥ 增加发射宽度
    - 循环展开5次 ;
    - 定点和浮点并行;
    - 5个循环需要12拍,每个循环2.4拍;
    在这里插入图片描述

    软件调度与硬件调度

    (1)问题:既然软件可以在保持程序正确性的前提前改变指令的执行次序来提高性能,硬件能不能做到呢?
    - 可以做到,但要有特定的机制保证程序行为不被改变
    - 关键是程序的数据和结构相关性得以保持
    (2)软件调度与硬件调度的比较
    - 软件调度范围大,可在上万条指令的范围内进行调度;硬件一般只能在百条指令的范围内进行调度;
    - 硬件调度可以掌握一些软件编译时还不明确的相关性信息,尤其是对访存相关以及控制相关;

    动态调度技术

    静态流水线的问题

    ①. 在译码阶段把指令“隔开”来解决相关
    • 只要有一条指令停止,后面指令就不能前进,象是一种译码部件的结构相关
    ②. 对编译要求高,最好是编译把相关指令隔开
    • 有些信息在译1码时难以确定,如是否发生例外、访存操作需要多少周期等
    在这里插入图片描述

    动态调度思想

    (1)基本思想
    - 把相关的解决尽量往后拖延(Forward技术?
    - 前面指令的等待不影响后面指令继续前进;

    (2)把译码分成两个阶段:发射和读操作数
    - 发射:指令译码,检查结构相关;
    - 读操作数:如果操作数准备好就读数,否则等待(在哪儿等?
    - 当一条指令在读操作数阶段等待时,后面指令的发射可以继续进行;

    (3)乱序执行的基本做法:
    - 指令进入是有序的
    - 执行可以乱序,只要没有相关就可执行,多条指令同时执行
    - 结束也是有序的(怎么把乱序变成有序?

    (4)与静态调度相比:
    - 有些相关编译无法检测、编译器更加简单、程序性能对机器依赖少
    在这里插入图片描述

    解决WAW和WAR的办法

    (1)例子:
    在这里插入图片描述

    (2)可能执行次序:(假设只考虑RAW相关)
    - DIV发射,F1, F2都准备好
    - MUL1发射,F6没准备好,所以没有读数据
    - ADD发射, F3, F4都准备好
    - MUL2发射,F8没有准备好,所以没有读数据
    - ADD完成,F0写回
    - F6准备好,MUL1读数据
    - DIV完成,F0写回
    - F8准备好,MUL2读数据
    1)为了避免MUL1读回ADD写的F0值,MUL2读回DIV写的F0值:
    ① 做法一:计分板方法
    > 方法:控制在MUL读F0之前ADD不能写回,在DIV写回之前ADD不能写回;
    > 问题本质:F0成为瓶颈,它必须保证DIV写、MUL1读、ADD写、MUL2读的串行次序;
    > 真正相关:MUL1用DIV的结果,MUL2用ADD的结果,F0最终的结果为ADD的结果;
    (在写回寄存器前,forward到下一条指令直接使用:MUL1用DIV的结果、MUL2用ADD结果不一定通过F0)
    ② 做法二:
    > 方法:在MUL1的输入端指定只接收DIV的输出值,在MUL2的输入端指定只接收ADD的输出值,相当于DIV 直接把结果写到MUL1的输入端,ADD直接把结果写到MUL2的输入端。(记得Forward技术吗?)
    > 要求
    - DIV的输出连到MUL1的输入,ADD的输出连接到MUL2的输入;
    - MUL1和MUL2的输入端有寄存器,这些寄存器能够指定接收哪个部件的输出作为自己的值;
    > 为了避免F0的最终值为DIV所写的值:
    - 可以在F0记录它当前接收哪个功能部件所写的值;
    - 要求F0有一个标志;
    ③ 上述方法要求
    - 每个功能部件的输入端有一些寄存器;
    - 每个寄存器(包括功能部件输入端的寄存器以及通用寄存器)都记录一个功能部件号,指定它当前接收哪个功能部件的值;
    - 每个功能部件的输出接到每个功能部件的输入;
    ④ 有了上述功能,WAR和WAW相关不用阻塞
    ⑤ 寄存器重命名技术:
    在这里插入图片描述

    Tomasulo算法

    通过寄存器重命名消除WAR和WAW相关

    历史

    (1)IBM 360/91中首次使用:
    • 1966年,比CDC 6600晚3年
    • Robert Tomasulo提出
    • 设计目标:编译器在360系列中通用
    (2)主要思想现代处理器中普遍使用:
    • 早期Alpha 21264, HP 8000, MIPS 10000, Pentium II, PowerPC 604, …
    • 现在Intel、AMD、IBM的几乎所有CPU

    Tomasulo算法结构

    在这里插入图片描述
    其中:
    (1)保留站内容:

    • Busy: 忙位
    • Op:操作码
    • Vj, Vk: 源操作数的值
    • Qj, Qk: 保存没有准备好的源操作数保留站号(0表示操作数已经准备好)

    (2)寄存器增加一个域:
    • 结果状态域:空表示寄存器值可用,否则保存产生寄存器结果的保留站号

    (3)结果总线:
    • 除了送回结果值外,还要送回产生该结果的保留站号

    Tomasulo算法的流水阶段

    (1)发射:把操作队列的指令根据操作类型送到保留站(如果保留站有空),发射过程中读寄存器的值和结果状态域。
    (2)执行:如果所需的操作数都准备好,则执行,否则侦听结果总线并接收结果总线的值。
    (3)写回:把结果送到结果总线,释放保留站。

    举例

    在这里插入图片描述

    小结

    (1)通过动态调度缓解流水线阻塞
    • 例如减少CACHE失效对性能的影响
    (2)保留站:重命名寄存器+缓存源操作数
    • 避免寄存器成为瓶颈
    • 避免WAW和WAR阻塞
    (3)缺点:
    • 硬件复杂性
    • 结果总线成为瓶颈,多条结果总线增加硬件复杂度
    (4)在IBM 360/91后被广泛使用:
    • 动态调度、寄存器重命名等思想一直被使用:Pentium II; PowerPC 604; MIPS R10000; HP-PA 8000; Alpha 21264

    动态流水线的例外处理

    例外(Exception)与流水线

    ①I/O请求:外部中断
    ②指令例外:用户请求中断
    - 系统调用、断点、跟踪调试指令
    ③运算部件:
    - 整数运算溢出、浮点异常
    ④存储管理部件:
    - 访存地址不对齐、用户访问系统空间、TLB失效、缺页、存储保护错(写只读页)
    ⑤保留指令错:未实现指令
    ⑥硬件错
    ……….

    动态流水线的精确例外处理

    (1)精确例外的要求:
    > 在处理例外时,发生例外指令前面的所有指令都执行完,例外指令后面的所有指令还未执行;

    (2)非精确例外的原因:
    > 在乱序执行时,前面的指令发生例外时,后面的指令已经执行完并修改了寄存器或存储单元;
    (记分板和Tomasulo算法中都是非精确例外)
    > 只要保证后面指令修改机器状态时,前面的指令都已经不会发生例外即可;
    > 例子:
    在这里插入图片描述
    以上例子,没有任何相关,ADDF和SUBF指令可以比DIVF先结束。如果在ADDF结束后DIVF发生例外,此时无法恢复例外现场;

    硬件支持动态流水线的精确例外处理

    (1)实现精确例外处理的一个办法:
    把后面指令对机器状态的修改延迟到前面指令都已经执行完
    - 有些指令在EX阶段也修改机器状态,如运算指令修改结果状态
    - 在执行阶段停止流水线会影响后面的指令执行

    (2)具体做法:
    可以用一些缓冲器来临时保存执行结果,当前面所有指令执行完后, 再把保存在缓冲器中的结果写回到寄存器或存储器:
    • 在流水线修改机器状态时(在执行或写回阶段)写到缓冲器
    • 增加提交(Commit)阶段,把缓冲器的内容写回到寄存器或存储器
    • 提交阶段只有前面指令都结束后才能进行
    有序提交:乱序执行,有序结束
    • 所用的缓冲器通常被称为Reorder Buffer(ROB)
    (猜测执行中也可用上述机制:都是在某些情况不确定的情况下先执行,但留有反悔的余地)

    指令重排序缓存Reorder Buffer (ROB)

    (1)ROB内容:目标地址(存数地址或寄存器号)、 值、 操作类型
    (2)写回时写回到ROB, 因此后面指令有可能从ROB读操作数;
    (3)使用ROB号作为重命名号(原来使用保留站号), 一条指令的结果寄存器被重命名为其结果ROB号 :
    • 保留站重命名源寄存器号
    • ROB重命名结果寄存器号
    (4)提交时把结果写回寄存器或存储器;
    (5)只要一条指令没有提交, 它就不会对寄存器或存储器的内容进行修改,在一条指令没有提交之前很容易取消该指令(由于前面指令发生了例外或由于猜测执行不正确);
    (6)ROB可以和Write Buffer合并;
    (7)增加Reorder Buffer的流水线:

    • 发射:把操作队列的指令根据操作类型送到保留站(如果保留站以及ROB有空),并在ROB中指定一项作为临时保存该指令结果之用;发射过程中读寄存器的值和结果状态域,如果结果状态域指出结果寄存器已被重命名到ROB,则读ROB
    • 执行:如果所需的操作数都准备好,则执行,否则根据结果ROB号侦听结果总线并接收结果总线的值。
    • 写回:把结果送到结果总线,释放保留站;ROB根据结果总线修改相应项
    • 提交如果队列中第一条指令的结果已经写回且没有发生例外,把该指令的结果从ROB写回到寄存器或存储器,释放ROB的相应项。如果队列头的指令发生了例外或是猜测错误的转移指令,清除操作队列以及ROB等
      在这里插入图片描述
      对比:没有Reorder Buffer的流水线
      在这里插入图片描述
      (8)例子:
      在这里插入图片描述在这里插入图片描述

    假设ADD发生了溢出例外

    在这里插入图片描述
    在这里插入图片描述

    龙芯1号把ROB和队列合并

    在这里插入图片描述

    总结

    • 有序进入、乱序执行(允许超车)、有序结束
    • 主要数据结构:
      • 保留站(发射队列)把有序变成乱序,临时存指令
      • 重命名寄存器用于保存未提交的临时结果,临时存数据
      • ROB把乱序重新变成有序
    • 乱序的能力和有关队列大小紧密相关
    • 现代高性能CPU一般都有100条以上指令在流水线中乱序执行

    补:Meltdown攻击的基本原理(幽灵、熔断漏洞)

    • 攻击者在用户态执行一条访问系统空间的load指令,发生例外,相关例外信息存在ROB中,访问数据X(假设为一个字节)目标寄存器为R1,重命名到PR1,返回值存到PR1,由于提交时会被取消。
    • 攻击者读取R1并从PR1中读到内容X,作为下标访问一个事先准备好的用户态数组A,A中被访问的的数据带到Cache中,其它数据仍在内存
    • 非法load指令成为ROB头指令,load指令及其后续指令被取消,但A[x]内容已经在Cache
    • 攻击者访问数组A的所有数据并判断其延迟,其中有一个数据在Cache中,延迟最短,假设数组A第10号元素访问延迟最短,则X=10。
      • 侧信道攻击
    • Meltdown攻击确实由乱序执行引起,但很容易规避。
      • Load操作执行阶段发生例外时,在ROB中置例外,但不要把返回值写入寄存器
    展开全文
  • 在低密度奇偶校验(LDPC)码的置信传播(BP)解码算法中,基于动态调度策略的算法表现出出色的性能。 在这封信中,我们提出了一种基于可变节点的动态调度解码算法。 对于所提出的算法,基于对数似然比(LLR)值和...
  • 介绍了动态调度的研究方法和最新进展。将动态调度的研究方法分成两类:一类是传统方法, 如最优化方法、 启发式方法和仿真方法等; 另一类是智能方法, 如专家系统、 神经网络、 智能搜索以及 Multi-agent 等...
  • 然后运用DBR(鼓- 缓冲器-绳子) 理论对问题进行分解简化, 并采用混合重调度策略和启发式算法进行动态调度; 最后建立瓶颈和非瓶 颈资源调度的协调机制, 实现问题求解. 仿真实例表明, 所提出的算法是可行而有效...
  • 实时系统静态调度和动态调度

    千次阅读 2019-10-18 12:54:04
    静态调度方法中,任务的分配离线进行的,即在实时任务正式在处理机上调度执行前,先把任务在处理机上的分配和调度时间安排好,在任务正式开始执行后按照预先的...与静态调度方法相对应的是动态调度。在实时系统中,...

    静态调度方法中,任务的分配离线进行的,即在实时任务正式在处理机上调度执行前,先把任务在处理机上的分配和调度时间安排好,在任务正式开始执行后按照预先的调度方案执行。这种调度方法主要用于周期任务的调度,它的优点在于能够预先安排好调动,减少任务调度过程中的开销;而缺点在于缺乏灵活性,在实际的调度中不能够及时地根据系统资源和任务的执行情况进行及时的调整。

    与静态调度方法相对应的是动态调度。在实时系统中,很多任务并非都以周期方式在处理机上进行调度,更多任务,特别是非周期任务都是随机到达系统并动态调度执行的。在动态调度方法中,任务的分派和可调度性测试都是在系统运行时在线进行的。这种情况下,可调度性测试实际上变成了- -种接受测试(acceptance test), 测试动态到达任务的截止期是否会被保证,如果无法保证任务的截止期,任务将被拒绝调度。可以看出,动态调度与静态调度相比有更好的灵活性,然后由于可调度性测试需要在线进行,它的调度算法的复杂度不能太高,并且由 于无法保证是否可以被调度,算法的可预测性(predictability)很差。
     

    展开全文
  • 针对传统复杂系统资源调度方法存在节点资源利用率较低的问题,提出一种复杂系统资源动态调度方法,利用云计算分层模型对复杂系统进行初始资源分配,建立复杂系统资源动态调度模型实现复杂系统资源的动态调度。...
  • Kubernetes4--动态调度

    千次阅读 2018-11-25 09:58:18
    基于Kubernetes的容器云平台资源调度策略 调度,给定的N种系统资源,给定一系列任务列表,如何分配各种资源,使得系统的总资源利用达到某种目标,或者资源利用率最高,资源利用率最高等。容器与物理机的调度,主要...

    基于Kubernetes的容器云平台资源调度策略

    调度,给定的N种系统资源,给定一系列任务列表,如何分配各种资源,使得系统的总资源利用达到某种目标,或者资源利用率最高,资源利用率最高等。容器与物理机的调度,主要是物理机有一定的各种资源限额,容器服务有各种不同的资源需求,如何分配这些容器服务分配到指定的物理机节点实现系统功能,以达到系统的资源利用等目标。

    调度思想大致分为两种  扩散以及贪心。

    扩散:尽量将服务调度到不同的集群节点上以此来保证资源的均衡利用率,避免单机故障的风险

    贪心:尽量将所有服务调度到同一节点上,提高资源的利用率

    集群资源调度系统分类

    集中式调度系统

    Swarm Borg 集群使用同一的调度算法进行调度,调度任务不可以并行执行,调度信息需要存储在存储器,任务较重延时较高。Scheduler 支持 Random、Spread 和 Binpack 三种调度策略,其中 Random 策略随机选择目标节点进行 Docker 调度;Spread 和 
    Binpack 则根据节点可用的 CPU、存资源量和节点上当前运行的 Docker 数量做出调度决策,Spread 将 Docker 分散调度到各个节点上,以提高系统的整体负载均衡;Binpack 与 Spread 相反,将 Docker调度到负载最高的节点上,提高集群中节点承载容器的密度。

                                          

    两层式调度系统

    Memos  YARN 资源管理系统负责资源的统一分配和利用,任务调度系统可以执行不同的调度策略来并行调度任务

                                               

    Mesos Master实现资源的统一分配和管理,调度框架可以并行调度任务。其使用DRF算法来实现对不同类型作业的不同资源需求公平分配。该算法的核心思想是在资源类型多样的环境下,一个作业的资源分配量由作业的主导份额资源决定,主导份额资源是作业请求的各类型资源中占据资源量最大的一种资源。

                                                

    共享式调度系统

    Kubernetes 支持使用不同的调度框架执行不同类型的任务,它的核心是共享状态。为了提高调度系统的并发性和可扩展性,共享式调度系统使用乐观锁进行并发控制,集群的相关信息都增加了版本号,在提交的时候与当前数据的版本号进行对照,若提交的状态信息版本号比当前信息的版本号高,则允许此次提交,否则决绝提交请求,这样虽然会增加资源请求的冲突几率,但是实际应用证明,系统的整体性能并不会因为这些冲突而整体下降。

    k8s的Scheduler调度思想:

    通过调度策略(算法)依次为待调度 Pod 队列的每一个 Pod 从可用 Node 队列中选择一个最合适的作为宿主机。目标节点上的 Kublet 进程通过 API  Server 监听到 Kubernetes 调度器发出的 Pod 绑定事件,然后从 etcd 中获取对应的 Pod 资源描述文件,下载 Image 镜像,启动容器,挂载持久化存储系统。

                              

    kubernetes主要使用Pod来作为实际的服务对象,其Pod调度流程如下:

                

    k8s的默认调度策略分析:

                               

    默认调度过程如下:

    1. 首先,客户端通过API Server的REST API/kubectl/helm创建pod/service/deployment/job等,支持类型主要为JSON/YAML/helm tgz。
    2. 接下来,API Server收到用户请求,存储到相关数据到etcd。
    3. 调度器通过API Server查看未调度(bind)的Pod列表,循环遍历地为每个Pod分配节点,尝试为Pod分配节点。调度过程分为2个阶段:
      • 第一阶段:预选过程,过滤节点,调度器用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉。
      • 第二阶段:优选过程,节点优先级打分,对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把容一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。
    4. 选择主机:选择打分最高的节点,进行binding操作,结果存储到etcd中。
    5. 所选节点对于的kubelet根据调度结果执行Pod创建操作。

    k8s的调度优化

    k8s的默认指标使用物理机的CPU以及内存等指标来计算物理节点的虚拟性能状态,将Pod对象调度到某个最合适的Node物理节点

    物理节点性能指标优化:

    可以考虑物理机的cpu,内存,IO,网络,响应时间,链接数等系统资源

    论文中主要使用CPU,内存,镜像下载速度,数据传输速度四个指标
           镜像下载速度:宿主机需要到 Pod 资源描述文件指定的网络地址下载 Pod 中所有容器的镜像文件,宿主机与镜像存储系统之间的网络传输速度直接关系到 Pod 的启动速度的快慢;这个问题可以通过搭建私有镜像仓库来解决,但是集群规模过大还是会存在的。
          数据传输速度:Pod 中数据是临时的,当 Pod 销毁时,其中的数据会丢失,所以 Pod 需要通过数据卷的方式将数据持久化。因此 Pod 在启动运行后,Pod 还需要挂载持久化存储系统进行数据的存取,宿主机与持久化存储之间的数据传输速度会直接影响 Pod中运行的应用的 IO 速度。

    用户绑定策略

    论文中提出了各种绑定策略,即指定Pod到某个确定的Node,现在版本应该已经支持很好,可以使用Label标签实现

    抢占式调度策略

    现在版本支持Pod优先级抢占,通过PriorityClass来实现同一个Node节点内部的Pod对象抢占。根据 Pod 中运行的作业类型判定各个 Pod 的优先级,对于高优先级的 Pod 可以抢占低优先级 Pod 的资源。Pod priority指的是Pod的优先级,高优先级的Pod会优先被调度,或者在资源不足低情况牺牲低优先级的Pod,以便于重要的Pod能够得到资源部署.

    定义PriorityClass对象:

    apiVersion: scheduling.k8s.io/v1alpha1
    kind: PriorityClass
    metadata:
    name: high-priority
    value: 1000000
    globalDefault: false
    description: "This priority class should be used for XYZ service pods only."

    在Pod的spec. priorityClassName中指定已定义的PriorityClass名称

    apiVersion: v1
    kind: Pod
    metadata:
    name: nginx
    labels:
    env: test
    spec:
    containers:
    - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    priorityClassName: high-priority

    当节点没有足够的资源供调度器调度Pod、导致Pod处于pending时,抢占(preemption)逻辑会被触发。Preemption会尝试从一个节点删除低优先级的Pod,从而释放资源使高优先级的Pod得到节点资源进行部署。

    论文中按照Pod的重启策略来定义pod优先级,Always>OnFailure>Never

    利用容器资源请求量使用优先级队列来进行排序   OnFailure队列   Never队列

    Always可以抢占Never,OnFailure资源,依次回收低优先级的Pod对象资源直到宿主机资源满足Always的资源请求

    OnFailure可以抢占Never资源  

                                                        

    动态负载均衡策略

    依据Node节点的衡量指标,定量度量Node节点性能情况,建立高负载队列以及低负载队列,根据系统的实施运行情况来不断调整不同Node节点之间的容器对象,实现资源的均衡利用,主要是扩散思想。

    优选策略的设计

    假定服务器集群N台,其物理集群定义如下:

                                                         

    各物理节点的资源规格,定义各物理节点的性能度量指标:

                                                                    

    其中          ci, mi分别为cpu以及内存的资源配额。

    各物理节点的规格系数向量:

                                                                   

    其中        分别为cpu以及内存的规格系数  例cpu2核,内存4G  其表示规格系数  2   4

    第i个物理节点的资源规格:

                                                            

    集群的资源规格系数:

                                                            

    综合考虑 CPU、内存、镜像网络下载速度、持久化存储网络传输速度四方面因素来决定 Pod 的调度目的地。

    计算集群的cpu负载均值,及集群的cpu利用率的加权平均值:

                                                                            \alpha i为第i个节点的cpu规格系数

    集群的内存负载均值:

                                                                   

    集群镜像网络的传输均值:

                                                                    

    集群数据网络的传输均值:

                                                                       

    计算第i个物理节点的各种指标得分:

                                                 

     

                                         

     

    利用均值与节点值的比值作为节点的衡量分数,当该比值越大时表示该节点越低于平均性能,即节点的性能越优。节点相对于集群整体的相对负载情况。

    各种指标的权值因子:

                                                                              

    该物理节点的性能综合得分:各种指标的加权平均值取对数

                                                       

    值大于零表示,节点的负载低于平均值   小于零表示节点的负载高于平均值

    负载队列的实现

    建立高负载队列以及低负载队列,得分大于 0 的表示综合负载相对于集群较空闲,存储在低负载队列,小于 0 表示综合负载相对于集群较重,存储在高负载队列。通过周期检测集群的负载情况,将负载较高的节点的一些 Pod 迁移到负载较低的节点上,以保证集群的负载均衡。

    利用二叉堆来实现,高负载队列使用最大堆,堆顶元素即为负载最大的Node节点;低负载队列使用最小堆,堆顶元素即为负载最小的Node节点。根据调节阈值,将高负载队列上的容器服务动态调度到低负载队列上,以保证集群的整体资源利用的均衡。

    动态控制流程

                                                             

    总体调度算法的设计:

                                            

     动态调度的具体实现:

                                          

    算法的负载均衡度的衡量:使用Node集群得分的标准差

                                                                       

    总结一下:

    同一个Node节点内部实行抢占式调度  根据pod重启策略来定制优先级  优先级高可以抢占优先级低的资源

    不同Node节点执行动态调度,衡量每个Node节点分数,建立高负载队列以及低负载队列,然后将高负载队列的pod对象迁移到低负载队列以此来实现资源的均衡利用。

    参考论文如下,这篇论文写的真好,学习了。

    [1]唐瑞. 基于Kubernetes的容器云平台资源调度策略研究[D].电子科技大学,2017.
    展开全文
  • 在对目前流行的调度方法分析、总结的基础上,根据Agent具有自治性、反应性、社会能力性以及能动性的特点,提出一种基于Multi-Agent的网络资源动态调度方法。该方法根据系统当前的负载分布状况,对具有负载的节点通过...
  • 针对基于知识的调度系统在实际应用中存在的知识源具有主观倾向性、决策依赖部分属性等缺陷,提出了一种新的基于知识的动态调度决策方法。在此基础上设计了调度决策系统。以合同网协议为协调机制,构建了基于多Agent...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 244,016
精华内容 97,606
关键字:

动态调度