Intel®高层次综合编译器专业版: 最佳实践指南

ID 683152
日期 12/04/2023
Public
文档目录

3.3.3.1.1. 同时执行独立操作

将源代码指令映射到硬件中所述,编译器可以自动识别独立操作并在硬件中同时执行这些操作。

这种同时执行独立操作与流水线相结合,就是在FPGA上实现数据并行的方式。

下图展示了加法器和乘法器的实例,当它们在单独的输入上进行操作时被调度成同时执行:

图 11. 生成的硬件数据通路中的自动向量化


向量化类似于超标量处理器(superscalar processor)如何利用指令级并行,但这种向量化在编译时静态发生,而非在运行时(runtime)动态发生。

由于确定的指令级并行发生在编译时,因此对生成的硬件数据通路进行依赖项检查不会产生硬件或运行时成本。此外,FPGA灵活的逻辑和路由意味着只有FPGA的可用资源(如,ALM和DSP)才能限制可同时发生的独立操作的数量。

展开循环

您可以使用循环属性展开设计中的循环。循环展开减少了执行的迭代次数,但代价是增加了同时执行循环的多个迭代相对应的硬件资源消耗。

展开后,硬件资源按调度中的描述进行调度。

Intel® HLS Compiler从来不会尝试自动展开源代码中的任何循环。您必须始终使用相应的预处理指令来控制循环展开。请参阅 Intel® High Level Synthesis Compiler参考收 中的 循环展开(unroll 预处理指令) 了解详情。

条件语句

Intel® HLS Compiler尝试尽可能消除条件或分支语句。

有条件执行的代码在硬件中具有predicated(可断定)性。可断定性增加了同时执行操作时获得更好性能的可能性。此外,删除分支允许编译器对设计应用其他优化。

图 12. 条件语句

该实例中,函数foo可无条件运行。不能无条件运行的代码(例如,存储器分配)保留一个条件。