This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

内存访问速度

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

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++;

           }

}

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

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

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

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

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

  • 之前我试过:

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

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

    3.代码都是放在LL2的

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

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

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

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

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

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

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

     

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

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

  • 没有答复了么。。。