在可编程技能开展的开端阶段,可编程才能呈现了两个极点。一个极点的代表是单核CPU和DSP单元。这些器材运用含有一系列可履行指令的软件来进行编程。关于编程人员,在概念上以接连的办法来开发这些指令,而高档处理器可以对指令从头排序,在运转时从这些接连程序中提取出指令级并行处理操作。作为比照,可编程技能另一极点的代表是FPGA。经过开发可装备硬件电路对这些器材编程,彻底并行履行。运用FPGA的规划人员实践上是大规模开发粒度十分精密的并行运用。多年以来,这两个极点一起存在,每一类型的可编程功用适用于不同的运用领域。可是,最近的技能开展趋势标明,有更好的技能一起完结了可编程和并行处理操作。
软件可编程器材的第二种趋势是杂乱硬件的呈现,从次序程序中提取出指令级并行处理操作。单核体系结构输入指令流,在器材中履行它们,这些器材会有许多并行功用单元。处理器硬件的很大一部分有必要专门用于从次序代码中动态提取出并行处理操作。此外,硬件还会测验去补偿存储器延时。一般来说,编程人员开发程序时没有考虑处理器的底层存储器结构,如同只要大规模的一致快速存储器。比较较而言,处理器有必要处理实践延时,以及与外部存储器的有限带宽链接。为坚持功用单元可以传送数据,处理器有必要从外部存储器中预先获取数据,放入片内高速缓存中,这样,数据更挨近要进行核算的当地。运用这些技能,功用经过多年的进步后,这类体系结构的改动现已不大了。
图1.可编程和并行技能最近的开展趋势
在传统处理器体系结构上,这两种趋势的优势日益减小,咱们开端寻觅各种软件可编程器材,这些器材的开展十分快,如图1所示。要点是从运转时主动提取指令级并行处理操作,开展到在编码时明晰的找到线程级并行处理操作。开端呈现高度并行的多核器材,一般趋势是含有多个简略处理器,许多晶体管专门用于核算,而不是选用高速缓存,提取并行处理操作。这些器材一般包含含有2、4或许8个内核的多核CPU,以及含有数百个适用于数据并行核算的简略内核的GPU等。为可以在这些多核器材上完结高功用,编程人员有必要以并行办法明晰的对实践运用进行编程。每一内核都有必要分配必定的作业,这样,一切内核可以协同作业,履行某一核算。这也是FPGA规划人员在开发其高档体系体系结构时所做的作业。
考虑到多核新时代开发并行程序的需求,开发了OpenCL (敞开核算言语),以便开发跨渠道并行编程规范。OpenCL规范还可以天然的描绘在FPGA中完结的并行算法,其笼统级要比VHDL或许Verilog等硬件描绘言语(HDL)高得多。虽然有许多高档归纳东西可以完结高等级的笼统功用,可是都存在相同的基本问题。这些东西会选用接连C程序,发生并行HDL完结。在开发HDL时,困难还不是很显着,可是,提取出线程级并行处理操作在FPGA中完结以进步功用时,困难却十分大。而FPGA的并行功用十分强壮,与其他器材比较,在尽或许提取并行功用时呈现任何失利的成果都十分严峻。OpenCL规范可以处理许多这类问题,它支撑编程人员明晰的设定并操控并行处理操作。与纯C言语描绘的接连程序比较,OpenCL规范可以更天然的匹配FPGA的高度并行特性。
OpenCL运用程序含有两部分。OpenCL主程序是纯软件例程,以规范C/C++编写,可以运转在任何类型的微处理器上。例如,这类处理器可以是FPGA中的嵌入式软核处理器、硬核ARM处理器或许外置x86处理器。
在这一主软件例程履行期间的某一点,某一功用有或许需求进行许多的核算,这就可以获益于并行器材的高度并行加快功用,例如CPU、GPU、FPGA等器材。要加快的功用被称为OpenCL内核。选用规范C编写这些内核;可是,选用结构对其进行注释,以设定并行处理操作和存储器等级。图2中的比如对两个数组a和b进行矢量加法,将成果写回输出数组应对中。矢量的每一元素都选用了并行线程,当选用像FPGA这类具有许多精密粒度并行单元的器材进行加快时,可以很快的核算出成果。主程序运用规范OpenCL API,支撑将数据传送至FPGA,调用FPGA内核,传回得到的数据。
图2.在FPGA上完结的OpenCL比如
在FPGA中,可以把内核功用传送到专用深度流水线硬件电路中,它运用了流水线并行处理概念,在本质上便是多线程的。这些流水线的每一条都可以仿制屡次,与一条流水线比较,供给更强的并行处理功用。
在FPGA上完结OpenCL规范的优势
运用OpenCL描绘来开发FPGA规划,与根据HDL规划的传统办法比较,具有许多优势。开发软件可编程器材的流程一般包含进行构思、在C等高档言语中对算法编程,然后运用主动编译器来树立指令流。面向OpenCL的Altera SDK供给了规划环境,很简单在FPGA上完结OpenCL运用。如图3所示。
图3.面向OpenCL的Altera SDK简介
可以把这一办法与传统的FPGA规划办法比较较,在传统办法中,规划人员的首要作业是对硬件依照每个周期进行描绘,用于完结其算法。传统流程涉及到树立数据通路,经过状态机来操控这些数据通路,运用体系级东西衔接至底层IP内核,由于有必要要满意外部接口带来的束缚,因而,需求处理时序收敛问题。面向OpenCL的Altera SDK协助规划人员主动完结一切这些过程,使他们可以集中精力界说算法,而不是要点重视庸俗的硬件规划。以这种办法进行规划,规划人员很简单移植到新FPGA,功用更好,功用更强,这是由于OpenCL编译器将相同的高档描绘转换为流水线,然后发挥了FPGA新器材的优势。
在FPGA上运用OpenCL规范,与现在的硬件体系结构(CPU、GPU,等)比较,可以大幅度进步功用,一起降低了功耗。此外,与运用Verilog或许VHDL等底层硬件描绘言语(HDL)的传统FPGA开发办法比较,运用OpenCL规范、根据FPGA的混合体系(CPU + FPGA)具有显着的产品及时面市优势。