您的位置 首页 应用

运用CLT 东西优化C6000 代码

摘 要在C6000 DSP 的开发过程中,优化是必不可少的一个环节,根据对象不同可以分为系统,算法,代码以及内存优化。通常,开发者熟悉自己的代码,会

摘 要

C6000 DSP 的开发过程中,优化是必不可少的一个环节,依据目标不同能够分为体系,算法,代码以及内存优化。一般,开发者了解自己的代码,会早年三个方面修改以取得全体功用的进步,可是关于内存尤其是缓存(Cache)的优化,因为其涉及到芯片自身的架构,Cache 的保护由 DSP 主动完结,用户一般不能干涉,所以好像无从着手;考虑到这些实践的问题,从 TI 的 7.0 系列编译器开端支撑运用缓存优化东西(Cache Layout Tools)对 C6000 代码进行优化,经过这一系列的东西,能够很轻松的完结 L1P Cache 功用的进步,本文详细介绍了该东西的运用方法。

1. 导言

现在,运用TI DSP 的用户越来越多,在C6000 系列DSP 中,包含了C64x, C64x+, C66x 等。在C6000 DSP 的开发过程中,为了充分利用DSP 的核算资源,需求对用户程序进行优化的作业,依据目标不同能够分为体系,算法,代码以及内存优化。一般,开发者了解自己的体系和代码,能够比较便利的早年三个方面修改以取得全体功用的进步,可是关于内存尤其是缓存(Cache)的优化,因为其涉及到芯片自身的架构,Cache 的保护由DSP 主动完结,用户一般不能干涉,所以好像无从着手;考虑到这些实践的问题,从TI 的7.0 系列编译器开端支撑运用缓存优化东西(Cache Layout Tools)对C6000 代码进行优化,经过这一系列的东西,能够很轻松的完结L1P Cache 功用的进步,本文详细介绍了该东西的运用方法。

2. C6000 DSP 内核缓存机制

C6000 体系的存储器结构如下图所示。

c6000

存储器分红三级:榜首级是L1,包含数据存储器(L1D)和代码存储器(L1P);第二级是代码和数据共用存储器(L2 以及MSMC SRAM);第三级是外部存储器,首要是DDR 存储器。L1P、L1D 和L2的Cache 功用分别由相应的L1P 控制器、L1D 控制器和L2 控制器完结。

在C6000 DSP 中一般咱们会把L1P 悉数装备成Cache,当CPU 宣布取指指令,首先会从L1P 里查找,假如L1P 找不到,则到下一级Cache 或许Memory 里查找,当找到需求的地址,则将其读入L1P 里,CPU 从中读取履行。

因为L1P Cache 的巨细是有限的(本文以32KB 为例),而用户内存空间一般大于32KB, 有必要采纳一种映射的方法使得一切地址都能被L1P 缓存;在C6000 DSP 中,L1P Cache 运用地址直接映射,一切DSP 核可拜访的地址对L1P Cache 巨细(32K)取模就能得到该地址在L1P Cache 的偏移值。

假如用户代码在内存排布不合理,或许会在L1P Cache 中发生重复的内容替换,下图中的比如是一个极点状况。

c6000

TOP 函数中FOR 循环重复调用A 函数,而A,B,C 三个函数在内存地址的散布上,与32KB 鸿沟的偏移地址是相同的,因而,A,B,C 将对应L1P 里同一个CACHE 方位;其运转流程如下

· 当履行A 时,CPU 需求把A 函数调入到Cache 偏移值N 的方位上;

· A 调用B,此刻调入B 到Cache 偏移值N 的方位上,掩盖A 的代码;

· B 调用C,此刻调入C 到Cache 偏移值N 的方位上,掩盖B 的代码;

· C 回来,下一次循环调入A 到Cache 中掩盖C 的代码。

DSP 核对L1P,L2,DDR 的拜访速度差异很大,对L1P 的拜访一般在1 个时钟周期内完结,而L2 均匀需求 3-5 个周期,DDR 拜访需求的时刻更多,因而咱们应该尽量防止上述这种重复重写Cache的状况,尽或许的削减函数在Cache 中的置换。

怎么处理该问题?最好的处理方法则是将A, B, C 在内存中接连排放,这样对Cache 的操作次数将降到最低,能够有用的进步履行功率,如下图所示,只需A,B,C 总的巨细不超越32KB, 它们在Cache 中的偏移值便是接连的,不会发生掩盖的现象,即使其总和大于32KB,发生置换的也仅仅是超越32K 的部分。

c6000

3. 内存优化东西

经过上述机制能够看到,关于L1P Cache 的优化首要经过剖析函数调用联系和其在内存的散布。因为用户代码日益杂乱,人工剖析代码调用联系和地址排布需求花费很多的时刻。因而,从7.0 系列编译东西开端,TI 供给了一套内存优化东西 (Cache Layout Tools) 来协助用户轻松方便地处理该问题。

该东西的原理是在用户进行程序编译时翻开生成剖析信息选项,编译器会主动参加剖析记载代码到用户程序里,之后用户在TI DSP simulator 或许DSP 芯片上运转该可履行文件,内置的剖析代码会主动记载用户的函数调用联系及调用次数。运转的事例越多,记载的信息会更详细,优化的作用也就越好。

在得到函数运转时信息今后,就能够运用编译器东西对其进行剖析,生成函数排布的次序,最终将此排布次序输入到编译器里从头编译原代码,生成的可履行文件就现已优化过内存排布,详细的操作能够参照以下实例。

4. 实例教程

该实例首要由三个C 文件组成,

实例中运用DSP 计数器 TSCL 来计算cycle 数,子函数放在sub 目录下。

运用实例的过程如下,

1. 编译代码

运用TI 编译器对该实例进行编译,为了发生用于profile 的信息,需求在编译时添加 — gen_profile_info 选项。假如运用指令还方式,指令行下运转Compile.bat 文件,cl6x 的详细参数能够参阅spru186 和spru187 两篇文档,一般能够在编译器的装置目录下找到他们,如C:\Program Files (x86)\Texas Instruments\C6000 Code Generation Tools 7.3.9\doc。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/323936.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部