一种用于动态管理片上指令便签存储器的方法 技术领域 本发明涉及一种用于动态管理片上指令便签存储器的方法, 具体涉及一种用于动 态管理片上指令便签存储器的方法。
背景技术 在嵌入式系统中, 处理器的片上存储器通常采用 SRAM 结构, 主要分为高速缓存 (cache) 和便签存储器 (scratchpad-memory, SPM) 两种类型。便签存储器是一种快速的、 由编译器进行管理的片上存储器, 它和高速缓存相比在实时性、 功耗和面积上都有很大的 优势, 因此便签存储器更加适合嵌入式系统的需要。
现有的指令便签存储器的管理策略, 采用静态管理的模式, 即在程序运行前, 指令 便签存储器的内容已经被分配好, 而且在程序执行的过程中, 其内容保持不变。 对于嵌入式 应用而言静态管理模式下的便签存储器性能优于 Cache, 然而却无法适应应用程序的动态 特性, 没有灵活性。
发明内容
本发明的目的在于, 为克服针对传统静态指令便签存储器无法适应程序动态特性 的不足, 提出了一种用于动态管理片上指令便签存储器的方法。
本发明提出的一种用于动态管理片上指令便签存储器的方法, 该方法用于对片上 便签存储器的内容进行动态管理, 所述的方法包含如下步骤 :
1) 对高级语言源程序进行基于典型输入的剖面分析, 得到应用程序的执行剖面信 息;
2) 对源程序进行控制流分析, 得到程序的控制流图 ;
3) 根据得到的程序剖面信息和控制流图, 对应用程序进行分析, 识别程序中的候 选程序迁移点 ;
4) 根据得到的候选程序迁移点, 再结合相关参数建立收益模型, 针对不同候选程 序迁移点计算将程序基本块进行动态迁移所获得的初始性能收益 ;
5) 根据得到的基本块的初始性能收益, 同时考虑若干因素, 决定是否进行程序块 的动态迁移 ;
6) 根据做出的迁移方案, 在程序迁移点处插入控制程序块迁移的指令, 将程序块 从片外传输到片上 ;
7) 对源程序进行二次编译, 得到源程序对应的汇编程序进行汇编, 并和其他经过 编译的应用程序、 库函数进行链接, 最终得到动态利用片上指令便签存储器的二进制可执 行文件。
上述技术方案, 步骤 1) 所述的程序的执行剖面信息包括 : 程序基本块的大小、 执 行的次数或分支频率。
上述技术方案, 步骤 3) 所述的识别程序迁移点的类型包含 : 函数开始、 循环入口处和循环结束处。循环入口前后的程序局部性发生明显的变化, 并且循环体的执行频率远 高于循环入口处及以前的代码的执行频率, 因而动态迁移操作的开销能够被补偿 ; 算法在 函数入口点和循环结束处的程序点可以利用连续串行执行的基本块特点, 补偿动态迁移操 作开销, 进而获得更大的收益。其中, 步骤 3) 所述的识别程序迁移点的步骤, 具体的考虑因 素包含 :
在程序迁移点之后, 程序基本块执行的局部性发生明显变化, 并且程序迁移点的 执行频率小于被迁移程序基本块的执行频率, 这样动态迁移操作的开销才能通过被迁移程 序块所获得的收益获得补偿。
上述技术方案, 步骤 4) 所述的相关参数包含 : 程序基本块的大小、 将程序放在片 上便签存储器时获得的收益和将程序进行动态迁移的额外开销, 其中, 所述的收益和开销, 能够通过运行时间、 功耗、 或面积以及三者结合综合考虑衡量得到。
上述技术方案, 步骤 5) 所述的若干因素包含 : 便签存储器的可用空闲存储空间、 程序基本块的生存期和迁移操作的开销 ; 且步骤 5) 所述的动态迁移之前能进行优化步骤, 该步骤为 : 将连续的程序基本块进行合并后再迁移, 或将当前生存的程序基本块覆盖便签 存储器中已经死亡的基本块。即当当程序块不在生存的时候, 可以被当前生存的程序块覆 盖; 片上便签存储器的可用空闲存储空间, 当剩余存储空间不多的时候, 可以尽量放一些小 的程序基本块来提升便签存储器的利用率。 上述技术方案, 步骤 6) 所述的动态迁移操作, 通过逐条指令读写存储器的方式完 成, 或通过直接存储器访问的方式来完成。其中, 动态迁移操作的实现方式, 会影响步骤 4) 收益模型。
本发明的优点在于, 建立了多种候选程序迁移点模型, 并根据需要建立针对性能、 功耗等多种目的的收益模型, 同时在动态块迁移过程中考虑到了程序块生存期、 剩余存储 空间大小、 迁移操作的开销等因素, 利用存储器读写操作或者直接存储访问等多种方式进 行动态程序块迁移, 最终达到了高效、 动态管理片上指令便签存储器的目的。 该方法能够达 到提升嵌入式系统性能、 降低嵌入式系统功耗等目的。
附图说明
图 1 给出了本发明的一种用于动态管理片上指令便签存储器的方法的详细流程 图。 具体实施方式
下面结合附图和具体实施方式对本发明做进一步说明。 该方法具体工作步骤如图 1 所示 :
1. 对高级语言源程序文件进行静态控制流分析或者基于典型输入的剖面分析, 得 到包含基本块大小、 执行频率、 执行次数等的程序执行剖面信息和程序的控制流图 ;
2. 根据剖面信息和控制流图, 分析源程序, 找出候选的动态程序迁移点。 程序迁移 点要选在其后的程序局部性发生明显改变的程序点, 同时要保证程序迁移点的执行频率小 于被迁移程序块的执行频率, 这样才能使插入的迁移操作的开销得到补偿 ;
3. 根据收益模型计算程序块进行动态迁移的初始收益, 该收益模型可以是功耗收益、 性能收益或者多种收益的综合考虑, 该收益模型主要基于剖面分析得到的基本块大小、 基本块的执行次数、 频率以及将基本块进行动态迁移的开销等因素 ;
4. 根据程序基本块的生存期、 便签存储器的剩余空间等因素, 决定是否进行动态 迁移。 在动态迁移之前, 可以进行多种优化操作, 例如将连续的程序基本块进行合并后再迁 移, 可以减少动态迁移开销 ; 将当前生存的程序基本块覆盖便签存储器中已经死亡的基本 块, 可以提升便签存储器的利用率 ;
5. 根据步骤 4 做出的程序动态迁移的决策, 在程序中插入动态迁移操作。动态迁 移的实现, 可以是通过逐条指令读写存储器的方式, 也可以通过直接存储访问的方式, 具体 实现方式的不同会对步骤 3 采用的收益模型产生影响 ;
6. 在考虑动态迁移操作之后, 产生源程序的汇编语言程序 ;
7. 将当前应用程序对应的汇编程序进行汇编后, 和其他经过相同处理过程的库函 数程序合并, 并进行链接操作, 得到可执行文件。
通过以上步骤, 本发明可以对片上指令便签存储器进行高效的动态管理, 达到提 升嵌入式系统性能、 降低嵌入式系统功耗等目的。
最后所应说明的是, 以上实施例仅用以说明本发明的技术方案而非限制。尽管参 照实施例对本发明进行了详细说明, 本领域的普通技术人员应当理解, 对本发明的技术方 案进行修改或者等同替换, 都不脱离本发明技术方案的精神和范围, 其均应涵盖在本发明 的权利要求范围当中。