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.pswp.cn/bicheng/15359.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15359.shtml
英文地址,請注明出處:http://en.pswp.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;它會根據表達式的…