做的项目到了第二个阶段,从单纯的写代码到需要对算法硬件加速。本人也是第一次接触HLS和SDSOC,记录一下小白的学习心得,可能有不准确的地方,见谅。

文章目录

  • 1.概述
    • 1.1关于xfopencv问题
    • 1.2关于SDSOC问题

简单介绍:

  • 系统:ubuntu16.04.4
  • 平台:zcu102
  • 软件:SDx/SDSOC-v2018.3
  • 代码内容:图像处理
  • 文章内容:xfopencv库、opencv库的使用,如何使用SDSOC加速算法

1.概述

1.1关于xfopencv问题

问题1:什么是xfopencv库?

回答:
①处理图像的时候都用opencv,但是xfopencv已经根据相关语法对opencv中某些函数针对硬件设备进行了加速和优化,直接调用即可。
②xfopencv发布于2018年年度,命名空间为xf::,输入矩阵为xf::Mat,其目的是取代原来的hls::库。
③随着技术的进步,xfopencv已经逐渐淘汰,最高版本仅支持到vivado_hls-v2019.2.
使用详情:请登陆Xilinx官网查看文档UG1233
下载详情:请登录Github官网搜索“xfopencv”

问题2:xfopencv的处理流程是?

回答:

//1.使用cv::Mat来读取图像,这个过程是从sd卡向DRAM读取图片的过程
//2.将cv::Mat图像拷贝到xf::Mat,初始化该函数需要<图像长宽>、<像素的数据类型>、<每个时钟处理像素数>
//3.调用xfopencv的内置函数,这里需要使用xf::Mat类型,该过程是处理过程
//4.从xf::Mat拷贝到cv::Mat,该过程是从DRAM向sd卡写入图片的过程

1.2关于SDSOC问题

问题1:SDSOC如何加速?

回答:SDSOC主要面向软件编程人员,大概率不需要懂硬件的知识(如果有更好),但你需要懂得你手中的板卡处理上限是什么?
其处理流程为:

//1.写好C/C++代码,并找出计算密集的函数/模块(后续将进行加速)
//2.使用HLS语法对函数内部/函数接口进行优化①函数内部用于循环的展开/并行;②函数的接口用于数据的传输,尤其是图像数据从PS到PL的传输需要着重优化
//3.根据仿真结果的处理表现,重复优化上述过程

对于SDSOC这个工具的使用来说,最重要的一步骤就是硬件加速,对应着在项目界面(project explore)中添加要加速的硬件函数(Haradware Funcion),引出了下面的问题

问题2:已知SDSOC编译指令为sds++,编译工具对应板卡的系统编译工具,其编译过程是一个交叉编译的过程。在对硬件函数进行编译的时候有什么需要注意的事项?

回答:
需要注意三点:
①不使用bool类型的数组
②不对顶层硬件函数的接口使用hls::stream
③不对顶层硬件函数进行接口优化,但可以指定生成接口

//创建AXI接口
#pragma SDS data zero_copy(): Use to generate a shared memory interface
//创建FIFO接口
#pragma SDS data access_pattern(argument:SEQUENTIAL)

查看例程<mmultadd.h>:
带<#pragma SDS>类指令在头文件中出现,目的是以声明的形式创建函数传输端口
带<#pragma HLS>类指令在函数体内出现,目的是向计算密集函数内添加基于HLS工具的硬件加速语句

  • 头文件中,声明了函数<mmult()>和函数<madd()>的数据传输端口形式为FIFO,FIFO可以理解为顺序读取。
  • 如果不使用#pragma SDS指令来制定端口的话,则会使用默认端口形式RAM,RAM可以理解为随机读取。
  • 随机读取对于某些特定的处理任务产生影响,因此请指定适合处理任务的数据传输端口
#ifndef _MMULTADD_H_
#define _MMULTADD_H_#define N 32/**
* Design principles to achieve best performance
*
* 1. Declare secquential access to stream data into accelerators via a hardware FIFO
*    interface.  Otherwise, the default RAM interface requires all data to arrive
*    before starting HLS accelerator
*/
#pragma SDS data access_pattern(A:SEQUENTIAL, B:SEQUENTIAL, C:SEQUENTIAL)
void mmult (float A[N*N], float B[N*N], float C[N*N]);#pragma SDS data access_pattern(A:SEQUENTIAL, B:SEQUENTIAL, C:SEQUENTIAL)
void madd(float A[N*N], float B[N*N], float C[N*N]);#endif /* _MMULTADD_H_ */

查看<mmult.cpp>,其中带<#>的语句就是向计算密集函数内添加基于HLS工具的硬件加速语句

