Vitis HLS 学习笔记--优化本地存储器访问瓶颈

目录

1. 简介

2. 代码解析

2.1 原始代码

2.2 优化后

2.3 分析优化措施

3. 总结


1. 简介

在Vitis HLS中,实现II(迭代间隔)= 1是提高循环执行效率的关键。II=1意味着每个时钟周期都可以开始一个新的迭代,这是最理想的情况,可以大大提高硬件执行的并行度和速度。

本文对两个示例进行分析,针对存在的存储器访问瓶颈进行优化,以实现迭代间隔为1的目标。随后将详细解析优化后的代码,探讨优化措施对性能的影响。

2. 代码解析

2.1 原始代码

存储器访问存在瓶颈

#include "ap_int.h"ap_int<10> example(ap_int<7> mem[128]) {ap_int<10> sum = 0;int i;SUM_LOOP:for (i = 2; i < 128; ++i)sum += mem[i] + mem[i - 1] + mem[i - 2];return sum;
}

 综合报告:

+ Performance & Resource Estimates: PS: '+' for module; 'o' for loop; '*' for dataflow+-------------+------+------+---------+-----------+----------+---------+------+----------+------+----+----------+-----------+-----+|   Modules   | Issue|      | Latency |  Latency  | Iteration|         | Trip |          |      |    |          |           |     ||   & Loops   | Type | Slack| (cycles)|    (ns)   |  Latency | Interval| Count| Pipelined| BRAM | DSP|    FF    |    LUT    | URAM|+-------------+------+------+---------+-----------+----------+---------+------+----------+------+----+----------+-----------+-----+|+ example    |     -|  4.64|      254|  2.540e+03|         -|      255|     -|        no|     -|   -|  39 (~0%)|  211 (~0%)|    -|| o SUM_LOOP  |    II|  7.30|      252|  2.520e+03|         3|        2|   126|       yes|     -|   -|         -|          -|    -|+-------------+------+------+---------+-----------+----------+---------+------+----------+------+----+----------+-----------+-----+
  • 函数总延迟:254 cycles
  • 循环总延迟:252 cycles
  • 没有使用 BRAM 或者 URAM,通过 fabric 实现存储器

此段原始代码中,每次循环迭代都会从 mem 数组中读取三次数据(mem[i]、mem[i-1]和mem[i-2]),这些重复的内存访问会增加访问延迟。

2.2 优化后

实现II(迭代间隔)= 1。

#include "ap_int.h"ap_int<10> example(ap_int<7> mem[128]) {ap_int<7> tmp0, tmp1, tmp2;ap_int<10> sum = 0;int i;tmp0 = mem[0];tmp1 = mem[1];
SUM_LOOP:for (i = 2; i < 128; i++) {tmp2 = mem[i];sum += tmp2 + tmp1 + tmp0;tmp0 = tmp1;tmp1 = tmp2;}return sum;
}

 综合报告:

+ Performance & Resource Estimates: PS: '+' for module; 'o' for loop; '*' for dataflow+------------------------------+------+------+---------+-----------+----------+---------+------+----------+------+----+----------+-----------+-----+|            Modules           | Issue|      | Latency |  Latency  | Iteration|         | Trip |          |      |    |          |           |     ||            & Loops           | Type | Slack| (cycles)|    (ns)   |  Latency | Interval| Count| Pipelined| BRAM | DSP|    FF    |    LUT    | URAM|+------------------------------+------+------+---------+-----------+----------+---------+------+----------+------+----+----------+-----------+-----+|+ example                     |     -|  3.87|      133|  1.330e+03|         -|      134|     -|        no|     -|   -|  57 (~0%)|  198 (~0%)|    -|| + example_Pipeline_SUM_LOOP  |     -|  3.87|      129|  1.290e+03|         -|      129|     -|        no|     -|   -|  37 (~0%)|  139 (~0%)|    -||  o SUM_LOOP                  |     -|  7.30|      127|  1.270e+03|         2|        1|   126|       yes|     -|   -|         -|          -|    -|+------------------------------+------+------+---------+-----------+----------+---------+------+----------+------+----+----------+-----------+-----+
  • 函数总延迟:133 cycles
  • 循环总延迟:129 cycles
  • 没有使用 BRAM 或者 URAM,通过 fabric 实现存储器

通过引入三个临时变量tmp0、tmp1、tmp2来减少冗余的内存访问。这三个变量用于存储当前及之前两次迭代访问的mem数组元素。在每次循环迭代中,只需要读取一次新的数组元素(tmp2 = mem[i]),然后将这个新读取的值与之前存储的两个值(tmp1和tmp0)相加。然后更新tmp0和tmp1的值,使它们分别变为前一次和当前迭代的值。

