硬件专业化和软件映射的敏捷框架

概述

随着摩尔定律接近尾声,设计专用硬件及将应用程序映射到专用硬件的软件,都是很有前途的解决方案。硬件设计决定了峰值性能,软件也很重要,决定了实际性能。硬件/软件(HW/SW)协同优化硬件加速和软件映射,提高整体性能。当前的流程将硬件和软件设计隔离。由于编程层次低,设计空间大,硬件和软件都难以设计和优化。

将介绍AHS,一个用于张量应用程序的硬件专业化和软件映射的敏捷框架。对于使用高级语言描述的张量应用程序,AHS可以自动定义硬件和软件间的接口,协同导航巨大的设计空间,自动生成硬件实现和软件映射。AHS由几个组件组成,每个组件都带有一个开源工具。
第一,介绍HASCO,一种用于硬件和软件协同设计的工具。HASCO使用基于循环的IR的匹配方法,探索不同的硬件/软件分区方法。由于设计目标和评估成本不同,HASCO在硬件和软件方面采用了不同的DSE算法。
第二,介绍了TENET,一种用于硬件数据流表示法和性能模型的工具。TENET可以使用以关系为中心的表示法,完全覆盖硬件数据流的设计空间。
第三,介绍Tennet的合成后端TensorLib。TensorLib可以自动生成用Chisel编写的硬件数据流实现。
第四,介绍了Flextensor,一种用于自动软件映射和优化的工具。Flextensor可以为各种硬件平台(包括CPU、GPU、FPGA和ASIC)自动生成优化的软件实现。

Chisel是由伯克利大学发布的一种开源硬件构建语言,通过使用高度化的参数生成器和分层的专用硬件设计语言,支持高级硬件设计。
重要特性:
内嵌Scala编程语言
层次化+面向对象+功能构建
使用Scala中的元编程可以高度地参数化
支持专用设计语言的分层
生成低级Verilog设计文件,传递到标准ASIC或FPGA工具

采用Chisel设计的电路,经过编译,可以得到针对FPGA、ASIC的Verilog HDL代码,可以得到对应的时钟精确C++模拟器。
Chisel -> FPGA Verilog
Chisel -> ASIC Verilog
Chisel -> C++ Simulator

调度

先概述AHS项目,再介绍一系列技术演示和开源工具演示。涵盖AHS的所有组件,包括硬件和软件协同设计、硬件专业化和软件映射。
组织者

梁云(Eric)目前是北京大学EECS学院的副教授。研究兴趣包括计算机体系结构、电子设计自动化和编译器。在ISCA、MICRO、DAC、FPGA等领域发表了100多篇科学论文。研究获得了两项最佳论文奖和六项最佳论文提名。担任MICRO、ISCA、ASPLO、HPCA、DAC、FPGA、FCCM等的技术项目委员会,以及ACM TEC和TRET的助理编辑。

罗紫章目前是北京大学研究生的最后一年。对特定领域芯片的架构和软件协同设计感兴趣。

陆立强是北京大学五年级的博士生。2017年,在同一所大学获得学士学位。对空间架构和可重构计算感兴趣。

贾连成是北京大学四年级的博士生。于2018年在同一所大学获得学士学位。对高级综合和敏捷硬件设计感兴趣。

