首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >DPU编程语言和框架介绍

DPU编程语言和框架介绍

作者头像
霞姐聊IT
发布于 2025-06-15 04:16:12
发布于 2025-06-15 04:16:12
1520
举报

DPU有以下特点:

1.它能卸载网络包处理、存储虚拟化、安全、虚拟机/容器管理等任务,降低数据中心税

2.它与 CPU(通用计算)、GPU(图形/并行计算)并列,是专注于基础设施数据处理的异构计算成员。

3.它具备可编程性,通过软件,用户可以灵活定义DPU 执行的具体任务和策略,使其适应不同的应用场景。

4. DPU 通常需要与主机CPU紧密协同才能发挥最大效能

因此,对应来说,DPU编程核心在于利用编程语言和框架释放硬件加速的巨大潜力,并通过高效的通信(gRPC, RDMA, DPDK)和主机并行技术(OpenMP, MPI)构建强大的异构协同系统。

下面,我们就开始看一下DPU相关的编程语言和框架吧!

一、编程语言

1.C/C++

C/C++语言能提供高效的直接内存访问、对硬件控制力强。

因此被用于编写 DPU 固件(Firmware)、操作系统驱动、运行时环境、以及直接操作硬件寄存器的性能关键代码。

同时也是也是主机端调用 DPU 服务(通过 SDK/API/gRPC)和实现高性能通信的主要语言。

图片
图片

2.P4

和C/C++、Python、Java这些大家耳熟能详的主流的编程语言相比,对不少人来说,P4编程语言听起来还比较陌生。

P4(Programming Protocol-Independent Packet Processors)编程语言是一种用于网络设备数据平面的编程语言。

它于2013 年由 Nick McKeown 教授带领的斯坦福大学研究团队提出,当时被称为 “Protocol independent switch architecture” 或 “PISA”。

2015年12月P4发布了1.0版本,2016年有了基于P4的交换芯片。

P4语言是一种声明式语言,专门设计用于描述网络设备(如交换机、路由器、智能网卡、DPU)如何解析、处理、修改和转发数据包。它有三个特点:

(1)协议无关性:P4 不与特定网络协议绑定,用户可根据现网协议支持情况和 P4 语法要素来自定义转发逻辑,按需加入或删去协议,从而实现对各种网络协议如 VXLAN、MPLS 等的灵活支持。

(2)平台无关性:用户无需关注底层平台细节,可独立于底层硬件对报文处理功能编程。前端编译器将 P4 高级语言程序转换成中间表示 IR,后端编译器再将 IR 编译成目标设备配置,这样用户编写的 P4 程序可在不同硬件平台上实现,提高了代码的可移植性。

(3)可重构性:在不更换硬件的情况下,P4 支持动态修改数据包处理方式,同一台设备可根据现网需求随时重新配置,增强了网络设备的灵活性和适应性,允许 “朝令夕改”。

P4语言高度抽象网络处理逻辑,使开发者专注于“做什么”而非“怎么做”。

而编译器能针对特定 DPU 硬件(如可编程数据流水线)生成高度优化的代码。

P4被应用在DPU 上实现高性能虚拟交换机(vSwitch)、负载均衡器防火、网络监控、自定义协议处理等。主机应用可通过 API 或 gRPC 服务配置 P4 流水线规则。

图片
图片

3.硬件描述语言HDL

DPU 发展初期,基于 FPGA+CPU 架构的方案开发时间短、迭代快,便于 DPU 厂商迅速推出产品,抢占市场。

FPGA 的并行处理和流水线操作能力使 DPU 能同时处理多个任务,提高系统吞吐量和响应速度,降低延迟,在网络、存储等对延迟敏感的场景表现出色。

基于FPGA 的 DPU 可以实现网络、存储和安全功能的卸载与加速,提高数据中心的性能和效率。

如Xilinx 的 Alveo 系列 DPU,为数据中心提供了高性能的硬件加速解决方案。

FPGA 的可编程硬件特性使 DPU 能针对特定任务构建专用硬件加速器,如图像处理、加密解密等,大幅提升 DPU 数据处理速度和效率。

FPGA的编程方式和CPU不同,需要用到各种硬件描述语言HDL,如Verilog、VHDL等。尽管一些系统比如Alveo Vitis HLS提供了抽象,试图降低它的编程难度,但一般来讲,FPGA的编程较CPU更难。

图片
图片

4.Python 

Python主要用于 DPU 的控制平面、管理平面、自动化脚本和高级应用开发,不直接用于编写数据平面的高性能处理代码。

