Vitis HLS 学习笔记--抽象并行编程模型-不良示例

目录

1. 简介

2. 基础 kernel

2.1 pass kernel

2.2 double_pass kernel

2.3 add_kernel

2.4 split kernel

3. 三种bypass

3.1 input_bypass

3.2 middle_bypass

3.3 output_bypass

4. 总结


1. 简介

本文展示三个在数据流水线中常见的问题:

  • 输入参数绕过了第一个函数,导致数据流水线性能下降。
  • 数据流内部的通道不是前馈的,绕过了任务,导致性能下降。
  • 数据流通道输出没有正确处理,导致性能下降。

2. 基础 kernel

首先引入四个通用 HLS kernel 函数作为后续演示的基础:

2.1 pass kernel

void pass(int a[128], int tmp1[128]) {for (int i = 0; i < 128; i++) {tmp1[i] = a[i];}
}

参数1 -> 参数2

2.2 double_pass kernel

void double_pass(int b[128], int tmp2[128], int tmp1[128], int tmp4[128]) {for (int i = 0; i < 128; i++) {tmp2[i] = b[i];tmp4[i] = tmp1[i];}
}

参数1 -> 参数2

参数3 -> 参数4

2.3 add_kernel

void add_kernel(int tmp1[128], int tmp2[128], int tmp3[128]) {for (int i = 0; i < 128; i++) {tmp3[i] = tmp1[i] + tmp2[i];}
}

参数1 + 参数2 -> 参数3

2.4 split kernel

void split(int a[128], int tmp1[128], int tmp2[128]) {for (int i = 0; i < 128; i++) {tmp1[i] = a[i];tmp2[i] = a[i];}
}

参数1 -> 参数2

参数1 -> 参数3

 

3. 三种bypass

3.1 input_bypass

void dut(int a[128], int b[128], int tmp3[128]) {
#pragma HLS DATAFLOWint tmp1[128], tmp2[128], tmp4[128];pass(a, tmp1);double_pass(b, tmp2, tmp1, tmp4);add_kernel(tmp4, tmp2, tmp3);
}

优化后:

void dut(int a[128], int b[128], int tmp3[128]) {
#pragma HLS DATAFLOWint tmp1[128], tmp2[128], tmp4[128];int tmp5[128];pass(a, b, tmp1, tmp2);Double_pass(tmp2, tmp1, tmp4, tmp5);add_kernel(tmp4, tmp5, tmp3);
}

对比: 

a -> tmp1 -> tmp4+ --> tmp3b    -> tmp2
a -> tmp1 -> tmp4+ --> tmp3
b -> tmp2 -> tmp5

3.2 middle_bypass

void dut(int a[128], int b[128], int tmp3[128]) {
#pragma HLS DATAFLOWint tmp1[128], tmp2[128], tmp4[128];double_pass(a, b, tmp1, tmp2);pass(tmp2, tmp4);bypass(tmp1, tmp4, tmp3);
}

优化后:

void dut(int a[128], int b[128], int tmp3[128]) {
#pragma HLS DATAFLOWint tmp1[128], tmp2[128], tmp4[128], tmp5[128];double_pass(a, b, tmp1, tmp2);pass(tmp2, tmp4, tmp1, tmp5);bypass(tmp5, tmp4, tmp3);
}

对比:

a -> tmp1 ------>+ --> tmp3
b -> tmp2 -> tmp4
a -> tmp1 -> tmp5+ --> tmp3
b -> tmp2 -> tmp4

3.3 output_bypass

void dut(int a[128], int b[128], int tmp2[128]) {
#pragma HLS DATAFLOWint tmp1[128], tmp3[128];split(a, tmp1, tmp2);pass(tmp1, b);
}

优化后: 

void dut(int a[128], int b[128], int tmp2[128]) {
#pragma HLS DATAFLOWint tmp1[128], tmp3[128];split(a, tmp1, tmp3);pass(tmp3, tmp2, tmp1, b);
}

 对比:

a -> tmp1 -> b
a -> tmp2
a -> tmp1 -> b
a -> tmp3 -> tmp2