`#include <stdio.h>
#include <stdlib.h>
#include "mmultadd.h"/**
*
* Design principles to achieve II = 1
* 1. Stream data into local RAM for inputs (multiple access required)
* 2. Partition local RAMs into N/2 sub-arrays for fully parallel access (dual-port read)
* 3. Pipeline the dot-product loop, to fully unroll it
* 4. Separate multiply-accumulate in inner loop to force two FP operators
*
*/
void mmult (float A[N*N], float B[N*N], float C[N*N])
{float Abuf[N][N], Bbuf[N][N];
#pragma HLS array_partition variable=Abuf block factor=16 dim=2
#pragma HLS array_partition variable=Bbuf block factor=16 dim=1for(int i=0; i<N; i++) {for(int j=0; j<N; j++) {
#pragma HLS PIPELINEAbuf[i][j] = A[i * N + j];Bbuf[i][j] = B[i * N + j];}}for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {
#pragma HLS PIPELINEfloat result = 0;for (int k = 0; k < N; k++) {float term = Abuf[i][k] * Bbuf[k][j];result += term;}C[i * N + j] = result;}}
}

SDSOC加速实录-(1)加速工具及库的概述相关推荐

  1. python语言是编译执行_加速Python运行的工具

    加速Python运行的工具应用 如果你需要让你的Python程序加速运行,在不同的层次有一些不同的解决方案: 重写 你的 Python 代码, 通过 并行化parallelizing 和 优化opti ...

  2. Lumion3D 基于GPU加速的可视化创作工具(商业版+最新中英文教程)

    获取地址:http://item.taobao.com/item.htm?id=8905065487 Lumion3D 基于GPU加速的可视化创作工具(商业版+最新中英文教程) 免运费,拍下后,专门开 ...

  3. 67 个拯救前端开发者的工具、库和资源

    67 个拯救前端开发者的工具.库和资源 本文转载自:众成翻译 译者:myvin 审校: huangxiaolu 链接:http://www.zcfy.cc/article/4174 原文:https: ...

  4. Python 工具和库整理

    管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtua ...

  5. PHP快还是HTML快,PHP_HTML-加速、再加速,web开发人员是否必须掌握复杂 - phpStudy...

    HTML-加速.再加速 web开发人员是否必须掌握复杂的组件技术才能加快html页面的访问速度?答案是:不一定!实际上,有许多关于HTML与DHTML方面的技巧,它们原理简单而且上手容易.无论是技术高 ...

  6. 如何给网页加速,如何加速网页速度?

    如何加速网页速度? 提高移动网页加载的速度,可以从服务器的优化.网页的容量.请求响应等方面入手,这些方面优化后必然可以提高加载速度. 1.服务器硬件软件配置要好,网络.读写响应等要做好优化. 2.可以 ...

  7. Ubuntu下命令行加速、终端加速、命令行代理的方法/proxychains安装与使用

    Ubuntu下命令行加速.终端加速.命令行代理的方法/使用proxychains 前提:已经安装并配置好代理/FQ工具. 实现方法:通过安装配置proxychains4实现,即是将任何程序和代理工具的 ...

  8. 常用python编程软件-学习编程语言常用的10个工具、库——每个程序员都应该知道...

    原标题:学习编程语言常用的10个工具.库--每个程序员都应该知道 每个行业都有自己的工具,软件开发也没有什么不同.一个优秀的程序员应该比其他程序员更了解他的工具,而且还可以使用比普通工具更强大和更高级 ...

  9. 网站加速和服务器加速区别,cdn加速与不加速区别

    cdn加速与不加速区别是什么?使用cdn加速与不使用cdn加速的网站,在访问速度.数据安全.SEO优化和 1.网站访问速度差异 出于 使用CDN加速功能,不仅访问网站的速度提高了,跳出率减少了,也会利 ...

最新文章

  1. Gson:我爸是 Google
  2. 成功部署SD-WAN策略应注意的几个事项—Vecloud微云
  3. java 最大公约数和最小公倍数
  4. ae画面颜色一键选取替换修改插件Composite Brush for Mac 1.5.2
  5. MySql 5.6.36 64位绿色版安装
  6. P4行为模型BMV2依赖关系安装:thrift nanomsg nnpy安装
  7. 利用Jmail发送带附件的邮件时乱码的解决方案
  8. 《统一沟通-微软-实战》-6-部署-5-边缘服务器-2012-07-12-5
  9. 算法:动态规划解决爬楼梯Climbing Stairs python3
  10. 每日学习打卡-汇总处
  11. 电感值、电容值的理解(上)
  12. Jeff Dean 光辉事迹
  13. mhl数据线_利用MHL数据线 手机同屏到乐视电视X50air上
  14. 数字逻辑——时序逻辑电路
  15. 计算机网络复习-第六章应用层
  16. Redis学习之srem命令
  17. Python语言程序设计 - 北京理工大学 网课所有资料(源码,pdf,ppt课件,视频等)
  18. 基于Ant的Mentions自定义公式功能
  19. FPGA-Vivado
  20. C++中的全局变量声明和定义

热门文章

  1. 看不见的二本学校学生
  2. Flink cep动态模板+cep规则动态修改实践
  3. KBPSF8BA/HCG24K4V插装式限压阀放大器
  4. Android设计相关的网站推荐
  5. findbugs安装和使用
  6. Rethinking the trigger of backdoor attack
  7. 面向大规模图像检索的层次语义索引
  8. Hbase 解析(四) 布隆过滤器(BloomFilter)
  9. 废旧手机秒变PHP服务,轻松拥有随身服务器
  10. KingbaseES CTID 与 Oracle ROWID