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

TMS320C6678: DSPLIB 3_4_0_0 DSPF_dp_mat_mul_gemm函数问题

Part Number:TMS320C6678

TI工程师,您好

我们在自己定义的函数中调用DSPLIB 3_4_0_0中的DSPF_dp_mat_mul_gemm()。

第一次、第二次使用调用的代码如下:

DSPF_dp_mat_mul_gemm((trans_jacobian), 1, (CHANNEL+1), 2 * number, (trans_jacobian + inputIndex1), procRowNumber, (M_loc + outputIndex1));
DSPF_dp_mat_mul_gemm((residual), 1, 2, 2 * number, (trans_jacobian + inputIndex1), procRowNumber, (trans_JR_loc + outputIndex2));

(其中,trans_jacobian,trans_jacobian,residual,trans_jacobian是用Memory_alloc()创建在共享内存的堆里的全局指针,M_loc,trans_JR_loc是用malloc()在自定义函数中创建的局部指针

第三次使用调用的代码如下:

DSPF_dp_mat_mul_gemm((double*)trans_JR_loc, 1, 2, (CHANNEL + 1), (double*)(inv_M_loc + inputIndex2), procRowNumber, (double*)(s_step_loc + outputIndex3));

(其中,trans_JR_loc,inv_M_loc,s_step_loc是用malloc()在自定义函数内创建的局部指针)

第一次、第二次计算结果正确;第三次,计算结果数值错误,且不同的核用memory browser看到的内存不一样(0核,第4、5个数据为0;1核第1~4个数据为0;2~7核前7个数据为0)

请问,出现这样的问题有什么可能的bug

Shine:

请问如果把第三次调用函数的代码改成第一次调用,也会出现这个问题吗?

,

Hongliang Mao:

如果我把 第三次调用DSPF_dp_mat_mul_gemm的自定义函数替换成前两次调用DSPF_dp_mat_mul_gemm的自定义函数,前两次的结果会有1%(0.1)左右的误差

,

Hongliang Mao:

但是,多核互相看到的内存是一样的

,

Shine:

如果把 第三次调用DSPF_dp_mat_mul_gemm放到第一次调用,DSPF_dp_mat_mul_gemm((double*)trans_JR_loc, 1, 2, (CHANNEL + 1), (double*)(inv_M_loc + inputIndex2), procRowNumber, (double*)(s_step_loc + outputIndex3));计算结果是正确的?而DSPF_dp_mat_mul_gemm((trans_jacobian), 1, (CHANNEL+1), 2 * number, (trans_jacobian + inputIndex1), procRowNumber, (M_loc + outputIndex1));DSPF_dp_mat_mul_gemm((residual), 1, 2, 2 * number, (trans_jacobian + inputIndex1), procRowNumber, (trans_JR_loc + outputIndex2));

这两次调用的结果错误?

请尝试把堆栈加大试试。

,

Hongliang Mao:

感谢解答,,我在申请内存后用memset把内存清零再调用函数计算能得到正确的结果。

,

Shine:

感谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: DSPLIB 3_4_0_0 DSPF_dp_mat_mul_gemm函数问题
分享到: 更多 (0)