童话故事 — CPU的贴身护卫ITCM和ICache童话故事 — CPU的贴身护卫ITCM和ICache

 

 

“叮铃铃… 叮铃铃…”

“叮铃铃… 叮铃铃…”

“谁呀?”黛丝博士打开了家门,”哇,高飞,你怎么来了?”

“谁呀?”黛丝博士打开了家门,”哇,高飞,你怎么来了?”

高飞狗:”好久不见,想来瞧您,还置了卿无与伦比欣赏吃的纯黑巧克力。”

高飞狗:”好久不见,想来探望你,还购置了您顶欢喜吃的纯黑巧克力。”

黛丝:”以往还是布鲁托领在您来之,今天你独自上门,必定不怀好意。买了这般多巧克力,必是别来异图吧?”

黛丝:”以往犹是布鲁托领在公来之,今天而独自上门,必定不怀好意。买了这么多巧克力,必是转来外图吧?”

高飞狗:”你这说的呦话,咱俩一块长大的,怎么会不怀好意? 别有外图也真的。”

高飞狗:”你当时说之呀话,咱俩一片长大的,怎么会无怀好意? 别有客图也真的。”

黛丝:”我就是清楚您无事不登八宝殿! 说吧,又遇到什么困难的难题了。”

黛丝:”我便知晓你随便事不登八宝殿! 说吧,又遇什么困难的难题了。”

高飞狗:”是这样的,这有限年为Cortex-M7(以下简称CM7)为中心的MCU越来越多,CPU周围新增了几种植部件,例如ITCM和ICache,最新的STM32H743,ITCM容量高及64KB,ICache容量高臻16KB,我对其功能一知半解,对该用法一头雾水,你可知免可知给详细讲解一番?”

高飞狗:”是这么的,这点儿年因为Cortex-M7(以下简称CM7)为着力之MCU越来越多,CPU周围新增了几乎栽部件,例如ITCM和ICache,最新的STM32H743,ITCM容量高臻64KB,ICache容量高及16KB,我本着那个效力一知半解,对那个用法一头雾水,你能不能够于详细讲解一番?”

黛丝:”高飞,你什么时候换得起早贪黑了,居然研究起高大上的科技来了。”

黛丝:”高飞,你什么时换得起早贪黑了,居然研究起高大上的科技来了。”

高飞狗心想:”只要能够将您当时白富美将到手,再光辉上之诸多不便呢要不惜一切代价克服。”

高飞狗心想:”只要会管你顿时白富美来到手,再宏伟上的不便呢要不惜一切代价克服。”

黛丝:”ITCM和ICache还确实是殊时尚之事物,毕竟是初东西,我研究的年华为无加上,谈不齐教,说错的地方还请求即指正。”

黛丝:”ITCM和ICache还真是非常时尚的物,毕竟是初东西,我研究之时空吗无增长,谈不达到上课,说错的地方还恳请立即指正。”

高飞狗:”你太谦虚了!”

高飞狗:”你无比谦虚了!”

黛丝:”咱们还是由实质上问题出发吧。”

黛丝:”咱们要于事实上问题出发吧。”

黛丝:”以堆储藏室空间吗例。堆栈空间及其存储的各种数码(含应用程序中的兼具片段变量),只有CPU才见面访问,而且是数造访。但是,在CM7出现以前,堆栈空间只能在SRAM中,而SRAM是共享资源,DMA可以看,其它总线Master也还好拜。导致了以下问题:”

黛丝:”以堆仓房空间啊例。堆栈空间及其存储的各种数据(含应用程序中之装有有变量),只有CPU才见面造访,而且是多次造访。但是,在CM7出现以前,堆栈空间只能放在SRAM中,而SRAM是共享资源,DMA可以拜,其它总线Master也还好看。导致了以下问题:”

黛丝:”Q1:CPU要和任何总线Master争夺SRAM访问控制权,最无助的时段,CPU只发生50%之岁月得拜SRAM,极大地降落了先后性能。”

黛丝:”Q1:CPU要与另总线Master争夺SRAM访问控制权,最悲惨的时光,CPU只发生50%之时刻可以拜SRAM,极大地落了次性能。”

黛丝:”Q2:其它总线Master有或篡改堆栈空间及的数额,严重威胁应用程序的平安。”

黛丝:”Q2:其它总线Master有或篡改堆栈空间及的数量,严重威胁应用程序的安全。”

高飞狗:”对对对,我不怕发出过如此的阅历。”

