针对具有多个功能单元的处理器调度循环的方法
【技术领域】
[0001] 以下描述涉及一种循环调度方法。
【背景技术】
[0002] 超长指令字(VLIW)处理器或粗粒度可重构阵列(CGRA)处理器使用多个功能单元 (FU)。为了使FU相互通信,FU可通过数据路径相互连接。
[0003] 在处理器中选择数据路径和FU的配置中,若干组合是可能的。
【发明内容】
[0004] 提供本
【发明内容】
以按简化形式介绍对构思的选择,其中,所述构思在以下的具体 实施方式中被进一步描述。本
【发明内容】
不意图确定被要求权利的主题的关键特征或显著特 征,也不意图用作对确定被要求保护的主题的范围的帮助。
[0005] 在一个总的方面,一种循环调度方法包括:使用执行单元调度较高优先级循环; 使用作为调度较高优先级循环的结果而可用的执行单元来调度较低优先级循环。
[0006] 调度较高优先级循环的步骤可包括:使用执行单元调度最高优先级循环。
[0007] 调度较低优先级循环的步骤可包括:使用在较高优先级循环被调度的周期中未被 分配给较高优先级循环的执行单元来调度较低优先级循环的至少一部分。
[0008] 调度较高优先级循环的步骤可包括:从在源代码中包括的循环中选择独立的多个 循环;确定被选择的多个循环的优先级。
[0009] 较高优先级循环的优先级可高于较低优先级循环的优先级,并且循环的优先级可 基于以下项中的至少一个被计算:循环的迭代计数和用于循环的单次迭代的周期数。
[0010] 调度较低优先级循环的步骤可包括:基于在较低优先级循环中包括的指令之间的 数据依赖性,将所述指令分配给在较高优先级循环被调度的周期中的可用执行单元。
[0011] 调度较低优先级循环的步骤可包括:确定将被用于调度较低优先级循环的执行单 元;验证被确定的执行单元是否可用于较低优先级循环被调度的周期中。
[0012] 调度较高优先级循环的步骤可包括:基于在最高优先级循环中包括的指令之间的 数据依赖性,将所述指令分配给在周期中的执行单元。
[0013] 所述方法还可包括:响应于较低优先级循环未使用可用执行单元被调度,展开调 度较高优先级循环的结果;使用作为被展开的调度结果而可用的执行单元来调度较低优先 级循环。
[0014] 所述展开步骤可包括:基于用于展开计数的阈值和用于被展开的调度结果的周期 数的阈值中的至少一个,确定是否将展开调度较高优先级循环的结果。
[0015] 调度较低优先级循环的步骤可包括:响应于较高优先级循环的迭代计数大于较低 优先级循环的迭代计数,在较低优先级循环被迭代之后,使用声明防护来限制较低优先级 循环的执行。
[0016] 所述方法还可包括:响应于较高优先级循环的迭代计数小于较低优先级循环的迭 代计数,在较高优先级循环被迭代之后,调度较低优先级循环以迭代较低优先级循环的剩 余部分。
[0017] 所述方法还可包括:在较高优先权循环被迭代之后,调度用于存储较低优先级循 环的中间数据的指令。
[0018] 执行单元可包括在粗粒度可重构阵列(CGRA)处理器或超长指令字(VLIW)处理器 中。
[0019] 执行单元可包括标量功能单元(FU)、打包/解包FU、矢量加载/存储FU和矢量 FU,其中,标量FU被配置为处理标量数据操作,打包/解包FU被配置为处理标量数据和矢 量数据之间的转换,矢量加载/存储FU被配置为处理对矢量数据的加载和存储,矢量FU被 配置为处理对矢量数据的操作。
[0020] 在另一总的方面,一种循环调度方法包括:使用执行单元调度第一循环;使用作 为调度第一循环的结果而可用的执行单元来调度第二循环。
[0021] 调度第二循环的步骤可包括:使用在第一循环被调度的周期中未被分配给第一循 环的执行单元来调度第二循环的至少一部分。
[0022] 所述方法还可包括:从在源代码中包括的循环中选择两个独立的循环;将能够使 可用执行单元的数量增加的被选择的循环确定为第一循环,并将剩余的被选择的循环确定 为第二循环。
[0023] 第一循环的优先级可高于第二循环的优先级,并且循环的优先级可基于以下项中 的至少一个被计算:循环的迭代计数和用于循环的单次迭代的周期数。
[0024] 调度第二循环的步骤可包括:基于在第二循环中包括的指令之间的数据依赖性, 将所述指令分配给在第一循环被调度的周期中的可用执行单元。
[0025] 调度第二循环的步骤可包括:确定将被用于调度第二循环的执行单元;验证被确 定的执行单元是否可用于第二循环被调度的周期中。
[0026] 调度第一循环的步骤可包括:基于在第一循环中包括的指令之间的数据依赖性, 将所述指令分配给在周期中的执行单元。
[0027] 所述方法还可包括:响应于第二循环未使用可用执行单元被调度,展开调度第一 循环的结果;使用作为被展开的调度结果而可用的执行单元来调度第二循环。
[0028] 所述展开步骤可包括:基于用于展开计数的阈值和用于被展开的调度结果的周期 数的阈值中的至少一个,确定是否将展开调度第一循环的结果。
[0029] 调度第二循环的步骤可包括:响应于第一循环的迭代计数大于第二循环的迭代计 数,在第二循环被迭代之后,使用声明防护来限制第二循环的执行。
[0030] 所述方法还可包括:响应于第一循环的迭代计数小于第二循环的迭代计数,在第 一循环被迭代之后,调度第二循环以迭代第二循环的剩余部分。
[0031] 所述方法还可包括:在第一循环被迭代之后,调度用于存储第二循环的中间数据 的指令。
[0032] 在另一总的方面,提供一种存储用于循环调度的程序的非暂时性计算机可读存储 介质,所述程序包括用于使计算机执行以上所述的第一个方法的指令。
[0033] 在另一总的方面,一种控制器包括:选择器,被配置为从在源代码中包括的多个循 环中选择独立的多个循环;检测器,被配置为在被选择的多个循环中确定具有较高优先级 的第一循环和具有较低优先级的第二循环;调度器,被配置为使用执行单元调度第一循环, 并使用作为调度第一循环的结果而可用的执行单元来调度第二循环;产生器,被配置为产 生包括调度第一循环的结果和调度第二循环的结果的目标代码。
[0034] 调度第二循环的步骤可包括:使用在第一循环被调度的周期中未被分配给第一循 环的执行单元来调度第二循环的至少一部分。
[0035] 所述确定步骤可包括:基于以下项中的至少一个来计算第一循环的优先级和第二 循环的优先级:循环的迭代计数和用于循环的单次迭代的周期数。
[0036] 调度第二循环的步骤可包括:将第二循环的数据流图(DFG)映射到在第二循环被 调度的周期中可用的执行单元。
[0037] 调度第二循环的步骤可包括:确定将被用于调度第二循环的执行单元;验证被确 定的执行单元是否可用于第二循环被调度的周期中。
[0038] 调度第一循环的步骤可包括:在周期中将第一循环的数据流图(DFG)调度至执行 单元。
[0039] 调度器还可被配置为:响应于第二循环未使用可用执行单元被调度,展开调度第 二循环的结果;使用作为被展开的调度结果而可用的执行单元来调度第二循环。
[0040] 调度第二循环的步骤可包括:在第一循环的迭代计数大于第二循环的迭代计数的 情况下,在第二循环被迭代之后,使用声明防护来限制第二循环的执行。
[0041] 调度器还可被配置为:响应于第一循环的迭代计数小于第二循环的迭代计数,调 度第二循环以迭代第二循环的剩余部分。
[0042] 在另一总的方面,一种循环调度方法包括:使用执行单元调度较高优先级循环; 使用作为调度较高优先级循环的结果而可用的执行单元来调度较低优先级循环。
[0043] 调度较高优先级循环的步骤可包括:使用执行单元调度最高优先级循环。
[0044] 调度较低优先级循环