DragonArray 文档

龙芯 3A6000 基准测试

本文记录 DragonArray 当前在龙芯 3A6000 上的性能快照,不代表 3C5000 的结果。

测试系统

原版 NumPy DragonArray
版本 2.5.0.dev0+git20260515.79b0331 2.5.0.dev0+dragon.unofficial.1
源码 上游 79b033101a 当前 2026-08-10 工作树
运行时 SIMD LSX baseline LSX baseline + LASX dispatch

吞吐量单位为每秒处理的连续数组元素数(百万)。加速比是 DragonArray 吞吐量除以 原版 NumPy 吞吐量。两个版本在同一台机器上使用相同的基准测试输入运行。

汇总

完整测试覆盖 135 个 operation 与 dtype 组合,原始几何平均加速为 1.81×

类别 组合数 原始几何平均加速 加速至少 1.10× 的组合数
Boolean 2 8.31× 2
float16 20 2.77× 9
float32 27 1.61× 8
float64 27 1.25× 6
Integer 59 1.86× 32
全部 135 1.81× 57

原始汇总包含基准测试固定的 operation 执行顺序。这台机器上的基本浮点算术对执行 顺序敏感,因此其确认结果在下文单独列出。

当前最大增益

Operation Dtype 原版 NumPy DragonArray 加速比
arctanh float16 24.0 453.9 18.91×
floor_divide int8 163.5 2675.7 16.37×
mod int8 173.7 2475.5 14.25×
sin float16 52.4 689.3 13.16×
cos float16 51.4 662.0 12.88×
arcsinh float16 21.1 261.2 12.38×
tanh float32 26.5 319.0 12.04×
floor_divide int16 157.7 1827.1 11.59×
log1p float16 36.1 392.4 10.87×
logical_and bool 1044.5 11346.8 10.86×

浮点 kernel

下表列出当前测得比原版 NumPy 至少快 1.10× 的浮点 operation 与 dtype 组合。 未列出的 transcendental 组合在本次测试中性能相当。

Dtype Operation 原版 NumPy DragonArray 加速比
float16 arcsinh 21.1 261.2 12.38×
float16 arctanh 24.0 453.9 18.91×
float16 cbrt 36.1 145.7 4.04×
float16 cos 51.4 662.0 12.88×
float16 log 68.0 442.1 6.50×
float16 log10 43.2 421.8 9.76×
float16 log1p 36.1 392.4 10.87×
float16 log2 67.8 422.7 6.24×
float16 sin 52.4 689.3 13.16×
float32 arcsin 95.9 194.1 2.02×
float32 arctan 64.2 573.1 8.93×
float32 arctan2 43.5 205.7 4.73×
float32 cos 78.1 410.5 5.26×
float32 sin 77.4 423.4 5.47×
float32 tanh 26.5 319.0 12.04×
float64 arctan 45.4 207.5 4.57×
float64 arctan2 24.6 80.5 3.27×
float64 cbrt 42.8 136.7 3.19×
float64 log1p 63.4 262.8 4.15×
float64 tanh 24.0 54.8 2.28×

float32 divide 与其他基本算术结果列在一起,因为它在两种基准测试执行顺序下 都经过了检查。

基本浮点算术

下表给出两次确认测试中各匹配轮次的 DragonArray/原版 NumPy 比值中位数。 “按 dtype 分组”会先对一个 dtype 运行全部四个 operation,再切换到下一个 dtype; “按 operation 分组”会针对每个 operation 交替测试 float32float64

Operation f32 按 dtype 分组 f32 按 operation 分组 f64 按 dtype 分组 f64 按 operation 分组
add 0.99× 0.83× 0.99× 0.71×
subtract 0.99× 1.05× 1.00× 0.73×
multiply 1.00× 1.05× 1.01× 0.73×
divide 1.91× 1.92× 1.13× 0.78×

float32 divide 是其中稳定的结果:在两种顺序下都保持约 1.9× 的加速。 其他算术数据应视为对 working set 和执行顺序敏感的测量值,而不是稳定的性能退化 或增益。

Integer、boolean 与 sort 重点结果

LASX integer division 在不超过 32-bit 的宽度上最有效。所有实测宽度的 integer modulo 都有所加速。

Operation Dtype 原版 NumPy DragonArray 加速比
floor_divide int8 163.5 2675.7 16.37×
floor_divide int16 157.7 1827.1 11.59×
floor_divide int32 165.3 1114.8 6.74×
floor_divide uint8 408.9 2425.8 5.93×
floor_divide uint16 286.2 1744.9 6.10×
floor_divide uint32 189.9 1117.4 5.88×
mod int8 173.7 2475.5 14.25×
mod int16 168.3 1641.7 9.76×
mod int32 157.1 1052.7 6.70×
mod int64 102.8 527.0 5.13×
logical_and bool 1044.5 11346.8 10.86×
logical_not bool 1866.3 11875.2 6.36×
sort float32 11.0 74.9 6.81×
sort float64 11.0 36.8 3.35×
sort int16 14.7 93.6 6.37×
sort int32 14.8 80.3 5.43×
sort int64 15.6 41.8 2.68×

在八种有符号和无符号 integer 宽度上,integer max reduction 的加速为 1.28× 至 2.00×。在这个数组长度下,integer add、multiply、comparison 和 argmax 总体接近原版性能。

复现测试

在一台没有其他负载的 3A6000 上连续运行两个版本:

PYTHONPATH=<stock-install> \
    python3 bench/loongarch.py --iters 30 > stock.txt
PYTHONPATH=<dragon-install> \
    python3 bench/loongarch.py --iters 30 > dragon.txt

逐行比较 contiguous-throughput 列。基准测试会在每个计时循环前运行三次预热。 sort 使用 10 次计时迭代,其他 operation 使用 30 次。

2026-08-10 的准确测试文件如下: