|
今天在把回响程序的运算从16位升级到32位时发现,MIPS从40上升到50左右。本来我想整个程序的处理量全部增加一倍,MIPS应该达到80左右的。由于回响算法需要大量使用内存存储声音,因此只能使用扩展内存,而扩展内存的存取速度比内部内存要慢很多,因此回响程序大部分的时间都用在了存取扩展内存上。若数据从16位升级到32位,那么扩展内存的存取量也增加一倍,可是为什么MIPS没有增加一倍呢?
我仔细看了一下硬件设计图,原来DSP芯片和扩展内存之间的数据线是32位的,因此一次存取16位数据或者32位数据所需要的时间都是一样的。所以即使升级到32位,存取扩展内存所需要的时间也不会增加。那增加的10MIPS主要是运算部分。
既然存取32位和16位所需要的时间相同,那么16位的回响程序如果也使用32位存取的话,速度应当有相当大的提高。于是我就动手修改了一下16位回响程序,结果MIPS一下子降低到28,真让人激动呀。
回响算法中左右声道的延时缓存的大小不一样,因此一次32位存取不能是左右声道的取样数据,我修改为一次存取某个声道的两个取样数据,为了让程序不至于太过复杂,只好规定所有延时缓存的大小是偶数个取样数据,也就是偶数个short型整数。这样输出结果就不能和原来的程序一模一样,但是听上去没有区别。如果将来功能增加,MIPS不够的话,就可以用这个抵挡一下了。
|