我正在使用 Vitis HLS 为我的项目运行 C++ 模拟。我的程序是为信号处理中的似然计算进行矩阵计算。我写了我的矩阵库,因为它应该是静态数组的定点。Vitis HLS 编译器(MingGW 64 位)一直在编译代码,这很奇怪。下面是导致我的程序问题的代码。
for(int j =0; j < 2048;j++)
{
getColMat_L2S(particle,j,&temp_X);
printf("sth\n");
// show_mat(particle);
Mat_S temp_X4 = ObsJacobian(&temp_X,index,&msmtinfo);
// showmat_S(&temp_X2);
Mat_S temp_X5 = GISobs_model(&temp_X,index,&msmtinfo);
// showmat_S(&temp_X5);
// showmat_S(&msmtinfo.z);
FP::fixed pzx = GISPzx(&msmtinfo,&Pxx_,&temp_X4,&temp_X5);
pzx_du = pzx;
printf("%f_%d\t",pzx_du,j);
new_wt.entries[j] = wt->entries[j]*pzx;
}
show_mat(&new_wt);
return new_wt;
目前,我有 2 种数据类型,Mat
并且Mat_S
. Mat
是一个13x2048
定点元素数组(32 位),Mat_S
是一个13x13
定点元素数组。我的大部分函数都用于Mat_S
计算,除了getColMat_L2S
,它返回一个选定的输入列Mat particles
并将其保存到Mat_S temp_X
.
我很确定我的函数 , getColMat_L2S
, ObsJacobian
,GISobs_model
和GISPzx
, 都经过了很好的测试,它们应该没有问题。我有我的功能show_mat
,showmat_S
用于打印出矩阵内的所有元素。
当我在循环内部评论所有内容时show_mat
,showmat_S
编译器在它应该在循环结束时打印一些值时花了很长时间进行编译。取消注释其中一个show_mat
或showmat_S
功能后。这次模拟打印矩阵值和最终值。但是,它最多只能打印超过 2048 个值的 118 个。然后模拟再次永远运行(我已经测试过,即使在 1 小时后,也没有发生任何事情!)
show_mat
当我评论和取消评论或showmat_S
函数时,我确实使用调试器检查是否有任何事情发生。但是,在 10 次迭代期间,它在这两种情况下都运行良好。唯一的问题是它不会在控制台上打印任何内容。我认为这可能是 Vitis HLS 调试器的错误。
你对这个错误可能来自哪里有任何想法吗?这一刻我非常绝望。