4. 总结

本文展示了在数据流水线中常见的三个输入参数绕过问题及其解决方案。通过引入四个基础的HLS kernel函数:pass、double_pass、add_kernel和split,演示了input_bypass、middle_bypass和output_bypass三种问题的具体情形及优化后的解决方案。优化后的代码通过重新排列数据流通道,使得数据流遵循前馈路径,提高了性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt线性差值 将直线渐变颜色

color(x)(x-x1)/(x2-x1) 与gpt给出的 这个位置比例可以表示为d/L是概念相同 x-x1是计算当前点距离起点距离&#xff0c;x2-x1是计算长度 例如&#xff0c;如果我们在直线上距离起点A的距离为d&#xff0c;整条直线的长度为L 用数学方式解释 2024/5/25 18:54:30 当我们要在一…

vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据

样式 在趋势图中点击某一个柱状图&#xff0c;出现下面的弹窗 代码实现 主要是在趋势图页面代码中&#xff0c;在初始化趋势图的设置中&#xff0c;添加对趋势图监听的点击方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…

Swift 类和结构体

类和结构体 一、结构体和类对比1、类型定义的语法2、结构体和类的实例3、属性访问4、结构体类型的成员逐一构造器 二、结构体和枚举是值类型三、类是引用类型1、恒等运算符2、指针 结构体和类作为一种通用而又灵活的结构&#xff0c;成为了人们构建代码的基础。你可以使用定义常…

python mp3转mp4工具

成品UI 安装moviepy库 pip install moviepy 转换demo from moviepy.editor import *# 创建一个颜色剪辑&#xff0c;时长与音频相同 audioclip AudioFileClip(r"C:\Users\Administrator\PycharmProjects\pythonProject44\test4\赵照 - 灯塔守望人.mp3") videoclip…

用Python Pygame做的一些好玩的小游戏

有些游戏的代码比较长就不公布了 1.简简单单 1.疯狂的鸡哥 你要准备的图片&#xff1a; 命名为&#xff1a;ji.png 代码&#xff1a; import pygame import random as r pygame.init() pygame.display.set_caption(aaa) pm pygame.display.set_mode((800,600))class Ls(py…

Java进阶学习笔记15——接口概述

认识接口&#xff1a; Java提供了一个关键字Interface&#xff0c;用这个关键字我们可以定义一个特殊的结构&#xff1a;接口。 接口不能创建对象。 注意&#xff1a;接口不能创建对象&#xff0c;接口是用来被类实现&#xff08;implements&#xff09;的&#xff0c;实现接口…

基于Spring Boot的高校图书馆管理系统

项目和论文都有企鹅号2583550535 基于Spring Boot的图书馆管理系统||图书管理系统_哔哩哔哩_bilibili 第1章 绪论... 1 1.1 研究背景和意义... 1 1.2 国内外研究现状... 1 第2章 相关技术概述... 2 2.1 后端开发技术... 2 2.1.1 SpringBoot 2 2.1.2 MySQL.. 2 2.1.3 My…

vr商品全景展示场景编辑软件的优点

3D模型展示网站搭建编辑器以强大的3D编辑引擎和逼真的渲染效果&#xff0c;让您轻松实现模型展示的优化。让用户通过简单的操作&#xff0c;就能满足个人/设计师/商户多样化展示的需求&#xff0c;让您的模型成为独一无二的杰作。 3D模型展示网站搭建编辑器采用国内领先的实时互…

java继承使用细节二

