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

关于DSPLIB是否存在硬件优化?

我在AM572x EVM的c66xDSP上编写程序,发现循环内自己编写的矩阵乘法程序非常耗时,整个循环大概用了40s,于是找到DSPLIB中对应的矩阵乘法函数

void DSPF_sp_mat_mul (float *x1, const int r1, const int c1, float *x2, const int c2, float *restrict y);

我将该函数替代我自己编写的矩阵乘法函数brmul(),再次运行代码,整个循环依旧耗时40s,按照我的假设,DSPLIB应该是有硬件优化的,那为什么在耗时上并没有体现呢?另外,我在PC端调用这段代码耗时都不超过40S,而DSP又是专门用于计算的,请问谁能给我解释一下我的问题出现在哪里呢?

Shine:

dsplib是经过优化的库。

请问你的代码是在哪里运行的?片上RAM还是DDR3?如果放在DDR3,需要使能cache和EDMA提高性能。

bin xu7:

回复 Shine:

我是在AM572x SDK中的IPC例子中修改的,不是很清楚代码是在哪里运行的,假如我是在DDR3中运行的,请问我该如何使能cache和EDMA?是否有参考文档的链接?

Denny%20Yang99373:

回复 bin xu7:

使能cache就是把程序和数据的地址范围CACHE MAR打开,速度会提高跟多

yongqing wang:

按道理DSP加速的应该会更快,应为DSP至少有偶硬件乘法器,可能你的循环中还有别的比较耗时

bin xu7:

回复 yongqing wang:

我发现了耗时所在问题,但确不明白为什么这样,我的循环如下:

for(i2=0; i2<Right_height; i2=i2+Jnumber)
{for(j2=0; j2<Right_width; j2=j2+Jnumber){double rx,ry;uvToUndistortedUV(j2+1,i2+1,u20,v20,du2,dv2,f2,k21,k22,k23,k24,&rx,&ry);//得到极线的各系数,并存在m2F中m2[0] = rx;m2[1] = ry;//m2[0] = 1;
//m2[1] = 1;m2[2] = 1;
//DSPF_sp_mat_mul(R2,3,3,m2,2,m2F);brmul(m2,R2,1,3,3,m2F);//m2F对应于左相机图uv坐标
}
}
我的循环中调用了两个函数,当我第二个矩阵乘法函数brmul()的输入m2与去畸变函数uvToUndistortedUV()的输出没有关联时,整个循环的耗时
不超过1s,而如代码所示,若m2与uvToUndistortedUV()的输出rx,ry相关联时,整个循环耗时多达40s,这让我很疑惑,我并没有使用并行编程,
不应该会差别如此之大。

bin xu7:

回复 bin xu7:

我的循环中调用了两个函数,当我第二个矩阵乘法函数brmul()的输入m2

与去畸变函数uvToUndistortedUV()的输出没有关联时,整个循环的耗时

不超过1s,而如代码所示,若m2与uvToUndistortedUV()的输出rx,ry相关联时,整个循环耗时多达40s,这让我很疑惑,我并没有使用并行编程,不应该会差别如此之大。

赞(0)
未经允许不得转载:TI中文支持网 » 关于DSPLIB是否存在硬件优化?
分享到: 更多 (0)