Nanotube基于 LLVM 的编译器
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 之前,需要确保所有依赖项都可用。其中许多在常见的 Linux 发行版中作为软件包提供,其他的是 LLVM 和 Vitis-HLS。
你将需要足够的可用存储空间来存放 Nanotube 及其依赖项。使用本地存储会更快,但如果愿意,可以使用网络存储。
评论
LLVM编译器架构
LLVM是LowLevelVirtualMachine(低级虚拟机)的简称,这个库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用。能够进行程序语言的编译期优化、链接优化、在线编译优化、代
LLVM编译器架构
0
RetDec基于 LLVM 的机器码反编译器
安全软件公司Avast宣布了研发7年的机器码反编译器RetDec的开源版本。RetDec是可重定向的机器码反编译器,同时有在线反编译服务和APIROPMEMU-分析、解析、反编译复杂的代码重用攻击的框
RetDec基于 LLVM 的机器码反编译器
0
swc基于 Rust 的编译器
swc是用Rust所编写的编译器,主要用于编写 TypeScript/JavaScript代码。根据官方说法,swc在单线程上相比同类型的软件 babel快20倍,而在四核基准测试中快70倍。性能:基
swc基于 Rust 的编译器
0
Zapcc基于 Clang 的 C++ 编译器
Zapcc是基于LLVM/Clang的缓存型C++编译器,旨在执行更快的编译。Zapcc在client-server架构中使用in-memory技术来编译缓存,它会记住运行之间的所有编译信息。Zapc
Zapcc基于 Clang 的 C++ 编译器
0