Pythobn易用性强,所以常被用来快速开发调用 DPU 服务的客户端(利用 gRPC 或其他 SDK 的 Python 绑定)和编排脚本

比如:配置 DPU 上的网络策略、安全规则、存储参数;监控 DPU 状态和性能指标;实现生命周期管理等。

图片
图片

5.特定领域语言 (DSLs) 与配置语言

一些 DPU 平台会提供更高级的、针对特定功能(如存储虚拟化、安全策略)的 DSL 或 YAML/JSON 配置模板。这些配置最终可能通过 gRPC 或专有 API 下发到 DPU。

这样能进一步简化特定任务的配置,提升易用性。开发者通过声明式配置表达意图,由底层框架转化为 DPU 可执行的指令。

比如:AMD Pensando Policy Language、NVIDIA DOCA Flow、Intel IPU 存储配置 (基于 SPDK/DPDK)、AMD Pensando Service Chains等。

图片
图片

二、关键开发框架

为了降低 DPU 编程的复杂度,提高开发效率并充分利用硬件特性,主要 DPU 厂商都提供了强大的软件开发套件(SDK)和框架。

下面介绍三家代表性的DPU厂商的开发框架:

1.NVIDIA DOCA (Data Center Infrastructure-on-a-Chip Architecture):

DOCA的目标平台是NVIDIA BlueField 系列 DPU,提供一套类似于 CUDA 的、统一的开发框架和 API,抽象底层硬件复杂性。DOCA生态系统最成熟、功能最全面、文档也十分丰富。

图片
图片

DOCA由如下部件组成:

(1)运行时环境: 在 DPU 上运行的服务和库。

(2)驱动: 主机与 DPU 通信(支持 RDMA、PCIe)。

(3)开发库 (DOCA Libraries): 提供高层次 API,用于开发网络(流处理、正则表达式)、存储(RDMA, GPUDirect Storage)、安全(加解密、TLS)、基础设施管理(vGPU, 热迁移)等应用。部分库提供 gRPC 接口供主机调用。

(4)服务: 如 DOCA Firefly(基于 P4 的高性能防火框架)。

(5)工具: 编译器、模拟器、调试器、管理工具。

DOCA 主要提供 C API,并有 Python 绑定。底层高性能部分结合 C、P4 和优化的库。DOCA Flow库提供高级抽象创建网络处理流水线。

DOCA利用 RDMA 实现极致低延迟高带宽的主机和DPU的通信,也支持 gRPC 用于控制管理面。 

主机端并行应用(OpenMP/MPI)可通过 DOCA API 高效访问 DPU 加速服务。

2.AMD PENSANDO SOFTWARE-IN-SILICON DEVELOPMENT KIT (SSDK) :

AMD SSDK的目标平台是AMD Pensando DPU,功能简图如下:

图片
图片

SSDK支持 P416 语言(P4语言的2016版本)用于可编程数据流水线,允许用户编写在网络层和传输层进行数据包处理的代码,以实现如网络地址转换(NAT)、防火等功能。

同时,支持 C 和 C++ 语言用于编程 DPU 的 CPU 核心复杂体,实现更复杂的控制逻辑和任务调度。

SSDK 包含 DPDK 驱动,借助 DPDK 的高性能数据包处理能力,为 DPU 的网络数据处理提供支持,使 SSDK 能更高效地实现网络相关功能。

SSDK开发工具链包括:

(1)P416 编译器,用于将 P416 代码编译为可在 DPU 上运行的二进制文件。

(2)调试工具:帮助开发人员在开发过程中快速定位和解决问题。

(3)硬件仿真模拟器:配备的模拟器具有机器寄存器精度,使开发人员能够在没有实际硬件的情况下进行开发和测试,确保代码能够在真实硬件上无缝运行,从而加快开发速度,简化调试过程,并支持 CI/CD 基于的开发和工作流程。

SSDK的示例代码与文档相对齐全。它提供示例代码,涵盖网络、存储和安全等多个领域,如网络访问控制列表(NACL)、软件定义网络(SDN)策略卸载、最长前缀匹配(LPM)、访问控制列表(ACL)等,还提供文档,帮助开发人员快速上手。

3.中科驭数HADOS:

中科驭数的DPU开发框架HADOS(Heterogeneous Architecture Development Platform)是一个专用计算敏捷异构软件开发平台。

图片
图片

HADOS包括设备驱动层(DDL)、应用驱动层(ADL)和应用开发平台层(ADP)。

(1)设备驱动层(DDL) :集成DPU开发全套驱动模块与丰富API接口,涵盖超低延迟LDMA、RDMA、虚拟化、存储加密等功能模块,支持NP网络可编程,适用于追求极致性能与定制化的用户。

