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.

TMS320C6748: DSPLIB点乘效率波动——关于加载数据

Part Number: TMS320C6748


点乘优化时使用了LDDW保证加载数据的效率,但存在如下现象:

1.若点乘的两路输入都32字节对齐,则点乘效率较最优时下降一半,此时,若两者同步后移8/16/24字节,工作效率均恢复正常。

2.若其中第一组数据的起始地址对齐方式往后偏移16字节,则两者同步后移8/16/24/32字节,都可以保证效率正常。


CPU指令集手册(sprufe8b)中,介绍LDDW指令时,未提及两个.D单元LDDW并行load数据时存在限制。考虑到1/2两种情况下,数据都始终保持8字节对齐,故不能用mem_bank冲突来解释。

我的疑问是,这一现象产生的原因是什么?

  • 我已将您的帖子转给相关专家,请等待回复。

  • using namespace std;
    #pragma DATA_ALIGN(32)
    unsigned short index[4096+4];
    
    #pragma DATA_ALIGN(32)
    unsigned short index2[1024];
    
    //#pragma DATA_SECTION(".far:optimized");
    #pragma DATA_ALIGN(32)
    float	x1[1024+16+4];
    
    //#pragma DATA_SECTION(".far:optimized");
    #pragma DATA_ALIGN(32)
    float	x2[1024+16+4];
    
    #pragma DATA_ALIGN(32)
    float	x3[1024+16+4];
    
    void CPerformanceTester::test()
    {
    	for(int offset=0;offset<8;offset+=2)
    	{
    		mTC.StartTimer(1);//启动1号计时器
    		for(int i=0; i<1000000; i++)
    		{
    			DSPF_sp_dotprod(x1+offset, x2, 1024);
    			//DSPF_sp_dotprod_lib_n2a8(x1+offset, x2, 1024);
    		}
    		mTC.StopTimer(1);
    		mTC.PrintResult(1);
    	}
    }
     这是测试代码和结果

  • 您好,已经大半个月了,专家有啥想法么