HLS Lesson13-for循环优化:合并

#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。

#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];
}
}
}

解决方式:

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2017-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

PHP7.2有哪些新特性?

我们知道php被称为“世界最好的语言“,可见人们对其是又爱又恨。我是其中一位开发者,但我对php是绝对地喜爱。我对php 了如指掌。自从php7.2发布以来,我...

45090
来自专栏运维技术迷

Redis数据结构和内部编码

type命令时间返回的就是当前键的 数据结构类型,分别为:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合),但是...

42890
来自专栏王清培的专栏

.NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受...

215100
来自专栏FreeBuf

Pwnable.tw刷题之Silverbullet破解过程分享

0x00背景介绍 之前加了学校的ctf社团之后开始学习binary方面的知识,跟着教程走完一遍之后学长推荐了pwnable来刷题,这篇文章就是pwnable上s...

39460
来自专栏我和PYTHON有个约会

12.程序编程基础6:选择和循环

正常情况下,我们完成一件事情的过程中,可能会存在多种条件限制 如:用户去ATM机取钱->输入取款密码->输入正确,取钱成功 | 输入错误,退卡。 这样的情况...

9020
来自专栏思考的代码世界

Python编程从入门到实践之用户输入|第7天

函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在 一个变量中,以方便你使用。

33680
来自专栏北京马哥教育

Python老司机也会翻车!10个最容易犯的Python开发错误

? Python是一门简单易学的编程语言,语法简洁而清晰,并且拥有丰富和强大的类库。与其它大多数程序设计语言使用大括号不一样 ,它使用缩进来定义语句块。 在平...

41180
来自专栏北京马哥教育

面试分享系列:从现在开始,准备加入BAT!

程序员是一项技术工种,个人的技术水平决定薪资。 程序员需要在面试的过程中展示自己的技术水平,通过有说服力的表现拿到自己理想的薪资。 面试中,面试题是招聘方对...

32360
来自专栏Java面试通关手册

深入理解原型模式 ——通过复制生成实例

Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_G...

19730
来自专栏AI研习社

嘀~正则表达式快速上手指南(下篇)

上面的代码中用 for 循环去遍历 contents 这样我们就可以一个一个处理每封邮件。我们创建一个字典, emails_dict,这将保存每个电子邮件的所有...

8310

扫码关注云+社区

领取腾讯云代金券