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

2025-03-25

了256位嵌入式舍入支持,转而专注于512位支持。LLVM/Clang编译器此前基于英特尔最初的AVX10设计假设进行了开发,现在正进行调整以适应这些新变化。 AVX10是英特尔推出的新一代高级向量扩展指令集,旨在提升处理器在并行计算

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 架

2025-06-07

)的标准化资源封装机制,实现了多平台资源统一管理与编译器强校验,为开发者提供与Android R类相仿的资源调用体验。 —原子操作组件 基于Kotlin 官方提供的多平台原子操作库,旨在以高效且符合 Kotlin 惯用语法的方式实现

2025-06-05

内存布局及调用约定深度兼容的动态脚本语言,通过自研编译器实现即时编译与无缝嵌入,尝试在保留脚本灵活性的同时,尽可能贴近C++的原生性能,为性能与效率的平衡提供了轻量化解决方案。 二、动态脚本在引擎中的引用

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  编译器的支