新闻

10-100倍性能飞跃!DolphinDB Shark GPU 加速技术深度解析

2025.11.14

DolphinDB Shark 是 CPU-GPU 异构计算平台,通过 @gpu 标签实现零代码迁移,在量化交易因子计算、雪球期权定价等场景实现10-100倍加速。本文深度解析其三引擎架构:脚本转计算图、异步数据传输、模板元编程算子实现,助力 AI 时代高性能数据分析。

在数据量如潮水般汹涌增长的今天,高效的数据处理能力已成为企业决胜未来的关键。11月12日晚,“DolphinDB 核心技术解密”系列直播再度开启,由 DolphinDB 研发工程师杨朔柳主讲,聚焦 DolphinDB Shark CPU-GPU 异构计算平台的 GPU 计算加速技术内核,为技术爱好者们揭开 DolphinDB 高性能数据处理的神秘面纱。

搜索 DolphinDB 视频号,即可查看完整直播回放。关注 DolphinDB 公众号,回复【1112】,即可获取本次直播课件!

AI 时代,GPU 的逆袭

众所周知,在过往的数十年间,中央处理器 CPU 始终占据着“大脑”的关键地位,承担着各类复杂任务的运算与处理工作。然而,近年来图形处理单元 GPU 悄然崛起,在诸多计算场景中展现出超越 CPU 的性能优势,GPU 加速计算(通过 GPU 并行处理海量简单运算)成为一大热潮,这是如何做到的?

GPU 的诞生源于图形管线加速(1999年 GeForce 256),它是为了同时处理几百万个像素点的"同色计算"(矩阵/向量运算)而设计的,天生就是"人肉并行"架构。而 CPU 从一开始就是通用计算设计,强调低延迟而非高吞吐。简单来说,CPU 像一位"全能教授",能解决任何问题,但面对"小学乘法表"这种海量重复任务,效率反而远不及"一万个小学生"齐上阵的 GPU。

GPU 加速计算的崛起,不是因为大家“发现”了 GPU 的算术能力,而是因为计算需求本身发生了范式转移:AI 时代,计算从"复杂逻辑"转向"海量简单运算",数据并行密度飙升。一次矩阵乘法=上亿次乘加操作,正好命中 GPU 的 SIMT(单指令多线程)架构核心。且 CPU 的缓存层次(L1/L2/L3)在TB级数据面前频繁失效,内存墙问题严重,而 GPU 的高带宽显存(H100达3TB/s)和流式处理能持续喂饱计算单元。从能效来说,GPU 在特定任务上每瓦特性能是 CPU 的 10-20 倍——同样的电费,GPU 能算更多。

在业务场景中,DolphinDB 面临着各种计算密集型任务,如量化交易的因子计算、FICC 领域的雪球期权定价、票息率确定和多维蒙卡计算等,传统 CPU 架构已经从“计算快/慢”转向“能/否计算”。为了给客户带来了更急速、便捷的加速体验,Shark 诞生了,用户仅需在 Shark 平台的自定义函数前添加 @gpu 标签,即可实现 CPU 向 GPU 计算的无缝迁移,使开发者无需进行任何 CUDA 相关的二次开发,即可获得相较于 CPU 计算 10~100 倍以上的性能提升。

Shark 的设计目标非常明确:让 DolphinDB 用户现有的 CPU 代码尽可能不加修改,或只做少量改动,就能无缝享受 GPU 加速

Shark 是什么?

简单来说,Shark 是一个"翻译官+调度器",它能自动将 DolphinDB 脚本中的自定义函数,转换成可以在 GPU 上执行的机器码,不仅可以完成通用计算任务,还能以回调函数的形式,给 DolphinDB 的其他模块(如回测引擎、流计算引擎)提供 GPU 计算能力。Shark 的优势体现为四个维度:

  1. 学习成本低,无需改写 CUDA 代码
  2. 迁移成本低:脚本零修改,一行代码透明加速
  3. 计算效率高:性能接近手写 CUDA Kernel
  4. 通用性强:支持 DolphinDB 2000+算子全集,覆盖金融量化、物联网分析全场景

Shark 三大引擎内核解剖

上面的图展现了 Shark 的"三原色"架构图。

> 核心设计:Shark 通过绿色引擎(脚本→计算图)、红色引擎(主机→设备异步传输)、蓝色引擎(模板元编程算子)三大模块,实现 CPU 到 GPU 的无缝迁移。

绿色引擎:脚本→计算图

Step 1:AST预处理

拿到 DolphinDB 脚本的抽象语法树(AST)后,先做一次"大扫除"——消除非局部控制流。比如把 return、break 这些会"跳转"的语句,全部替换成 flag+if/else 的条件分支。

Step 2:构建数据流图(DFG)

将 AST 转换成数据流图,每个节点是一个计算任务,边表示数据依赖。然后对图做静态分析优化,最后执行。执行时,GPU只看这张图就知道该怎么并行。

Step 3:拓扑排序+引用计数

用拓扑排序自动安排任务顺序,引用计数及时释放内存。