郑Size北京大学三年级的博士生。2019年,在同一所大学获得学士学位。对特定领域加速器的编译器设计和优化感兴趣。
Install Steps
Install
Shell script
You can use this shell shell script to install everything.
sh –c “$(wget https://pku-ahs.github.io/tutorial/en/master/_downloads/9064601015f9cd5e747a641dbdacf3aa/install_ahs.sh –O -)”
source ~/.bashrc
The shell script is tested under Ubuntu:20.04LTS. If you use another OS, or if you use Anaconda or Virtualenv for python, you may need to modify the script yourself. For windows users, it is best to use WSL.
Docker
You can pull our docker. We had everything prepared, configured and installed for you.
docker pull ericlyun/ahsmicro:latest
docker run –it ahsmicro:latest /bin/bash
Requirement
Apt
• python3
• python3-pip
• git
• llvm-9
• cmake
• build-essential
• make
• autoconf
• automake
• scons
• libboost-all-dev
• libgmp10-dev
• libtool
• default-jdk
• csvtool
Pip
• numpy
• decorator
• attrs
• tornado
• psutil
• xgboost
• cloudpickle
• tensorflow
• tqdm
• IPython
• botorch
• jinja2
• pandas
• scipy
• scikit-learn
• plotly
Sbt
echo “deb https://repo.scala-sbt.org/scalasbt/debian all main” | sudo tee /etc/apt/sources.list.d/sbt.list
echo “deb https://repo.scala-sbt.org/scalasbt/debian /” | sudo tee /etc/apt/sources.list.d/sbt_old.list
curl -sL “https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823” | sudo apt-key add
sudo apt-get update
sudo apt-get install sbt
Git
git clone --recursive -b micro_tutorial https://github.com/pku-liang/HASCO.git
git clone --recursive -b micro_tutorial https://github.com/pku-liang/TENET.git
git clone https://github.com/KnowingNothing/FlexTensor-Micro.git
git clone -b demo https://github.com/pku-liang/TensorLib.git
Configure & Compile
Hasco
cd ./ HASCO
bash ./install.sh

Settings

vim ~/.bashrc

append:

export TVM_HOME=<install_dir>/HASCO/src/tvm

export AX_HOME=<install_dir>/HASCO/src/Ax

export PYTHONPATH=TVMHOME/python:TVM_HOME/python:TVMH​OME/python:AX_HOME:${PYTHONPATH}

source ~/.bashrc
TENET
cd ./TENET
bash ./init.sh
vim ~/.bashrc

append:

export LD_LIBRARY_PATH=<install_dir>/TENET/external/lib:$LD_LIBRARY_PATH

source ~/.bashrc

cd TENET
make cli
make hasco
Dockerfile
The size of the docker is about 7G. If you find it difficult to pull it due to its size, you can run the following Dockerfile to build the docker by yourself.

syntax=docker/dockerfile:1

FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninterative

RUN apt-get update
&& apt-get -y -q install git sudo vim python3 python3-pip llvm-9 cmake build-essential make autoconf automake scons libboost-all-dev libgmp10-dev libtool curl default-jdk csvtool
&& pip3 install tensorflow decorator attrs tornado psutil xgboost cloudpickle tqdm IPython botorch jinja2 pandas scipy scikit-learn plotly
&& echo “deb https://repo.scala-sbt.org/scalasbt/debian all main” | sudo tee /etc/apt/sources.list.d/sbt.list
&& echo “deb https://repo.scala-sbt.org/scalasbt/debian /” | sudo tee /etc/apt/sources.list.d/sbt_old.list
&& curl -sL “https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823” | sudo apt-key add
&& sudo apt-get update
&& sudo apt-get -y -q install sbt
&& mkdir AHS
&& cd AHS
&& git clone --recursive -b micro_tutorial https://github.com/pku-liang/HASCO.git
&& git clone --recursive -b micro_tutorial https://github.com/pku-liang/TENET.git
&& git clone -b demo https://github.com/pku-liang/TensorLib.git
&& git clone https://github.com/KnowingNothing/FlexTensor-Micro.git
&& cd HASCO
&& bash ./install.sh
&& cd …/TENET
&& bash ./init.sh
Run
HASCO
Config
vim src/codesign/config.py
mastro_home = “<install_dir>/HASCO/src/maestro”
tenet_path = “<install_dir>/TENET/bin/HASCO_Interface”

tenet_params = {
“avg_latency”:16 # average latency for each computation
“f_trans”:12 # energy consume for each element transfered
“f_work”:16 # energy consume for each element in the workload
}

tensorlib_home = “<install_dir>/TensorLib”
tensorlib_main = “tensorlib.ParseJson”
Python API
python3 testbench/co_mobile_conv.py
python3 testbench/co_resnet_gemm.py

CLI
cd HASCO
./hasco.py -h

Run a GEMM intrinsic with MobileNetV2 benchmark

./hasco.py -i GEMM -b MobileNetv2 -f gemm_example.json -l 1000 -p 20 -a 0
Results:
• rst/MobileNetV2_CONV.csv config of best design for each constraint, view with column -s, -t < MobileNetV2_CONV.csv
• rst/software/MobileNetV2_CONV_* tvm IR for each design
• rst/hardware/CONV_.json TensorLib config for each design
• rst/hardware/CONV_
.v TensorLib generated Verilog
TENET
cd TENET

Help Text

./bin/tenet -h

Run a KC-systolic dataflow

./bin/tenet -p ./dataflow_example/pe_array.p -s ./dataflow_example/conv.s -m ./dataflow_example/KC_systolic_dataflow.m -o output.csv --all

Run a OxOy dataflow

./bin/tenet -p ./dataflow_example/pe_array.p -s ./dataflow_example/conv.s -m ./dataflow_example/OxOy_dataflow.m -o output.csv --all

Run all layers in MobileNet

./bin/tenet -e ./network_example/MobileNet/config -d ./network_example -o output.csv --all
Result:output.csv
TensorLib
cd TensorLib

Optional, download the requirements from MAVEN, so that the rest instructions runs faster

sbt compile

Examples of Scala APIs

sbt “runMain tensorlib.Example_GenConv2D”

sbt “runMain tensorlib.Example_GenGEMM”

Examples of JSON interface

sbt “runMain tensorlib.ParseJson ./examples/conv2d.json ./output/conv2d.v”

sbt “runMain tensorlib.ParseJson ./examples/gemm.json ./output/gemm.v”

Testing the result

sbt “runMain tensorlib.Test_Runner_Gemm”
Result:
Scala Interface: PEArray.v
ParseJson: the second argument you specified.
FlexTensor
cd FlexTensor-Micro
export PYTHONPATH=$PYTHONPATH:/path/to/FlexTensor-Micro
cd FlexTensor-Micro/flextensor/tutorial

First, CPU experiments

cd conv2d_llvm

run flextensor

python optimize_conv2d.py --shapes res --target llvm --parallel 8 --timeout 20 --log resnet_config.log

run test

python optimize_conv2d.py --test resnet_optimize_log.txt

run baseline

python conv2d_baseline.py --type tvm_generic --shapes res --number 100

run plot

python plot.py

Next, GPU experiments

cd …/conv2d_cuda

run flextensor

python optimize_conv2d.py --shapes res --target cuda --parallel 4 --timeout 20 --log resnet_config.log

run test

python optimize_conv2d.py --test resnet_optimize_log.txt

run baseline

python conv2d_baseline.py --type pytorch --shapes res --number 100

run plot

python plot.py

At last, VNNI experiments

cd …/gemm_vnni

run flextensor (cascadelake)

python optimize_gemm.py --target “llvm -mcpu=cascadelake” --target_host “llvm -mcpu=cascadelake” --parallel 8 --timeout 20 --log gemm_config.log --dtype int32

run flextensor (skylake)

python optimize_gemm.py --target “llvm -mcpu=skylake-avx512” --target_host “llvm -mcpu=skylake-avx512” --parallel 8 --timeout 20 --log gemm_config.log

run test

python optimize_gemm.py --test gemm_optimize_log.txt

run baseline

python gemm_baseline.py --type numpy --number 100

run plot

python plot.py

参考链接:
https://pku-ahs.github.io/tutorial/en/master/

硬件专业化和软件映射的敏捷框架相关推荐

  1. 《SAFe 4.0参考指南:精益软件与系统工程的规模化敏捷框架》一 3.13 故事

    本节书摘来自华章出版社<SAFe 4.0参考指南:精益软件与系统工程的规模化敏捷框架>一书中的第3章,第3.13节 作者[美]迪恩·莱芬(DeanLeffingwell),更多章节内容可以 ...

  2. 规模化敏捷框架何从入手?这篇文章把SAFe讲透了!

    摘要:敏捷软件开发理念已渐渐被业界普遍接受,越来越多的公司和团队不得不面对一个新的问题,就是规模化敏捷的引入和实现.目前市场上规模化框架主要有SAFe,Less,Scrum of Scrums, Sp ...

  3. 《 嵌入式系统设计与实践》一一3.6 测试硬件(和软件)

    3.6 测试硬件(和软件) 虽然我强烈建议准备好工具箱.数字万用表和示波器,但是,如果大家没有准备好独自拥有这些,那么将这些留给硬件工程师也在情理之中.作为一个软件工程师,更重要的是将用于测试硬件的软 ...

  4. 敏捷原则比敏捷框架更重要

    2018年5月10日,敏捷宣言的发起人之一Ron Jeffries公开宣称"开发人员应放弃使用敏捷框架".Ron Jeffries提到,诸如Scrum和看板之类的敏捷框架,与敏捷原 ...

  5. 全网首译 : 初学者终极指南—掌握Scrum敏捷框架—第1章

    原书信息如下 Name: The Ultimate Beginner's Guide To Learn And Master Scrum Agile Framework Author: HEIN SM ...

  6. 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>

    嵌入式硬件基础 1,存储器 1.1 概念 1.2,存储器结构模型 1.3,存储器性能指标 1.4,嵌入式存储器类型 1.4.1,只读存储器 1.4.2,随机存储器 1.4.3,双端口RAM 1.4.4 ...

  7. 分享如何在 PingCode 这类专业的看板软件中管理敏捷Kanban 项目

    在本教程中,我们将介绍在 PingCode 中如何创建 Kanban 项目.确定工作优先级.可视化工作流程以及如何限制在制品以防止团队超负荷工作的说明,所有这些我们都将结合 PingCode 工具介绍 ...

  8. 第二章:并行硬件和并行软件

    第二章:并行硬件和并行软件 背景知识 ​ 冯诺依曼结构:内存与CPU分开,CPU分为控制单元和算术逻辑单元,内存的速度限制了CPU的速度 ​ 进程.多任务和线程:没啥好说的,操作系统都有 ​ 对冯·诺 ...

  9. 硬件工程师和软件工程师哪个更有前途?

    嵌入式工程师结合经历聊硬件工程师和软件工程师哪个更有前途? 我个人对美国这方面了解更多,就先从美国说一说.我相信硬件工程师和软件工程师的就业前景应该是提这个问题的人最想知道的方面. 就我所了解的,在现 ...

最新文章

  1. 十四、进程互斥的硬件实现方法
  2. Windows or Linux
  3. Apache Kafka:大数据的实时处理时代
  4. mysql join大小表顺讯_MySQL优化器join顺序
  5. DotNet软件开发框架
  6. Apollo 1 融合 Spring 的三个入口
  7. ZooKeeper教程(一)----Centos7下安装ZooKeeper(单机版)
  8. 迷宫~哈哈~终于懂了BFS
  9. zabbix 监控项自动发现过滤_zabbix怎么使用自动发现添加新监控项
  10. Win7系统aero主题灰色不可选怎么办|win7 aero灰色的解决方法
  11. PS2手柄移植到STM32上面的小笔记
  12. 怎么快速提高网站打开速度-网站打开速度优化教程技巧
  13. Base64Utils 快速使用
  14. 卡口和电子警察的区别
  15. yarn : 无法加载文件 C:\Users\Emily\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。
  16. Aviary 图片编辑
  17. CSU - 2085 手游大佬(天数计算)
  18. 商易通-预约挂号详情页面-预约确认(三十五)
  19. 基于深度学习的红外和可见光图像融合论文及代码整理
  20. 最短路径 floyd最小环 洛谷2738 篱笆回路 网上题解

热门文章

  1. /var/lib/docker/overlay2/xxxxx no such file or directory docker文件删除引发的问题
  2. 伍六七带你学算法 动态规划 ——不同路径
  3. 2022-2028年中国钢铁电商产业竞争现状及发展前景预测报告
  4. 2021-2027年中国网络安全内容审查行业市场研究及前瞻分析报告
  5. 2022-2028年中国氟橡胶产业竞争现状及发展前景分析报告
  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
  7. 机房收费系统【VB版】——前期准备
  8. Camera系列规格参数
  9. ARM CPU神经网络自动调度
  10. 多目标跟踪:CVPR2019论文阅读