在循环内每次只进行一次读取操作。

2.3 分析优化措施

在对原始代码进行优化时,核心目标是改善内存访问模式以提高性能。原始代码中,每次循环迭代需要进行三次内存访问,这导致了存储器访问成为性能的瓶颈。为了解决这一问题,优化后的代码引入了临时变量tmp0、tmp1和tmp2,将前两次迭代的数据存储在这些变量中,从而避免了不必要的重复内存访问。

对于此类问题,可以总结出以下优化原则:

减少内存访问: 通过引入临时变量,优化后的代码显著减少了对存储器的访问次数。现在,每次迭代只需进行一次内存访问,大大降低了访问延迟,提高了数据访问效率。

优化数据重用: 引入临时变量tmp0、tmp1和tmp2使得前两次迭代的数据得以重复利用。这种数据重用策略增强了数据访问的局部性,减少了存储器的频繁访问,有助于进一步提高性能。

改进迭代间隔: 优化后的代码不仅减少了存储器访问次数,还改善了内存访问模式,使得循环执行效率得到了显著提高。这种改进有助于实现迭代间隔II=1,即每个时钟周期开始一个新的迭代,从而进一步提高了整体代码的性能表现。

3. 总结

通过对原始代码进行优化,成功地改善了内存访问模式,提高了循环执行效率。优化后的代码减少了存储器访问次数,优化了数据重用,以及改进了迭代间隔,使得每个时钟周期都可以开始一个新的迭代。这些优化措施有效地减少了存储器访问延迟,提高了硬件执行效率。优化后的代码在性能和效率上都有了显著的提升,更适用于高性能处理应用场景。

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

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

相关文章

HNCTF ——baby_python

H&NCTF 2024 官方WP (qq.com) OpCodes Pickle.jl (juliahub.com) nc之后 PS D:\ForCode\pythoncode\.idea> nc hnctf.yuanshen.life 33267 # Python 3.10.12 from pickle import loads main b"\x80\x04ctypes\nFunctionType\n(ctypes\nCodeType\n(I1\nI0\nI0\n…

【Vim】

一、什么是Vim&#xff1f; Vim 是一个历史悠久的文本编辑器&#xff0c;可以追溯到 qed。 Bram Moolenaar 于 1991 年发布初始版本。Vim 有着悠久的历史;它起源于 Vi 编辑器&#xff08;1976 年&#xff09;&#xff0c;至今仍在开发中。(Vim has a rich history; it origina…

css+html 爱心❤