高飞狗:”对对对,我便生过如此的涉。”

黛丝:”ITCM的起,彻底解决了以上两独问题。ITCM就是CPU的嫔妃,归CPU专享、专用、私有、独占。我们把堆库空间布置在ITCM内,CPU就得零等待、单周期、全速访问堆栈空间以及累用到之数据对象,大大提升应用程序性能,且其中的数未会见叫别总线Master篡改,大大提升了应用程序的安全性。”

黛丝:”ITCM的面世,彻底解决了上述两个问题。ITCM就是CPU的贵人,归CPU专享、专用、私有、独占。我们管堆仓库空间布置在ITCM内,CPU就足以零等待、单周期、全速访问堆栈空间和勤用到之多少对象,大大升级应用程序性能,且其中的多寡不会见受外总线Master篡改,大大升级了应用程序的安全性。”

高飞狗:”茅塞顿开!”

高飞狗:”茅塞顿开!”

高飞狗:”除此之外,ITCM还有呀用?”

高飞狗:”除此之外,ITCM还有啊用?”

黛丝:”在复杂应用程序中,常常强频地、随机地产生各种中断。发生搁浅时,就要读取中断向量表(IVT),然后跳反至中断服务程序(ISR)。在CM7出现之前,CPU应针对中断存在以下几只头疼的题目:”

黛丝:”在纷繁应用程序中,常常强频地、随机地发出各种中断。发生搁浅时,就要读取中断向量表(IVT),然后跳反到中断服务程序(ISR)。在CM7出现前,CPU应本着搁浅存在以下几独头疼的题目:”

黛丝:”Q1:IVT与于中止代码的物理地址去(简称空距)通常较远,需要吃多个机器周期才能够读取中断向量。”

黛丝:”Q1:IVT与于暂停代码的情理地址去(简称空距)通常比较远,需要吃多只机械周期才能够读取中断向量。”

黛丝:”Q2:而ISR与IVT的空距通常为较远,又用耗费多只机器周期才能够过反到ISR。”

黛丝:”Q2:而ISR与IVT的空距通常也较远,又欲吃多独机械周期才会过反至ISR。”

黛丝:”于是,产生同样次等中断,要耗多机器周期才会跳反执行及ISR。”

黛丝:”于是,产生同样坏中断,要耗多机周期才会超过反执行及ISR。”

黛丝:”Q3:ISR返回到被中止代码又使消耗多独机器周期。”

黛丝:”Q3:ISR返回到被中断代码又如耗费多只机械周期。”

黛丝:”执行同样不行ISR,花费在代码跳转上之时相近不多。但是,高度频繁、随机产生的各种中断,将如CPU在程序跳反上淘极其巨大的时刻。在千头万绪、实时性要求较高的以中,其代价还是那个惊人的。”

黛丝:”执行同一软ISR,花费在代码跳转上的流年相近不多。但是,高度频繁、随机产生的各种中断,将使CPU在先后跳反上吃极其巨大的时。在纷繁、实时性要求比较高的行使被,其代价还是非常可观之。”

黛丝:”ITCM的面世,完美解决了以上3单问题。程序设计者可以人工地将IVT和ISR安排在平片连续地址空间内,在系统启动时将该举装ITCM中,由于CPU访问ITCM总是独自周期的,以上3只问题备受的次跳反均好但周期就,大幅提升了ISR的实时性能。”

黛丝:”ITCM的起,完美解决了上述3独问题。程序设计者可以人工地拿IVT和ISR安排在同一片连续地址空间内,在系统启动时用那总体盛ITCM中,由于CPU访问ITCM总是独自周期的,以上3个问题遭到之顺序跳反均可以只周期就,大幅升级了ISR的实时性能。”

 

 

高飞狗:”我记忆MCU内部通常还放起由适应实时加速器 (ART-Accelerator™),为什么还索要ITCM来开这项工作为?”

高飞狗:”我记得MCU内部通常都配起自适应实时加速器 (ART-Accelerator™),为什么还用ITCM来举行这项工作啊?”

黛丝:”在各个读取连续存放的下令时,ART- Accelerator有众所周知的涨潮效果。而以上3独问题的状态,基本上是自由读取指令,也不怕是代码间的空距较远,ART- Accelerator的效应就算大打折扣,基本没什么提速作用,这多亏ART- Accelerator的短板,而ITCM的面世则大大提升了任性读取指令与数量的性,补上了ART- Accelerator的短板。”

