尊敬的 TI:
在获取 AM5728上您的一个 DSP 库函数的已发布基准测试时、我们遇到一些问题。
我已经附加了我们用于"定时"结果的基本 main.c 文件和 CMD 链接器文件、我们的测量结果大约为500万、与您在 DSPLIB_C66x_TestReport.html 中列出的 k市场化 相比、它是:
| DSPF_sp_mat_mul_CpLx | 通过 | 5/8*R1*C2*C1 +58/8*R1*C2 +100/8*R1 +30 | 不适用 | 672. |
我们的测试用例使用256列和24行: 使用 上述公式、我们将24x24矩阵读作:
(5/8)*24*256*24+(58/8)*24*256+100/8*24+30=137034
然而、当我们运行下面相对简单的主函数时、我们回读4513445、这与137034有很大不同、因此我们需要澄清对比度的来源。
#include "DSPLib.h"
#include "c6x.h"
//帮助程序功能
静态__INLINE 超长时间宏(空)
{unsigned int tscl_val = TSCL;
unsigned int TSCH_val = TSCH;
返回_itoll (TSCH_val、tscl_val);}
#define array_size 24.
#define ANGAL_SIZE 256
/*这些是第一个乘法的变量*/
#pragma SET_DATA_SECTION ("MatrixMemory")
//注意:采用此格式,以便可以轻松地循环浏览列
float AconjT[array_size* angle_size* 2]、unT[array_size* array_size* 2]、mediatel[array_size* angle_size* 2];
float A[array_size* angle_size* 2]、P[1*angle_size* 2];
#pragma SET_DATA_SECTION ()
int main (空)
{
long long t_start、t_stop、t_开销、t_diff、t_first;
int rowsUnT、colsUntrowsAconjT、colsAconjT、arraySize;
int i;
rowsUnT = array_size;
colsUntrowsAconjT = array_size;
colsAconjT = angle_size;
arraySize = array_size;
TSCL = 0;//通过写入 TSCL 来启动 CPU 定时器
T_start = TimerMacro ();
T_stop = TimerMacro ();
T_开销= t_stop - t_start;
T_start = TimerMacro ();
//这将执行第一个乘法
dSPF_sp_mat_mul_CpLx (&UNT[0]、rowsUnT、colsUntrowsAconjT、AconjT、colsAconjT、 中级);
T_stop = TimerMacro ();
T_first = t_stop - t_start;
返回0;
}
我们添加到标准链接器 cmd 文件(AM57xx_C66)的唯一行是:
MatrixMemory :> OCMC_RAM1,ALIG(4)
以放置矩阵存储器。
您能不能提出我们为什么看到时间安排存在如此大的差异?
谢谢。