-
开发平台主要需要考虑两个因素:通用性,高效率。现在很多稍大一点的公司常把平台开发和应用开发分开来,由两拨人分别做。这样的好处是平台可以在不同应用、不同器件之间复用,增加了通用性。根据以往的经验,平台开发人员在通用性上常常下了比较大的功夫,能取得比较好的效果,但应用开发工程师常常抱怨平台的效率不够高,占用了过多的cycle和内存。嵌入式产品对处理密度(最终反映到产品的成本、功耗等关键指标上)的要求常常很高,对平台的cycle和内存使用有比较高的要求,而高效的实现方式常常要结合具体应用才能得出。建议平台开发工程师多从应用(主要指的是framework)角度考虑,在通用性和高效率之间找到合适的平衡点。
-
建议在硬件条件具备的情况下,尽量用硬件进行实测,一则运行速度更快,在跑大程序时可以节省很多时间,二则得到的cycle数更准确。无论是在硬件上测还是在simulator上测,profile工具、内嵌在代码中的TSCL调用都是可用的。前者比较方便,也不用改代码;后者比较灵活,可以测量任意代码片段的cycle数,也比较容易做到测试自动化。
另外注意,simulator对cycle数的仿真精度不是一成不变的。有些器件的simulator分为Functional Sim和Cycle Approximate Sim,前者只考虑CPU cycle,不考虑任何内存访问overhead,后者对内存访问进行建模,更接近实际硬件,但运行起来特别慢。有些器件只有一种simulator,从simulator的名字可以看出其对内存overhead的考虑程度。也可以通过把关键数据段放在片内、片外memory,对比两者的cycle数,来大致了解所用simulator是否考虑了内存访问overhead。
-
代码贴得有问题啊。
定点DSP的CPU本身只支持定点运算,C语言中的浮点操作由C编译器调用编译器内建的“浮点库”来支持,而‘浮点库“中的函数用CPU直接支持的定点指令模拟浮点操作。可以想见,这样的“用定点指令模拟浮点运算”是相当耗时的,相当于每次浮点运算对应一个函数调用。直接用定点的话,每次定点运算通常对应一条指令。所以50倍的性能差异是合理的。
[ 本帖最后由 armstrongfan 于 2011-9-5 11:36 编辑 ]