TI论坛
直播中

史晓明

8年用户 1012经验值
私信 关注
[问答]

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);
      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;
]

回帖(7)

张琛根

2019-1-8 11:00:49
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

史晓明

2019-1-8 11:11:50
引用: 天天雷锋 发表于 2019-1-8 12:38
程序中首先就有4的倍数的断言,如果不是4的倍数的话,你是否可以用较大值进行补齐?

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

史晓明

2019-1-8 11:20:27
引用: hjfjsdgfjdsf 发表于 2019-1-8 12:49
谢谢您的解答,您的意思是,在调用该程序之前,先要把X矢量的元素个数补齐为4的倍数。

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

张琛根

2019-1-8 11:29:09
引用: hjfjsdgfjdsf 发表于 2019-1-8 12:58
如果有多个矢量在内存排列,补齐过程会不会破坏内存其它变量,这时如何处理。

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

更多回帖

发帖
×
20
完善资料,
赚取积分