黛丝:”在挨家挨户读取连续存放的一声令下时,ART- Accelerator有拨云见日的涨潮效果。而以上3只问题之事态,基本上是随机读取指令,也不怕是代码间的空距较远,ART- Accelerator的力量即使大打折扣,基本没什么提速作用,这正是ART- Accelerator的短板,而ITCM的产出则大大提升了随便读取指令与数据的习性,补上了ART- Accelerator的短板。”

 

 

高飞狗:”我理解了。”

高飞狗:”我懂得了。”

高飞狗:”亲爱的,我意识,STM32H743的ITCM容量高及64KB,除了缓存IVT、ISR、堆栈空间之外,把方方面面RTOS缓存进去吧没问题。如此,CPU就可以独占地、单周期看高频度用到的代码和数码,应用程序的特性提高幅度将是不可想像的。”

高飞狗:”亲爱的,我意识,STM32H743的ITCM容量高及64KB,除了缓存IVT、ISR、堆栈空间之外,把全路RTOS缓存进去吧从来不问题。如此,CPU就得独占地、单周期看高频度用到之代码和数据,应用程序的特性提高幅度将是不可想像的。”

黛丝:”你要么十分懂事的! 比以前聪明多了!”

黛丝:”你还是不行懂事的! 比原先聪明多矣!”

高飞狗:”我懂得怎么而将ITCM的容量设计得如此大了。”

高飞狗:”我清楚怎么要把ITCM的容量设计得这么深了。”

高飞狗:”CM7是32各项中心,为何ITCM被规划呢64个宽度?”

高飞狗:”CM7是32员中心,为何ITCM被设计为64位宽度?”

黛丝:”虽然CM7的整数运算能力多啊32员,但也有少量64位整数运算指令与大气64号对精度浮点数运算指令,传送64各类数据的需要还是众之,而且许多限令需要平等次等传送多独32个数据,如下表所示,与32员总线宽度相比,64员的总线宽度可以节约50%底数传送时间,性能提升是十分惊人之。”

黛丝:”虽然CM7的平头运算能力多也32位,但为发少量64号整数运算指令与大量64各类对精度浮点数运算指令,传送64各项数据的求还是众多之,而且许多下令需要平等不善传送多只32个数据,如下表所示,与32员总线宽度相比,64位之总线宽度可以节省50%底数量传送时间,性能提升是大惊人的。”

例子:一次传送64位宽度数据的指令

说明

LDRD R8, R9, [R3];

以R3为地址指针,将一个64位双字载入R8和R9

LDM R8, {R0-R3}

以R8为地址指针,读取4个32位数据到寄存器中

相当于传送2个64位双字

STM R1, {R3-R6,R11,R12}

以R1为地址指针,存储6个32位寄存器数据

相当于传送3个64位双字

PUSH {R4-R7};

将4个32位寄存器推入堆栈,相当于2个64位双字

64位双精度浮点数的读取和存储指令

不再列出具体指令

例子:一次传送64位宽度数据的指令

说明

LDRD R8, R9, [R3];

以R3为地址指针,将一个64位双字载入R8和R9

LDM R8, {R0-R3}

以R8为地址指针,读取4个32位数据到寄存器中

相当于传送2个64位双字

STM R1, {R3-R6,R11,R12}

以R1为地址指针,存储6个32位寄存器数据

相当于传送3个64位双字

PUSH {R4-R7};

将4个32位寄存器推入堆栈,相当于2个64位双字

64位双精度浮点数的读取和存储指令

不再列出具体指令

 

 

高飞狗:”听你称了这样多,胜读多年写。有接触累了咔嚓? 我让你泡杯咖啡,吃块巧克力如何?”

高飞狗:”听你谈话了如此多,胜读多年书写。有接触累了咔嚓? 我深受你泡杯咖啡,吃块巧克力如何?”

黛丝:”你倒反客为主了!还发何问题,一气问了,我还要出去办事为。”

黛丝:”你倒反客为主了!还发出何问题,一气问了,我还要出去干活为。”

高飞狗心想:”还这么厉害,一丝咸聊的火候还不被。”

高飞狗心想:”还这样狠心,一丝咸聊的机遇还未为。”

高飞狗:”既然ITCM这么好,为什么还产生了个ICache,又生出什么用啊? 总有种植既生高飞,何生黛丝的痛感!”

高飞狗:”既然ITCM这么好,为什么还出了只ICache,又来啊用吧? 总起种植既生高飞,何生黛丝的发!”