构造器 主类是无参构造器时会默认调用 public graduate() {// TODO Auto-generated constructor stub也就是说我这里要用构造器会直接调用父类。它是默认看不到的 &#xff0c;System.out.println("graduate");} 但当主类是有参构造器如 public father_(int s,doubl…

c语言:将小写字母转换为大写字母

//将小写字母转换为大写字母 #include <stdio.h> #include <ctype.h> int main() { char arr[]"you are low"; int i0; while(arr[i]) { if(islower(arr[i])) { arr[i]arr[i]-32; } i; } printf("%s\n",arr); return 0; }

微调Llama3实现在线搜索引擎和RAG检索增强生成功能

视频中所出现的代码 Tavily SearchRAG 微调Llama3实现在线搜索引擎和RAG检索增强生成功能&#xff01;打造自己的perplexity和GPTs&#xff01;用PDF实现本地知识库_哔哩哔哩_bilibili 一.准备工作 1.安装环境 conda create --name unsloth_env python3.10 conda activate …

dubbo复习:(8)使用sentinel对服务进行降级

一、下载sentinel-dashboard控制台应用并在8080端口启动 二、项目添加springboot 和dubbo相关依赖&#xff08;降级规则并未持久化&#xff0c;如果需要持久化&#xff0c;如果需要持久化降级规则&#xff0c;只需增加nacos相关依赖并在nacos中进行配置&#xff0c;然后配置app…

使用Python Tkinter创建GUI应用程序

大家好&#xff0c;当我们谈及使用Python Tkinter创建GUI应用程序时&#xff0c;我们涉及的不仅是技术和代码&#xff0c;更是关于创造力和用户体验的故事。Tkinter作为Python标准库中最常用的GUI工具包&#xff0c;提供了丰富的功能和灵活的接口&#xff0c;让开发者能够轻松地…

【基于springboot+vue的房屋租赁系统】

介绍 本系统是基于springbootvue的房屋租赁系统&#xff0c;数据库为mysql&#xff0c;可用于日常学习和毕设&#xff0c;系统分为管理员、房东、用户&#xff0c;部分截图如下所示&#xff1a; 部分界面截图 用户 管理员 联系我 微信&#xff1a;Zzllh_

打开服务器远程桌面连接不上,可能的原因及相应的解决策略

在解决远程桌面连接不上服务器的问题时&#xff0c;我们首先需要从专业的角度对可能的原因进行深入分析&#xff0c;并据此提出针对性的解决方案。以下是一些可能的原因及相应的解决策略&#xff1a; 一、网络连接问题 远程桌面连接需要稳定的网络支持&#xff0c;如果网络连接…

ArcGIS提取含有计曲线的等高线

喜欢就关注我们吧&#xff01; 今天我么来看看&#xff0c;如何利用DEM提取含有计曲线的等高线&#xff01; 常规的话我们利用DEM提取的等高线都是不带计曲线的&#xff0c;无法把计曲线标注出来&#xff0c;今天我们就来看下&#xff0c;如何处理一下哦&#xff01;提取带有计…

springboot打包目录解析

一、引言 Java开发中我们使用最多的便是spring框架&#xff0c;比如springboot应用。微服务模式下&#xff0c;每个服务都是一个springboot应用&#xff0c;都会被打包成一个可执行jar包。那么我们有多少人尝试去了解过这个可执行jar到底是什么&#xff1f;它的结构是什么样的…

泪目!网络连接中断的原因,终于找到了!

朋友们&#xff0c;出大事了&#xff01; 不知道多少朋友玩过 DNF 这个游戏&#xff0c;这个我从小学玩到大学的 “破” 游戏&#xff0c;昨天竟然出手游了&#xff01; 我都忘了自己曾几何时预约过这个手游通知&#xff0c;昨天给我发了条通知信息说游戏已开服。 老玩家直接…

Gitee好用的浏览器插件【GiteeTree】

使用gitee的时候&#xff0c;可能拉到别人的项目后&#xff0c;只是想看下某些文件的代码&#xff0c;但是不得不全部都拉下来&#xff0c;每次点又很麻烦。这个插件【GiteeTree】就很好用了&#xff0c;只需要搜索GiteeTree&#xff0c;然后把插件下载下来

git revert 和 git reset

文章目录 工作区 暂存区 本地仓库 远程仓库需求&#xff1a;已推送到远程仓库&#xff0c;想要撤销操作git revert &#xff08;添加新的提交来“反做”之前的更改&#xff0c;云端会残留上次的提交记录&#xff09;git reset&#xff08;相当于覆盖上次的提交&#xff09;1.--…