当前位置: 首页 > news >正文

HLS高层次综合设计技巧--任务有条件的执行阻碍dataflow最优化

一、dataflow最优化不会对有条件的任务执行最优化
void foo(int data_in1[N], int data_out[N], int sel) {
int temp1[N], temp2[N];
if (sel) {
Loop1: for(int i = 0; i < N; i++) {
temp1[i] = data_in[i] * 123;
temp2[i] = data_in[i];
}
} else {
Loop2: for(int j = 0; j < N; j++) {
temp1[j] = data_in[j] * 321;
temp2[j] = data_in[j];
}
}
Loop3: for(int k = 0; k < N; k++) {
data_out[k] = temp1[k] * temp2[k];
}
}

这个代码是没办法进行dataflow的,因为sel阻碍了dataflow最优化。
为什么呢?
dataflow中,生产者产生的东西给消费者用,这样一对一的方式,才能dataflow最优化。
也就是生产者生产的东西,消费者能立即消耗掉。
HLS综合工具需要在编译阶段就确认前后两个循环之间的数据流关系,HLS 工具必须明确知道生产者是谁以及消费者是谁,从而在它们之间建立固定的数据流通道(如 FIFO)。

二、sel引入后的情况
1.sel选择后,sel什么时候为高电平,什么时候是低电平,这个完全不确定,不通的sel拉高拉低,那么情况不一样;
2.基于这种情况,HLS综合工具压根没办法玩,那么怎么办呢?HLS综合工具会保守的退化为,将sel的分支的for循环全部执行完成,
之后再执行Loop3,从而,造成了dataflow的破坏。

三、剖析底层逻辑
1.数据源不确定性:DATAFLOW 优化的本质是将任务(循环/函数)像流水线一样并行执行,前一个任务产生数据,后一个任务立即消费。这要求在编译阶段(静态分析时),HLS 工具必须明确知道生产者是谁以及消费者是谁,从而在它们之间建立固定的数据流通道(如 FIFO)。
2.无法建立静态通道:由于 sel 是一个运行时变量,HLS 工具在编译时无法确定 Loop3 的数据究竟是来自 Loop1 还是 Loop2。
3.因为无法在生产者(Loop1 或 Loop2)与消费者(Loop3)之间建立一条固定的、点对点的数据流链路,HLS 只能采取保守策略,放弃并行化。程序必须串行执行:先判断 sel 的值,完整地执行完选中的分支循环(Loop1 或 Loop2),等待全部数据写入 temp1 和 temp2 后,才能开始执行 Loop3。


四、如何修改
void foo(int data_in[N], int data_out[N], int sel) {
int temp1[N], temp2[N];
Loop1: for(int i = 0; i < N; i++) {
if (sel) {
temp1[i] = data_in[i] * 123;
} else {
temp1[i] = data_in[i] * 321;
}
}
Loop2: for(int j = 0; j < N; j++) {
temp2[j] = data_in[j];
}
Loop3: for(int k = 0; k < N; k++) {
data_out[k] = temp1[k] * temp2[k];
}
}
这个代码解决了不能dataflow的问题。

http://www.jsqmd.com/news/1382627/

相关文章:

  • AI编程工程化:从工具使用到系统架构的思维升级
  • 多智能体系统五大核心架构模式详解:从管理者-工作者到联盟规划
  • League Akari:重新定义英雄联盟客户端体验的智能工具集
  • 进制转换全解析:从原理到实践,掌握计算机数据表示基础
  • 深圳东莞专业防水补漏公司/东莞专业补漏公司 - 实业推荐官
  • Apache NIFI InvokeHTTP处理器实战:从基础配置到高级调优的完整指南
  • AI应用Markdown渲染实战:前端方案、安全与性能优化
  • Python4Delphi:在Delphi应用中嵌入Python解释器的完整指南
  • Python多线程演进:从GIL限制到Per-Interpreter GIL的并行突破
  • AI Agent架构全解析:从意图理解到任务执行的智能闭环
  • Ubuntu 20.04.6 LTS Server 安装与生产环境配置全指南
  • 想不通的时候,去看看生死,事态
  • 基于OpenClaw的团队效率自动化审计:从部署到数据洞察的实战
  • PASI评分实战指南:从原理到临床应用的银屑病量化评估
  • LangChain快速入门:从零构建LLM应用的核心组件与实战
  • 2026年8月成都市新津区移动1000M宽带办理全流程避坑攻略 - 找卡家园
  • K波段有源移相器设计:毫米波相控阵核心电路实现与优化
  • 大模型文本生成原理:从Transformer到采样策略的完整解析
  • C语言双链表实现与应用全解析
  • Claude Code自动模式:智能代码补全的默认设置与优化指南
  • 2026年8月成都市新津区移动100M宽带办理与避坑全攻略 - 找卡家园
  • 小米手机刷机报错全解析:从驱动安装到救砖的完整解决方案
  • 智能路由引擎:重构ComfyUI节点执行策略与资源优化方案
  • 大模型实战指南:Token、上下文与计费原理详解与成本优化策略
  • JMeter性能测试入门:从环境配置到启动优化的完整指南
  • RLHF与PPO:让AI学会说人话的核心技术解析
  • 基于OpenClaw与Claude Code构建TikTok爆款视频自动化分析系统
  • Kimi K3:开源API代理工具,无缝切换AI模型后端实战指南
  • 从“点奶茶”到智能体:基于大语言模型的AI应用开发实战拆解
  • HLS高层次综合设计技巧--绕过任务对Dataflow的阻碍讨论