GPU 编程本质是 SIMT(单指令多线程)。简单说,SIMT 模型就是一组可被并行的任务,你只需定义一个任务函数 P(i),比如向量加法的 P(i) = a[i] + b[i],GPU 会自动把这个函数应用到成千上万个索引上并行执行。Shark 的数据流图每个节点,就是对 SIMT 的完美映射。

红色引擎:主机→设备

我们知道 IO(输入/输出)比起计算,永远是瓶颈。异构计算需要从主机端复制数据,整体的延迟提升有很大一部分来源于通过异步复制数据的重叠去掩盖时间开销。由于虚拟内存系统的存在,设备的异步拷贝函数比如 cudaMemcpyAsync 对于普通内存块还是同步拷贝的。Shark自研了 sharkMemCpyAsync 异步拷贝引擎,其核心是:

  1. 小块锁内存当作暂存缓冲:普通内存无法异步拷贝,Shark 先开一个小块锁页内存(Pinned Memory),用独立线程把数据从普通内存"搬"到锁页内存,再异步拷贝到 GPU。这样循环往复,形成"流水作业"。
  2. 使用多个拷贝线程:开多个拷贝线程,抵消操作系统和 memcpy 底层实现的性能波动,多线程能让抖动影响最小化。

性能测试结果可以看到,该做法不仅实现了普通内存的异步拷贝,还额外获得 10% 性能提升!

蓝色引擎:算子实现+多硬件支持

算子实现是 Shark 最需要持续投入的模块。DolphinDB有 2000+个数据分析算子,任何数据分析函数都要尽可能的支持:

  • 7种类型:bool, char, short, int, long, float, double
  • 4种形式:标量、向量、矩阵、表
  • 核心要求:零拷贝,不能有任何临时变量

因此就需要为每种类型的计算生成代码,每个函数都需要对应的代码实现——对每一种类型都有定义,才能让这个函数的通用性更强。基于此,DolphinDB 把一个函数的实现分为三层:

  1. 多态转发层:只管数据形式(向量/矩阵),不关心具体类型,把任务分发到统一入口
  2. 数据视图层:实现具体操作(加减乘除、聚合),操作的是"视图"而非真实数据
  3. 算法实现层:真正的 GPU 代码,调用 CUDA/OpenCL 等

用二元操作来举例,每个 views 其实是对形式和类型的类型列表的笛卡尔积,两个 views 相当于四层循环的代码展开。这段代码的操作是重复的,只有函数对象类型不同,所以我们使用模板元编程(让编译器帮你写代码)的方式枚举所有可能。好处是:

  • 类型安全:所有类型转换、空值处理逻辑都在编译期检查,减少低级 Bug
  • 零拷贝:通过模板表达式,编译器能看穿代码意图,优化掉所有中间变量
  • 性能顶格:生成的机器码与手写 CUDA 几乎一致

但同时也有一定的问题:编译速度变慢、代码膨胀。Shark 的权衡是拆分编译单元,每种索引类型单独编译,用维护复杂度换取高效的运行速度。

Demo 展示

案例1:雪球期权定价(蒙特卡洛模拟)

雪球期权是一种结构复杂的奇异期权,雪球期权定价主要通过数值模拟求解,一般用蒙特卡洛方法进行采样,是一个计算密集型的方法。这个场景非常适合用 Shark 来做。其中计算方式如图。

性能结论:100万次蒙特卡洛模拟,Shark实现16.7倍加速,数据量越大性能优势越明显(见下表)

案例2:遗传规划(GP)

遗传算法经常用在金融领域的因子挖掘中,通过数次的迭代仿真,来达到一个近似的最优解。面对几十几百次的重复计算,Shark 的做法是:不改造整体 GP 框架,只把最耗时的部分"外包"给 GPU。我们可以直接定义 @gpu 函数,作为可以自定义的适应度函数,甚至可以用 @gpu 函数自定义复杂的黑盒函数作为因子。

恭喜您!回顾了本次直播的全部内容!下期「DolphinDB核心技术解密」系列直播将聚焦低延时技术与实践,继续为您深度解密 DolphinDB 的核心技术奥秘,敬请期待!

关于 Shark

Shark 作为一款 CPU-GPU 高性能异构计算引擎,专注于释放 GPU 的通用计算潜能。针对以往在 CPU 上执行时资源占用量大、耗时突出的计算任务,用户仅需在自定义函数前添加 @gpu 标签,即可实现向 GPU 计算的无缝迁移,显著提升运算效率。其核心优势在于能够自动解析自定义函数并将计算逻辑转化为可在 GPU 上执行的计算图,使开发者无需进行任何 CUDA 相关的二次开发,即可获得相较于 CPU 计算 10~100 倍以上的性能提升。

Shark 适用于子任务多、并行度高输入输出数据量少、计算量大的各类 GPU 通用计算密集型需求,如科研中的蒙特卡洛仿真等场景。在金融领域,Shark 已广落地于基于遗传算法的因子挖掘、大规模因子计算、场外衍生品定价等核心业务场景。以雪球期权、篮筐式期权定价这类依赖一维或多维蒙特卡洛模拟的计算任务为例,Shark 相较于传统计算方案,可实现近百倍的性能飞跃。(加速 Demo 详情可咨询小助手 13306510479)