(2)应用驱动层(ADL) :聚焦“三U一体”高性能算力中心,通过优化的DPDK、SPDK、OVS、OVN等技术组件,为网络、计算、存储提供全面加速服务,助力用户轻松构建高性能算力底座,实现开箱即用。

(3)应用开发平台层(ADP) :配备编译、仿真、调试、部署全栈工具包,其中HADEP(业界首款DPU Emulator)可实现中科驭数DPU全功能仿真,支持云化部署及与真实DPU混合部署,大幅缩短开发周期,提升研发效率。

HADOS集成了从编译到部署的全套P4开发工具,如P4编译器、汇编器、BM-NPU模拟器等,并围绕NPU指令集构建调试器、链接器、加载器等工具以及自动化测试验证平台,简化开发流程。

HADOS通过优化的DPDK、SPDK等技术组件,实现了对网络、存储的全面加速服务,提高了数据包处理的性能和存储访问的效率。

三、开源框架和编程模型

DPU不能脱离现有的软件行业的开源软件栈和编程模型

1.DPDK (Data Plane Development Kit)

DPDK由Intel、arm、amd、华为、红帽、nvidia等多家公司开发,是高性能用户态网络包处理的事实标准库。

它主要基于Linux系统运行,是用于快速数据包处理的函数库与驱动的集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

DPDK通过用户态轮询模式驱动(Poll Mode Driver)绕过内核协议栈,直接接管网卡数据流。

许多 DPU SDK 会集成或兼容 DPDK API,方便开发者移植高性能网络应用或利用熟悉模型

DPU集成DPDK后,可将OVS/vSwitch、VXLAN封装、TCP流分类等网络功能全卸载,释放主机CPU 30%~50%算力。

例如:NVIDIA BlueField-2 DPU 原生集成DPDK,支持线速转发与流表管理;Helium DPU 通过DPDK实现80Gbps OVS卸载,时延降低50%

图片
图片

2.SPDK (Storage Performance Development Kit)

SPDK是由 Intel 发起的开源高性能存储软件开发工具包,用于编写高性能、可扩展的用户模式存储应用程序,

SPDK采用用户态NVMe驱动+无锁轮询架构,消除内核I/O栈开销。DPU搭载SPDK后,可卸载NVMe-oF、存储压缩/加密等任务,例如:

英特尔IPU通过SPDK实现存储虚拟化,将NVMe延迟从微秒级降至亚微秒级6;Helium DPU支持SPDK加速存储协议,提升裸金属云存储IOPS 3倍。

图片
图片

3.P4(Programming Protocol-independent Packet Processors) 社区工具链:

P4社区作为推动网络数据平面可编程技术的核心力量,对DPU的发展具有多重战略意义。它不仅为DPU提供了开放、灵活的技术生态,还通过标准化工具链和协作机制,推动了DPU在性能、场景适应性和产业生态上的突破。

P4语言的核心特性是协议无关性,允许开发者自定义数据包解析、匹配和转发逻辑,无需依赖固定功能的硬件。这一特性使DPU能够灵活支持各类新兴网络协议(如自定义隧道封装、金融低延时交易协议等),适应快速演进的云、AI、边缘计算场景。

P4社区推动的开放工具链(如编译器、模拟器)显著降低了DPU的创新门槛,使其在复杂场景中实现突破:

图片
图片

4.gRPC

gRPC 是Google公司开发的一个高性能、开源和通用的 RPC (远程过程调用)框架。

gRPC的远程procdure通过调用二进制协议的标准网络连接工作,并且与语言无关。

因此应用程序能够通过明确定义的接口在不同系统和语言之间建立无缝通信。

图片
图片

gRPC可以和DPU一起部署以增强网络通信和数据处理的特定方面。通过这种方法,可以将任务卸载到DPU,从而降低CPU利用率。比如:

主机管理软件、编排系统(如 K8s)通过 gRPC 调用 DPU 上的服务,进行配置、监控、策略下发。

为 DPU 的功能(如配置防火规则、查询状态、管理存储卷)提供统一的、语言无关的访问方式。

5.OpenMP(Open Multi-Processing)

OpenMP是一种广泛使用的并行编程指令集,主要用于在共享内存的并行系统中简化多线程编程。

通过OpenMP,可以在保持统一的代码的基础上,将计算卸载到加速器,如 GPU 或DPU等,利用加速器设备上的并行性,增强计算密集型应用程序的性能和效率。

