AMD-Xilinx 开源基于 LLVM 的 Nanotube 编译器


AMD-Xilinx 最近开源了他们基于 LLVM 的 Nanotube 编译器。根据介绍,AMD-Xilinx Nanotube 编译器采用 eBPF XDP C 代码,并构建在 LLVM 编译器堆栈之上,然后能够在 HLS C++ 中生成一个可在 Xilinx FPGA 上运行的数据包处理管道。

Nanotube 是编译器通道、库和 API 的集合,用于促进 EBPF XDP 和 similar networking 代码在 SmartNIC 的 FPGA 上执行。编译器将 EBPF XDP C 代码作为输入,并在 HLS C++ 中输出数据包处理管道。然后可以使用 Vitis HLS 合成此 HLS C++ 代码并将其放置在 FPGA 上。

编译器对程序进行各种转换;从将 EBPF 调用转换为对类似 Nanotube API 函数的调用开始。然后它在结构上和不同的 API 级别上执行多个阶段的代码转换:

  • mem2req:将 C 语言风格的指针访问(加载和存储)转换为对 map 和 packet data 的显式访问
  • optreq:将相邻的  map / packet 访问合并为更少的广泛访问
  • converge:理顺围绕 Nanotube API 调用的控制流图
  • pipeline:将单个数据包处理功能拆分为多个粗粒度管道阶段,并将应用程序逻辑更改为处理流经的 packet words,而不是内存中的 flat packet 表示
  • hls:从 LLVM IR 创建 HLS C++ 代码,用于 Vitis HLS 的合成

Nanotube 库以一种综合友好的实现方式实现了数据包访问和映射,这意味着它将被置于应用程序中,并将在 high-level synthesis 中创建高效的硬件。

此外,作为 Nanotube 编译器存储库的一部分,还有一个由 Facebook/Meta 开发的示例代码库。此示例被称为“Katran”,是一个在 Xilinx FPGA 上运行的高性能第 4 层网络负载均衡器。这个用于展示 Nanotube 编译器的示例是 eBPF GPLv2 许可代码。 


相關推薦

2022-03-30

3月上旬我们报道了向上游 LLVM/Clang 编译器添加 DirectX + HLSL 支持 。而从本周开始,微软图形处理工作的早期代码开始登陆 LLVM 15.0。 微软的开源 DirectX 着色器编译器“DXC”基于旧的 LLVM/Clang 3.7 分支,现在正致力于开发一种现代 D

2022-03-11

微软方面提出了一项提案,希望为上游 LLVM/Clang 编译器贡献 HLSL、DirectX 和 Vulkan 图形支持。 原因在于,其现有的 HLSL 编译器 DirectX Shader Compiler (DXC) 基于旧的 LLVM/Clang 3.7 分支。而微软计划将其编译器更新到最新的 LLVM,以便为

2022-03-14

微软方面提出了一项提案,希望为上游 LLVM/Clang 编译器贡献 HLSL、DirectX 和 Vulkan 图形支持。 原因在于,其现有的 HLSL 编译器 DirectX Shader Compiler (DXC) 基于旧的 LLVM/Clang 3.7 分支。而微软计划将其编译器更新到最新的 LLVM,以便为 HL

2022-09-03

Phoronix 对运行在 Linux 上的 Apple M2 芯片 的 GCC 和 LLVM Clang 编译器进行了性能测试和对比。 此次测试采用的设备是 Apple M2 MacBook Air ,运行基于 Arch 的 Asahi Linux 系统(这是目前唯一能够运行最新 Apple  M2 芯片的发行版),测试

2023-03-07

英特尔 ICC 编译器支持等。 驱动方面,这个版本合并了 AMD-Xilinx XDMA 驱动程序、一些 AMD Zen 4 性能优化, 8BitDo Pro 2 有线控制器支持。还合并英特尔 TPMI 驱动程序,各种其他英特尔更新,如 TDX 和 CXL 以及 LKGS 指令支持,引入 Ath12k

2022-02-11

n 3 5000 系列是第一款支持此 ISA 的硬件。 虽然开源 LLVM 编译器堆栈已提供初步的 LoongArch ISA 支持,补丁也已被合并,但对龙芯开发团队而言,还有许多工作需要完成,以改进 LoongArch 的编译器工具链和 Linux 内核支持,尤其是在

2022-08-01

的 SPIR-V 后端代码 索尼开始向上游贡献 PlayStation 5 编译器 target 完成初始 DirectX/HLSL target 代码 完成初始 LoongArch CPU 架构代码 LLVM/Clang 对 LoongArch 的支持是在今年早些时候继 GCC 12 支持 LoongArch 后开始的,龙芯 LoongArch 架

2022-04-04

nux 5.18 对 LLVM 环境变量的处理进行了改进,以处理版本化编译器二进制文件或 PATH 之外的编译器安装。 LLVM = 1 当前用于定义 LLVM/Clang 工具变量,以使用该非 GNU 工具链构建 Linux 内核。 但是目前,如果想在 PATH 之外使用 LLVM/Clan

2023-03-20

C++2b 功能做一些准备 实现了更多 C2X 功能 各种 Clang 16 编译器诊断改进 与 LLVM 15 相比,LLVM 16 的 LLD 链接器对 ELF 对象的链接速度要快得多 LLVM 16 LLD 现在也支持 Zstd 压缩,类似于 GCC 13 的 Zstd 支持 LLVM 的 LoongArch CPU 后端已

2023-07-04

M/Clang 17 将提供"-ffat-lto-objects"支持。   据介绍,为编译器启用 Fat LTO 对象支持可以让编译器 IR 与最终目标代码一起保存。因此,这些 "fat" 对象可以用于开发构建和优化构建的生产,但代价是增加了对象大小和更长的构建

2023-03-07

去年我们报道了 Linux 内核拟放弃支持英特尔 ICC 编译器,如今该讨论终于有了结果。在 Linux 6.3 内核合并窗口打开的最后一天,Linus Torvalds 合并了“删除 Intel ICC 编译器支持” 补丁,从内核中移除了 Intel  ICC  编译器的支

2023-02-15

ramohan 在近期举办的 FOSDEM 会议上,介绍了围绕 LLVM Fortran 编译器选项工作的最新进展。 近些年来,许多利益相关者都在积极推动着 Flang 作为 LLVM 编译器堆栈的 Fortran 语言前端,其中 Arm 公司就是主要推动力之一。根据介绍,虽

2022-09-22

修复, clang 格式、测试问题和其他更改。 其他各种新编译器功能。  LLVM 15.0.1 有 32 处更改,可以通过 LLVM.org 找到 LLVM 15.0.1 更改的完整列表。LLVM 15.0.1 的源代码和二进制文件可以从GitHub下载。 根据 LLVM 的发布节奏, LL

2023-06-17

发布了基于JDK 20的最新版本,带来了一系列的平台更新,编译器优化,本地镜像打包和动态特性等新功能。这些新功能将进一步提升GraalVM的性能和兼容性,为Java开发者带来更多的选择和便利。 以下是GraalVM JDK 20的一些亮点: