| ASAP调度算法(as soon as possible)又称作尽可能早调度算法,将所有操作赋于最早可能调度到的控制步。其基本思想是:将控制数据流图看作有向图(忽略控制数据流图中的传输结点,将操作结点、起始结点和终止结点作为有向图的结点,数据相关边作为有向图的有向边),然后对该有向图进行正向分层排序。算法的主要步骤如下: (1) 计算各结点的入度(对应于操作的操作数个数); (2) 置起始结点为当前结点,将其标识值置为0; (3) 删除与当前结点相连的所有有向边,计算相应结点的入度; (4) 若结点的入度为0,将其加入队列,置其标识值为当前结点标识值加1; (5) 若队列非空,则从队列中取一结点为当前结点,转(3); (6) 各操作所调度到的控制步对应于结点的标识值,算法结束。 ALAP调度算法(as late as possible)又称作尽可能迟调度算法,将所有操作赋于最迟可能调度到的控制步。其基本思想与ASAP调度算法类似,不同之处在于:ALAP调度算法是对有向图进行反向的分层排序。算法的主要步骤如下: (1) 计算个结点的出度(对应于操作输出变量的引用次数); (2) 置终止结点为当前结点,将其标识值置为0,置层数为0; (3) 删除与当前结点相连的所有有向边,计算相应结点的出度; (4) 若结点的出度为0,将其加入队列,置其标识值为当前结点标识值加1,置层数为当前结点标识值加1; (5) 若队列非空,则从队列中取一结点为当前结点,转(3); (6) 各操作所调度到的控制步对应于层数与相应结点标识值的差,算法结束。 例 求解微分方程: y'+ 3xy' + 3y = 0 使用迭代算法求解该方程,其VHDL描述示于图5.13。经过编译与转换等处理后,得到diffeq的控制数据流图,经简化后示于图5.14。假设乘法操作需要2个控制步才能完成,而加法、减法和比较操作都只需要1个控制步即可完成。图5.15和图5.16 分别给出了diffeq的ASAP与ALAP调度算法的调度结果。
|