3 问题 1 的模型建立与求解
3.1 问题分析
问题 1 要求针对题目所给 DAGG = (V, E),在满足题目所给约束(L0A、L0B、L0C 上分别同时最多只能有一个缓冲区驻留)的情况下获得相应调度序列,并使调度序列相应 max(Vstay) 尽可能小,同时分析算法相对于节点总数的时间复杂度。
设节点 v 需要的缓存大小为:

对于给定的调度序列 S,缓存驻留量 Vstay 的动态变化可形式化表示为:初始设 Vstay = 0, 按顺序遍历 S 中的节点;当遇到 ALLOC 节点时,Vstay 增加相应大小;当遇到 FREE 节点 时,Vstay 减少相应大小。执行过程中的 max(Vstay) 即为需要驻留的最大缓存容量。
3.2 应用方法基本概念
3.2.1 虚拟边构建
为了确保调度序列满足问题 1 中关于 L0 缓存区的约束条件,需在已有图结构上引入 额外的依赖控制机制。由于计算图中所有 L0 缓存区的 ALLOC 节点在初始状态下缺乏明 确的执行顺序约束,若直接在拓扑排序过程中进行选择,可能违反上述硬件限制。因此, 本文在预先对 L0 相关 ALLOC 节点进行合理排序的基础上,进一步通过添加虚拟边的方 式,在依赖图中显式地约束其执行顺序,从而保证最终调度序列的正确性。
如算法1所示,虚拟边的添加规则如下:会在基于节点 id 的基础上,在最后使用当前 L0 缓冲区的操作节点与后继缓冲区的 ALLOC 节点之间添加虚拟边, 实现为后继 ALLOC 节点增加入度,同时基于节点选择策略会优先选择 Free 节点,因此可以保障后继 ALLOC 节点基于执行顺序且在上一个 ALLOC 节点 Free 操作之后。
然而需要指出的是,当前虚拟边策略的核心作用在于保证调度序列的可行性,即确保 不违反 L0 缓存的数量限制。该方法并未深入涉及“如何确定 L0 缓冲区的最佳执行顺序” 这一优化问题。

3.2.2 Kahn 拓扑排序
为了在满足 L0 缓存区硬件约束的前提下生成可行的调度序列,本文基于添加虚拟边 后的依赖图结构,采用 Kahn 拓扑排序算法 [7] 生成节点执行顺序。Kahn 算法的核心思想 是逐步移除 DAG 中入度为 0 的节点,并将其加入拓扑序列。然而,在原始计算图中,所有 ALLOC 节点的入度均为零,若直接应用该算法,将无法保证 L0 缓冲区在执行过程中的独 占性约束,即同一类型 L0 缓存区中最多仅能有一个缓冲区同时驻留。
如算法2所示,通过前述虚拟边添加机制,可以保障前一个 L0 相关缓冲区在没有进行 Free 操作之前,后继的相同类型 L0 节点的入度均大于 0, 从而在 Kahn 排序过程中,这些 节点仅当其前驱缓冲区被释放(即对应 FREE 节点执行完毕)后才可被调度。由此,生成 的拓扑序列自然满足 L0 缓存区的驻留约束,保障了调度方案的合法性。

3.2.3 MSC 调度排序
在所述调度框架中,前期的拓扑排序与虚拟边构建步骤主要用于满足题目所给定的硬 件约束,特别是针对 L0A、L0B 及 L0C 三类缓存区分别最多仅能有一个缓冲区同时驻留的 限制条件。该预处理过程同时可对节点的时间跨度进行初步估算,为后续节点选择与拓扑 序列生成提供必要信息。而为实现问题 1 的核心目标——即最小化 max(Vstay),本文设计 了 MSC 调度排序算法, 将 Kahn 拓扑排序流程与贪心策略相结合,在每一步扩展拓扑序列 时,从当前所有候选节点中选取评估函数值最优的节点加入。为量化节点重要性并指导选 择,本文构建了一个基于多维特征的评估体系,主要考量参数包括:[delta, cp, isallocL0]。
delta:delta 与 L1 和 UB 上的 ALLOC 与 FREE 节点对应的 BUF 大小 size 正相关, 该 参数由输入节点的属性计算而来。使用该参数衡量节点重要性是基于贪心算法的思想,即 希望每次尽可能先释放内存,在不能释放内存的时候,再进行申请小的 Bufs,而针对每个 操作节点其对应 delta 大小为 0,因此在选择节点之前操作节点的优先度会高于 L1 与 UB 的 ALLOC 的操作,以保证 Vstay 的增长曲线尽可能平缓。
isallocL0:根据题意,Vstay 在计算时仅考虑 L1 和 UB 申请的缓冲区大小,Vstay 是 否增长与 L0 缓存管理节点并不直接相关,然而这意味着对应的启发式算法没有区分 L0 的 缓存管理节点与其余操作节点, 因此在此额外引入了人工定义参数 isallocL0,并基于该参 数定义了 L0 相关 ALLOC 节点与其余节点的优先度。
cp:根据时间跨度算法3计算得来的 cp 用以表征每个节点需要经过的时间跨度,即在 面对相同 delta 时,再根据时间跨度来衡量节点权重,实现更细粒度的排序。
由于问题1的核心优化目标为最小化 max(Vstay),而对执行时间并无约束,因此在设 计节点优先级策略时,未采用加权求和等综合评分方法,而是依据参数对缓存占用的直接 影响程度,确立了明确的判别层级。
如算法4所示,首先优先考虑比较候选节点的 delta 参数,其次则是 isallocL0。若上述 两者均无法区分,则引入 cp 作为次要依据,来衡量节点优先度。作为最终决策保障,当所 有评估参数均完全相同时,算法将基于节点 ID 进行确定性选择,以确保结果的唯一性与 可复现性。




1667

被折叠的 条评论
为什么被折叠?



