你是否曾经在通用型工具与专用型工具之间左右为难?通用型工具可以解决多种不同的难题,但却未必是特定问题的最佳解决选项。相反,专用型工具擅长处理特定问题,但工具的使用频率往往不会很高。
工程师们在设计架构及指令集时同样需要考虑这一问题。他们始终追求能在更加通用的工作负载范围内,提供更佳性能表现的解决方案。然而新型工作负载与工作条件不断涌现,只有定制化硬件才是性能最佳之选。这就要求我们在其中找到平衡点:是要极出色的性能水平,还是要保证以年甚至季度为周期进行衡量的开发生命周期?
走入 FPGA 时代
作为一种备受瞩目的解决方案,我们迎来了基于定制化硬件的现场可编程门阵列机制,或者简称为 FPGA。相较于单纯着眼于一种特定功能的专用型芯片,FPGA 拥有更为出色的灵活性。其能够在现场完成编程,而后再接入 PC 主板的插槽当中。每块 FPGA 中包含一组固定且数量可观的简单逻辑门。对 FPGA 进行编程“基本上”就是将这些逻辑门彼此对接,从而建立起必要的逻辑功能(包括 AND、OR 以及 XOR 等等)或者存储元素(触发器与移位寄存器)。不同于 CPU 的串行本质(即数个并行元素)以及固定大小的指令集与数据路径(通常为 32 位或 64 位),FPGA 能够以编程方式并行执行更多操作,而这些操作本身几乎不设任何宽度或者规模限制。
这种高并行模式非常适合用于构建定制化加速器,从而处理计算密集型工作负载。在经过有针对性的编程之后,FPGA 能够在基因组学、抗震分析、金融网络分析、大数据搜索以及加密算法及应用领域提供高达 30 倍的速度增量。
希望这些优势能够鼓励大家尝试利用 FPGA 加速您的应用程序!不过必须承认,要实现这样的效果,我们还需要克服一系列挑战。首先,FPGA 从传统角度讲属于大规模专用型系统的一类组件。大家无法单纯购买一款并将其接入自己的台式机。相反,实现 FPGA 型解决方案要求我们完成硬件原型设计、硬件设备构建、大规模生产以及漫长的销售与部署周期等筹备工作。漫长的实现时间会限制 FPGA 的适用性,这也意味着摩尔定律指导下的 CPU 类解决方案也许更具成本效益。
但我们相信,我们能够在这方面做得更好!
全新 F1 实例
现在,我们发布了全新 F1 实例的开发者预览版。除了构建应用及服务供您自己使用之外,大家也可以将其进行打包并在 AWS Marketplace 中出售并进行复用。总体而言,大家将能够避免使用 FPGA 支持型解决方案所带来的高昂资本投入与时间消耗,我们提供的方案将带来与其它类型软件相同的商业模式。大家将能够通过云工具设计您自己的逻辑、模拟方案以及验证流程,而后在数天之内将其推向市场。
F1 实例配备有英特尔 Broadwell E5 2686 v4 处理器(基本速度为 2.3 GHz,Turbo 模式下全核心可达 2.7 GHz,Turbo 模式下单核最高可达 3.0 GHz),最多 976 GiB 内存、最高 4 TB NVMe SSD 存储以及一到八块 FPGA,这意味着其能够为大家提供充足的资源以构建自己的核心 FPGA 逻辑。各 FPGA 专用于此实例,且以隔离方式确保在多租户环境下的不致相互影响。
下在来看该 FPGA 的具体规格(请注意,单一 F1 实例中最多可使用八块 FPGA):
Xilinx UltraScale+ VU9P,采用 16 纳米制程工艺制造。
64 GiB ECC 保护内存,配合 288 位总线(四 DDR4 通道)
专用 PCIe x 16 CPU 接口
约 250 万逻辑元素
约 6800 套数字信号处理(简称 DSP)引擎
提供虚拟 JTAG 接口用于调试
在包含超过一块 FPGA 的实例当中,专用 PCIe 架构允许各 FPGA 共享同一套内存寻址空间并通过 PCIe Fabric 以最高每秒 12 GB 的单工速率实现彼此通信。单一实例中的各 FPGA 共同接入一套 400 Gbps 双向环状结构以实现低延迟水平与高传输带宽(大家需要定义自有协议以使用这项高级功能)。
FPGA 开发流程
作为这套开发者预览版中的组成部分,我们还提供 FPGA 开发者 AMI。大家可以在内存优化型或者计算优化型实例当中启动该 AMI,从而实现开发与模拟,而后利用 F1 实例进行最终调试及测试。
此 AMI 包含多款开发者工具,大家可以在 AWS Cloud 当中免费加以使用。您需要使用 VHDL 或者 Verilog 编写 FPGA 代码,而后利用Xilinx Vivado设计套件(当然也可以使用第三方模拟工具、高级语言编译器、图形编程工具以及 FPGA IP 库)对代码进行编译、模拟与验证。
下面来看一段简单 8 位计数器的 Verilog 代码示例:
虽然这些语言常被描述为使用类 C 语法,但这并不代表大家可以直接使用现有代码并通过重新编译将其应用于 FPGA 当中。相反,大家需要首先对 FPGA 编程模式进行深入了解,学习布尔代数,而后掌握传播延迟与时钟脉冲边沿等概念。在此基础之上,大家才能够开始考虑将 FPGA 引入您的业务环境。如果这些底层知识对您来说太过艰深,大家亦可使用各类现有高级综合工具,包括 OpenCL 等,进行 FPGA 编程。
在启动自己的实例后,我进行登录、安装多款软件包并设置许可管理器,而后即可运行 Vivado 工具。接下来,我 RDP 到桌面,打开一个终端窗口并以 GUI 模式启动 Vivado:
我随后打开该示例项目(counter.xpr),这就是我初次尝试后的 FPGA 设计与开发成果:
在一番探索之后,我了解了如何建立自己的首个 FPGA(其实我基本上就是到处点点并了解其作用; 我本人在这方面甚至连新手都算不上):
从这里开始,我可以测试自己的设计并将其打包为 Amazon FPGA 镜像(简称 AFI),而后将其运用在自有应用或者发布至 AWS Marketplace 当中。我还将继续摸索,希望能用几周时间弄清一切并向大家汇报。
F1 硬件开发工具包
在了解了 F1 实例之后,我的第一个问题是如何处理 FPGA、CPU 以及主内存之间的接口。F1 硬件开发工具包(简称 HDK)当中包含多款预配置 I/O 接口及示例应用,适用于包括主机到 FPGA、FPGA 到内存以及 FPGA 到 FPGA 等的多种通信方法。其还提供编译脚本、参考示例以及一套现场调试工具。这套工具包可供 F1 开发者预览版的各位用户随意使用。
总结评述
总体来讲,F1 实例、云开发工具与相关功能的结合共同实现了独特且强大的 FPGA 型应用方案。FPGA 模式的强大性能及灵活性如今已经可供每位 AWS 用户使用; 可以肯定,这将激发出前所未有的应用方式与企业业务实现途径。
预览版现已上线!
正如之前提到,全新 F1 实例现已在美国东部(北弗吉尼亚州)区域推出开发者预览版(我们还将在 2017 年年初将该实例的正式版本推向其它服务区)。如果大家此前拥有 FPGA 编程经验并对 F1 实例很感兴趣,请访问:
https://aws.amazon.com/ec2/instance-types/f1/
马上报名加入。
本文转载自 AWS 技术博客。
评论