C6000系列DSP优化总结
1.对指针使用restrict来限定memory访问,可以减少pipe
2.improve the balance of resources提高资源平衡,A-side和B-side,因为C6000有两个.D单元和两个.T地址路径,在任何给定的循环(A侧和B侧)上都可用,所以编译器必须在一侧(A侧)对至少两个操作进行分区,使用#pragma MUST_ITERATE(min, max, multiple);来强制迭代
注意事项:
#pragma MUST_ITERATE(5) = #pragma MUST_ITERATE(5, , 5)
#pragma MUST_ITERATE(min, max, multiple)中min必须大于等于max,否则迭代不展开,multiple必须能被min整除,否则迭代不展开
3.The C62x fixed-point device loads and/or stores 32 bits every cycle. In addition, the C67x floating-point and C64x fixed-point devices load two 64-bit values each cycle.
也就是说,C67x可以加载每周期加载64bit,也就是8字节=2个浮点
使用
By asserting that xptr and yptr addresses anded with 0x3 are equal to zero,the compiler knows that they are word aligned
#define WORD_ALIGNED(x) (_nassert(((int)(x) & 0x3) == 0))
对齐语句来对齐
#define WORD_ALIGNED(x) (_nassert(((int)(x) & 0x3) == 0))
void lesson3_c(short * restrict xptr, short * restrict yptr, short *zptr,
short *w_sum, int N)
{
int i, w_vec1, w_vec2;
short w1,w2;
WORD_ALIGNED(xptr);
WORD_ALIGNED(yptr);
w1 = zptr[0];
w2 = zptr[1];
#pragma MUST_ITERATE(20, , 2);
for (i = 0; i < N; i++)
{
w_vec1 = xptr[i] * w1;
w_vec2 = yptr[i] * w2;
w_sum[i] = (w_vec1+w_vec2) >> 15;
}
}
#pragma CODE_SECTION(sp_bull_move, "Code_AEE");
void sp_bull_move(const float * x, float *restrict y, const int n)
{int i;_nassert((int)x % 8 == 0);_nassert((int)y % 8 == 0);_nassert(n % 4 == 0);_nassert(n > 0);#pragma MUST_ITERATE(4,,4) //优化修改for (i = 0 ; i < n; i += 4){_amemd8(&y[i]) = _amemd8_const(&x[i]);_amemd8(&y[i+2]) = _amemd8_const(&x[i+2]);}
}
4.使用op3优化等级
5.Writing Linear Assembly写汇编,没搞懂怎么写优化
C6000系列DSP优化总结相关推荐
- TI的C6000系列DSP,flashboot的实现
所谓的flashboot就是将用户主程序烧写至flash片中,然后加电开机实现主程序的自动载入和启动过程.关于程序对flash的烧写本文不做讨论,主要是熟悉flash芯片的一些参数.烧写规则,以及存储 ...
- C6000系列DSP的内联函数
在c中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数数.栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限 ...
- TMS320 C6000系列 DSP之 CCS5.5 仿真调试
操作系统: Win7 64bit 仿真器: SEED-XDS560 Plus 开发环境: CCS 5.5 目标处理器: TMS320 C6748 ########################### ...
- 【DSP开发】C6000非多核非KeyStone系列DSP中断系统
C6000系列DSP的中断系统 上一篇介绍了C6455的GPIO系统,最后把GPIO4配置成了中断/事件模式,本文将介绍C6455的中断系统,介绍完基本概念后,给出把GPIO4映射到INT4的代码. ...
- TI公司三大系列DSP内部结构之比较
一引言 DSP有两种解释:一种是数字信号处理器(Digital SignalProcessor),也称数字信号芯片:另一种是数字信号处理技术(Digital Signal Processing).我们 ...
- C6000 DSP优化技术入门
参考资料 SPRU198K-TMS320C6000 Programmer's Guide SPRUGH7-TMS320C66x DSP CPU and Instruction Set Referenc ...
- CCS5连接调试C64X系列DSP核
CCS从3.3改版为5.X之后,CCS 变化很大.DaVinci芯片中DSP的调试步骤也不同了.这里介绍下在CCS里如何调试DaVinci的DSP核心 1. 创建CCS V5版本的project 本人 ...
- TI DSP TMS320C66x学习笔记之DSP优化经验
此文是在http://blog.csdn.NET/guanchanghui/article/details/1181851基础上,通过自己的学习理解修改而来.暂且算作是自己的原创吧.如有侵权,联系,立 ...
- TI DSP TMS320C66x学习笔记之DSP优化经验(八-1)
此文是在http://blog.csdn.net/guanchanghui/article/details/1181851基础上,通过自己的学习理解修改而来.暂且算作是自己的原创吧.如有侵权,联系,立 ...
最新文章
- 吴恩达机器学习入门 2018 高清视频公开,还有习题解答和课程拓展,网友:找不到理由不学!...
- Linux从入门到精通——自动安装脚本
- 趣谈NAT和防火墙的对话+防火墙静态PAT的应用
- 适配器模式——类适配器模式,对象适配器模式
- CVPR 2021 involution:超越convolution和self-attention的神经网络新算子
- 用BusyBox制作Linux根文件系统
- mysql 改变表的类型吗_mysql中修改表类型所带来的问题探讨
- c语言动态规划公共字符串,最长公共子串 C语言 动态规划
- mysql实现程序的动态链接_程序的链接和装入及Linux下动态链接的实现
- SSRF服务器端请求伪造
- sdl2 opengl d3d9的mipmap和各项异性过滤渲染
- 从零开始的明日方舟python脚本创作(六)鼠标点击模块
- 2018年10月软件工程自考时间安排
- 1359 信息学奥赛一本通 围成面积
- maglev need 64-bit linux version
- 使用virt-manager 创建虚拟机
- 常见的传输介质及其特性
- HJ卫星数据的下载与打开
- android基础回顾(三)
- Cisco路由器忘记密码