以往EDA应用性能瓶颈主要受两方面因素制约,首先大多数应用都是单线程的,而CPU和GPU架构拥有几十到数千的并行内核,其次是应用程序内存延迟问题。目前EDA应用已经部署到传统的常规处理器上。最重要的是这些应用促使人们设计出并行或向量处理器。为了能够充分利用多核架构的优势,甚至有必要完全重写软件,面对并行核心必须重新思考相关的算法。
GPU(Graphic Processing Units) 在高性能计算领域拥有巨大的潜力。在商业化的硬件平台之中,GPU强大的计算能力和高效的内存带宽被展现的淋漓尽致。如今GPU已经在石油、天然气、金融 等需要庞大计算量的场景发挥着作用。而EDA(Electronic Design Automation)应用与以上这些高性能计算应用在计算和内存等操作上拥有很多共同点。
GPU最早出现在上世纪90年代后期,起初GPU主要职责是最为CPU的协处理器,并处理自定义硬件之上的图形算法。GPU在处理图形时将任务分到不同的处理管线(如顶点、纹理、阴影处理等),每个管线负责特定阶段的算法流程。但事实证明,这种架构没有最大限度地被利用。为了更好的处理这种不平衡的状况,迁移到新架构是有意义的。
相对于串行计算,并行计算可以划分成时间并行和空间并行。时间并行即流水线技 术,空间并行使用多个处理器执行并发计算,当前研究的主要是空间的并行问题。以程序和算法设计人员的角度看,并行计算又可分为数据并行和任务并行。数据并 行把大的任务化解成若干个相同的子任务,处理起来比任务并行简单。
空间上的并行导致两类并行机的产生,按照Michael Flynn的说法分为单指令流多数据流(SIMD)和多指令流多数据流(MIMD),而常用的串行机也称为单指令流单数据流(SISD)。MIMD类的 机器又可分为常见的五类:并行向量处理机(PVP)、对称多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机 (DSM)。
新一代GPU由“general-purpose” SIMD((Single Instruction Multiple Data)核心组成。自2007年以来,NVIDIA CUDA和OpenCL使我们能用使用C++在流处理器上进行编程,而不是模拟像素或三角形。
GPU非常适合巨大的数据集的并行数据算法,最新的GPU拥有数千处理核心。这些GPU非常适合EDA应用,GPU架构是并行数据处理的理想之选。如果人们部署正确的代码,其吞吐量将令人难以置信。然而最重要的不仅是软件,而是底层算法。