吞吐量最优化设计

发布时间:2026/8/4 20:21:22
吞吐量最优化设计 一、吞吐量最优化概念1.dataflow2.pipeline3.unroll4.throughput二、吞吐量Throughput定义和指标1.吞吐量作为设计的关键指标优化吞吐量主要靠并行化和减少空闲时间周期。2.流水线设计和数据流设计是提高throughput的关键方式3.吞吐量Throughput 通常指设计单位时间内能处理的数据量或任务数最直接的衡量指标是 启动间隔Initiation Interval, II ——即两次新输入之间所需的时钟周期数。理想的 II1 意味着每个时钟周期都能接收新数据吞吐量最高。三、流水线化设计1.流水线设计是将复杂的设计拆成多个简单的步骤或者阶段进行多个处理阶段可以重叠进行从而减少完成一个数据蔡启动下一个的串行等待2.pipeline的目标是要追求II1优化方式打破依赖去除循环间的数据依赖RAW 依赖。例如用局部变量暂存中间结果或改写算法避免迭代间数据复用。load store分离将读写分成现态和次态分别处理从而规避依赖数组分割 — #pragma HLS ARRAY_PARTITION将大数组拆成多个小块或寄存器增加存储器端口保证流水线每个周期都能独立读写。数组copy复用--将同一份数据内容拷贝赋值到多个数组中去使用循环展开 — #pragma HLS UNROLL部分或完全展开循环以更多硬件资源换取并行性减小 II。若完全展开循环将变成全并行组合逻辑吞吐量极高但面积暴增。循环扁平化 — #pragma HLS LOOP_FLATTEN将嵌套循环合并为单层循环使最内层循环获得更大的流水线优化空间。3.pipeline的目标只能到II2这个时候需要的方式就是连续读取2个节拍数据然后进行处理,这样即使II2,但是同一个流程处理了两个并行度最终II等效为1.四、loop_tripcount设计for(int i0;i100;i){}和for(int i0;i100;ii2){}vivado hls中loop_tripcount表示的含义如果索引i按照1自增和i按照2自增loop_tripcount应该是多少?对于这两个循环**for(int i0;i100;i){}循环从i0开始每次i增加1直到i100i的取值0, 1, 2, …, 99总共执行100次loop_tripcount 100**for(int i0;i100;ii2){}循环从i0开始每次i增加2直到i100i的取值0, 2, 4, …, 98计算方法(98-0)/2 1 49 1 50次loop_tripcount 50因此第一个循环的loop_tripcount是100第二个循环的loop_tripcount是50// 对于 i 的循环#pragma HLS loop_tripcount min100 max100 avg100// 对于 ii2 的循环#pragma HLS loop_tripcount min50 max50 avg50五、吞吐量计算1.HLS高层次综合中衡量的核心指标是启动间隔II和时钟频率Frequency2.基于II和数据率的计算公式对于流式数据处理吞吐量计算公式为Throughput fclk/II;其中fclk综合后时序的时钟频率单位是HZ;II:两次新输入之间所需的最小时钟周期数可从综合报告中直接读出。若时钟频率 200 MHz循环 II2则该循环的数据吞吐率为 100 MSamples/s。若优化为 II1则吞吐率翻倍至 200 MSamples/s。