多核实时调度—多项式时间复杂度最优任务分配算法PTAS解读

本文主要是介绍多核实时调度—多项式时间复杂度最优任务分配算法PTAS解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PTAS 是针对多核分区调度的,最初的那篇论文,是提出了一个分配思想,而没有指定分区调度中具体是采用固定优先级调度和动态优先级比如EDF调度。然后后面一个论文就将其具体化,且高效实现了,该文章的算法过程如下。

针对periodic任务,在每个核上采用EDF调度,是一种可以以 \varepsilon 误差接近理论最优的实时任务分配算法,其中 \varepsilon 是一个我们人为指定的常数,最牛逼的是,该算法在运行时可以以多项式复杂度时间得到以\varepsilon 为误差的最优分配结果。该论文理解起来还是很有难度的。该方法的实现过程如下:首先指定\varepsilon(下面我们的分析用字母e代替了),然后穷举法生成所有可行的分配表(2的n次方这样的指数时间复杂度),然后运行时(比如实时操作系统正在运行了)查找匹配该分配表,从而得到分配结果。

详细过程如下:

  1.  离散化利用率0-1的所有到区间:(e/(1+e), e],(e, e(1+e)],(e, e(1+e)^2],.....。然后所有利用率点ui都会取所在区间的右端点值,也就是round up(或者叫做modified)。这样之后可能存在的利用率点仅为:e,e(1+e),e(1+e)^2,......。总共有多少个利用率点呢,这个可以算的,我们记为|V(e)|。我们会发现后一个利用率值除以前一个都等于(1+e),而且利用点的个数和人为指定的常数e都是有关系的,所以叫做人为指定误差嘛。很明显,如果是单核,能容纳的最多任务为1/e个了。
  2. 这样我们就可以把一个任务集n个任务的利用率分配情况给穷举出来了。
    比如e=0.4(我们计算出只有3个利用率点,0.4, 0.56, 0.784,因此|V(e)|=3)。那么对于每个核,我们都能穷举出所有可能的利用率存在方式,表示为有序对(下面会介绍),比如<2,0,0>,<1,1,0>,<0,0,1>,<0,1,0>,其中<2,0,0>表示0.4利用率处可以有2个0.4利用率,但是0.56处和0.784处都不能有该点利用率的任务了,因为加起来大于1了,就不可调度了。这些合法有序对为,<2,0,0>,<1,1,0>,<1,1,0>,<0,0,1>,<0,1,0> ,其中<1,0,0>这个就叫做非最大有序对(或者说非饱和),因为该有序对再加入一个0.4利用的任务,照样还是可调度的。所以最大有序对意思是再加入一个e利用率的任务,就不可调度了。处理器只有一个核的情况,最大有序对表述为( 构造的时间复杂度为1/e为指数的 )
    L1(e)={ <2,0,0>,<1,1,0>,<0,0,1>,<0,1,0> },用z1表示某个有序对的编号,也叫ID
    多核情况下,每个核都用这个表示即可,因为是同构多核。


    用户给定输入3个任务,它们的利用率{0.3,0.35,0.55},利用率转换(叫做modified)后为{0.4,0.4,0.56},表示为下面要说的有序对,就是<2,1,0>(这个是输入的),该任务集在两个核上的分配,就会有很多种情况,其中可行的分配方式只有下面2种而已(每个核上利用率小于1该核即可调度)。因此我们可以用一个有序对来表示分配结果<x1,x2,...,xi,...,x|V(e)|>,这里的|V(e)|是作为x的下标。xi表示分配在e(1+e)^i这个利用率点的任务数。这个例子中,分配方法1,对于核1,就是<2,0,0>,对于核2,就是<0,1,0>。分配方法2,对于核1,就是<1,1,0>,对于核2,就是<1,0,0>。


    如果是2个核,最大化该如何表述呢,首先肯定是针对一个目标有序对<y1,y2,...y|V(e)|>,此时该有序对就是这2个核所能容纳下的最大利用率了,任意添加一个小的e利用率进去,都会导致分配失败(构造这样,时间复杂度|L1(e)|^m)。那么很明显,这个最大化的有序对,分配在两个核上,每个核也处于最饱和状态了,即每个核的最大有序对里挑出来一个呗,那上面的z1就是核1上挑出来的有序对的编号,z2,就是核2上挑出来的有序对的编号。因此形式化表述为:
    (<y1,y2,...,y|V(e)|>),<z1,z2,...,zm>),m为核数。

    Lm(e)={ (<y1,y2,...,y|V(e)|>),<z1,z2,...,zm>),(<y1’,y2’,...,y‘|V(e)|>),<z1’,z2‘,...,zm’>),......, }。  构建的查找表


    上面例子表述为:
    L2(e)={(<4,0,0>),<1,1>),(<3,1,0>),<1,2>),(<3,0,1>),<1,3>)},这个就是PTAS算法在运行前预处理时构建的查找表

    上面的意思是,假如对于<4,0,0>这个是round up后的目标任务集,表示有4个0.4利用率的任务,那这个有序对为什么是2核处理器中最大有序对呢,因为你随便再给一个利用率(0.4,0.56.0.784这几个随便给一个),都会分配失败。这个分配结果就是每个核都在0.4那儿分配两个就行了,也就是核1:<2,0,0>,核2也是:<2,0,0>,查询上面L1(e)的表达式可知,编号都是1的有序对,因此表示为<z1,z2>为<1,1>。同理(<3,1,0>),<1,2>)也是这么得来的。

    我们会发现这样一个性质,就是待分配最大化有序对的每个分量成员,就是每个核最大化有序对对应分量求和需要相等,比如(<4,0,0>),<1,1>)中的4,在核1中是2,核2中也是2,加起来就是4了。那么如果现在用户给一个任务集,表示为了<3,0,0>有序对,问我们能不能分配成功,当然可以,因为我们能找到预处理时候上面构造的查找表,和查找表中的<4,0,0>相匹配,发现每个分量只要小于等于查找表中的<4,0,0>的每个分量,则该<3,0,0>有序对就可以分配成功,就用对应的<1,1>这个分配方式即可,即核1分配两个0.4利用率的任务,核2就只分配剩下的一个就行了(虽然最饱满的情况是可以分2个0.4的)
  3. 终于解释完了上面的最大有序对,其实分配的过程就是,预先建立好查找表Lookup table,从上面直到为1/e为指数的时间复杂度的,但是没关系,这个是系统运行前预处理阶段完成的,然后运行阶段,任意给一个任务集,只需要进行round up修改为有序对,然后和查找表中的进行匹配(就是每个分量都小于查找表中某个有序对即可,这个匹配过程多项式时间复杂度的),然后就能知道分配成功或者失败了,成功也能知道具体如何分配核的了。
    真正的运行时阶段,就是多项式时间复杂度而已,这就PTAS分配算法名字的由来。

    (当然PTAS算法还考虑了有些任务利用率小于e/(1+e)的情况,这个最后分配即可,看看哪个核能放下就分配即可)

     

总结: PTAS分配算法确实做到了多项式时间复杂度的可指定精度(和理论最优分配算法的差距)的分配,但是该算法构建查找表因为还是有点复杂(不吃透这个算法原理就没法弄),而查找表会占用很多的内存空间,因此该算法实际系统中用到的不多,但是这个方法很有启发意义,空间换时间。实际实时系统中用得较多的是启发式分配算法(虽然不能最优,但是可以很接近最优,而且实现简单,不需要占什么内存,时间复杂度也低,而且还有个重要的点:PTAS不能适应任务动态加入的情况,而启发式算法(也叫近似算法)则可以比如FF),比如FF,NF,WF,BF等,下个博客就讲解这几个算法。

多核实时调度—任务分配启发式算法解读_标biao的博客-CSDN博客

这篇关于多核实时调度—多项式时间复杂度最优任务分配算法PTAS解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/171405

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据