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.

optimizIng loops on the c66x dsp 中的一个问题



TI工程师,您好,我在阅读optimizing loops on the c66x dsp时,遇到一个问题不太明白:

在3.1.5中有个例程中出现了以下计算

1.f/(float)sqrt(a-sqr)

1.5f-(a-sqr/2.f)* oneOverAbs_a

我刚做dsp开发,第一次遇到这样的写法,不太明白,还请您帮忙解答一下。

  • 请问具体哪里不明白?
  • 您好,请问1.5后面的f是表征浮点类型是吗?

    在手册中有一例子, 求复数序列 |a[i]| 和 ejangle(a[i]) ,代码如下 :
    void example1_gc(cplxf_t *a, cplxf_t *ejalpha, float *abs_a, int n)
    {
    int i;
    float a_sqr, oneOverAbs_a;
    for ( i = 0; i < n; i++)
    {
    a_sqr =a[i].real * a[i].real + a[i].imag * a[i].imag;
    oneOverAbs_a =1.f/(float)sqrt(a_sqr);
    abs_a[i] = a_sqr * oneOverAbs_a;
    ejalpha[i].real =a[i].real * oneOverAbs_a;
    ejalpha[i].imag =a[i].imag * oneOverAbs_a;
    }
    }

    优化后的代码如下:
    _nassert(n % 4 == 0);
    _nassert((int) a % 8 == 0);
    _nassert((int) ejalpha % 8 == 0);
    _nassert((int) abs_a % 8 == 0);
    #pragma MUST_ITERATE(4,100, 4);
    #pragma UNROLL(2);
    for ( i = 0; i < n; i++)
    {
    a_sqr = a[i].real * a[i].real + a[i].imag * a[i].imag;
    oneOverAbs_a = _rsqrsp(a_sqr); /* 1/sqrt() instruction 8-bit mantissa precision*/
    /* One interpolation*/
    oneOverAbs_a = oneOverAbs_a * (1.5f - (a_sqr/2.f)* oneOverAbs_a *oneOverAbs_a);
    abs_a[i]= a_sqr * oneOverAbs_a;
    ejalpha[i].real =a[i].real * oneOverAbs_a;
    ejalpha[i].imag =a[i].imag * oneOverAbs_a;
    }

    有以下几点不太明白的:
    1。求复数模,是Q 和 I平方和再开根号。
    oneOverAbs_a =1.f/(float)sqrt(a_sqr);
    abs_a[i] = a_sqr * oneOverAbs_a;
    这两条语句的目的是什么?

    2。在优化之后的代码中,又改写成了
    oneOverAbs_a = _rsqrsp(a_sqr); /* 1/sqrt() instruction 8-bit mantissa precision*/
    /* One interpolation*/
    oneOverAbs_a = oneOverAbs_a * (1.5f - (a_sqr/2.f)* oneOverAbs_a *oneOverAbs_a);
    _rsqrsp 这个函数调用明白,但下一条oneOVerAbs_a为什么改成这样的写法?原理是什么?

    3。e jangle(a[i]) 这个是求什么值?

  • 请参考下面e2e上工程师的回复。用的是Newton–Raphson division​原理。
    e2e.ti.com/.../3477402