Vitis HLS 学习笔记--控制驱动与数据驱动混合编程

目录

1. 简介

2. 示例分析

2.1 代码分析

2.2 控制驱动TLP的关键特征

2.3 数据驱动TLP的关键特征

3. 总结


1. 简介

在 HLS 硬件加速领域,Vitis HLS 提供了强大的抽象并行编程模型。这些模型包括控制驱动和数据驱动的任务级并行性(TLP),它们是硬件设计优化的基石。控制驱动TLP通过#pragma HLS dataflow指令实现函数的并行执行,而数据驱动TLP则利用hls::task类将函数转化为并行任务。这篇博文将深入探讨这两种并行性的特点,并通过代码示例展示它们在实际硬件设计中的应用,揭示如何有效地结合这两种模型以提升硬件性能和加速复杂算法的执行。

2. 示例分析

2.1 代码分析

#include "hls_np_channel.h"
#include "hls_task.h"

void worker(hls::stream<int>& in, hls::stream<int>& out) {
    int i = in.read();
    int o = i * 2 + 1;
    out.write(o);
}

void read_in(int* in, int n, hls::stream<int>& out) {
    for (int i = 0; i < n; i++) {
        out.write(in[i]);
    }
}

void write_out(hls::stream<int>& in, int* out, int n) {
    for (int i = 0; i < n; i++) {
        out[i] = in.read();
    }
}

void dut(int in[16], int out[16], int n) {
    hls_thread_local hls::split::round_robin<int, 4> split1;
    hls_thread_local hls::merge::round_robin<int, 4> merge1;
#pragma HLS dataflow

    read_in(in, n, split1.in);

    // Task-Channels
    hls_thread_local hls::task t[4];
    for (int i = 0; i < 4; i++) {
#pragma HLS unroll
        t[i](worker, split1.out[i], merge1.in[i]);
    }

    write_out(merge1.out, out, n);
}

功能分析:

  • worker:从输入流中读取数据,进行处理(乘2加1),然后将结果写入输出流。
  • read_in:从输入数组中读取数据,写入到输出流。
  • write_out:从输入流中读取数据,写入到输出数组。

2.2 控制驱动TLP的关键特征

#pragma HLS dataflow 指示HLS工具启用数据流模式,让不同的函数可以并行执行,它是控制驱动TLP的关键特征,具体体现如下:

  • read_in 函数和 split1 模块将数据分发到不同的通道。
  • 四个 worker 函数并行处理数据。
  • write_out 函数和 merge1 模块从不同的通道收集数据并写入输出数组。

此外,顶层函数 void dut(int in[16], int out[16], int n)  中,参数 in 和 out 均为外部存储器。

2.3 数据驱动TLP的关键特征

hls::task是一个任务通道,它允许将函数作为任务并行执行,它是数据驱动TLP的关键特征

示例代码中,worker函数被封装成任务并分配给四个hls::task实例,每个实例处理输入数据流的一部分,并将结果发送到合并通道。

hls::split::round_robin和hls::merge::round_robin是用于数据分割和合并的工具,它们支持数据流中的并行处理。split1将输入数据流平均分配给四个工作任务,而merge1则将这些任务的输出合并回单个数据流。

#pragma HLS unroll指令用于完全展开循环,确保所有任务并行执行。

3. 总结

在Vitis HLS中,控制驱动(Control-driven)和数据驱动(Data-driven)的并行性是高效硬件设计的两个关键组成部分。控制驱动并行性通过#pragma HLS dataflow指令实现,允许不同函数在数据准备好时即刻并行执行,从而优化整体性能。数据驱动并行性则通过hls::task类实现,它将函数封装为可并行执行的任务。这两种技术的结合,使得设计者能够充分利用硬件资源,实现复杂算法的高效执行。通过示例代码的分析,我们可以看到如何在实践中应用这些并行编程模型,以及它们如何协同工作以达到最佳的硬件加速效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667039.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯元宝APP横空出世,传统搜索面临巨大挑战

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 松松有个同事也叫&#xff1a;X元宝。我们公司旁边有个小吃街&#xff0c;就叫元宝街。每提到腾讯元宝&#xff0c;我就想起了我同事和这条街。 我今天看了腾讯混元大模型团队的发布会&#xff0c;他们发布了一款名…

存储 Bean 对象更加简单的方式

前置操作 如果是在 spring-config 中添加 bean 标签来注册内容&#xff0c;每个类都要弄一次就显得麻烦和臃肿了&#xff0c;对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。 配置扫描路径 想要将对象成功的存储到 Spring 中&…

【Python】解决Python报错:AttributeError: ‘str‘ object has no attribute ‘xxx‘

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

【redis】宝塔,线上环境报Redis error: ERR unknown command del 错误

两种方式&#xff1a; 1.打开宝塔上的redis&#xff0c;通过配置文件修改权限&#xff0c;注释&#xff1a;#rename-command DEL “” 2.打开服务器&#xff0c;宝塔中默认redis安装位置是&#xff1a;cd /www/server/redis 找到redis.conf,拉到最后&#xff0c;注释#rename-co…

「vue同一个组件,不同路由切换时界面没有更新问题」

问题&#xff1a;vue项目中不同路由切换时&#xff0c;因为引用的同一个组件&#xff0c;界面数据没有更新 一、解决方法 添加key&#xff0c;具体原理可参考vue中的diff算法 <router-view :key"$route.fullPath"></router-view>

Linux学习笔记(清晰且清爽)

