正在加载图片...
.328. 智能系统学报 第10卷 3)任务不可抢占。 Rate a Ct=】 Dataij (10)》 系统运行时首先将任务初始化,构造TDS,由于 0≤k≤m-1,0≤s≤m-1,0≤i<|Ta1 算法中大多计算只针对就绪任务,特别是任务分配 式中:PW代表任务T的等待时间所占优先级比重, 时,所以为了节约计算开销,算法初始化时会生成一 PC代表通信时间所占优先级比重,L为内核P:的 个就绪任务列表和一个等待任务列表。当内核P: 负载状态。t是当前时间,1-T表示任务T的等待时 任务队列长度ITLI≤l时,就向调度程序请求分 间,等待时间越长的任务优先级相对越高,同等条件 配任务,调度程序遍历就绪列表,计算相对于内核 下,调度程序优先调度等待时间长的任务,避免存在 P的优先级,选择优先级T值最大的任务分配到P 就绪任务长时间等待的“饥饿”现象,B是实时性因 上,重复执行此过程,直到内核P任务队列长度 子,用来调节等待时间在优先级中所占比重。C表 ITLI≥。若同时有多个内核请求任务分配,调度 示任务T,的通信时间,STDS算法假设同一内核内的 程序分配任务时需要响应这几个内核的请求,计算 任务通信开销忽略不计,C:值即任务T,与除内核P 优先级时需要计算相对于这几个内核的优先级,然 以外的其他内核P,上依赖任务通信的时间之和,用 后取最大值作为最终优先级,调度程序选择优先级 Daau表示,下标s即任务T,的T,属性值, 最大的任务分配到对应的内核。 jeTe+Rate. 值得注意的是在动态调度过程中,为了保证数 据实时有效,STDS算法在每个任务分配完成或执行 表示任务T分配给内核P。s-1 一表示平均通信 结束时对数据进行更新。当任务T分配给内核P m 后,需要将任务T对应数据项中的T置为k,此时内 时间,通信时间越小,PC值越大,优先级也相应越 核P负载也相应改变;当任务T执行完成时,如果 大,对于C4相同的任务,若任务的∑C。值较 任务T依赖任务T,需要将任务T的T值减1,若 0≤s≤m-1 大,则说明此任务如果分配到内核P上节省的通信 减1后T:=0,将任务T状态置为就绪态并从等待 开销更多,相应的其优先级也较高。在实际计算时, 列表移到就绪列表。为了降低复杂度节省时间, 因为任务T的依赖任务已经全部分配执行,所以若 STDS算法采用先记录再批量执行的方式,即在任务 分配在内核P:上,通信开销是个定值,因此PC.只 执行期间暂时将完成的任务编号记录,在任务调度 程序执行时批量更新数据:如果任务T执行完毕且 需计算一次。少尼 一反应了内核的负载状 所有依赖T的任务也执行完毕,就将任务T的信息 态,ITLI是内核P当前任务队列长度,当1TL:I= 从TDS中删除,从而释放内存节省空间。 lm时其值为0,从而T=0为最小值,则当前状态 如果就绪列表为空,调度程序不会响应内核的 下不能向内核P分派任务。在一次调度过程中,调 任务分配请求,当就绪列表和等待列表全为空时,说 度程序可能需要响应多个内核的调度请求,对于 明任务全部执行完毕,调度结束。 |TLI较小的内核,其L较大,从而实现优先将任务 STDS算法实现步骤: 分配到负载较轻的内核,并进而达到负载均衡效果。 Procedure STDS(SM,TDS,PL,TL)/*SM 综上所述,任务优先级值的计算,是对等待时 示处理器内核系统;TDS是所有任务信息;Pm是需 间、通信开销和内核负载3个因素综合考量的过程, 要分配任务的内核列表,T。是执行完毕但还未进 其结果可能不是单一因素中最优的,但一定是综合 行信息更新的任务列表*/ 考虑全部3种因素后最优的选择。 1)for each Te TL 2){Ta[]-T:; 3算法实现 3) for each T∈Ta 在上节中详细介绍了任务优先级的计算,本节 4) T←T-1;/*执行完毕的任务信息 将介绍STDS算法的具体实现过程。 更新,将其后继任务的依赖任务数量减一*/ 为了使任务调度算法得到较理想的实现,STDS /end for each Tie TLee * 算法的研究基于以下假设条件: 5)TLa助[]←-TDS;/*就绪任务放入就绪队列*/ 1)假设任务间的依赖关系固定不变: 6)for each TiTLready 2)同一内核上任务间通信开销忽略不计; 7){for each P&∈PiaCik = j∈T∑idd&&s≠k Datai,j Rates,k (10) 0 ≤ k ≤ m - 1,0 ≤ s ≤ m - 1,0 ≤ i < | TList | 式中:PWi代表任务 Ti的等待时间所占优先级比重, PCik代表通信时间所占优先级比重,Lk为内核 Pk的 负载状态。 t 是当前时间,t-Tit表示任务 Ti的等待时 间,等待时间越长的任务优先级相对越高,同等条件 下,调度程序优先调度等待时间长的任务,避免存在 就绪任务长时间等待的“饥饿”现象, β 是实时性因 子,用来调节等待时间在优先级中所占比重。 Cik表 示任务 Ti的通信时间,STDS 算法假设同一内核内的 任务通信开销忽略不计,Cik值即任务 Ti与除内核 Pk 以外的其他内核 Ps上依赖任务通信的时间之和,用 j∈T∑idd&&s≠k Datai,j Rates,k 表示,下标 s 即任务 Tj的 Tjc属性值, 表示任务 Tj分配给内核 Ps。 0≤∑s≤m-1 Cis m 表示平均通信 时间,通信时间越小,PCik值越大,优先级也相应越 大,对于 Cik 相同的任务,若任务的 0≤∑s≤m-1 Cis 值较 大,则说明此任务如果分配到内核 Pk上节省的通信 开销更多,相应的其优先级也较高。 在实际计算时, 因为任务 Ti的依赖任务已经全部分配执行,所以若 分配在内核 Pk上,通信开销是个定值,因此 PCik只 需计算一次。 l k _max -| Tl k | l k_max - l k_min 反应了内核的负载状 态, | TLk | 是内核 Pk当前任务队列长度,当 | TLk | = l k_max时其值为 0,从而 Tipk = 0 为最小值,则当前状态 下不能向内核 Pk分派任务。 在一次调度过程中,调 度程序可能需要响应多个内核的调度请求,对于 | TLk |较小的内核,其 Lk较大,从而实现优先将任务 分配到负载较轻的内核,并进而达到负载均衡效果。 综上所述,任务优先级值的计算,是对等待时 间、通信开销和内核负载 3 个因素综合考量的过程, 其结果可能不是单一因素中最优的,但一定是综合 考虑全部 3 种因素后最优的选择。 3 算法实现 在上节中详细介绍了任务优先级的计算,本节 将介绍 STDS 算法的具体实现过程。 为了使任务调度算法得到较理想的实现,STDS 算法的研究基于以下假设条件: 1)假设任务间的依赖关系固定不变; 2)同一内核上任务间通信开销忽略不计; 3)任务不可抢占。 系统运行时首先将任务初始化,构造 TDS,由于 算法中大多计算只针对就绪任务,特别是任务分配 时,所以为了节约计算开销,算法初始化时会生成一 个就绪任务列表和一个等待任务列表。 当内核 Pk 任务队列长度| Tl k | ≤l k_min时,就向调度程序请求分 配任务,调度程序遍历就绪列表,计算相对于内核 Pk的优先级,选择优先级 Tip值最大的任务分配到 Pk 上,重复执行此过程,直到内核 Pk 任务队列长度 | Tl k |≥l k。 若同时有多个内核请求任务分配,调度 程序分配任务时需要响应这几个内核的请求,计算 优先级时需要计算相对于这几个内核的优先级,然 后取最大值作为最终优先级,调度程序选择优先级 最大的任务分配到对应的内核。 值得注意的是在动态调度过程中,为了保证数 据实时有效,STDS 算法在每个任务分配完成或执行 结束时对数据进行更新。 当任务 Ti分配给内核 Pk 后,需要将任务 Ti对应数据项中的 Tic置为 k,此时内 核 Pk负载也相应改变;当任务 Ti执行完成时,如果 任务 Tj依赖任务 Ti,需要将任务 Tj的 Tidn值减 1,若 减 1 后 Tidn = 0,将任务 Tj状态置为就绪态并从等待 列表移到就绪列表。 为了降低复杂度节省时间, STDS 算法采用先记录再批量执行的方式,即在任务 执行期间暂时将完成的任务编号记录,在任务调度 程序执行时批量更新数据;如果任务 Ti执行完毕且 所有依赖 Ti的任务也执行完毕,就将任务 Ti的信息 从 TDS 中删除,从而释放内存节省空间。 如果就绪列表为空,调度程序不会响应内核的 任务分配请求,当就绪列表和等待列表全为空时,说 明任务全部执行完毕,调度结束。 STDS 算法实现步骤: Procedure STDS(SM,TDS, PList,TLexe ) / ∗SM 表 示处理器内核系统;TDS 是所有任务信息; PList 是需 要分配任务的内核列表, TLexe 是执行完毕但还未进 行信息更新的任务列表∗/ 1){for each Ti∈ TLexe 2) { Tia []←Ti; 3) for each Tj∈Tia 4) Tjdn←Tjdn -1; / ∗执行完毕的任务信息 更新,将其后继任务的依赖任务数量减一∗/ } / ∗ end for each Ti∈ TLexe ∗/ 5)TLready[]←TDS;/ ∗就绪任务放入就绪队列∗/ 6) for each Ti∈TLready 7){ for each Pk∈ PList ·328· 智 能 系 统 学 报 第 10 卷
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有