假设我有一个嵌入式项目(如果有区别,使用ARM Cortex-M ),其中代码的某些部分非常关键,需要尽可能快地在确定的时间内运行。
是否有可能牺牲一部分L1缓存,并将其保留用于关键代码/数据?然后,我可以加载关键代码/数据,并始终以L1缓存速度运行/访问它们。
发布于 2017-09-22 15:08:23
好的,我想答案是“从技术上讲,没有”。分配给高速缓存的内存由高速缓存控制器用来做它应该做的事情,这就是高速缓存。
因此,希望芯片供应商已经提供了从最快的内存中运行代码的方法。如果芯片有TCM,那么在那里加载你的关键代码应该是很好的,并且运行的速度和它在L1缓存中缓存时一样快。如果芯片提供闪存和RAM,那么在RAM上加载关键代码也应该要快得多。在后一种情况下,缓存控制器(如果存在)可以配置为使用相同的RAM来运行缓存的代码。
发布于 2019-11-23 16:33:08
是的,这是可能的:
TB3186“如何使用aCortex™-M缓存控制器实现确定性代码性能”
http://ww1.microchip.com/downloads/en/DeviceDoc/How-to-Achieve-Deterministic-Code-Performance-using-CortexM-Cache-Controller-DS90003186A.pdf
..。使用CMCC,通过以某种方式加载关键代码并锁定它,可以将缓存的一部分用作确定性代码性能的TCM。当特定路被锁定时,CMCC不会将锁定的路用于例程缓存事务。具有加载的关键代码的锁定缓存路充当始终获取缓存命中条件。
https://stackoverflow.com/questions/46342076
复制相似问题