本文首次发布于个人博客 想要获得最佳的阅读体验&#xff08;无广告且清爽&#xff09;&#xff0c;请访问本篇笔记 Linux安装 关于安装这里就不过多介绍了&#xff0c;安装版本是CentOS 7&#xff0c;详情安装步骤见下述博客在VMware中安装CentOS7&#xff08;超详细的图文教…

【Mac版】Java生成二维码

软件版本 IntelliJ IDEA&#xff1a;2023.2 JDK&#xff1a;17 Tomcat&#xff1a;10.1.11 Maven&#xff1a;3.9.3 技术栈 servlet谷歌的&#xff1a;zxing 生成普通的黑白二维码在二维码中间添加一个小图标 github开源项目&#xff1a;qrcode qrcode开源项目的内部是基于z…

服务器数据恢复—EqualLogic存储硬盘灯亮黄色的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌EqualLogic PS 6011型号存储&#xff0c;底层有一组由16块SAS硬盘组建的RAID5阵列&#xff0c;上层存储空间划分了4个卷&#xff0c;格式化为VMFS文件系统&#xff0c;存放虚拟机文件。 服务器故障&#xff1a; 存储设备上两块硬盘指…

flink left join消费kafka数据

left join会产生回车流数据 在控制台数据 import com.sjfood.sjfood.gmallrealtime.app.BaseSQLAPP; import com.sjfood.sjfood.gmallrealtime.util.SQLUtil; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.…

Ubuntu20.04安装VINS_Mono 和 VINS_Fusion

文章目录 一、问题描述二、依赖环境1. Eigen 安装2. glog 安装3. gflags 安装4. ceres 安装 三、VINS-Mono 安装1. git 下载并安装2. OpenCV 版本冲突3. 运行 四、VINS—Fusion 安装1. git 下载并安装2. OpenCV 版本冲突3. 运行 五、日常bug1. 动静态库链接冲突 一、问题描述 …

无缝接入GPT-4o:智创聚合API平台的创新与实践

在2024年5月13日&#xff0c;美国开放人工智能研究中心&#xff08;OpenAI&#xff09;发布了最新版本的ChatGPT——GPT-4o。这一更新标志着人工智能领域的又一重大进步&#xff0c;引起了全球科技界的广泛关注。GPT-4o的“o”代表“omni”&#xff08;全能&#xff09;&#x…

简要分析学习spring内存马,劫持马

简要分析学习spring内存马&#xff0c;劫持马 本文主要是通过SpringMemShell这个工程&#xff0c;来对spring内存马进行演示&#xff0c;利用。 写在前面&#xff1a; 参考的是大佬给的流程以及思路,其中的解释与分析非常详细 ----->>大佬的链接 这里的内存马文件取自gi…

大坝安全监测自动化技术的规范化设计准则

大坝安全监测自动化技术的规范化设计准则 一、施工阶段自动化系统设计要点 在施工阶段&#xff0c;大坝安全监测自动化系统的设计应当涵盖以下几个核心内容&#xff1a; 监测仪器的布局规划及详细的施工图纸设计。 配套土建项目以及防雷设施的施工设计规划。 明确施工过程中的技…

基于Chisel语言的FPGA流水灯程序

目录 一、 内容概要二、 Chisel介绍三、 Chisel的使用四、 流水灯实现五、 心得体会六、 参考链接 一、 内容概要 Chisel介绍Chisel使用流程Chisel流水灯实操 二、 Chisel介绍 Chisel 是一种构建硬件描述语言&#xff08;HDL&#xff09;的高级编程语言&#xff0c;它允许硬…

Python学习需要哪些知识基础?

基础知识是非常重要的&#xff0c;这些内容确实是Python学习的基础。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。…

Pytorch反向传播算法(Back Propagation)

一&#xff1a;revise 我们在最开始提出一个线性模型。 x为我们的输入&#xff0c;w为权重。相乘的结果是我们对y的预测值。 那我们在训练时就是对这个权重w进行更新&#xff0c;就需要用到上一章提到的梯度下降算法&#xff0c;不断更新w。但是此时注意不是用y的预测值对w进…

前端Vue自定义支付密码输入框键盘与设置弹框组件的设计与实现

摘要 随着信息技术的不断发展&#xff0c;前端开发的复杂性日益加剧。传统的开发方式&#xff0c;即将整个系统构建为一个庞大的整体应用&#xff0c;往往会导致开发效率低下和维护成本高昂。任何微小的改动或新功能的增加都可能引发对整个应用逻辑的广泛影响&#xff0c;这种…

Mybatis-plus 更新或新增时设置某些字段值为空

方式一 在实体中设置某个字段为的注解中 TableField(updateStrategy FieldStrategy.IGNORED)private Date xxxxxxTime;通过这种方式会指定更新时该字段的策略&#xff0c;通常情况下updateById这种会根据字段更新&#xff0c;通常都会判断null 以及空值 指定 updateStrategy …

学习Java的日子 Day51 数据库,DDL

Day51 MySQL 1.数据库 数据库&#xff08;database&#xff09;就是一个存储数据的仓库。为了方便数据的存储和管理&#xff0c;它将数据按照特定的规律存储在磁盘上。通过数据库管理系统&#xff0c;可以有效地组织和管理存储在数据库中的数据 MySQL就是数据库管理系统&#…

[ubuntu18.04]搭建mptcp测试环境说明

MPTCP介绍 Multipath TCP — Multipath TCP -- documentation 2022 documentation 安装ubuntu18.04&#xff0c;可以使用虚拟机安装 点击安装VMware Tool 桌面会出现如下图标 双击打开VMware Tools&#xff0c;复制如下图所示的文件到Home目录 打开终端&#xff0c;切换到管…