效果 代码实现 html <div class"main"><div class"aixin"></div></div>css .main {transform: rotate(-45deg);}.aixin {height: 100px;width: 100px;background-color: red;margin: auto;margin-top: 200px;position: relativ…

MySQL第一次作业(基本操作)

目录 一、登陆数据库 二、创建数据库zoo 三、修改数据库zoo字符集为gbk 四、选择当前数据库为zoo 五、查看创建数据库zoo信息 六、删除数据库zoo 一、登陆数据库 指令&#xff1a; mysql -u root -p 二、创建数据库zoo 指令&#xff1a; create database zoo; 三、修改数…

基于PHP+MySQL组合开发的多用户自定义商城系统源码 附带源代码包以及搭建教程

系统概述 互联网技术的飞速发展&#xff0c;电子商务已成为人们日常生活中不可或缺的一部分。商城系统作为电子商务的核心&#xff0c;其开发技术和用户体验直接影响着电商平台的竞争力和用户满意度。本文旨在介绍一个基于PHPMySQL组合开发的多用户自定义商城系统&#xff0c;…

C++学习~~string类

1.STL简单介绍 &#xff08;1&#xff09;标准模版库&#xff0c;是C里面的标准库的一部分&#xff0c;C标准库里面还有其他的东西&#xff0c;但是我们不经常使用&#xff0c;我们经常使用的还是STL这个标准库部分。 &#xff08;2&#xff09;六大件&#xff1a;仿函数&…

C# WinForm —— 16 MonthCalendar 介绍

1. 简介 可以选择单个日期&#xff0c;也可以选择一段日期&#xff0c;在选择时间范围上 比较适用&#xff0c;但不能跨月份选择日期范围 在直观上&#xff0c;可以快速查看、选择日期/日期范围 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般…

Uni-app基础知识

uni-app组成和跨端原理 | uni-app官网uni-app,uniCloud,serverless,uni-app组成和跨端原理,基本语言和开发规范,编译器,运行时&#xff08;runtime&#xff09;,逻辑层和渲染层分离https://uniapp.dcloud.net.cn/tutorial/1.adb连接模拟器 找到adb所在位置&#xff08;一般在hb…

C++ 程序员常用的VScode的插件

vscode中好用的插件 Better CommentsBookmarksC/C ThemeChinese (Simplified) (简体中文) Language Pack for Visual Studio CodeclangdClang-FormatCodeLLDBCMakeCMake ToolsCode RunnerCode Spell CheckerCodeSnapColor Highlightvscode-mindmapDraw.io IntegrationError Len…

对称加密算法的应用场景

随着信息技术的飞速发展&#xff0c;数据安全成为了至关重要的议题。在保护数据传输和存储的过程中&#xff0c;加密算法扮演着不可或缺的角色。其中&#xff0c;对称加密算法&#xff0c;由于其高效性和易用性&#xff0c;被广泛应用于各种场景中。本文将探讨对称加密算法的主…

Kubernets多master集群构建负载均衡

前言 在构建 Kubernetes 多 Master 集群时&#xff0c;实现负载均衡是至关重要的一环。通过多台 Master 节点配合使用 Nginx 和 Keepalived 等工具&#xff0c;可以有效提高集群的可靠性和稳定性&#xff0c;确保系统能够高效运行并有效应对故障。接下来将介绍如何配置这些组件…

物业水电抄表系统的全面解析

1.系统概述 物业水电抄表系统是现代物业管理中的重要组成部分&#xff0c;它通过自动化的方式&#xff0c;实时监控和记录居民或企业的水电使用情况&#xff0c;极大地提高了工作效率&#xff0c;降低了人工抄表的错误率。该系统通常包括数据采集、数据传输、数据分析和数据展…

链表OJ题(移除链表元素,反转链表,分割链表,环形链表(是否成环问题),链表中间节点(快慢指针讲解),环形链表(找入环节点))“题目来源力扣附带题目链接”

目录 1.移除链表元素 2.反转链表 2.1三指针法 2.2头插法 3.分割链表 4.链表的中间节点&#xff08;快慢指针&#xff09; 4.1快慢指针 4.2求链表的中间节点 5.环形链表 5.1环形链表是否成环 5.2环形链表入环节点 5.3入环节点推论的不完备性说明 1.移除链表元素 移除…

Microsoft Threat Modeling Tool 使用(三)

Boundary&#xff08;边界&#xff09; 本文介绍信任边界&#xff0c;基于 SDL TM Knowledge Base (Core) 模版&#xff0c;这是一个通用的威胁建模模板&#xff0c;非常适合初学者和大多数威胁建模需求。 这些边界&#xff08;Boundary&#xff09;在微软威胁建模工具中用于表…

Java多线程与高并发

1、什么是进程?什么是线程? 进程:进程是程序的基本执行实体;另外一种解释是进程是一个应用程序(1个进程是一个软件)。 线程:线程是操作系统能够进行运算调度的最下单位。它被包含在进程之中,是进程中的实际运作单位;是一个进程中的执行场景/执行单元。 注意:。一个进…

在云服务器上运行StyleGAN3生成伪样本

首先是传入数据&#xff0c;这里我们不做赘述。 对于数据格式的裁剪&#xff0c;可以通过以下代码进行&#xff1a; from glob import glob from PIL import Image import os from tqdm import tqdm from tqdm.std import trangeimg_path glob(r"C:\Users\Administrato…

【Oracle篇】rman物理备份工具的基础理论概述(第一篇,总共八篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&am…

嵌入式是大坑的说法,是否与学生的信息不对称有关?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 目前也算是在搞嵌入式&#…

【深度学习】时空图卷积网络(STGCN),预测交通流量

论文地址&#xff1a;https://arxiv.org/abs/1709.04875 Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 文章目录 一、摘要二、数据集介绍美国洛杉矶交通数据集 METR-LA 介绍美国加利福尼亚交通数据集 PEMS-BAY 介绍美国…

Cocktail for Mac 激活版:一站式系统优化与管理神器

Cocktail for Mac是一款专为Mac用户打造的系统优化与管理工具&#xff0c;凭借其强大的功能和简便的操作&#xff0c;赢得了广大用户的喜爱。这款软件集系统清理、修复和优化于一身&#xff0c;能够帮助用户轻松解决Mac系统中的各种问题&#xff0c;提高系统性能。 Cocktail fo…