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:
感谢分享!