我正在计算输入数据的增量平均值(这是一个由 6 个元素组成的数组,所以我最终会得到 6 个平均值)。
这是我每次有新的输入数组可用时使用的代码(显然我更新了样本数 ecc ...):
computing_mean:for(int i=0;i<6;i++){
temp_mean[i]=temp_mean[i] + (input[i]-temp_mean[i])/number_of_samples;
//Possible optimization?
//temp_mean[i]=temp_mean[i] + divide(input[i]-temp_mean[i],number_of_samples);
}
其中代码中的所有数据都是数组或以下类型的单个数字:
typedef ap_fixed <36,24,AP_RND_CONV,AP_SAT> decimalNumber;
从我的综合报告来看,这个循环有 324 个延迟和 54 个迭代延迟,主要是由除法运算引起的。
有什么方法可以提高除法的速度吗?我尝试使用 hls_math 和 divide 函数,但它似乎不适用于我的数据类型。
编辑 1:我在 vivado HLS 中包含了我的性能分析器。稍后我将通过另一个编辑添加一个独立的可重现代码。如您所见,大部分时间都花在了 SDIV