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

vivado hls设计优化(十五)

一、循环优化
1.循环可以流水线化,可以展开,可以部分展开,可以扁平化,可以合并。
2.对于循环的索引index变量,避免使用全局变量,这个不利于优化。


二、变量循环边界
1.循环的边界如果是变量,将禁止执行vivado hls可应用的某些最优化操作;
2.如果循环的边界是顶层函数的参数传入过来的,那么认为循环边界是变量
3.如果循环的边界是变量,那么会阻止工具去判断循环的时延,时延将是?问号
解决办法:
使用tripcount行程来约束说明;
或者将c语言代码中使用assert宏定义。
4.由于变量边界循环无法展开,因此不仅阻止应用展开 (unroll) 指令,而且还会阻止将循环上层的层次流水线化
5.当循环或函数实现流水线化后,Vivado HLS 即可将函数或循环下层层级中的所有循环展开。如果在此层
级中存在具有变量边界的循环,它就会阻止流水线化。

三、对含有变量边界的循环的解决办法
对于含变量边界的循环,解决方案是通过循环内部的条件执行来将循环迭代次数设置为固定值。可重写变量循环边界示
例中的代码,如以下代码示例所示。此处循环边界显式设置为变量宽度的最大值,循环主体则以有条件方式来执行
#include "ap_cint.h"
#define N 32
typedef int8 din_t;
typedef int13 dout_t;
typedef uint5 dsel_t;
dout_t loop_max_bounds(din_t A[N], dsel_t width) {
dout_t out_accum=0;
dsel_t x;
LOOP_X:for (x=0;x<N; x++) {
if (x<width) {
out_accum += A[x];
}
}
return out_accum;
}
以上示例中的 for 循环 (LOOP_X) 可展开。由于此循环的上限固定,因此 Vivado HLS 知晓需创建的硬件数量。在 RTL
设计中包含 N(32) 份循环主体副本。每份循环主体副本都包含与之关联的条件逻辑,并根据变量宽度值来执行。

四、循环流水化
1.当循环或函数流水线化时,所在层级比流水线化的循环或函数层级更低的所有循环都必须展开

五、循环流水化示例说明
#include "loop_pipeline.h"
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;
LOOP_I:for(i=0; i < 20; i++){
LOOP_J: for(j=0; j < 20; j++){
acc += A[i] * j;
}
}
return acc;
}

1.上述代码中,如果对loop_pipeline函数进行流水化设计:
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;

#pragram pipeline II= 1

LOOP_I:for(i=0; i < 20; i++){
LOOP_J: for(j=0; j < 20; j++){
acc += A[i] * j;
}
}
return acc;
}

如果上面是这样优化,那么LOOP_I和LOOP_J都需要被展开!

2.如果对LOOP_I进行pipeline流水化设计
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;

LOOP_I:for(i=0; i < 20; i++){
#pragram pipeline II= 1
LOOP_J: for(j=0; j < 20; j++){
acc += A[i] * j;
}
}
return acc;
}
如果代码是这么设计的化,那么LOOP_J循环被全部展开unroll

3.如何对LOOP_J进行pipeline优化
dout_t loop_pipeline(din_t A[N]) {
int i,j;
static dout_t acc;

LOOP_I:for(i=0; i < 20; i++){

LOOP_J: for(j=0; j < 20; j++){
#pragram pipeline II= 1
acc += A[i] * j;
}
}
return acc;
}

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

相关文章:

  • mysql怎么查看
  • 救命神器!自考必用9大AI论文平台深度测评
  • 用Hugging Face微调医疗BERT模型
  • IM 即时通讯系统消息 有序性与可靠性 的全链路设计与工程实现
  • 深度学习毕设项目推荐-基于python-CNN卷积神经网络的水果识别基于机器学习卷积神经网络的水果识别
  • 【课程设计/毕业设计】通过python_CNN卷积神经网络对鸡蛋是否破损识别
  • 深度学习毕设项目推荐-基于python-CNN卷积神经网络对土豆疾病识别
  • NFS服务端操作系统常用操作手册:体系化指南
  • 通信协议仿真:通信协议基础_(6).网络层协议仿真
  • 【强烈收藏】我Python都不会,能直接学AI大模型吗?——小白避坑指南
  • 深度学习毕设项目推荐-通过python_CNN卷积神经网络对鸡蛋是否破损识别
  • LeetCode热题100--5. 最长回文子串--中等
  • 【值得收藏】大模型RAG技术突破:12种创新架构全解析,助你掌握前沿检索增强生成技术
  • 深度学习毕设项目推荐-通过python_CNN卷积神经网络对辣椒类别识别
  • 2026年转行AI大模型必备:两个高薪岗位,让你年后求职弯道超车
  • ADVANCE Day45
  • 一文搞清微调技术的发展与演进
  • 【收藏】LLM大模型全景解析:从零开始理解AI智能的诞生
  • linux的root目录缓存清理
  • 破解文案困局:先知AI如何赋能男装卖点新表达?
  • 【课程设计/毕业设计】深度学习基于python-CNN卷积神经网络对土豆疾病识别基于python-CNN卷积神经网络对土豆疾病识别
  • 深度学习计算机毕设之通过python_CNN卷积神经网络对鸡蛋是否破损识别
  • mysql之联合索引
  • mysql之字符串函数
  • 大模型入门必看:一篇读懂AI大模型核心知识,建议收藏!
  • MySQL如何删除binlog日志文件
  • js遍历数组和对象的常用方法有哪些?
  • NAT技术:互联网连接的隐形桥梁
  • Redis的两个小错误
  • 深度学习计算机毕设之基于人工智能python-CNN卷积神经网络对土豆疾病识别基于python-CNN卷积神经网络对土豆疾病识别