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

C6670函数分四核处理问题耗时问题

下面是函数,单核跑耗时0.26ms,分到四核跑耗时0.21ms,为什么会节约这么少的时间呢?一般函数分到四核跑至少要降低一半的时间啊?

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

#include "DSPF_sp_dotp_vec_cplx.h"

void DSPF_sp_dotp_vec_cplx(const float * x, const float * y, int nx,
float * z)
{
int i;
double x0_re_im, y0_re_im, result0 = 0;
double x1_re_im, y1_re_im, result1 = 0;
double x2_re_im, y2_re_im, result2 = 0;
double x3_re_im, y3_re_im, result3 = 0;

_nassert(nx % 4 == 0);
_nassert(nx > 0);
_nassert((int)x % 8 == 0);
_nassert((int)y % 8 == 0);
for(i = 0; i < 2 * nx; i += 8)
{ /* load 4 sets of input data */
x0_re_im = _amemd8((void*)&x[i]);
y0_re_im = _amemd8((void*)&y[i]);

x1_re_im = _amemd8((void*)&x[i+2]);
y1_re_im = _amemd8((void*)&y[i+2]);

x2_re_im = _amemd8((void*)&x[i+4]);
y2_re_im = _amemd8((void*)&y[i+4]);

x3_re_im = _amemd8((void*)&x[i+6]);
y3_re_im = _amemd8((void*)&y[i+6]);

/* calculate 4 running sums */
result0 = _complex_mpysp(x0_re_im, y0_re_im);
result1 = _complex_mpysp(x1_re_im, y1_re_im);
result2 = _complex_mpysp(x2_re_im, y2_re_im);
result3 = _complex_mpysp(x3_re_im, y3_re_im);
z[i]=_hif(result0);
z[i+1] = _lof(result0);
z[i+2]=_hif(result1);
z[i+3] = _lof(result1);
z[i+4]=_hif(result2);
z[i+5] = _lof(result2);
z[i+6]=_hif(result3);
z[i+7] = _lof(result3);

}
}

Andy Yin1:

你是怎么分的,是将一份数据均分到多个core上进行相同的处理么。

Zhao Yan1:

回复 Andy Yin1:

数据分成了四份,一个核算一份的,大概就是下面的:

int num = FFTSIZE >> 2; // 每一个core要计算的复数个数 int step = num << 1; // 每一个core得到的float型数据个数(采样数) int start = coreNum * step;//起始位置

DSPF_sp_dotp_vec_cplx(&InData1[start], &InData2[start], num,&OutData1[start]);

Zhao Yan1:

回复 Zhao Yan1:

这么分应该是对的吧?是函数本身有问题吗?不知道出问题出在哪里,算出的结果也是正确的啊

Zhao Yan1:

回复 Andy Yin1:

用的Intrinsics改的库函数,为了节约时间,然后分到四核,难道行不通嘛?

赞(0)
未经允许不得转载:TI中文支持网 » C6670函数分四核处理问题耗时问题
分享到: 更多 (0)