前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HLS Lesson13-for循环优化:合并

HLS Lesson13-for循环优化:合并

作者头像
瓜大三哥
发布2018-02-26 15:12:00
1.2K0
发布2018-02-26 15:12:00
举报
文章被收录于专栏:瓜大三哥瓜大三哥
代码语言:js
复制
#include"ap_int.h"
#define DATAW 8
#define CTRLW 1
#define N 4
#define M 2
typedef ap_int<DATAW> data_t;
void for_merge(data_t a[N],data_t b[N],data_t c[N],data_t d[M]);
#include"for_merge.h"
void for_merge(data_t a[N],data_t b[N],data_t c[N],data_t d[M])
{
int i=0;
loop_region:
{
add:
for(i=0;i<N;i++)
{
c[i]=a[i]+b[i];
}
sub:
for(i=0;i<N;i++)
{
d[i]=a[i]+b[i];
}
}
}

例1:

for循环是串行执行的,所以add和sub的latency都是8。可以将两个for循环进行loop merge。

循环的合并可以降低latency,这是因为for循环会在设计中创建额外的状态机,这些状态机会占用额外的时钟周期和额外的资源,所以会导致整个的latency会非常大

例2:

两个循环变量不一样的情况下,以循环最大为trip count

例3:

如果有一个循环变量是变量而不是常量,则会以循环变量最大值作为trip count。

代码语言:js
复制
#include"for_merge.h"
void for_merge(data_t a[N],data_t b[N],data_t c[N],data_t d[M],ctrl_t K)
{
int i=0;
loop_region:
{
add:
for(i=0;i<N;i++)
{
c[i]=a[i]+b[i];   //N=4 constant
}
sub:
for(i=0;i<K;i++)      //M=variable
{
d[i]=a[i]+b[i];
}
}
}

解决方式:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 例1:
  • 例2:
  • 例3:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档