OpenMP 并行化的主机线程/任务可以调用 DPU SDK API ,将适合卸载的任务(如加解密、压缩、特定过滤)发送给 DPU 执行。DPU 处理结果返回后,OpenMP 线程继续处理。关键在于协调好数据移动和任务依赖。

图片
图片

 6.MPI (Message Passing Interface):

MPI是一种消息传递编程模型的标准。它不是一种语言,而是一种库描述,提供与C和Fortran语言的绑定。它是分布式内存并行编程的事实标准,用于跨多个计算节点的并行计算。

MPI可与 DPU协同,结合MPI的并行处理能力和DPU的卸载能力,为HPC应用及AI应用提升性能。

例如:由X-ScaleSolutions设计开发的MVAPICH2- DPU MPI库,可利用 InfiniBand 网络充分发挥 DPU 的潜力。

图片
图片
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 霞姐聊IT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Android MVVM框架搭建(二)OKHttp + Retrofit + RxJava
  在上一篇文章中,简单的介绍了MVVM框架的成员和简单使用,一个成熟的框架自然是离不开网络访问的,因此文本将通过Retrofit + RxJava去为MVVM框架增加一个网络请求模块。
晨曦_LLW
2021/11/03
2.6K2
Android MVVM框架搭建(二)OKHttp + Retrofit + RxJava
Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI
MVC 初步解决了 Activity 代码太多的问题,但也有缺点:我们的初衷 Activity / Fragment 是只处理表现逻辑的部分 ,但现实是 Activity 天然不可避免要处理 UI,也要处理用户交互,说明 Activity 本身天然承担了 View 的角色。那么这个架构就会造成 Activity 里糅合了视图和业务的代码,分离程度不够。
用户9995743
2022/09/26
1.9K0
Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI
Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter
  在日常的开发中,最常用于展示数据的形式就是列表,你会看到各种各样的列表,比如图片列表、视频列表,联系人列表,而在RecyclerView出来之前列表的开发是使用ListView,而现在绝大多数开发者都使用RecyclerVIew了,优势就不说了,都已经用了这么多年了,那么RecyclerView在MVVM中要怎么使用呢?另外它与JetPack的组件Paging之间,有什么联系呢?我们往下看。
晨曦_LLW
2021/11/18
2.3K0
Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter
EXTJS7 解决无法绑定父组件ViewModel问题
子组件vm(VIewModel)初始化时会自动将父组件的vm设置为parent 如果子组件的vm初始化时子组件v(View)尚未add到父组件v上,则子组件的vm.parent为null且不会在view add后再设置为父组件vm(只读),此时子组件元素无法绑定到父组件vm
路过君
2020/06/19
4780
MVVM + data-binding 快速入门
前言 简书上data-binding 的文章不少,但真正用来实现MVVM架构的文章不多。有些是官方的guide(https://developer.android.com/topic/libraries/data-binding/index.html) 的翻译版本,且官方的guide的架构主要采用 data-binding + mvp 的形式。 本文讲述一个快速入门的data- binding + mvvm架构。 基本配置 详见官方 gradle ,当然 gradle版本需要在1.5.0-alpha1 o
用户1127566
2018/06/04
7730
MVVM 进阶版:MVI 架构了解一下~
Android开发发展到今天已经相当成熟了,各种架构大家也都耳熟能详,如MVC,MVP,MVVM等,其中MVVM更是被官方推荐,成为Android开发中的显学。
做个快乐的码农
2022/01/13
2.2K0
MVVM 进阶版:MVI 架构了解一下~
MVVM(Knockout.js)的新尝试:多个Page,一个ViewModel
对于面向数据的Web应用来说,MVVM模式是一项不错的选择,它借助JS框架提供的“绑定”机制是我们无需过多关注UI(HTML)的细节,只需要操作绑定的数据源。MVVM最早被微软应用于WPF/SL的开发,所以针对Web的MVVM框架来说,Knockout.js(以下简称KO)无疑是“根正苗红”。在进行基于KO的Web应用开发时,我们一般会为具体的Web页面定义针对性的ViewModel,但是在很多情况下很多页面具有相同的UI结构和操作行为,考虑到重用和封装,我们是否为它们创建一个共享的ViewModel呢。最
蒋金楠
2018/01/15
2.9K0
MVVM(Knockout.js)的新尝试:多个Page,一个ViewModel
来了!他来了!支持MVVM的BRVAH来了!
博客:https://blog.csdn.net/Shaojihan/article/details/103673399
陈宇明
2020/12/16
1.3K0
来了!他来了!支持MVVM的BRVAH来了!
Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding
  MVVM框架出来已经有一段时间了,现在也有很多的项目运用了MVVM框架,因此也不算是很新的东西,但是从个人的角度来说我希望写出来,因为每年都会有新的Android开发工程师进入,一些框架的使用都是封装好的,或者写的很高级,刚开始不容易看懂,因此我的想法是写一个简单易懂的MVVM框架,并且在这个上面去加入Jetpack的组件,当然了,我技术比较菜,大佬要是看见了高抬贵手。
晨曦_LLW
2021/10/29
18.5K6
Android MVVM框架搭建(一)ViewModel + LiveData + DataBinding
(04).NET MAUI实战 MVVM
本章将讲解如何在MAUI中使用简单的MVVM模式开发“ListView”内容的增删功能,MVVM在MAUI中也同样适用。
JusterZhu
2022/12/07
1.4K0
(04).NET MAUI实战 MVVM
豆瓣电台WP7客户端 MVVM重构记录之使用MVVM Light实现数据绑定
最近面试多次被问及MVVM,虽然看过园子里的教程,毕竟未实际实现过,都回答“只了解,未实践过”。今天终于逼自己去用MVVM重构下这个应用。
MJ.Zhou
2022/05/07
8460
豆瓣电台WP7客户端 MVVM重构记录之使用MVVM Light实现数据绑定
干货 | Mvvm 前端数据流框架精讲
作者简介 黄子毅,目前在阿里数据中台前端团队,负责数据产品相关业务。前端精读创办者、数据流框架 Dob 作者、可视化编辑器 gaea-editor 作者、react-native-image-view
携程技术
2018/07/05
1.8K0
一种MVVM风格的Android项目架构浅析
前几天接触公司一Android项目,刚看代码时,不知道这么多层级的代码都是干嘛的,看着有点儿懵。只有清楚了结构和流程,才能够在浩瀚的代码里游刃有余。
杨永贞
2020/08/04
1.4K0
MVVM框架的搭建(二)——项目搭建
介绍完背景以及初衷之后,我们开始搭建MVVM的框架,这一部分我们进行简单的搭建,了解MVVM架构的基本结构。
Demo_Yang
2018/10/15
1.5K0
如何构建Android MVVM 应用框架
概述 说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架。然而两者的概念是不一样的,不能混为一谈。MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。 之前看过很多关于Android MVVM的博客,但大多数提到的都是DataBinding的基本用法,很少有文章仔细讲解在Android中是如何通过DataBinding去构建MVVM的应用框架的。View、ViewModel、Model每一层的职责如
美团技术团队
2018/03/12
4.7K1
如何构建Android MVVM 应用框架
ExtJs九(ExtJs Mvc用户管理之一)
首先要做的是为用户信息创建一个模型,在Scripts\app\model目录下创建一个名为User.js的文件,然后添加以下模型定义代码:
aehyok
2018/09/11
5.2K0
ExtJs九(ExtJs Mvc用户管理之一)
Android MVI框架搭建与使用
  有一段时间没有去写过框架了,最近新的框架MVI,其实出来有一段时间了,只不过大部分项目还没有切换过去,对于公司的老项目来说,之前的MVC、MVP也能用,没有替换的必要,而对于新建的项目来说还是可以替换成功MVVM、MVI等框架的。本文完成后的效果图:
晨曦_LLW
2023/02/26
4K2
Android MVI框架搭建与使用
MVVM 框架解析之双向绑定
更好的阅读体验,点击 原文地址 项目地址 MVVM 框架 近年来前端一个明显的开发趋势就是架构从传统的 MVC 模式向 MVVM 模式迁移。在传统的 MVC 下,当前前端和后端发生数据交互后会刷新整
牧云云
2018/05/02
2.1K1
MVVM 框架解析之双向绑定
Android开发MVVM中DataBinding的使用
在 RecyclerView 中 , 如果要使用DataBinding架构组件进行数据绑定 , 首先要 启用 DataBinding , 并 导入 RecyclerView 依赖 ,
码客说
2024/04/12
5580
Android开发MVVM中DataBinding的使用
Extjs mvc
MVC的模式,模型(Models)和控制器(Controllers) Model模型 是字段和它们的数据的集合,例如User模型带有username和password字段,模型知道如何持久化自己的数据,并且可以和其他模型关联,模型跟ExtJS 3 中的Record类有点像(区别是,Record只是单纯的扁平结构,而Model可以nest),通常都用在Store中去展示grid和其他组件的数据 View视图 是组件的一种,专注于界面展示 - grid, tree, panel 都是view Controlle
用户1197315
2018/01/22
2.8K0
Extjs mvc
相关推荐
Android MVVM框架搭建(二)OKHttp + Retrofit + RxJava
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档