黛丝:”巧言令色,看本身弗蹈大而!”

黛丝:”巧言令色,看自己不踩大而!”

黛丝:”这还得看一个小例子,才会说得清楚。如下表所示。”

黛丝:”这还得看一个略带例子,才会说得掌握。如下表所示。”

 

 

// 循环1亿次

while (…) {

function1(); // 函数地址在0x10000

function2(); // 函数地址在0x20000

function3(); // 函数地址在0x30000

}

// 循环1亿次

while (…) {

function1(); // 函数地址在0x10000

function2(); // 函数地址在0x20000

function3(); // 函数地址在0x30000

}

 

 

黛丝:”这段小序来2只特性:

黛丝:”这段小序来2个性状:

F1:3只函数顺序得到执行,在履时间上是邻之,简称时距相邻。

F1:3单函数顺序得到实施,在推行时达是邻近的,简称时距相邻。

F2:3个函数的大体地址去非常远,简称空距很远。

F2:3独函数的物理地址去好远,简称空距很远。

 

 

为空距很远,前一个函数执行了后,跳反执行到下一个函数,至少需花3只机械周期,循环的1不好施行费在跳转上之辰最少9个机器周期,循环的1亿不行实践相应的支出至少9亿只机械周期!

因为空距很远,前一个函数执行了后,跳反执行到下一个函数,至少需花3个机械周期,循环的1坏施行费在跳转上之流年最少9只机器周期,循环的1亿次实践相应的开发至少9亿个机械周期!

 

 

发了ICache之后,情况大不相同。

发生了ICache之后,情况大不相同。

ICache的特点是机动地将常离相邻的代码尽可能集中存放于温馨体内,而不论是这些代码的空距有差不多远,且CPU以单周期看ICache。”

ICache的特性是机动地将常离相邻之代码尽可能集中存放于团结体内,而不论是这些代码的空距有多远,且CPU以单独周期看ICache。”

 

 

黛丝:”以上述小循环也条例,在实施function1()期间,ICache会把function1()尽可能缓存在团结体内,在尽完毕一糟糕巡回后,如果3只函数的总容量不超过ICache的容量,那么3独函数的全方位代码都已经缓存在ICache体内。从循环的第2不成实施起来,CPU只待访问ICache就可以实行总体循环,不必再拜访FLASH,所有指令的获都是独周期的。前一个函数执行了后,跳反执行及下一个函数,只需要1独机械周期,循环的1亿破实行费在函数跳反上的年华独自待3亿只机械周期!”

黛丝:”以上述小循环也条例,在实践function1()期间,ICache会把function1()尽可能缓存在大团结体内,在履完毕一不成巡回后,如果3个函数的总容量不超ICache的容量,那么3只函数的百分之百代码都曾缓存在ICache体内。从循环的第2次执行起来,CPU只需要访问ICache就得履总体循环,不必再度看FLASH,所有指令的取都是才周期的。前一个函数执行了后,跳反执行到下一个函数,只待1只机械周期,循环的1亿不好实施费在函数跳反上之时空才待3亿单机器周期!”

黛丝:”通常,函数function1/2/3()还会见调用其它众多函数,函数之间的跳转切换数量而远远多于如达到所说。只要容量足够深,ICache还会见拿让function1/2/3()调用的旁函数通通缓存到体内,由此而省的实行时间远远胜出如上所述。”

黛丝:”通常,函数function1/2/3()还会调用其它众多函数,函数之间的跳转切换数量而远多于如达到所说。只要容量足够大,ICache还会管被function1/2/3()调用的旁函数通通缓存到体内,由此而省的实行时间远远出乎如上所述。”

黛丝:”所以,ICache的优势是智能地、自动地以经常距离相邻而空距很远之代码段放置在体内,CPU以单周期看这些代码,大大升级了程序性能。”

黛丝:”所以,ICache的优势是智能地、自动地以经常距离相邻而空距很远之代码段放置于体内,CPU为单纯周期看这些代码,大大升级了先后性能。”

黛丝:”而ITCM的优势是大妈提升了时距不相邻而空距相邻之代码段的实行性,且需要人工地将代码组织改为空距相邻。”

黛丝:”而ITCM的优势是大妈提升了时距不相邻而空距相邻之代码段的实践性,且要人工地拿代码组织改为空距相邻。”

高飞狗:”ICache会不会见缓存ITCM中之代码?”

