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,一经查实,立即删除!

相关文章

python中模拟键盘按键和鼠标按键

目录 0.作用和需安装库 1.模拟键盘按键 2.虚拟键表 3.模拟鼠标 0.作用和需安装库 作用&#xff1a;用程序实现达到按下键盘按键的作用&#xff0c;或者按下鼠标&#xff0c;无需真正按键盘或者鼠标。 需要安装pywin32这个库 pip install pywin32 1.模拟键盘按键 例子1…

在Mac OS下编写第一个Flask代码

在电脑上已经安装了Homebrew&#xff0c;在Homebrew里已经安装了Python。 创建一个新的Flask应用。这里发生了几件事&#xff1a; 创建虚拟环境&#xff1a; 你使用python3 -m venv flask创建了一个名为flask的虚拟环境。激活虚拟环境&#xff1a; 通过运行source flask/bin/ac…

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…

node-nass安装踩坑

编译DSS的前端&#xff0c;用1.1.4编译&#xff0c;没有问题&#xff0c;用1.1.1版本就有问题&#xff0c;一直是node-gyp有问题&#xff0c;怎么也解决了不了。 后来检查发现&#xff0c;是因为要安装node-nass才导致出现node-gyp的问题。 而1.1.4没问题&#xff0c;是因为我…

头歌c语言实验答案

由于头歌C语言实验的具体内容和题目可能随时间变化&#xff0c;我无法直接提供特定实验的完整答案。但我可以基于参考文章中的内容和结构&#xff0c;给出一个通用的回答格式&#xff0c;并结合相关信息进行说明。 通用回答格式 实验名称和描述 实验名称&#xff1a;头歌C语言…

用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;实现接口…

中国电子学会(CEIT)2023年05月真题C语言软件编程等级考试三级(含详细解析答案)

中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试三级 2023年05月 编程题五道 总分:100分一、找和为K的两个元素(20分) 在一个长度为n (n < 1000)的整数序列中,判断是否存在某两个元素之和为k。 时间限制: 1000 内存限制: 65536 输入 …

基于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…

unity中如何插入网页

在Unity中插入自己的网页通常是通过使用Unity的WebGL构建目标和HTML页面来实现的。以下是一些步骤&#xff1a; 构建你的Unity项目为WebGL&#xff1a;在Unity中&#xff0c;选择Build Settings&#xff08;构建设置&#xff09;&#xff0c;将Platform&#xff08;平台&#x…

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 …

周末总结(2024/05/25)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意。执行时间控制在5分钟以内 坚持每天早会打招呼 工作上的要点 现状&#xff08;接受破烂现状&#xff0c;改变状态&#xff09; - 这周使用和执行了生产环境发布流程(2天&#xff09;&#xff0c;2天时间在写Java…

大胆预测:计算机将要回暖

中概财报集体亮眼 虽然最近几天恒指&#xff08;港股&#xff09;稍有回落&#xff0c;但年线仍有 9% 的上涨。 过去三年&#xff0c;恒指分别下跌 14.08%、15.46% 和 13.82%。 而在近期&#xff0c;国内各大互联网都公布了财报&#xff0c;别看各个大厂的作妖不断&#xff0c;…

[前端|vue] v-if 和v-show的区别,为什么功能会类似

v-if 和 v-show 都是 Vue 中用于条件渲染的指令&#xff0c;但它们之间存在几个关键区别&#xff0c;这些区别导致了它们在不同场景下的适用性也有所不同&#xff1a; v-if 的特点&#xff1a; 条件渲染&#xff1a;v-if 是一个动态的条件渲染指令&#xff0c;它会根据表达式的…