Skip to content

Latest commit

 

History

History
32 lines (16 loc) · 3.1 KB

File metadata and controls

32 lines (16 loc) · 3.1 KB

引言

1. 并行计算和FPGA

并行计算是指同时执行多次运算以加速计算过程的计算方法。并行计算的概念中隐含了并行的计算方法和能够并行执行的硬件两个方面,缺乏并行的计算方法,整个计算只能串行执行;而缺乏能并行执行的硬件,并行算法也无法得到发挥。

一般提到并行计算,首先会想到GPU(Graphics Processing Unit,图形处理器)。现代的GPU里包含多个Streaming Processor(SM),每个SM中包含多个计算单元可以同时完成多个线程的计算。而 FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)作为硬件可编程的芯片,具有更为灵活的可编程性,可以实现数据并行和流水线并行。

本书将讨论在FPGA上的并行程序设计方法,包括算法的并行化和在FPGA的的具体实现方法。

2. 高层次综合

高层次综合(High Level Synthesis,HLS)是一个广泛的概念。直到本文编写的时候,无论是FPGA设计工程师或者芯片设计工程师,还是采用硬件描述语言(譬如Verilog HDL和VHDL)在寄存器传输级(Register Transfer Level,RTL)这一抽象层次上进行逻辑电路设计。在RTL上进行开发可以对寄存器以及每个时钟周期的操作进行精确的控制,但是往往需要编写大量的代码才能实现在软件开发工程师看来很简单功能,同时还需要花费大量的时间在功能验证上。而HLS则是在相对RTL更高的层次上进行代码开发,综合和验证的一套方法,许多FPGA和EDA厂商都推出了自己的HLS工具。

采用HLS进行开发时,一般通过C/C++或者SystemC的语法进行开发,利用提供的综合工具将C/C++代码综合成为硬件描述语言。不同改的HLS工具会提供自定义的一些指示信号来控制整个综合的过程,也会提供完整的基于C/C++的仿真和基于RTL的仿真环境。其中采用C/C++进行开发的有Xilinx的Vivado HLS(后期更新为Vitis HLS),Intel HLS;采用SystemC进行开发的有Cadence的Stratus HLS;Mentor的Catapult HLS同时支持C/C++和SystemC。

考虑到工具的成熟度,资料的丰富程度和软件的获取难度,本书采用Xilinx的Vivado HLS进行具体的实现,但并行设计的方法甚至代码很容易迁移到其他工具中。

3. 本书的组织结构

本书是一本以实践为主的小册子,除了一些基本的概念,大部分内容都是以算法及其实现为主线进行串联。其中

  • 第二章简要介绍了FPGA的一些基本概念和编程时可用的硬件资源,同时也概述了FPGA计算系统的组成结构。
  • 第三章介绍了HLS的编程模型和HLS编程中常用的并行方法。
  • 第四章通过分析一些基本的函数的并行设计方法,给出了并行设计的思路以及HLS并行代码实现的要点。
  • 第五章通过一些图像处理算法的实现,阐明了如何将并行函数组合成一个相对复杂的程序。
  • 第六章分析了矩阵乘法以及一些神经网络加速器的设计方法,并进一步讨论了矩阵乘法的设计框架。