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

C6000 c优化,循环次数不是4的倍数如何优化

下面是Ti官方求解最小值的c代码,当矢量x次原数个数不是4的倍数,还能用吗?

#pragma CODE_SECTION(DSPF_sp_minval, ".text:optimized");

//#include "DSPF_sp_minval.h"
#include "float.h"

float DSPF_sp_minval(const float* restrict x, int nx)
{
   int    i;
   float  x0, x1, x2, x3, min0, min1, min2, min3;
   double x_01, x_23;

   min0 = FLT_MAX;
   min1 = FLT_MAX;
   min2 = FLT_MAX;
   min3 = FLT_MAX;
    _nassert(nx % 4 == 0);
   _nassert(nx > 0);
   _nassert((int)x % 8 == 0);

   #pragma MUST_ITERATE(1,,)
   for (i = 0; i < nx; i+=4)
   {
      x_01 = _amemd8((void*)&x[i]);
      x_23 = _amemd8((void*)&x[i+2]);
      x0   = _hif(x_01);
      x1   = _lof(x_01);
      x2   = _hif(x_23);
      x3   = _lof(x_23);
      if (x0 < min0)
        min0 = x0;
      if (x1 < min1)
        min1 = x1;
      if (x2 < min2)
        min2 = x2;
      if (x3 < min3)
        min3 = x3;
   }
   if (min0 < min1)
     min1 = min0;
   if (min2 < min3)
     min3 = min2;
   if (min3 < min1)
     return min3;
   else        return min1;
}

rookiecalf:

程序中首先就有4的倍数的断言,如果不是4的倍数的话,你是否可以用较大值进行补齐?

Jiao Li:

回复 rookiecalf:

谢谢您的解答,您的意思是,在调用该程序之前,先要把X矢量的元素个数补齐为4的倍数。

Jiao Li:

回复 Jiao Li:

如果有多个矢量在内存排列,补齐过程会不会破坏内存其它变量,这时如何处理。

rookiecalf:

回复 Jiao Li:

不是很明白你说的矢量的用法。我觉得你所说的矢量空间的预定义就得是4的倍数,而补齐的过程只是填充剩余的几个位置,那样就不会造成空间的溢出。不知道你的数据操作机理是什么样的,不过你得确保不会出现你说得这个问题。

Jiao Li:

回复 rookiecalf:

谢谢您的关注,不幸的事,我用的矢量(数组)的长度是任意的,并不是4或2的倍数,而且有多个矢量(数组).,主要进行复数(浮点)矢量算法的优化。

这种情况,扩展数组很可能破坏内存关系,把别的矢量破坏。望大侠给予指点。

rookiecalf:

回复 Jiao Li:

Jiao Li

谢谢您的关注,不幸的事,我用的矢量(数组)的长度是任意的,并不是4或2的倍数���而且有多个矢量(数组).,主要进行复数(浮点)矢量算法的优化。

这种情况,扩展数组很可能破坏内存关系,把别的矢量破坏。望大侠给予指点。

赞(0)
未经允许不得转载:TI中文支持网 » C6000 c优化,循环次数不是4的倍数如何优化
分享到: 更多 (0)