高飞狗:”ICache会不见面缓存ITCM中之代码?”

黛丝:”由于CPU能够为单纯周期看ITCM中之全部内容,所以ITCM中的内容未肯定缓存到ICache。在CPU硬件设计上便确保形成即一点。所以,ICache中缓存的代码一定是ITCM之外的内容。”

黛丝:”由于CPU能够为单纯周期看ITCM中的全部内容,所以ITCM中之情节未肯定缓存到ICache。在CPU硬件设计上就管做到及时一点。所以,ICache中缓存的代码一定是ITCM之外的情。”

高飞狗:”ITCM和ICache还当真各有所长。”

高飞狗:”ITCM和ICache还真各有所长。”

高飞狗:”你道了如此多,我来总一下,你看对未针对。”

高飞狗:”你唠了如此多,我来总一下,你看对非针对。”

高飞狗:”结论1:ITCM既会缓存代码也能够缓存数据,但需要人工地将频繁执行之代码、IVT、ISR和储藏室空间连通(空距相邻),人为地装入其中。从而使CPU以单独周期、独占方式访这些代码和数据,大幅升级应用程序的性质和安全性。”

高飞狗:”结论1:ITCM既能缓存代码也会缓存数据,但待人工地拿频繁执行的代码、IVT、ISR和仓库空间连通(空距相邻),人为地装入其中。从而使CPU以单纯周期、独占方式访这些代码和数量,大幅提升应用程序的性及安全性。”

高飞狗:”结论2:ICache只能缓存代码,但智能地、自动地用经常离相邻而空距很远的代码段放置于体内,CPU以仅周期看这些代码,大幅提升程序性能。”

高飞狗:”结论2:ICache只能缓存代码,但智能地、自动地以经常离相邻而空距很远之代码段放置在体内,CPU因只周期看这些代码,大幅升级程序性能。”

高飞狗:”简而言之,ITCM和ICache是CPU的贴身护卫。”

高飞狗:”简而言之,ITCM和ICache是CPU的贴身护卫。”

黛丝:”概括得异常好。”

黛丝:”概括得格外好。”

黛丝:”对于STM32H743,ITCM和ICache的总容量已达80KB,如果程序设计者精心安排,使得80%之年华CPU是在即时两头中实行顺序,应用程序的属性提升将会见极其巨大。”

黛丝:”对于STM32H743,ITCM和ICache的总容量已达成80KB,如果程序设计者精心安排,使得80%的时间CPU是以即时两头中实行顺序,应用程序的性能提升将会见太巨大。”

 

 

高飞狗:”ITCM是Instruction Tightly Coupled
Memory的缩写,似乎其中只能存放代码?”

高飞狗:”ITCM是Instruction Tightly Coupled
Memory的缩写,似乎其中只能存放代码?”

黛丝:”你还百般仔细之!ITCM也得以存放数据,例如堆栈空间。所以,这个名词的确有点词不浅。”

黛丝:”你还挺仔细之!ITCM也可以存放数据,例如堆栈空间。所以,这个名词的确有些词不达意。”

 

 

高飞狗:”对了,CM7核心还新增了DCache部件。最近举行了部分实验,涉及DMA传送,好像一启用DCache,数据读写及传递就发出问题;只要禁用DCache,一切都健康。你能够无克吃自己详细讲解一番?”

高飞狗:”对了,CM7核心还新增了DCache部件。最近召开了有实验,涉及DMA传送,好像一启用DCache,数据读写及传递就发生题目;只要禁用DCache,一切都健康。你能无克被自己详细讲解一番?”

黛丝:”今天工夫不早了,我还得下干活,下次加以吧。”

黛丝:”今天时光未早了,我还得下工作,下次再说吧。”

高飞狗:”那自己要吃晚餐,聊表谢意!”

高飞狗:”那自己请求吃晚餐,聊表谢意!”

黛丝:”饭和衰落就未了,你再无动自身就算于跑了公!”

黛丝:”饭和萎缩就未了,你还未移步我就起跑了若!”

高飞狗:”这么狠心呀!那自己就算未客气了,先走一步了。”

高飞狗:”这么厉害呀!那我不怕无客气了,先走一步了。”

“高飞的白鹭,黛丝的鹅,唐诗里产生打,唐诗里发出唱歌,唐诗是自己本着君的剖白…”

“高飞的白鹭,黛丝的鹅,唐诗里出画,唐诗里出歌,唐诗是自我本着君的表白…”