TI中文支持网
TI专业的中文技术问题搜集分享网站

内存访问速度

访问多行共享内存数据时(如下示例程序)速度很慢,严重影响算法的实时性,是否有更高效的实现方式

unsigned   short  *IN1,*IN2,*IN3,*IN4,*IN5,*IN6,*IN7,*IN8,*IN9,*IN10,*IN11;

IN1=imgin_ptr;

IN2=IN1+640;

IN3=IN2+640;

IN4=IN3+640;

IN11=IN10+640;

OUT=imgout_ptr;

for (i=0;i<256;i++)

{

          for(j=0;j<640;j++)

          {

            sum=(IN1[0]+IN2[0]+…IN11[0])/11;

         * OUT++sum;

           IN1++;

          IN2++;

           …

         IN11++;

           }

}

yue li2:

楼主笔误了吧,主循环总应该为*OUT++ = sum吧;

关于这个问题,我也遇到过,看汇编结果,说的是每次隔行取数都会单独Load取指一次。感觉这段代码不换一个写法,效率是提不上来。

不知道楼主可试过单独用汇编写这一小段代码。。

同问TI工程师这个问题!!!!!!!!!!!!

Shine:

回复 yue li2:

请问你是几个核同时访问共享内存?是否有配成cache? 这段代码放在LL2也很慢吗?是否有尝试用优化选项?

yue li2:

回复 Shine:

之前我试过:

1.只用一个core(core0)访问,

2.cache都开了的,L1P、L1D都开的32K、L2cache为128k。

3.代码都是放在LL2的

4.编译器优化选项选的最高级-o3.

根据楼主贴出来的程序,11×1模板处理遇到的问题。我也去浮现了,看了编译器汇编信息,的确这种取指方式在楼主的这种使用条件下非常耗时间。但是用1×11模板处理耗时就会低一个数量级。

如何在不更改算法的前提下,解决这个耗时问题?

这样操作像素点是否恰当?比如楼主贴出来的代码

看资料得知,TI编译器已经把代码优化做得很好了,感觉ms级的程序,没有必要再在此基础上做线性汇编了。不知道我这样理解对不对。。

而且,我处理的图片比他的大很多 。。耗时问题就更突出了

总之问题就是,纵向取数和横向取数耗时相差太大!!!

 

qianfu li:

回复 Shine:

不,现在使用的是单核(core0),并且开了优化-O3,使用的内存也是ll2,做一次640×512图像竖向的11×1的极值大约需3ms

yue li2:

回复 Shine:

顶一下

yue li2:

回复 qianfu li:

再顶一下!d=====( ̄▽ ̄*)b

yue li2:

回复 yue li2:

没有答复了么。。。

赞(0)
未经允许不得转载:TI中文支持网 » 内存访问速度
分享到: 更多 (0)